feat(keymap): gaming mode — picker + Minecraft + generic GAME layers (closes #11) - #27
Conversation
…loses #11) Re-applies the gaming layers (originally PR #19 / v2.0.0-rc1, reverted in PR #21) onto current main (v1.6.0), reconciling the drift that built up on main since the revert. Layers (per owner decision: picker + MC + 1 generic): - 5 GAME? — transient picker; joystick ↑=Minecraft, ↓=generic GAME, center=cancel; all other keys &none - 6 MINECRFT — plain WASD/QWER chassis, no HRM; F3 top-left - 7 GAME — same chassis, grave/console top-left (covers LoL/Doom/CS2/etc.) Entry reconciliation: the original entry (SYS joystick-center, pos 58) is now the mouse left-click since PR #25 turned the SYS joystick into a mouse. Entry moved to the free SYS right-thumb outer key (pos 63 → &to 5); the joystick-mouse is preserved intact. Chassis: LCTRL@39, LSHIFT@57, SPACE@56+59, BSPC@60, LALT@61, F13@62 (PTT), mo(MEDIA)@63. Joystick = audio cluster + center Enter. Exit/switch combos (scoped layers 6-7): 0+12 → GAME_EXIT (RGB off + to 0); 0+5 → re-pick (to 5). RGB: per-game underglow colour set by entry macros (MC green / generic blue); suppressed on USB by AUTO_OFF_USB — OLED display-name is the primary indicator (conf left unchanged per owner decision). Builds verified locally: left 380 KB/792 KB (48.0%), right 269 KB (33.9%). README memory budget, CLAUDE.md, KEYMAP.md updated; drawer legends added for the picker macros. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Session log — gaming mode re-applied onto v1.6.0Request: add the long-planned gaming mode (#11), but first review the locked plan and the code already written, since the branch/firmware had drifted out of sync. Review findings:
Decisions taken (owner): picker + Minecraft + 1 generic GAME layer · dedicated SYS thumb key for entry · no Changed:
Verified: both halves build locally (left 48.0%, right 33.9%); Rationale notes for the future: entry is on pos 63, not pos 58 specifically to preserve the SYS joystick-mouse (move + center-click). RGB color won't show on USB power by design ( |
draw-pdf embedded the whole SVG (now 8 layers in one column) as a single <img> with max-height:100%, cramming every layer onto one A4 page. A single image can't be split across pages, so render per-page SVGs via keymap-drawer --select-layers and give each group its own page. - LAYERS_PER_PAGE (default 4) → 8 layers = 2 pages; override to repaginate - layer names read from the parsed YAML (keys under `layers:`) so the split scales automatically as layers are added/removed - draw-pdf-ci now swaps the YAML from origin/main (the task renders from the YAML, not the committed full SVG) Verified: 2-page A4 PDF — p1 BASE/NAV/CODE/MEDIA, p2 SYS|NUM/GAME?/MINECRFT/GAME; no overflow/blank pages; header/footer + "Page x / y" intact. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Follow-up — printable PDF now paginates across pagesThe
Verified: 2-page A4 PDF — p1 |
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(keymap): gaming mode — picker + Minecraft + generic GAME layers (closes #11)
- Branch pointer: no active feature branch; v2.5.0 (DYA Studio firmware, #31) and gaming mode (#27) both merged to main. - New gotcha: snippet flag is case-sensitive (-DSNIPPET, not -Dsnippet) — lowercase is silently ignored and ships the left half BLE-only (no USB CDC-ACM). Includes a .config verification one-liner. - New gotcha: BLE Studio editing on Linux needs Chrome's #enable-experimental-web-platform-features flag (Web Bluetooth). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Closes #11.
Re-applies the gaming layers (originally PR #19 /
v2.0.0-rc1, reverted in PR #21 and parked on the stalegamingbranch) onto current main (v1.6.0), reconciling the drift that accumulated after the revert. The oldgamingbranch was built on a pre-v1.4 base and is superseded by this branch.Decisions (confirmed with owner)
.confchange — OLED name is the indicator.Summary of all layers after this branch
mo1(left thumb)lt(2,DEL)(right thumb)mo3(right thumb)mo4(left thumb)&to 5— SYS right-thumb outer key (pos 63)Layers 0–4 are unchanged except a single SYS key: pos 63
&trans→&to 5.Gaming layers
Entry gesture: hold
mo(SYS|NUM)→ tap SYS pos 63 (&to 5) → GAME? picker. Then joystick ↑ = Minecraft, ↓ = generic GAME, center = cancel. All other picker keys&none.Entry reconciliation: the locked #11 design entered via the SYS joystick-center (pos 58), which was dead weight then. PR #25 turned the SYS joystick into a mouse, so pos 58 is now
&mkp LCLK. Entry moved to the free right-thumb outer key (pos 63); the joystick-mouse is preserved intact.Chassis (layers 6 & 7, identical except pos 0 — MC
F3/ generic`): no HRM/hold-tap/caps_word; plain WASD/QWER + plain right half for chat.LCTRL@39 (pinky) ·LSHIFT@57 (left thumb) ·SPACE@56+@59 (both thumbs) ·BSPC@60 ·LALT@61 ·F13@62 (PTT) ·mo(MEDIA)@63Exit / switch combos (scoped
layers = <6 7>):0 + 12→&GAME_EXIT(RGB off +&to 0);0 + 5→&to 5(re-pick).RGB: entry macros set per-game underglow (MC green / generic blue).
CONFIG_ZMK_RGB_UNDERGLOW_AUTO_OFF_USB=ysuppresses it on USB (wired gaming), so the OLEDdisplay-nameis the primary active-mode indicator. FlipAUTO_OFF_USB=nlater if the colour-while-wired is wanted.Verification
mise run drawparses all 8 layers; picker macros render as icons.protobuf>=7.35in.venv(nanopb/Studio gencode drift) — fixed in env + documented in CLAUDE.md gotchas.Docs updated
README (layers table + Gaming section + refreshed memory budget), CLAUDE.md (structure table, gaming section, gotchas, active branch), KEYMAP.md (gaming layers section), keymap-drawer config (picker macro legends).
Test plan (hardware)
GAME?MINECRFT; ↓ →GAME; center → back to BASE0 + 12exits to BASE;0 + 5re-opens pickermo(MEDIA)@63 reachable🤖 Generated with Claude Code
Also in this branch — printable PDF pagination (tooling)
Adding gaming layers pushed the keymap to 8 layers, which crammed the
mise run draw-pdfoutput onto one A4 page.draw-pdfnow renders per-page SVGs (keymap-drawer --select-layers) and lays each group of layers on its own page:LAYERS_PER_PAGE(default 4) → 2 pages. Layer names come from the parsed YAML so the split scales automatically;draw-pdf-ciswaps the YAML instead of the SVG. Verified as a clean 2-page A4 PDF. Only.mise.tomlchanged (the PDF stays gitignored).