From 63136a8cb1c138d77890ba570ba206baa29d3c73 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 4 Jul 2026 18:46:50 +0100 Subject: [PATCH] =?UTF-8?q?fix(keybinds):=20SUPER+=3F=20never=20fired=20?= =?UTF-8?q?=E2=80=94=20shifted=20keysym=20needs=20SHIFT=20in=20the=20modma?= =?UTF-8?q?sk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ? is typed as Shift+/, so Hyprland saw mods SUPER+SHIFT with keysym `question` and the exact-modmask match skipped the `$mod, question` bind — the keypress fell through to the focused window (caught on the Latitude, BACKLOG item 26; the menu itself was fine from a terminal). - keybinds.nix: bind is now `$mod SHIFT, question`. - rofi.nix prettyKeys collapses "SHIFT + ?" back to "?" so the cheatsheet row keeps the documented SUPER + ? label. - MEMORY.md gotcha: shifted keysyms need SHIFT in mods — invisible to eval-tier tests. Verified: V0 (flake check --no-build); V1 both surfaces (eval'd settings.bind renders `$mod SHIFT, question, exec, nomarchy-menu keybinds`; built nomarchy-menu's cheatsheet renders `SUPER + ?`). V3 queued: SUPER+? on the Latitude after home-update + relogin. Co-Authored-By: Claude Fable 5 --- agent/BACKLOG.md | 14 -------------- agent/HARDWARE-QUEUE.md | 7 ++++++- agent/JOURNAL.md | 14 ++++++++++++++ agent/MEMORY.md | 4 ++++ modules/home/keybinds.nix | 7 +++++-- modules/home/rofi.nix | 5 ++++- 6 files changed, 33 insertions(+), 18 deletions(-) diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index 5ed5437..8574830 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -25,20 +25,6 @@ next, in what order*. *Items 21–26: real-hardware QA findings from the Latitude 5410 (Bernardo, 2026-07-04) — bugs found on metal outrank the queue.* -### 26. SUPER+? cheatsheet bind never fires on hardware -Reported (Latitude sweep #2): SUPER+? does nothing — the ? reaches the -focused terminal. Cause: keybinds.nix binds `$mod, question`, but -typing ? holds Shift, so Hyprland sees mods SUPER+SHIFT with keysym -`question` and its exact-modmask match skips a bind declaring SUPER -only (the "question already implies Shift" comment doesn't hold on -real input; headless V1/V2 never pressed the key). Fix: `$mod SHIFT, -question` (user-facing label stays SUPER+?); while there, audit the -bind list for other shifted keysyms (none today — letters carry -explicit SHIFT mods). Confirmed bind-only: `nomarchy-menu keybinds` -from a terminal opens the cheatsheet fine (Latitude, 2026-07-04). -**Verify:** V1 (rendered bind string in the HM generation); V3 retest -on the Latitude. - ### 25. swaync text unreadable on summer-day (light-theme contrast) Reported: on summer-day, notification/control-centre text is invisible (contrast). Root cause (traced 2026-07-04): swaync.nix renders `.body` diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index da3e68e..e17cb9e 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -33,7 +33,12 @@ QA machine), the **T14s** (webcam case). no comma layout was configured, so the bind wasn't rendered (the gate working as designed, not a failure) — retest after setting a comma layout + rebuild + relogin. The SUPER+? no-op found en - route IS a real bug → BACKLOG item 26. + route IS a real bug → BACKLOG item 26 (fix shipped — see the + dedicated SUPER+? entry below). +- [ ] **SUPER+? opens the cheatsheet** (item 26 fix) — after + `home-update` + relogin (or `hyprctl reload`), SUPER+? must open + the keybindings cheatsheet, whose row still reads `SUPER + ?` + (not `SUPER + SHIFT + ?`). - [ ] **Keyboard hotplug picker (re-verify after in-flake graduation)** — plug an external keyboard post-login, pick a layout in rofi, confirm it applies per-device only, persists in `settings.keyboard.devices`, diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 68f4459..fe43b6c 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,20 @@ Template: --- +## 2026-07-04 — SUPER+? bind fix (iteration #8, item 26) +- **Task:** BACKLOG NOW#26 — cheatsheet bind never fires on hardware. +- **Did:** keybinds.nix: `$mod, question` → `$mod SHIFT, question` + (? is Shift+/, Hyprland matches the exact modmask); rofi.nix + prettyKeys collapses "SHIFT + ?" → "?" so the row stays SUPER + ?. + Gotcha added to MEMORY.md (shifted keysyms need SHIFT in mods). +- **Verified:** V0 (flake check --no-build); V1 both surfaces — eval'd + hyprland settings.bind renders `$mod SHIFT, question, exec, + nomarchy-menu keybinds`, and built nomarchy-menu's cheatsheet file + renders `SUPER + ?`. No other shifted keysyms in the bind list. +- **Pending:** V3 queued (SUPER+? on the Latitude after home-update + + relogin). +- **Next suggestion:** item 25 (swaync contrast on summer-day). + ## 2026-07-04 — Latitude hardware sweep #2 (Bernardo; results booked, no code) - **Task:** V3 sweep on the Latitude after pulling ≥18b8545 + reboot. - **PASS:** waybar supervisor (theme switches clean; `pkill -x waybar` diff --git a/agent/MEMORY.md b/agent/MEMORY.md index 12822ba..008d046 100644 --- a/agent/MEMORY.md +++ b/agent/MEMORY.md @@ -47,6 +47,10 @@ iteration would otherwise rediscover. split (BACKLOG LATER) is the decided fix (§ Faster switches). ## Gotchas (cost a debugging session once) +- Hyprland binds match the exact modmask: a shifted keysym (`question`) + needs SHIFT in `mods` or the bind never fires — the keypress falls + through to the focused window (§ item 26; caught on hardware, invisible + to eval-tier tests). - Never kill a Wayland session-lock client (hyprlock): its crash failsafe drops to a tty instead of unlocking (§ Hibernate double-unlock). diff --git a/modules/home/keybinds.nix b/modules/home/keybinds.nix index 9b55cc3..d7c370a 100644 --- a/modules/home/keybinds.nix +++ b/modules/home/keybinds.nix @@ -33,8 +33,11 @@ { mods = "$mod"; key = "X"; action = "exec, nomarchy-menu power"; desc = "Power menu"; } { mods = "$mod"; key = "N"; action = "exec, swaync-client -t"; desc = "Notification centre"; } - # SUPER+? (the "question" keysym already implies Shift on most layouts). - { mods = "$mod"; key = "question"; action = "exec, nomarchy-menu keybinds"; desc = "Keybindings cheatsheet"; } + # SUPER+? — ? is typed as Shift+/, so SHIFT must be in the bind's + # modmask or Hyprland's exact-modifier match never fires (the key then + # falls through to the focused window; caught on hardware, item 26). + # The cheatsheet still renders this row as SUPER + ? (rofi.nix). + { mods = "$mod SHIFT"; key = "question"; action = "exec, nomarchy-menu keybinds"; desc = "Keybindings cheatsheet"; } # Menu functions — SUPER+CTRL+ jumps straight to a # nomarchy-menu module (all also reachable from the SUPER+M picker). diff --git a/modules/home/rofi.nix b/modules/home/rofi.nix index 7cd7908..fa6626c 100644 --- a/modules/home/rofi.nix +++ b/modules/home/rofi.nix @@ -117,7 +117,10 @@ let let m = lib.replaceStrings [ "$mod" ] [ "SUPER" ] b.mods; prefix = if m == "" then "" else lib.concatStringsSep " + " (lib.splitString " " m) + " + "; key = lib.replaceStrings [ "question" "slash" ] [ "?" "/" ] b.key; - in prefix + key; + # ? already implies Shift — the bind needs SHIFT in its modmask + # (keybinds.nix), but showing it would read double, so collapse + # "SHIFT + ?" back to the documented "?". + in lib.replaceStrings [ "SHIFT + ?" ] [ "?" ] (prefix + key); cheatRows = map (b: padRight 22 (prettyKeys b) + b.desc) (keybinds.binds ++ lib.optionals (lib.hasInfix "," cfg.keyboard.layout)