GOALS.md / AGENTS.md are the source of truth. Layout apply requires ENBOXER_ALLOW_LAYOUT=1 and a GUI confirm. Example Video FX is off.
70 lines
3.2 KiB
Markdown
70 lines
3.2 KiB
Markdown
# 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 |
|
||
| --- | --- |
|
||
| [GOALS.md](GOALS.md) | What this project is for (read this) |
|
||
| [AGENTS.md](AGENTS.md) | Rules for Grok / OpenCode |
|
||
| [PLAN.md](PLAN.md) | Shipped vs next |
|
||
| [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
|
||
enboxer # control panel (File / Session / Video / Maps)
|
||
enboxer run -c ~/.config/enboxer/profile.yaml # daemon only
|
||
enboxer doctor
|
||
```
|
||
|
||
The GUI saves `~/.config/enboxer/profile.yaml`. Start routing from **Session → Start routing**.
|
||
|
||
**Layout** places every captured client (stacked / grid / main+strip), then **Make main** swaps a minion into the large tile. Hotkeys: Ctrl+` swap next, Ctrl+F1… focus slot, Ctrl+Shift+F2… swap that slot to main, Ctrl+Shift+R reset layout.
|
||
|
||
`enboxer press Alt+G` fires a map without a Hyprland bind (daemon must be running).
|
||
|
||
## License
|
||
|
||
GPL-3.0-or-later.
|