fix(keybinds): SUPER+? bind uses base keysym slash, not question
All checks were successful
Check / eval (push) Successful in 3m10s

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 <noreply@anthropic.com>
This commit is contained in:
Bernardo Magri
2026-07-08 13:59:02 +01:00
parent 60c6f14c08
commit b1cf10ff06
5 changed files with 40 additions and 20 deletions

View File

@@ -26,14 +26,6 @@ next, in what order*.
## NEXT ## 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]` ### 36. Battery / power quick menu `[human]`
(Raised by Bernardo, 2026-07-07 — item 6.) Slice (a) — the charge-threshold (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; toggle in the rofi System submenu — shipped 2026-07-07 (iteration #64;

View File

@@ -35,10 +35,14 @@ QA machine), the **T14s** (webcam case).
comma layout + rebuild + relogin. The SUPER+? no-op found en comma layout + rebuild + relogin. The SUPER+? no-op found en
route IS a real bug → BACKLOG item 26 (fix shipped — see the route IS a real bug → BACKLOG item 26 (fix shipped — see the
dedicated SUPER+? entry below). dedicated SUPER+? entry below).
- [ ] **SUPER+? opens the cheatsheet** (item 26 fix)after - [ ] **SUPER+? opens the cheatsheet** (item 32 re-fix — supersedes the
`home-update` + relogin (or `hyprctl reload`), SUPER+? must open item 26 attempt) — the bind is now `$mod SHIFT, slash` (the BASE
the keybindings cheatsheet, whose row still reads `SUPER + ?` keysym: Hyprland 0.55 resolves the sym with Shift consumed, so the
(not `SUPER + SHIFT + ?`). 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 - [ ] **swaync readable on summer-day** (item 25 fix) — on summer-day
after `home-update`: `notify-send "title" "body text"` shows after `home-update`: `notify-send "title" "body text"` shows
readable body text; open the control centre (SUPER+N), hover a readable body text; open the control centre (SUPER+N), hover a

View File

@@ -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) ## 2026-07-07 — Battery-limit toggle in rofi System (iteration #64, item 36a)
- **Task:** BACKLOG item 36(a) — Bernardo wanted the charge-threshold - **Task:** BACKLOG item 36(a) — Bernardo wanted the charge-threshold
toggle as a first-class row in `nomarchy-menu System`, not buried in toggle as a first-class row in `nomarchy-menu System`, not buried in

View File

@@ -33,11 +33,13 @@
{ mods = "$mod"; key = "X"; action = "exec, nomarchy-menu power"; desc = "Power menu"; } { mods = "$mod"; key = "X"; action = "exec, nomarchy-menu power"; desc = "Power menu"; }
{ mods = "$mod"; key = "N"; action = "exec, swaync-client -t"; desc = "Notification centre"; } { 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 # SUPER+? — ? is Shift+/. SHIFT stays in the modmask (you hold it), but
# modmask or Hyprland's exact-modifier match never fires (the key then # the keysym must be the BASE key `slash`, not `question`: Hyprland
# falls through to the focused window; caught on hardware, item 26). # 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). # 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+<mnemonic> jumps straight to a # Menu functions — SUPER+CTRL+<mnemonic> jumps straight to a
# nomarchy-menu module (all also reachable from the SUPER+M picker). # nomarchy-menu module (all also reachable from the SUPER+M picker).

View File

@@ -129,10 +129,10 @@ let
key = lib.replaceStrings key = lib.replaceStrings
[ "question" "slash" "left" "right" "up" "down" ] [ "question" "slash" "left" "right" "up" "down" ]
[ "?" "/" "" "" "" "" ] b.key; [ "?" "/" "" "" "" "" ] b.key;
# ? already implies Shift — the bind needs SHIFT in its modmask # The bind is `SHIFT + slash` (base keysym; keybinds.nix), which
# (keybinds.nix), but showing it would read double, so collapse # renders "SHIFT + /". `?` IS Shift+/, so collapse that back to the
# "SHIFT + ?" back to the documented "?". # single documented glyph — the cheatsheet reads "SUPER + ?".
in lib.replaceStrings [ "SHIFT + ?" ] [ "?" ] (prefix + key); in lib.replaceStrings [ "SHIFT + /" ] [ "?" ] (prefix + key);
cheatRows = cheatRows =
map (b: padRight 22 (prettyKeys b) + b.desc) (keybinds.binds map (b: padRight 22 (prettyKeys b) + b.desc) (keybinds.binds
++ lib.optionals (lib.hasInfix "," cfg.keyboard.layout) ++ lib.optionals (lib.hasInfix "," cfg.keyboard.layout)