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

@@ -8,16 +8,18 @@ the failure as a NOW bug in BACKLOG.md. Machines: the **AMD dev box**
QA machine), the **T14s** (webcam case). QA machine), the **T14s** (webcam case).
## Any machine (dev box is fine) ## Any machine (dev box is fine)
- [ ] **Unfree CLI default (2026-07-10)**after `sys-rebuild` + new - [x] **Unfree CLI default (2026-07-10)**PASS (Bernardo, Latitude).
shell/login: `echo $NIXPKGS_ALLOW_UNFREE``1`; `nix-shell -p - [ ] **Waybar icon+percentage spacing (2026-07-10, retest)** — after
vscode --run 'code --version'` (or another unfree pkg) succeeds `home-update`: executive-slate (and boreal/summer) — high-volume
without a manual export; `cat ~/.config/nixpkgs/config.nix` has glyph + `%`, keyboard layout glyph + code, battery glyph + `%`
`allowUnfree = true`. (Flake-pure `nix shell nixpkgs#…` still may each have a clear gap (double-pad + mono face). Unified clock is
need `--impure` — that is expected.) one module (`HH:MM · Day DD Mon`). First pass: volume-high and
- [ ] **Waybar icon+percentage spacing (2026-07-10)** — switch to keyboard still tight → pad doubled.
executive-slate (and spot-check boreal/summer): battery glyph and - [x] **Calendar on unified clock (2026-07-10)** — PASS (Bernardo).
capacity% do not collide; volume glyph and volume% do not collide. - [ ] **Rofi case-insensitive search (2026-07-10)** — SUPER+Space: type
Unified clock reads as one module (`HH:MM · Day DD Mon`). `ste` → Steam listed (not only `Ste`/`STE`); type `sys` → System
menu row if testing nomarchy-menu. Config: matching normal,fuzzy +
case-sensitive false + case-smart false.
- [ ] **Charge-limit live apply (2026-07-10)** — on a laptop with - [ ] **Charge-limit live apply (2026-07-10)** — on a laptop with
`charge_control_end_threshold`: System Battery limit → 80%; `charge_control_end_threshold`: System Battery limit → 80%;
confirm `cat …/charge_control_end_threshold` is 80 without rebuild; confirm `cat …/charge_control_end_threshold` is 80 without rebuild;

View File

@@ -1159,19 +1159,18 @@ in
# reserving `lines` (8) — so a 6-entry menu doesn't leave empty space, # reserving `lines` (8) — so a 6-entry menu doesn't leave empty space,
# 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, substring first + fuzzy forgiveness.
# "system" finds "System" and "fzr" finds "Firefox". `normal` sorting # "ste" must find "Steam", "system" finds "System", "fzr" still
# ranks by match distance so the closest match lands on top (the # reaches "Firefox". Comma list = match if ANY method hits (rofi 1.7+).
# 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 — # History: fuzzy-only + fzf sorter mis-ranked (ghostty over Steam);
# typing "steam" left ghostty selected on top instead of Steam # fuzzy-only still failed short lowercase queries on hardware
# (confirmed on hardware: `-sorting-method normal` and `-matching # 2026-07-10 despite case-sensitive=false. normal covers the
# normal` both fixed it, `-no-sort` did not). Keep fuzzy matching for # prefix/substring case; fuzzy stays for typo-tolerant hits.
# forgiveness; use the normal sorter to rank it (item 31). # case-smart off so all-lowercase never flips to case-sensitive.
matching = "fuzzy"; matching = "normal,fuzzy";
case-sensitive = false; case-sensitive = false;
case-smart = false;
sort = true; sort = true;
sorting-method = "normal"; sorting-method = "normal";
}; };

View File

@@ -215,15 +215,16 @@ let
# Active keyboard layout (per focused device) — only placed in # Active keyboard layout (per focused device) — only placed in
# modules-right when showLanguage (see above). # modules-right when showLanguage (see above).
"hyprland/language" = { "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; tooltip = false;
}; };
pulseaudio = { pulseaudio = {
# Trailing spaces on icons (not only between span and text): Nerd Font # Two trailing spaces on every icon level: high-volume glyphs are the
# glyphs often have tight right bearings and otherwise collide with # widest and still kissed the % with a single pad (hardware report).
# the percentage digits. format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span>{volume}%";
format = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span> {volume}%";
format-muted = "󰝟"; format-muted = "󰝟";
format-icons.default = [ "󰕿 " "󰖀 " "󰕾 " ]; format-icons.default = [ "󰕿 " "󰖀 " "󰕾 " ];
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
@@ -251,8 +252,8 @@ let
battery = { battery = {
states = { warning = 25; critical = 10; }; states = { warning = 25; critical = 10; };
# Same icon-bearing fix as pulseaudio (see format-icons note there). # 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 = "<span size='${toString (t.fonts.size + 2)}pt'>{icon}</span>{capacity}%";
format-charging = "<span size='${toString (t.fonts.size + 2)}pt'>󰂄 </span>{capacity}%"; format-charging = "<span size='${toString (t.fonts.size + 2)}pt'>󰂄 </span>{capacity}%";
format-icons = [ "󰁺 " "󰁼 " "󰁾 " "󰂀 " "󰁹 " ]; format-icons = [ "󰁺 " "󰁼 " "󰁾 " "󰂀 " "󰁹 " ];
# Click either the battery or the power-profile icon → the combined # Click either the battery or the power-profile icon → the combined

View File

@@ -85,7 +85,7 @@
"on-click": "nomarchy-nightlight toggle" "on-click": "nomarchy-nightlight toggle"
}, },
"hyprland/language": { "hyprland/language": {
"format": "<span size='13pt'>󰌌</span> {short}", "format": "<span size='13pt'>󰌌 </span>{short}",
"tooltip": false "tooltip": false
}, },
"custom/vpn": { "custom/vpn": {

View File

@@ -70,7 +70,7 @@
"on-click": "nomarchy-nightlight toggle" "on-click": "nomarchy-nightlight toggle"
}, },
"hyprland/language": { "hyprland/language": {
"format": "<span size='13pt'>󰌌</span> {short}", "format": "<span size='13pt'>󰌌 </span>{short}",
"tooltip": false "tooltip": false
}, },
"custom/updates": { "custom/updates": {

View File

@@ -8,11 +8,28 @@
"position": "top", "position": "top",
"spacing": 15, "spacing": 15,
"reload_style_on_change": true, "reload_style_on_change": true,
"modules-left": [
"modules-left": ["custom/launcher", "clock"], "custom/launcher",
"modules-center": ["hyprland/workspaces"], "clock"
"modules-right": ["custom/recording", "idle_inhibitor", "pulseaudio", "custom/powerprofile", "custom/nightlight", "hyprland/language", "custom/updates", "battery", "tray", "custom/vpn", "custom/doctor", "custom/notification", "custom/powermenu"], ],
"modules-center": [
"hyprland/workspaces"
],
"modules-right": [
"custom/recording",
"idle_inhibitor",
"pulseaudio",
"custom/powerprofile",
"custom/nightlight",
"hyprland/language",
"custom/updates",
"battery",
"tray",
"custom/vpn",
"custom/doctor",
"custom/notification",
"custom/powermenu"
],
"hyprland/workspaces": { "hyprland/workspaces": {
"disable-scroll": true, "disable-scroll": true,
"all-outputs": true, "all-outputs": true,
@@ -20,14 +37,12 @@
"on-scroll-up": "hyprctl dispatch workspace r+1", "on-scroll-up": "hyprctl dispatch workspace r+1",
"on-scroll-down": "hyprctl dispatch workspace r-1" "on-scroll-down": "hyprctl dispatch workspace r-1"
}, },
"custom/launcher": { "custom/launcher": {
"interval": "once", "interval": "once",
"format": "\uf000", "format": "",
"on-click": "nomarchy-menu", "on-click": "nomarchy-menu",
"tooltip-format": "Nomarchy menu" "tooltip-format": "Nomarchy menu"
}, },
"idle_inhibitor": { "idle_inhibitor": {
"format": "{icon}", "format": "{icon}",
"format-icons": { "format-icons": {
@@ -35,7 +50,6 @@
"deactivated": " 󰾪 " "deactivated": " 󰾪 "
} }
}, },
"pulseaudio": { "pulseaudio": {
"format": "<span size='13pt'>{icon}</span>{volume}%", "format": "<span size='13pt'>{icon}</span>{volume}%",
"format-bluetooth": "<span size='13pt'>{icon}  </span>{volume}%", "format-bluetooth": "<span size='13pt'>{icon}  </span>{volume}%",
@@ -48,42 +62,52 @@
"phone": " ", "phone": " ",
"portable": " ", "portable": " ",
"car": " ", "car": " ",
"default": [" ", " ", " "] "default": [
" ",
" ",
" "
]
}, },
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pwvucontrol", "on-click-right": "pwvucontrol",
"tooltip-format": "Playing at {volume}%" "tooltip-format": "Playing at {volume}%"
}, },
"battery": { "battery": {
"interval": 60, "interval": 60,
"states": { "warning": 25, "critical": 10 }, "states": {
"warning": 25,
"critical": 10
},
"max-length": 14, "max-length": 14,
"format": "<span size='13pt'>{icon}</span>{capacity}%", "format": "<span size='13pt'>{icon}</span>{capacity}%",
"format-charging": "<span size='13pt'> </span>{capacity}%", "format-charging": "<span size='13pt'> </span>{capacity}%",
"format-plugged": "<span size='13pt'> </span>{capacity}%", "format-plugged": "<span size='13pt'> </span>{capacity}%",
"format-full": " 100%", "format-full": " 100%",
"format-icons": [" ", " ", " ", " ", " "], "format-icons": [
" ",
" ",
" ",
" ",
" "
],
"on-click": "nomarchy-menu powermgmt", "on-click": "nomarchy-menu powermgmt",
"tooltip-format": "Battery status" "tooltip-format": "Battery status"
}, },
"clock": { "clock": {
"format": " {:%H:%M · %a %d %b}", "format": " {:%H:%M · %a %d %b}",
"on-click": "nomarchy-calendar", "on-click": "nomarchy-calendar",
"tooltip": true, "tooltip": true,
"tooltip-format": "{:%A %d %B %Y}\n{:%Z (UTC%z)}\n<tt><small>{calendar}</small></tt>" "tooltip-format": "{:%A %d %B %Y}\n{:%Z (UTC%z)}\n<tt><small>{calendar}</small></tt>"
}, },
"tray": {
"tray": { "spacing": 8 }, "spacing": 8
},
"custom/powerprofile": { "custom/powerprofile": {
"return-type": "json", "return-type": "json",
"interval": 5, "interval": 5,
"exec": "nomarchy-powerprofile-status", "exec": "nomarchy-powerprofile-status",
"on-click": "nomarchy-menu powermgmt" "on-click": "nomarchy-menu powermgmt"
}, },
"custom/recording": { "custom/recording": {
"return-type": "json", "return-type": "json",
"interval": 10, "interval": 10,
@@ -91,7 +115,6 @@
"exec": "nomarchy-record status", "exec": "nomarchy-record status",
"on-click": "nomarchy-record stop" "on-click": "nomarchy-record stop"
}, },
"custom/doctor": { "custom/doctor": {
"return-type": "json", "return-type": "json",
"format": "{}", "format": "{}",
@@ -100,26 +123,22 @@
"exec": "nomarchy-doctor-status", "exec": "nomarchy-doctor-status",
"on-click": "nomarchy-menu doctor" "on-click": "nomarchy-menu doctor"
}, },
"custom/vpn": { "custom/vpn": {
"return-type": "json", "return-type": "json",
"interval": 5, "interval": 5,
"exec": "nomarchy-vpn-status", "exec": "nomarchy-vpn-status",
"on-click": "nomarchy-vpn" "on-click": "nomarchy-vpn"
}, },
"hyprland/language": { "hyprland/language": {
"format": "<span size='13pt'>󰌌</span> {short}", "format": "<span size='13pt'>󰌌 </span>{short}",
"tooltip": false "tooltip": false
}, },
"custom/nightlight": { "custom/nightlight": {
"return-type": "json", "return-type": "json",
"interval": 3, "interval": 3,
"exec": "nomarchy-nightlight status", "exec": "nomarchy-nightlight status",
"on-click": "nomarchy-nightlight toggle" "on-click": "nomarchy-nightlight toggle"
}, },
"custom/updates": { "custom/updates": {
"return-type": "json", "return-type": "json",
"interval": 1800, "interval": 1800,
@@ -127,7 +146,6 @@
"exec": "nomarchy-updates status", "exec": "nomarchy-updates status",
"on-click": "sh -c '$TERMINAL -e nomarchy-updates upgrade'" "on-click": "sh -c '$TERMINAL -e nomarchy-updates upgrade'"
}, },
"custom/notification": { "custom/notification": {
"format": "{icon}", "format": "{icon}",
"return-type": "json", "return-type": "json",
@@ -148,7 +166,6 @@
"dnd-inhibited-notification": "" "dnd-inhibited-notification": ""
} }
}, },
"custom/powermenu": { "custom/powermenu": {
"format": "", "format": "",
"on-click": "nomarchy-menu power", "on-click": "nomarchy-menu power",

View File

@@ -8,11 +8,28 @@
"position": "top", "position": "top",
"spacing": 15, "spacing": 15,
"reload_style_on_change": true, "reload_style_on_change": true,
"modules-left": [
"modules-left": ["custom/nomarchy", "clock"], "custom/nomarchy",
"modules-center": ["hyprland/workspaces"], "clock"
"modules-right": ["custom/recording", "idle_inhibitor", "pulseaudio", "custom/powerprofile", "custom/nightlight", "hyprland/language", "custom/updates", "battery", "tray", "custom/vpn", "custom/doctor", "custom/notification", "custom/powermenu"], ],
"modules-center": [
"hyprland/workspaces"
],
"modules-right": [
"custom/recording",
"idle_inhibitor",
"pulseaudio",
"custom/powerprofile",
"custom/nightlight",
"hyprland/language",
"custom/updates",
"battery",
"tray",
"custom/vpn",
"custom/doctor",
"custom/notification",
"custom/powermenu"
],
"hyprland/workspaces": { "hyprland/workspaces": {
"disable-scroll": true, "disable-scroll": true,
"all-outputs": true, "all-outputs": true,
@@ -20,14 +37,12 @@
"on-scroll-up": "hyprctl dispatch workspace r+1", "on-scroll-up": "hyprctl dispatch workspace r+1",
"on-scroll-down": "hyprctl dispatch workspace r-1" "on-scroll-down": "hyprctl dispatch workspace r-1"
}, },
"custom/nomarchy": { "custom/nomarchy": {
"interval": "once", "interval": "once",
"format": "\uf000", "format": "",
"on-click": "nomarchy-menu", "on-click": "nomarchy-menu",
"tooltip-format": "Nomarchy menu" "tooltip-format": "Nomarchy menu"
}, },
"idle_inhibitor": { "idle_inhibitor": {
"format": "{icon}", "format": "{icon}",
"format-icons": { "format-icons": {
@@ -35,7 +50,6 @@
"deactivated": " 󰾪 " "deactivated": " 󰾪 "
} }
}, },
"pulseaudio": { "pulseaudio": {
"scroll-step": 5, "scroll-step": 5,
"format": "<span size='13pt'>{icon}</span>{volume}%", "format": "<span size='13pt'>{icon}</span>{volume}%",
@@ -49,40 +63,50 @@
"phone": " ", "phone": " ",
"portable": " ", "portable": " ",
"car": " ", "car": " ",
"default": [" ", " ", " "] "default": [
" ",
" ",
" "
]
}, },
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pwvucontrol", "on-click-right": "pwvucontrol",
"tooltip-format": "{desc} | {volume}%" "tooltip-format": "{desc} | {volume}%"
}, },
"battery": { "battery": {
"interval": 30, "interval": 30,
"states": { "warning": 25, "critical": 10 }, "states": {
"warning": 25,
"critical": 10
},
"format": "<span size='13pt'>{icon}</span>{capacity}%", "format": "<span size='13pt'>{icon}</span>{capacity}%",
"format-charging": "<span size='13pt'> </span>{capacity}%", "format-charging": "<span size='13pt'> </span>{capacity}%",
"format-plugged": "<span size='13pt'> </span>{capacity}%", "format-plugged": "<span size='13pt'> </span>{capacity}%",
"format-icons": [" ", " ", " ", " ", " "], "format-icons": [
" ",
" ",
" ",
" ",
" "
],
"on-click": "nomarchy-menu powermgmt", "on-click": "nomarchy-menu powermgmt",
"tooltip-format": "Battery status" "tooltip-format": "Battery status"
}, },
"clock": { "clock": {
"format": " {:%H:%M · %a %d %b}", "format": " {:%H:%M · %a %d %b}",
"on-click": "nomarchy-calendar", "on-click": "nomarchy-calendar",
"tooltip": true, "tooltip": true,
"tooltip-format": "{:%A %d %B %Y}\n{:%Z (UTC%z)}\n<tt><small>{calendar}</small></tt>" "tooltip-format": "{:%A %d %B %Y}\n{:%Z (UTC%z)}\n<tt><small>{calendar}</small></tt>"
}, },
"tray": {
"tray": { "spacing": 8 }, "spacing": 8
},
"custom/powerprofile": { "custom/powerprofile": {
"return-type": "json", "return-type": "json",
"interval": 5, "interval": 5,
"exec": "nomarchy-powerprofile-status", "exec": "nomarchy-powerprofile-status",
"on-click": "nomarchy-menu powermgmt" "on-click": "nomarchy-menu powermgmt"
}, },
"custom/recording": { "custom/recording": {
"return-type": "json", "return-type": "json",
"interval": 10, "interval": 10,
@@ -90,7 +114,6 @@
"exec": "nomarchy-record status", "exec": "nomarchy-record status",
"on-click": "nomarchy-record stop" "on-click": "nomarchy-record stop"
}, },
"custom/doctor": { "custom/doctor": {
"return-type": "json", "return-type": "json",
"format": "{}", "format": "{}",
@@ -99,26 +122,22 @@
"exec": "nomarchy-doctor-status", "exec": "nomarchy-doctor-status",
"on-click": "nomarchy-menu doctor" "on-click": "nomarchy-menu doctor"
}, },
"custom/vpn": { "custom/vpn": {
"return-type": "json", "return-type": "json",
"interval": 5, "interval": 5,
"exec": "nomarchy-vpn-status", "exec": "nomarchy-vpn-status",
"on-click": "nomarchy-vpn" "on-click": "nomarchy-vpn"
}, },
"hyprland/language": { "hyprland/language": {
"format": "<span size='13pt'>󰌌</span> {short}", "format": "<span size='13pt'>󰌌 </span>{short}",
"tooltip": false "tooltip": false
}, },
"custom/nightlight": { "custom/nightlight": {
"return-type": "json", "return-type": "json",
"interval": 3, "interval": 3,
"exec": "nomarchy-nightlight status", "exec": "nomarchy-nightlight status",
"on-click": "nomarchy-nightlight toggle" "on-click": "nomarchy-nightlight toggle"
}, },
"custom/updates": { "custom/updates": {
"return-type": "json", "return-type": "json",
"interval": 1800, "interval": 1800,
@@ -126,7 +145,6 @@
"exec": "nomarchy-updates status", "exec": "nomarchy-updates status",
"on-click": "sh -c '$TERMINAL -e nomarchy-updates upgrade'" "on-click": "sh -c '$TERMINAL -e nomarchy-updates upgrade'"
}, },
"custom/notification": { "custom/notification": {
"format": "{icon}", "format": "{icon}",
"return-type": "json", "return-type": "json",
@@ -147,7 +165,6 @@
"dnd-inhibited-notification": "" "dnd-inhibited-notification": ""
} }
}, },
"custom/powermenu": { "custom/powermenu": {
"format": "", "format": "",
"on-click": "nomarchy-menu power", "on-click": "nomarchy-menu power",