diff --git a/agent/BACKLOG.md b/agent/BACKLOG.md index bdc5e1e..23b2e0f 100644 --- a/agent/BACKLOG.md +++ b/agent/BACKLOG.md @@ -26,23 +26,6 @@ next, in what order*. ## NEXT -### 31. rofi search broken under rofi 2.0.0 `[bug]` -(Raised by Bernardo, 2026-07-07.) Typing a lowercase query fails to -match (`steam` doesn't select **Steam**) and Enter launches the first -entry instead (ghostty) — i.e. matching behaves case-sensitively and the -selection never moves off row 0. **Not a missing config key:** the -generated config already sets `case-sensitive = false`, `matching = -"fuzzy"`, `sort = true`, `sorting-method = "fzf"`, and `rofi -dump-config` -shows rofi 2.0.0 honours them (they're its new defaults). The lock bump -`8fded63` pulled **rofi 2.0.0** (a major version) — this is a 2.0 -behaviour change. Needs interactive repro on a session (can't be -eyeballed headlessly). Candidate levers to A/B live: `matching` -(normal/prefix vs fuzzy), `-i`/`case-smart`/`normalize-match` (new 2.0 -knobs), `sort`/`sorting-method`, and the per-modi `sorting-method:"name"` -default 2.0 shows for drun. Fix once, then bake into -`programs.rofi.extraConfig`. Covers Bernardo's item 1 (case-insensitive -search). - ### 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+? @@ -50,11 +33,6 @@ 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. -### 39. Icons in the power-profile rofi menu -(Raised by Bernardo, 2026-07-07 — item 9.) The power-profile picker -(rofi.nix `power-profile`) lists profiles as bare text; add per-profile -icons (performance/balanced/power-saver) like the other System rows. -Small. ### 36. Battery / power quick menu (Raised by Bernardo, 2026-07-07 — items "battery toggle in a rofi diff --git a/agent/HARDWARE-QUEUE.md b/agent/HARDWARE-QUEUE.md index 1c26c54..6e0bc61 100644 --- a/agent/HARDWARE-QUEUE.md +++ b/agent/HARDWARE-QUEUE.md @@ -236,6 +236,13 @@ QA machine), the **T14s** (webcam case). unchanged (the bar still reserves its space). Accepted trade-off of `layer: bottom`: a floating window dragged over the top strip can now overlap the bar — confirm that's the only regression. +- [ ] **rofi menu polish** (iteration #58, item 39 + #56/#57 34/40) — + after `home-update`: (a) menu › System › Power profile shows a + colored icon per profile (performance/balanced/power-saver), not + just text — icons *render* (not blank); (b) every submenu's ↩ Back + shows a single arrow, no double; (c) on this single-monitor box, + System › Display → pick a resolution → Back returns to System + (not back into the same resolution list). ## AMD dev box only - [ ] **AMD runtime bits** — VA-API (`vainfo` → radeonsi), amd-pstate EPP diff --git a/agent/JOURNAL.md b/agent/JOURNAL.md index 8647565..5b71ac9 100644 --- a/agent/JOURNAL.md +++ b/agent/JOURNAL.md @@ -17,6 +17,25 @@ Template: --- +## 2026-07-07 — rofi search mis-ranks + power-profile icons (iteration #58, items 31 & 39) +- **#31 (rofi search broken):** Bernardo ran the live A/B — `-sorting-method + normal` and `-matching normal` both fixed "steam"→Steam; `-no-sort` did + not. So the culprit is rofi 2.0.0's **fzf sorter** paired with fuzzy + matching (it ranked ghostty above Steam), not case-sensitivity. Fix: + `programs.rofi.extraConfig.sorting-method` `"fzf"` → `"normal"`, keeping + `matching="fuzzy"` (forgiveness) + `case-sensitive=false`. Also closes + Bernardo's batch item 1 (case-insensitive — already false, now ranks + right too). +- **#39 (power-profile icons):** the picker listed profiles as bare text. + Now emits `row "$p" battery-profile-

` using Papirus' **colored** + `battery-profile-{performance,balanced,powersave}` family (the + `-symbolic` variants are #444 grey → invisible on dark themes; verified + the colored ones carry real fills). Returned row text stays the bare + profile name, so `powerprofilesctl set` is unaffected; added `-show-icons`. +- **Verified:** V0 `nix flake check --no-build` green for both. #31's fix + is the exact lever Bernardo confirmed live. #39's icon *rendering* is a + V3 visual check (Papirus lookup can't be eyeballed headlessly) — queued. + ## 2026-07-07 — Display menu "Back" doesn't return (iteration #57, item 40) - **Task:** BACKLOG item 40 — in System › Display the Back row didn't return on a single-monitor machine. diff --git a/modules/home/rofi.nix b/modules/home/rofi.nix index 3e9e572..152290e 100644 --- a/modules/home/rofi.nix +++ b/modules/home/rofi.nix @@ -227,8 +227,22 @@ let exit 0 fi cur=$(powerprofilesctl get 2>/dev/null) - choice=$( { powerprofilesctl list 2>/dev/null | sed -nE 's/^[* ] ([a-z-]+):$/\1/p'; printf '%s\n' "$BACK"; } \ - | rofi -dmenu -p "profile (now: $cur)") || exit 0 + # Each profile gets its themed icon from Papirus' colored + # battery-profile-* family (the -symbolic variants are #444 grey and + # vanish on dark themes). The selected row's returned text is still + # the bare profile name, so `powerprofilesctl set` is unaffected. + choice=$( { + powerprofilesctl list 2>/dev/null | sed -nE 's/^[* ] ([a-z-]+):$/\1/p' \ + | while IFS= read -r p; do + case "$p" in + performance) row "$p" battery-profile-performance ;; + balanced) row "$p" battery-profile-balanced ;; + power-saver) row "$p" battery-profile-powersave ;; + *) row "$p" preferences-system-power ;; + esac + done + back + } | rofi -dmenu -show-icons -p "profile (now: $cur)") || exit 0 [ "$choice" = "$BACK" ] && exec "$0" system [ -n "$choice" ] && powerprofilesctl set "$choice" ;; @@ -899,13 +913,20 @@ in # while the app launcher still fills + scrolls past `lines`. fixed-num-lines = false; # Search: case-insensitive fuzzy across every menu + the launcher, so - # "system" finds "System" and "fzr" finds "Firefox". fzf sorting ranks - # the closest match to the top (the per-keystroke modules — calc/emoji - # — opt out per-invocation with -no-sort). + # "system" finds "System" and "fzr" finds "Firefox". `normal` sorting + # ranks by match distance so the closest match lands on top (the + # per-keystroke modules — calc/emoji — opt out per-invocation with + # -no-sort). + # + # NOT `fzf`: rofi 2.0.0's fzf sorter mis-ranks with fuzzy matching — + # typing "steam" left ghostty selected on top instead of Steam + # (confirmed on hardware: `-sorting-method normal` and `-matching + # normal` both fixed it, `-no-sort` did not). Keep fuzzy matching for + # forgiveness; use the normal sorter to rank it (item 31). matching = "fuzzy"; case-sensitive = false; sort = true; - sorting-method = "fzf"; + sorting-method = "normal"; }; # Whole-swap themes bring their own rofi.rasi; otherwise the theme