fix(desktop): tighter bar icon pad + case-insensitive rofi match
Some checks failed
Check / eval (push) Has been cancelled

- Double-space pad on volume (esp. high), battery, keyboard layout glyphs
- rofi: matching=normal,fuzzy; case-smart off (ste finds Steam)
- Queue: unfree+calendar PASS; retest spacing + rofi search

V0: nix flake check --no-build green. V3: bar/rofi on session.
This commit is contained in:
2026-07-10 13:06:47 +01:00
parent d547393e7b
commit b5263bcef8
7 changed files with 177 additions and 141 deletions

View File

@@ -1159,19 +1159,18 @@ in
# reserving `lines` (8) — so a 6-entry menu doesn't leave empty space,
# 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". `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).
# Search: case-insensitive, substring first + fuzzy forgiveness.
# "ste" must find "Steam", "system" finds "System", "fzr" still
# reaches "Firefox". Comma list = match if ANY method hits (rofi 1.7+).
#
# 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";
# History: fuzzy-only + fzf sorter mis-ranked (ghostty over Steam);
# fuzzy-only still failed short lowercase queries on hardware
# 2026-07-10 despite case-sensitive=false. normal covers the
# prefix/substring case; fuzzy stays for typo-tolerant hits.
# case-smart off so all-lowercase never flips to case-sensitive.
matching = "normal,fuzzy";
case-sensitive = false;
case-smart = false;
sort = true;
sorting-method = "normal";
};

View File

@@ -215,17 +215,18 @@ let
# Active keyboard layout (per focused device) — only placed in
# modules-right when showLanguage (see above).
"hyprland/language" = {
format = "<span size='${toString (t.fonts.size + 2)}pt'>󰌌</span> {short}";
# Two spaces after the glyph: the keyboard icon's right bearing
# otherwise kisses the layout code (esp. mono Nerd faces).
format = "<span size='${toString (t.fonts.size + 2)}pt'>󰌌 </span>{short}";
tooltip = false;
};
pulseaudio = {
# Trailing spaces on icons (not only between span and text): Nerd Font
# glyphs often have tight right bearings and otherwise collide with
# the percentage digits.
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span> {volume}%";
# Two trailing spaces on every icon level: high-volume glyphs are the
# widest and still kissed the % with a single pad (hardware report).
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span>{volume}%";
format-muted = "󰝟";
format-icons.default = [ "󰕿 " "󰖀 " "󰕾 " ];
format-icons.default = [ "󰕿 " "󰖀 " "󰕾 " ];
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
# Right-click → the full mixer (per-app volumes) in a floating window
# (item 35). pwvucontrol ships in the template suite; the Hyprland
@@ -251,10 +252,10 @@ let
battery = {
states = { warning = 25; critical = 10; };
# Same icon-bearing fix as pulseaudio (see format-icons note there).
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span> {capacity}%";
format-charging = "<span size='${toString (t.fonts.size + 2)}pt'>󰂄 </span>{capacity}%";
format-icons = [ "󰁺 " "󰁼 " "󰁾 " "󰂀 " "󰁹 " ];
# Same double-pad as pulseaudio (single space still tight on some glyphs).
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span>{capacity}%";
format-charging = "<span size='${toString (t.fonts.size + 2)}pt'>󰂄 </span>{capacity}%";
format-icons = [ "󰁺 " "󰁼 " "󰁾 " "󰂀 " "󰁹 " ];
# Click either the battery or the power-profile icon → the combined
# power menu (profile + charge cap). The granular System rows stay.
on-click = "nomarchy-menu powermgmt";