# enBoxer Mapped-key routing and live window crops for World of Warcraft on **Arch Linux + Hyprland**. Rust. You list which hotkeys go where. Everything you do not list stays on the focused primary. A `passthrough` list can leave movement keys alone (the example uses ESDF). Alt-tab off the team and the desktop is normal. Nothing is loaded into the game. Hyprland delivers keys with `hl.dsp.send_shortcut`. You bind macros in WoW yourself. | Doc | What | | --- | --- | | [PLAN.md](PLAN.md) | Product plan and how Grok / OpenCode split work | | [DESCRIPTION.md](DESCRIPTION.md) | One-page description | | [AGENT.md](AGENT.md) | Designer / PM / worker contract | | [TASKS.md](TASKS.md) | OpenCode tickets | | [CHANGELOG.md](CHANGELOG.md) | What landed | | [docs/DESIGN.md](docs/DESIGN.md) | Routing model | | [docs/NOTES.md](docs/NOTES.md) | WoW interact / Hyprland capture | | [docs/VIDEO.md](docs/VIDEO.md) | Live crop of another client | | [docs/MACROS.md](docs/MACROS.md) | In-game macros | ## Routing (three modes) Toggle with `Shift+Alt+M` (configurable) or `enboxer mode maps|mirror|off` while the daemon runs. A Hyprland notification shows the new mode. 1. **maps** — only keys you listed under `maps` are intercepted and sent where the map says. Everything else goes to the front window. 2. **mirror** — the front window still gets the real key; the same key is cloned to the other game windows. `passthrough` (e.g. ESDF) is not cloned. 3. **off** — nothing is intercepted. All keys go to the front window. The mode-toggle hotkey still works. A **map** is a hotkey plus steps (send a key, send a named `game_bind`, wait) plus a **target**. ## Interact / loot WoW’s **Interact with Target** bind (plus Click to Move) walks an alt to the target and loots or talks. One press. Spamming it makes characters circle. The stock `loot` map: assist others → CTM on → interact once → wait `walk_delay_ms` → CTM off. See [docs/MACROS.md](docs/MACROS.md). ## Video FX A region of another client is captured (`grim`) and shown on the primary. While the cursor is over that viewer, keys and clicks go to the **source** slot only. Covered sources need compositor toplevel export (not in this phase); keep the source visible for a live picture. Optional Hyprland snippet: [examples/hyprland.lua](examples/hyprland.lua). ## Build ```bash cd ~/git/enBoxer cargo build --release install -Dm755 target/release/enboxer ~/.local/bin/enboxer ``` Needs Hyprland 0.56 (Lua dispatchers), `hyprctl`, `grim`, and `mpv` (Video FX overlay). ## Use ```bash mkdir -p ~/.config/enboxer cp examples/profile.yaml ~/.config/enboxer/profile.yaml # edit window_match, passthrough, maps, character names enboxer doctor -c ~/.config/enboxer/profile.yaml enboxer macros -c ~/.config/enboxer/profile.yaml enboxer run -c ~/.config/enboxer/profile.yaml ``` `enboxer press Alt+G` fires a map without a Hyprland bind (daemon must be running). ## License GPL-3.0-or-later.