diff --git a/modules/home/stylix.nix b/modules/home/stylix.nix index d2af8dc..0f537b2 100644 --- a/modules/home/stylix.nix +++ b/modules/home/stylix.nix @@ -70,9 +70,17 @@ in } /* Submenu disclosure arrows need no icon remap: pan-end-symbolic resolves via Papirus-Dark's breeze-dark inheritance. The - "invisible arrow" bug was Waybar's stylesheet leaking - min-height:0 into the tray menus it hosts — fixed by scoping - the `*` block in every waybar.css to window#waybar. */ + "invisible arrow" bug is Waybar's process-wide stylesheet: + its `* { min-height: 0; }` reset also hits the SNI tray menus + Waybar hosts and collapses the arrow node. This file loads at + USER priority (~/.config/gtk-3.0/gtk.css), which outranks any + waybar.css (APPLICATION priority) — restore the arrow's box + here, exactly like the check/radio rule below already does + for the same collapse. */ + menu menuitem arrow, .menu menuitem arrow, .context-menu menuitem arrow { + min-width: 16px; + min-height: 16px; + } check, radio { min-width: 14px; min-height: 14px; @@ -134,6 +142,13 @@ in }; }; + # GTK3 hides menu-item icons by default (gtk-menu-images was flipped + # off upstream in 3.10). Classic tray menus — nm-applet's Wi-Fi list, + # udiskie — are built as image menu items, so without this their icons + # silently vanish. Stylix drives the HM gtk module, so extraConfig + # merges into the same settings.ini it already writes. + gtk.gtk3.extraConfig."gtk-menu-images" = 1; + # GTK4/libadwaita and Qt6 apps decide dark vs light from the XDG # portal's color-scheme (org.freedesktop.appearance), which # xdg-desktop-portal-gtk sources from this gsettings key. Stylix sets diff --git a/modules/home/waybar.nix b/modules/home/waybar.nix index 2547606..f80deb2 100644 --- a/modules/home/waybar.nix +++ b/modules/home/waybar.nix @@ -381,12 +381,13 @@ let /* Palette baked from theme-state.json */ ${colorDefs} - /* Scoped to the bar window: Waybar's stylesheet applies process-wide, - so a bare `*` also hits the SNI tray menus Waybar hosts (nm-applet - & co) — `min-height: 0` there collapses the submenu arrow node to - invisible. Whole-swap theme waybar.css files scope the same way. */ - window#waybar, - window#waybar * { + /* NB: this `*` reset reaches the SNI tray menus Waybar hosts too + (its stylesheet applies process-wide) — the menu-side damage + (collapsed arrows/checks) is undone by USER-priority counter-rules + in stylix.nix, which outrank any waybar.css. Do NOT scope this to + window#waybar: the id's specificity would beat the class rules + below (pills, workspaces) and wreck the bar. */ + * { font-family: "${t.fonts.ui}", "${t.fonts.mono}"; font-size: ${toString t.fonts.size}pt; min-height: 0; @@ -499,10 +500,6 @@ let background: @surface; border: ${toString t.ui.borderSize}px solid alpha(@accent, 0.4); border-radius: ${toString t.ui.rounding}px; - /* Tooltips are separate toplevels, outside the window#waybar scope — - restate the bar font (calendar columns need consistent metrics). */ - font-family: "${t.fonts.ui}", "${t.fonts.mono}"; - font-size: ${toString t.fonts.size}pt; } tooltip label { color: @text; } ''; diff --git a/themes/boreal/waybar.css b/themes/boreal/waybar.css index 4d578e7..56ebdf0 100644 --- a/themes/boreal/waybar.css +++ b/themes/boreal/waybar.css @@ -23,11 +23,11 @@ @define-color warn #E6C384; @define-color bad #E2818A; -/* Scoped to the bar window: Waybar's stylesheet applies process-wide, so a - bare `*` also hits the SNI tray menus Waybar hosts (nm-applet & co) — - `min-height: 0` there collapses the submenu arrow node to invisible. */ -window#waybar, -window#waybar * { +/* NB: this `*` reset reaches the SNI tray menus Waybar hosts too — the + menu-side damage (collapsed arrows) is undone by USER-priority rules in + stylix.nix. Do NOT scope it to window#waybar: the id's specificity would + beat the class rules below (pills) and wreck the bar. */ +* { /* Mono Nerd face for status glyphs (tight right bearings on the proportional Symbols face make icon+percentage collide). */ font-family: "GeistMono Nerd Font", "Symbols Nerd Font Mono"; @@ -169,10 +169,5 @@ tooltip { background: alpha(@base, 0.96); border: 1px solid alpha(@accentAlt, 0.3); border-radius: 10px; - /* Tooltips are separate toplevels, outside the window#waybar scope — - restate the bar font (calendar/calcurse columns need the mono face). */ - font-family: "GeistMono Nerd Font", "Symbols Nerd Font Mono"; - font-size: 13px; - font-weight: 500; } tooltip label { color: @text; } diff --git a/themes/executive-slate/waybar.css b/themes/executive-slate/waybar.css index 7a87848..4e5040f 100644 --- a/themes/executive-slate/waybar.css +++ b/themes/executive-slate/waybar.css @@ -21,11 +21,11 @@ @define-color warn #DBA85A; @define-color bad #D06B71; -/* Scoped to the bar window: Waybar's stylesheet applies process-wide, so a - bare `*` also hits the SNI tray menus Waybar hosts (nm-applet & co) — - `min-height: 0` there collapses the submenu arrow node to invisible. */ -window#waybar, -window#waybar * { +/* NB: this `*` reset reaches the SNI tray menus Waybar hosts too — the + menu-side damage (collapsed arrows) is undone by USER-priority rules in + stylix.nix. Do NOT scope it to window#waybar: the id's specificity would + beat the class rules below and wreck the bar. */ +* { /* Mono Nerd face first for status glyphs: proportional "Symbols Nerd Font" has tight right bearings that make icon+percentage collide. */ font-family: "Symbols Nerd Font Mono", "Inter", "JetBrainsMono Nerd Font", sans-serif; @@ -183,11 +183,6 @@ tooltip { background: @surface; border: 1px solid @overlay; border-radius: 4px; - /* Tooltips are separate toplevels, outside the window#waybar scope — - restate the bar font (calendar/calcurse columns need the mono face). */ - font-family: "Symbols Nerd Font Mono", "Inter", "JetBrainsMono Nerd Font", sans-serif; - font-size: 13px; - font-weight: 500; } tooltip label { color: @text;