fix(rofi): normal sorter for fuzzy search + power-profile icons
All checks were successful
Check / eval (push) Successful in 3m8s
All checks were successful
Check / eval (push) Successful in 3m8s
Two rofi fixes:
- Search (item 31): rofi 2.0.0's fzf sorter mis-ranks fuzzy matches —
typing "steam" left ghostty selected instead of Steam. Bernardo's live
A/B confirmed `-sorting-method normal` and `-matching normal` both fix
it while `-no-sort` does not. Switch sorting-method fzf → normal, keep
matching=fuzzy + case-sensitive=false.
- Power profile menu (item 39): list profiles with per-profile icons from
Papirus' colored battery-profile-{performance,balanced,powersave} family
(the -symbolic variants are #444 grey, invisible on dark). Row text
stays the bare profile name so `powerprofilesctl set` is unaffected.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -26,23 +26,6 @@ next, in what order*.
|
|||||||
|
|
||||||
## NEXT
|
## 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]`
|
### 32. SUPER+? cheatsheet bind still not opening `[bug]`
|
||||||
(Raised by Bernardo, 2026-07-07 — item 2.) Item 26's fix (SHIFT in the
|
(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+?
|
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
|
Hyprland bind's modmask/keysym against the *actual* layout, whether rofi
|
||||||
2.0.0 changed anything, and that the cheatsheet path still resolves.
|
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
|
### 36. Battery / power quick menu
|
||||||
(Raised by Bernardo, 2026-07-07 — items "battery toggle in a rofi
|
(Raised by Bernardo, 2026-07-07 — items "battery toggle in a rofi
|
||||||
|
|||||||
@@ -236,6 +236,13 @@ QA machine), the **T14s** (webcam case).
|
|||||||
unchanged (the bar still reserves its space). Accepted trade-off
|
unchanged (the bar still reserves its space). Accepted trade-off
|
||||||
of `layer: bottom`: a floating window dragged over the top strip
|
of `layer: bottom`: a floating window dragged over the top strip
|
||||||
can now overlap the bar — confirm that's the only regression.
|
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 dev box only
|
||||||
- [ ] **AMD runtime bits** — VA-API (`vainfo` → radeonsi), amd-pstate EPP
|
- [ ] **AMD runtime bits** — VA-API (`vainfo` → radeonsi), amd-pstate EPP
|
||||||
|
|||||||
@@ -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-<p>` 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)
|
## 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
|
- **Task:** BACKLOG item 40 — in System › Display the Back row didn't
|
||||||
return on a single-monitor machine.
|
return on a single-monitor machine.
|
||||||
|
|||||||
@@ -227,8 +227,22 @@ let
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
cur=$(powerprofilesctl get 2>/dev/null)
|
cur=$(powerprofilesctl get 2>/dev/null)
|
||||||
choice=$( { powerprofilesctl list 2>/dev/null | sed -nE 's/^[* ] ([a-z-]+):$/\1/p'; printf '%s\n' "$BACK"; } \
|
# Each profile gets its themed icon from Papirus' colored
|
||||||
| rofi -dmenu -p "profile (now: $cur)") || exit 0
|
# 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
|
[ "$choice" = "$BACK" ] && exec "$0" system
|
||||||
[ -n "$choice" ] && powerprofilesctl set "$choice" ;;
|
[ -n "$choice" ] && powerprofilesctl set "$choice" ;;
|
||||||
|
|
||||||
@@ -899,13 +913,20 @@ in
|
|||||||
# while the app launcher still fills + scrolls past `lines`.
|
# while the app launcher still fills + scrolls past `lines`.
|
||||||
fixed-num-lines = false;
|
fixed-num-lines = false;
|
||||||
# Search: case-insensitive fuzzy across every menu + the launcher, so
|
# Search: case-insensitive fuzzy across every menu + the launcher, so
|
||||||
# "system" finds "System" and "fzr" finds "Firefox". fzf sorting ranks
|
# "system" finds "System" and "fzr" finds "Firefox". `normal` sorting
|
||||||
# the closest match to the top (the per-keystroke modules — calc/emoji
|
# ranks by match distance so the closest match lands on top (the
|
||||||
# — opt out per-invocation with -no-sort).
|
# 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";
|
matching = "fuzzy";
|
||||||
case-sensitive = false;
|
case-sensitive = false;
|
||||||
sort = true;
|
sort = true;
|
||||||
sorting-method = "fzf";
|
sorting-method = "normal";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Whole-swap themes bring their own rofi.rasi; otherwise the theme
|
# Whole-swap themes bring their own rofi.rasi; otherwise the theme
|
||||||
|
|||||||
Reference in New Issue
Block a user