Skip to content

feat(keymap): gaming layers + joystick launcher#19

Merged
rdlu merged 1 commit intomainfrom
feat/game-layers
Apr 11, 2026
Merged

feat(keymap): gaming layers + joystick launcher#19
rdlu merged 1 commit intomainfrom
feat/game-layers

Conversation

@rdlu
Copy link
Copy Markdown
Owner

@rdlu rdlu commented Apr 11, 2026

Closes #11.

Summary

Adds 5 new layers — GAME_PICK (transient launcher) + GAME_MC / GAME_LOL / GAME_DOOM / GAME_CS2 — entered from SYS via the joystick center key. The 4-way joystick cluster becomes a launcher: directionals pick a game, center cancels.

Design was discussed and locked in #11 (see comments dated 2026-04-11).

What landed

Entry / exit

  • SYS pos 58 (was &mkp LCLK, dead duplicate of NAV's LCLK) → &to 5 (GAME_PICK)
  • GAME_PICK joystick: UP→MC, DOWN→LoL, LEFT→Doom, RIGHT→CS2, CENTER→BASE (cancel). Every other key is &none so a stray press can't escape the picker.
  • Exit combo 0 + 12 (top corners), scoped to layers 6-9 → &GAME_EXIT macro (RGB off + &to 0)
  • Re-pick combo 0 + 5, scoped to layers 6-9 → &to 5

Cross-game chassis (identical for all 4 games)

  • Plain WASD/QWER on left half, plain QWERTY on right half — chat works without leaving game mode
  • LCTRL @ pos 39 (pinky, replaces BSLH) — sprint/crouch, unified across MC/Doom/CS2/LoL
  • LSHIFT @ pos 57 (left thumb, BASE BSPC slot) — sneak/walk
  • SPACE on both thumbs (pos 56 + 59)
  • BSPC @ pos 60 (replaces BASE lt 2 DEL) — chat correction
  • LALT @ pos 61 (replaces BASE caps_word)
  • F13 @ pos 62 (replaces F12) — push-to-talk for Discord/in-game voice
  • mo MEDIA @ pos 63 preserved for full media controls
  • Joystick = audio cluster: VOL+ / VOL- / MUTE / play-pause + center ENTER
  • Encoder = volume up/down everywhere

Per-game variant

Only pos 0 differs: F3 (debug screen) on MC, ` (console) on LoL/Doom/CS2.

The four games stay as separate layers so the OLED display-name and the per-game RGB color (green MC / gold LoL / red Doom / blue CS2) make the active mode obvious.

RGB feedback

Each game-entry macro chains &rgb_ug RGB_ON, &rgb_ug RGB_COLOR_HSB(...), &to N. Exit macro chains &rgb_ug RGB_OFF, &to 0.

Test plan

  • CI build succeeds for both halves
  • Flash both halves; verify mise run draw SVG matches expectation
  • Hold SYS (left thumb), tap joystick center, release SYS → OLED shows GAME?
  • From GAME?, tap joystick UP → OLED shows MINECRFT, RGB underglow turns green
  • In Minecraft: WASD moves, LSHIFT (pos 57) sneaks, LCTRL (pos 39) sprints, SPACE jumps, T opens chat, type a sentence using the right half, ENTER sends
  • Joystick UP/DN/LT/RT adjust volume / mute / play-pause without leaving game mode
  • Hold pos 63 → MEDIA layer accessible
  • F13 PTT works in Discord (after binding it there)
  • Combo 0 + 12 exits cleanly back to BASE, RGB turns off
  • Combo 0 + 5 returns to picker without bouncing through BASE
  • Repeat smoke test for LoL / Doom / CS2

🤖 Generated with Claude Code

Adds 5 new layers — GAME_PICK launcher + GAME_MC / GAME_LOL / GAME_DOOM /
GAME_CS2 — entered from SYS via the joystick center key.

Why: dedicated game layers bypass HRM / hold-tap entirely so WASD, SPACE,
SHIFT, CTRL behave as pure keys during play. The 4-way joystick cluster
becomes a launcher (UP/DN/LT/RT pick a game, center cancels), reusing the
same physical key family for entry, selection, and cancel.

Cross-game chassis:
- Plain WASD/QWER on left half, plain QWERTY letters on right half so chat
  works without leaving game mode.
- LCTRL @ pos 39 (pinky) — sprint/crouch, unified across MC/Doom/CS2/LoL.
- LSHIFT @ pos 57 — sneak/walk on the strongest left thumb position.
- SPACE on both thumbs (pos 56 + 59).
- BSPC @ pos 60 for chat correction. LALT @ pos 61. F13 @ pos 62 for PTT.
- Joystick = audio cluster: VOL+ / VOL- / MUTE / play-pause + center ENTER.
- mo MEDIA on right thumb (pos 63) preserved.

Per-game variants are intentionally minimal: pos 0 is F3 (debug) on MC and
` (console) on LoL/Doom/CS2. The four games are separated so the OLED
display-name and per-game RGB underglow color make the active mode obvious.

RGB feedback: each game-entry macro turns on the underglow and sets a solid
color via RGB_COLOR_HSB — green for MC, gold for LoL, red for Doom, blue
for CS2. The exit combo turns the underglow back off.

Exit / re-pick combos (positions 0+12 and 0+5, scoped to layers 6-9): top
corners are physically far apart so they can't fire during gameplay but
are easy to do deliberately. Modeled on the existing softoff combo pattern.

SYS layer pos 58 (was &mkp LCLK, dead-weight duplicate of NAV's LCLK)
becomes &to 5 — the GAME_PICK entry point.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@rdlu rdlu added enhancement New feature or request keymap Keymap, layers, or key behaviors labels Apr 11, 2026
@rdlu rdlu self-assigned this Apr 11, 2026
@rdlu
Copy link
Copy Markdown
Owner Author

rdlu commented Apr 11, 2026

Implementation summary

Implemented per the locked design in #11. Branch: feat/game-layers, single commit.

Files touched:

  • config/eyelash_sofle.keymap — added 4 game-entry macros + 1 exit macro, 2 new combos (exit/re-pick), modified SYS pos 58, added 5 new layers
  • keymap-drawer/eyelash_sofle.{yaml,svg} — regenerated via mise run draw

Non-obvious choices:

  1. Layers 6-9 are nearly identical bindings — only pos 0 differs (F3 vs grave). Kept them as 4 separate layers so the OLED display-name and per-game RGB color provide unambiguous visual feedback. Future per-game tuning has a place to live.
  2. GAME_PICK uses &none for non-launcher keys, not &trans — prevents accidentally typing through to BASE while in launcher mode.
  3. Exit combo timeout = 50ms — strict, since both keys are corners pressed deliberately.
  4. F2 (screenshot) kept on left thumb pos 53 — replaces BASE mo SYS. SYS access from a game layer is unnecessary; F2 is cheap to keep.
  5. &mkp LCLK on SYS pos 58 was dead weight before this PR (LCLK is also on NAV pos 15). Repurposing it as the launcher entry costs nothing.

Awaiting: CI build artifacts, then v2.0.0 pre-release.
EOF
)

@rdlu rdlu merged commit 9b81a18 into main Apr 11, 2026
5 checks passed
@rdlu rdlu deleted the feat/game-layers branch April 11, 2026 20:26
github-actions Bot pushed a commit that referenced this pull request Apr 11, 2026
… (#19)

Adds 5 new layers — GAME_PICK launcher + GAME_MC / GAME_LOL / GAME_DOOM /
GAME_CS2 — entered from SYS via the joystick center key.

Why: dedicated game layers bypass HRM / hold-tap entirely so WASD, SPACE,
SHIFT, CTRL behave as pure keys during play. The 4-way joystick cluster
becomes a launcher (UP/DN/LT/RT pick a game, center cancels), reusing the
same physical key family for entry, selection, and cancel.

Cross-game chassis:
- Plain WASD/QWER on left half, plain QWERTY letters on right half so chat
  works without leaving game mode.
- LCTRL @ pos 39 (pinky) — sprint/crouch, unified across MC/Doom/CS2/LoL.
- LSHIFT @ pos 57 — sneak/walk on the strongest left thumb position.
- SPACE on both thumbs (pos 56 + 59).
- BSPC @ pos 60 for chat correction. LALT @ pos 61. F13 @ pos 62 for PTT.
- Joystick = audio cluster: VOL+ / VOL- / MUTE / play-pause + center ENTER.
- mo MEDIA on right thumb (pos 63) preserved.

Per-game variants are intentionally minimal: pos 0 is F3 (debug) on MC and
` (console) on LoL/Doom/CS2. The four games are separated so the OLED
display-name and per-game RGB underglow color make the active mode obvious.

RGB feedback: each game-entry macro turns on the underglow and sets a solid
color via RGB_COLOR_HSB — green for MC, gold for LoL, red for Doom, blue
for CS2. The exit combo turns the underglow back off.

Exit / re-pick combos (positions 0+12 and 0+5, scoped to layers 6-9): top
corners are physically far apart so they can't fire during gameplay but
are easy to do deliberately. Modeled on the existing softoff combo pattern.

SYS layer pos 58 (was &mkp LCLK, dead-weight duplicate of NAV's LCLK)
becomes &to 5 — the GAME_PICK entry point.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
rdlu added a commit that referenced this pull request Apr 13, 2026
rdlu added a commit that referenced this pull request Apr 13, 2026
rdlu added a commit that referenced this pull request Apr 13, 2026
* Revert "[Draw] feat(keymap): add gaming layers + joystick launcher (closes #11) (#19)"

This reverts commit 17fb4b5.

* Revert "feat(keymap): add gaming layers + joystick launcher (closes #11) (#19)"

This reverts commit 9b81a18.

* feat(keymap): revert NAV arrows to HJKL positions (plain kp, no hold-tap)

Moves vim-style arrow cluster back to row 2 (H/J/K/L positions) on the
NAV layer, accepting the auto-repeat trade-off documented in #5.
Arrows use plain &kp bindings — no hold-tap modifiers on the NAV layer.
Workspace shortcuts (LG(N1/U/I/N9)) move down to row 3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
github-actions Bot pushed a commit that referenced this pull request Apr 13, 2026
#21)

* Revert "[Draw] feat(keymap): add gaming layers + joystick launcher (closes #11) (#19)"

This reverts commit 17fb4b5.

* Revert "feat(keymap): add gaming layers + joystick launcher (closes #11) (#19)"

This reverts commit 9b81a18.

* feat(keymap): revert NAV arrows to HJKL positions (plain kp, no hold-tap)

Moves vim-style arrow cluster back to row 2 (H/J/K/L positions) on the
NAV layer, accepting the auto-repeat trade-off documented in #5.
Arrows use plain &kp bindings — no hold-tap modifiers on the NAV layer.
Workspace shortcuts (LG(N1/U/I/N9)) move down to row 3.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request keymap Keymap, layers, or key behaviors

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Dedicated gaming layer(s)

1 participant