From b1cf10ff06d4f74ee04df57fb00fc5812df8844e Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Wed, 8 Jul 2026 13:59:02 +0100 Subject: [PATCH] fix(keybinds): SUPER+? bind uses base keysym `slash`, not `question` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Item 32. Item 26 added SHIFT to the modmask but kept the shifted keysym `question`, so the bind stayed dead. Hyprland 0.55 resolves a bind's keysym with SHIFT consumed (issue #7750, behaviour since 0.43): with Shift held, `$mod SHIFT, question` is matched against `slash` and never fires. The base keysym is what works — same pattern as this file's own `$mod SHIFT, 1` workspace binds. Also updates rofi.nix prettyKeys to collapse "SHIFT + /" → "?" so the cheatsheet row still reads "SUPER + ?". Verified: V0 `nix flake check --no-build` green; V1 HM activation built, built hyprland.conf carries `bind=$mod SHIFT, slash, exec, nomarchy-menu keybinds` (kb_layout=us → slash is `?`). The keypress opening the menu is V3 — queued (HARDWARE-QUEUE, existing SUPER+? entry updated). Co-Authored-By: Claude Opus 4.8 --- agent/BACKLOG.md | 8 -------- agent/HARDWARE-QUEUE.md | 12 ++++++++---- agent/JOURNAL.md | 22 ++++++++++++++++++++++ modules/home/keybinds.nix | 10 ++++++---- modules/home/rofi.nix | 8 ++++---- 5 files changed, 40 insertions(+), 20 deletions(-) diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index c9a0189..d6b2d1f 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -26,14 +26,6 @@ next, in what order*. ## NEXT -### 32. SUPER+? cheatsheet bind still not opening `[bug]` -(Raised by Bernardo, 2026-07-07 — item 2.) Item 26's fix (SHIFT in the -bind modmask so the shifted `question` keysym fires) shipped, but SUPER+? -still doesn't open the keybindings cheatsheet. Re-diagnose: confirm the -Hyprland bind's modmask/keysym against the *actual* layout, whether rofi -2.0.0 changed anything, and that the cheatsheet path still resolves. - - ### 36. Battery / power quick menu `[human]` (Raised by Bernardo, 2026-07-07 — item 6.) Slice (a) — the charge-threshold toggle in the rofi System submenu — shipped 2026-07-07 (iteration #64; diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index 0abac7c..3ac0db8 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -35,10 +35,14 @@ QA machine), the **T14s** (webcam case). comma layout + rebuild + relogin. The SUPER+? no-op found en 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 + ?`). +- [ ] **SUPER+? opens the cheatsheet** (item 32 re-fix — supersedes the + item 26 attempt) — the bind is now `$mod SHIFT, slash` (the BASE + keysym: Hyprland 0.55 resolves the sym with Shift consumed, so the + old `question` keysym never matched while Shift was down — same + pattern as the working `$mod SHIFT, 1` workspace binds). After + `home-update` + relogin (or `hyprctl reload`), SUPER+? must open the + keybindings cheatsheet, whose row still reads `SUPER + ?` (not + `SUPER + SHIFT + ?`). - [ ] **swaync readable on summer-day** (item 25 fix) — on summer-day after `home-update`: `notify-send "title" "body text"` shows readable body text; open the control centre (SUPER+N), hover a diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index a646c43..29f4a7c 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,28 @@ Template: --- +## 2026-07-08 — SUPER+? cheatsheet re-fixed: base keysym (iteration #65, item 32) +- **Task:** BACKLOG item 32 — SUPER+? still didn't open the cheatsheet + after item 26's fix. Re-diagnose. +- **Did:** Root cause = wrong keysym, not path/rofi. Hyprland 0.55 resolves + a bind's keysym with SHIFT *consumed* (issue #7750, since 0.43), so + `$mod SHIFT, question` looks for `slash` and never matches. Item 26 fixed + the modmask but kept the shifted keysym → still dead. Changed keybinds.nix + `question` → `slash` (the BASE keysym, exactly like the working + `$mod SHIFT, 1` workspace binds in this same file); updated rofi.nix + prettyKeys collapse `SHIFT + /` → `?` so the cheatsheet still reads + "SUPER + ?". Dispatch (`nomarchy-menu keybinds`) confirmed already fine. +- **Verified:** V0 `nix flake check --no-build` green. V1: HM activation + built; grepped the built hyprland.conf → `bind=$mod SHIFT, slash, exec, + nomarchy-menu keybinds` (beside the proven `$mod SHIFT, 1`), `kb_layout=us` + confirms slash→? ; `nix eval` of prettyKeys → "SUPER + ?". +- **Pending:** V3 — the keypress actually opening the menu is invisible + below hardware (that's how item 26 slipped); the existing HARDWARE-QUEUE + "SUPER+? opens the cheatsheet" entry updated to the slash fix. +- **Next suggestion:** Bernardo's two live requests — (1) fold the provided + power-menu mockup into item 36(b) [design now in hand]; (2) right-align a + keybind hint on every menu/submenu row that has one. + ## 2026-07-07 — Battery-limit toggle in rofi System (iteration #64, item 36a) - **Task:** BACKLOG item 36(a) — Bernardo wanted the charge-threshold toggle as a first-class row in `nomarchy-menu › System`, not buried in diff --git a/modules/home/keybinds.nix b/modules/home/keybinds.nix index da1b28f..a46e603 100644 --- a/modules/home/keybinds.nix +++ b/modules/home/keybinds.nix @@ -33,11 +33,13 @@ { 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+? — ? 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). + # SUPER+? — ? is Shift+/. SHIFT stays in the modmask (you hold it), but + # the keysym must be the BASE key `slash`, not `question`: Hyprland + # resolves the sym with Shift consumed, so `question` never matches while + # Shift is down — same as the `$mod SHIFT, 1` workspace binds. (item 26 + # fixed the modmask but kept the shifted keysym → still dead; item 32.) # The cheatsheet still renders this row as SUPER + ? (rofi.nix). - { mods = "$mod SHIFT"; key = "question"; action = "exec, nomarchy-menu keybinds"; desc = "Keybindings cheatsheet"; } + { mods = "$mod SHIFT"; key = "slash"; 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 9fe1c3d..90e15d4 100644 --- a/modules/home/rofi.nix +++ b/modules/home/rofi.nix @@ -129,10 +129,10 @@ let key = lib.replaceStrings [ "question" "slash" "left" "right" "up" "down" ] [ "?" "/" "←" "→" "↑" "↓" ] b.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); + # The bind is `SHIFT + slash` (base keysym; keybinds.nix), which + # renders "SHIFT + /". `?` IS Shift+/, so collapse that back to the + # single documented glyph — the cheatsheet reads "SUPER + ?". + in lib.replaceStrings [ "SHIFT + /" ] [ "?" ] (prefix + key); cheatRows = map (b: padRight 22 (prettyKeys b) + b.desc) (keybinds.binds ++ lib.optionals (lib.hasInfix "," cfg.keyboard.layout)