{"id":46509015,"url":"https://github.com/isomerc/nicotine","last_synced_at":"2026-05-23T23:03:50.131Z","repository":{"id":323954237,"uuid":"1095388457","full_name":"isomerc/nicotine","owner":"isomerc","description":"A high performance multiboxing tool for x11 and Wayland Linux systems inspired by EVE-O Preview for Windows","archived":false,"fork":false,"pushed_at":"2025-12-29T21:28:58.000Z","size":1045,"stargazers_count":29,"open_issues_count":2,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-02T04:00:14.346Z","etag":null,"topics":["eveonline","linux","multiboxing","x11"],"latest_commit_sha":null,"homepage":"https://www.nicotine.rip","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/isomerc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-13T01:35:47.000Z","updated_at":"2025-12-30T19:30:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/isomerc/nicotine","commit_stats":null,"previous_names":["isomerc/x11-rust-cycler","isomerc/nicotine"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/isomerc/nicotine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isomerc%2Fnicotine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isomerc%2Fnicotine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isomerc%2Fnicotine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isomerc%2Fnicotine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/isomerc","download_url":"https://codeload.github.com/isomerc/nicotine/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/isomerc%2Fnicotine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30183472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-06T14:42:24.748Z","status":"ssl_error","status_checked_at":"2026-03-06T14:42:14.925Z","response_time":250,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eveonline","linux","multiboxing","x11"],"created_at":"2026-03-06T15:32:19.978Z","updated_at":"2026-05-23T23:03:50.117Z","avatar_url":"https://github.com/isomerc.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/ghlogo.png\" alt=\"Nicotine Logo\" width=\"600\"\u003e\n\u003c/div\u003e\n\n# Nicotine 🚬\n\nHigh-performance EVE Online multiboxing tool for Linux (X11 \u0026 Wayland) and Windows.\n\n\u003cdiv align=\"center\"\u003e\n\n### 💬 [**Join the Nicotine Discord**](https://discord.gg/N82KJcS47f) 💬\n\n\u003c/div\u003e\n\n[Illuminated is recruiting!](https://illuminatedcorp.com)\n\n## Features\n\n- **Instant client cycling** with mouse buttons (forward/backward) or targeted switching (jump to client N)\n- **Live preview windows** per EVE client — XComposite + XRender on Linux, DWM thumbnails on Windows\n- **List display mode** — compact roster window as an alternative to per-client previews\n- **Config panel** for character order, per-character jump hotkeys, preview sizing, and display mode\n- **Daemon architecture** for near-zero-latency window switching\n- **Auto-stack windows** to perfectly center multiple EVE clients\n- **Drag-to-position with snap-to-dock** on previews and the list window; lockable layout for play\n- **Multi-compositor support** — X11, KDE Plasma (Wayland), Sway, Hyprland\n- **Minimize inactive clients** — optional, reduces resource usage when cycling away\n\n## Roadmap\n- Comprehensive documentation\n- More configuration options\n\n## Quick Install\n\n### One-Line Installer (Recommended)\n\n```bash\ncurl -sSL https://raw.githubusercontent.com/isomerc/nicotine/master/install-github.sh | bash\n```\n\nThen restart your terminal and run:\n```bash\nnicotine start    # Automatically runs in background\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/isomerc/nicotine\ncd nicotine\n./install-local.sh\n```\n\nThen restart your terminal and run:\n```bash\nnicotine start    # Automatically runs in background\n```\n\n## Usage\n\n### Basic Commands\n\n```bash\nnicotine start          # Start everything (daemon + overlay)\nnicotine stop           # Stop all Nicotine processes\nnicotine stack          # Stack all EVE windows\nnicotine forward        # Cycle to next client\nnicotine backward       # Cycle to previous client\nnicotine 1              # Jump to client 1\nnicotine 2              # Jump to client 2\n```\n\n### Targeted Cycling\n\nBy default, `nicotine 1`, `nicotine 2`, etc. use window detection order. To define your own order, create `~/.config/nicotine/characters.txt`:\n\n```\nMain Character\nAlt One\nAlt Two\n```\n\nEach line is a character name (without \"EVE - \" prefix). Line 1 = target 1, line 2 = target 2, etc. Bind these commands to hotkeys in your desktop environment for quick access.\n\n### Mouse Bindings\n\n**Native Support (Works on X11 \u0026 Wayland):**\n\nNicotine has built-in mouse button detection that works universally across all display servers and compositors\n\n**Quick Setup:**\n1. Add your user to the `input` group:\n   ```bash\n   sudo usermod -a -G input $USER\n   ```\n2. **Log out and log back in** (required for group membership to take effect)\n3. Start Nicotine - mouse buttons work automatically!\n\n**Configuration:**\nEdit `~/.config/nicotine/config.toml` to customize:\n```toml\nenable_mouse_buttons = true\nforward_button = 276   # Button 9 (forward/side button)\nbackward_button = 275  # Button 8 (backward button)\nmouse_device_name = \"\" # Optional takes priority over mouse_device_path, use evtest to find name of the device\nmouse_device_path = \"/dev/input/event3\" # Optional and not created on first run, find the correct device with evtest\n```\nIf using mouse_device_name the string must be na exact match, you can list your devices with evtest.\n\n```\n$ sudo evtest\n...\n/dev/input/event16:     Logitech PRO X\n...\n```\nIn `~/.config/nicotine/config.toml` set\n\n```\nmouse_device_name = \"Logitech PRO X\"\n```\n\nDevice is configuration priority order is:\n1. Name\n2. Path\n3. Autodetect\n\n**Common button codes:**\n- `275` = BTN_EXTRA (button 8, backward)\n- `276` = BTN_SIDE (button 9, forward)\n- `277` = BTN_FORWARD\n- `278` = BTN_BACK\n\n**Find your button codes:**\n```bash\nsudo evtest  # Select your mouse, then click buttons to see their codes\n```\n\n**Troubleshooting:**\n- Verify group membership: `groups | grep input`\n- Check permissions: `ls -l /dev/input/event*`\n- Disable if needed: `enable_mouse_buttons = false` in config\n\n### Keyboard Bindings\n\n**Quick Setup:**\n1. Add your user to the `input` group:\n   ```bash\n   sudo usermod -a -G input $USER\n   ```\n2. **Log out and log back in** (required for group membership to take effect)\n\n**Configuration:**\nEdit `~/.config/nicotine/config.toml` to customize:\n```toml\nenable_keyboard_buttons = true\nforward_key = 15  # TAB Key\nbackward_key = 15  # TAB Key - modifier_key applied if set in config\nkeyboard_device_path = None # Device path /dev/input/eventX (OPTIONAL but you may need to set this if keybinds don't work)\nmodifier_key = None # You will have to add this if you want a modifier key for backward cycling\n```\n\n**Common button codes:**\n- `15` = KEY_TAB (TAB Key)\n- `42` = LEFT_SHIFT\n\n**Find your button codes:**\n```bash\nsudo evtest  # Select your keyboard, then click buttons to see their codes\n```\n\n**Troubleshooting:**\n- Make sure you've enabled keyboard buttons: `enable_keyboard_buttons = true` in config\n- Check for other device events, sometimes keyboards will have multiple events but only one is handling inputs\n```bash\ncat /proc/bus/input/devices | grep -B 5 \"kbd\" | grep -E \"Name|Handlers\"\nsudo evtest /dev/input/eventX # Replace X with the correct event number i.e event11\n```\n\n### Config Panel \u0026 Previews\n\n`nicotine start` opens the config panel and spawns one preview window per running EVE client. The panel has four sections: **Display Mode** (Previews vs List), **Cycle Order** (character list + per-character jump hotkeys), **Keyboard Hotkeys**, and **Preview Windows** (size sliders, show/hide toggle). Changes apply live; saves debounce to disk.\n\nPreviews and the list window:\n- **Left-click-drag** to reposition; edges snap to adjacent windows\n- **Click without drag** on a preview to foreground that EVE client\n- **Lock positions** in the panel to freeze the layout during play\n\n## Configuration\n\nConfig file: `~/.config/nicotine/config.toml`\n\nAuto-generated on first run. Key settings:\n\n```toml\ndisplay_width = 1920\ndisplay_height = 1080\npanel_height = 0           # Set this if you have a taskbar/panel\neve_width = 1037           # ~54% of display width\neve_height = 1080\nshow_previews = true       # Spawn preview windows (false = daemon-only)\npreview_width = 320        # Preview window width in px\npreview_height = 180       # Preview window height in px\ndisplay_mode = \"Previews\"  # \"Previews\" or \"List\"\npositions_locked = false   # Disable drag on previews + list\nenable_mouse_buttons = true\nforward_button = 276       # Button 9\nbackward_button = 275      # Button 8\nminimize_inactive = false  # Minimize clients when cycling away (saves resources)\n```\n\nPer-character jump hotkeys live under `[character_hotkeys.\"Name\"]` with `vk` and optional `modifier`; the config panel writes them for you.\n\n## Architecture\n\n- **Daemon mode**: Maintains window manager connection and state in memory for instant cycling\n- **Unix socket IPC**: ~2ms command latency (vs ~50-100ms process spawning)\n- **Non-blocking activation**: Fire-and-forget window switching\n- **Native mouse support**: Direct evdev access for universal mouse button detection\n\n## Requirements\n\n### Display Server Support\n\nNicotine supports both **X11** and **Wayland** (compositor-dependent):\n\n- **X11** - Full support (all features)\n- **Wayland - KDE Plasma** - Full support via wmctrl (XWayland)\n- **Wayland - Sway** - Full support via swaymsg\n- **Wayland - Hyprland** - Full support via hyprctl\n- **Wayland - GNOME** - Not supported (restrictive APIs)\n\n### Dependencies\n\n**Required:**\n- **wmctrl** - Window management on X11 and KDE Plasma Wayland\n\n**Wayland-specific (compositor tools):**\n- **KDE Plasma:** wmctrl (uses XWayland compatibility)\n- **Sway:** swaymsg (included with sway)\n- **Hyprland:** hyprctl (included with hyprland)\n\n**Install:**\n```bash\n# Arch\nsudo pacman -S wmctrl\n\n# Ubuntu/Debian\nsudo apt install wmctrl\n\n# Fedora\nsudo dnf install wmctrl\n```\n\nFor **mouse button support**, add yourself to the `input` group (see Mouse Bindings section).\n\n## Wayland Support \u0026 Known Limitations\n\n**What works:**\n- Mouse buttons (native evdev support, no external tools needed)\n- Window detection and cycling (all supported compositors)\n- Window stacking (KDE/Sway/Hyprland)\n- Preview windows (XComposite + XRender via XWayland)\n- Auto-detection of display server and compositor\n\n**Limitations:**\n- GNOME not supported (restrictive window management APIs)\n\n## Building from Source\n\n```bash\n# Install Rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# Build\ncargo build --release\n\n# Binary at: target/release/nicotine\n```\n\n## License\n\nSee [LICENSE](LICENSE.md)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisomerc%2Fnicotine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fisomerc%2Fnicotine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fisomerc%2Fnicotine/lists"}