64 lines
2.5 KiB
Markdown
64 lines
2.5 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 |
|
||
| --- | --- |
|
||
| [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/MACROS.md](docs/MACROS.md) | In-game macros |
|
||
|
||
## Routing
|
||
|
||
- A **map** is a hotkey plus steps (send a key, send a named `game_bind`, wait) plus a **target**.
|
||
- Unmapped keys are not intercepted.
|
||
- `passthrough` keys are never intercepted, even if a map lists them. Default is empty.
|
||
- Optional **repeater** mode also clones an explicit extra key list to the other slots.
|
||
|
||
## 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`. A viewer (`imv` or `feh`) for Video FX overlays.
|
||
|
||
## 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.
|