From 4ac7122ac2b13d4a01ee3e493f3ce1aa7c4680db Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 11 Jul 2026 20:54:28 +0100 Subject: [PATCH] fix(gtk): bypass fragile SVG recoloring with static palette assets GTK's -gtk-recolor proved too fragile across different contexts, failing to substitute the foreground color even when the SVG path used #000000. Instead, we now generate two statically colored SVGs (normal + hover) directly from the Nix palette hex codes, bypassing GTK's SVG recoloring engine entirely. --- modules/home/stylix.nix | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/modules/home/stylix.nix b/modules/home/stylix.nix index d70043c..3254ff0 100644 --- a/modules/home/stylix.nix +++ b/modules/home/stylix.nix @@ -43,9 +43,14 @@ let # Connections" opens a submenu). Same trick adw-gtk3 uses for its # check marks: a bundled asset via -gtk-recolor(url(…)), immune to # icon-pack coverage. Shape traced from Adwaita's pan-end-symbolic. - panEndSvg = pkgs.writeText "nomarchy-pan-end-symbolic.svg" '' + panEndSvg = pkgs.writeText "nomarchy-pan-end.svg" '' - + + + ''; + panEndHoverSvg = pkgs.writeText "nomarchy-pan-end-hover.svg" '' + + ''; in @@ -80,19 +85,36 @@ in menu menuitem:disabled, .menu menuitem:disabled { color: #${base16.base03}; } - /* Submenu disclosure arrows — bundled asset, NOT an icon-theme + /* Submenu disclosure arrows — bundled assets, NOT an icon-theme lookup: pan-end-symbolic is missing from Papirus and its - broken inheritance chain, so -gtk-icontheme() drew nothing. */ - menu menuitem arrow, .menu menuitem arrow, - menu menuitem:hover arrow, menu menuitem:selected arrow { + broken inheritance chain, so -gtk-icontheme() drew nothing. + Hard-tinted directly from the palette to bypass GTK's fragile + -gtk-recolor behavior. */ + menu menuitem arrow:dir(ltr), .menu menuitem arrow:dir(ltr), .context-menu menuitem arrow:dir(ltr), + menu menuitem arrow:dir(rtl), .menu menuitem arrow:dir(rtl), .context-menu menuitem arrow:dir(rtl), + menu menuitem:hover arrow:dir(ltr), menu menuitem:selected arrow:dir(ltr), + .menu menuitem:hover arrow:dir(ltr), .menu menuitem:selected arrow:dir(ltr), + .context-menu menuitem:hover arrow:dir(ltr), .context-menu menuitem:selected arrow:dir(ltr), + menu menuitem:hover arrow:dir(rtl), menu menuitem:selected arrow:dir(rtl), + .menu menuitem:hover arrow:dir(rtl), .menu menuitem:selected arrow:dir(rtl), + .context-menu menuitem:hover arrow:dir(rtl), .context-menu menuitem:selected arrow:dir(rtl) { min-width: 16px; min-height: 16px; margin-left: 8px; color: inherit; - -gtk-icon-source: -gtk-recolor(url("${panEndSvg}")); } - menu menuitem:hover arrow, menu menuitem:selected arrow { + menu menuitem arrow:dir(ltr), .menu menuitem arrow:dir(ltr), .context-menu menuitem arrow:dir(ltr), + menu menuitem arrow:dir(rtl), .menu menuitem arrow:dir(rtl), .context-menu menuitem arrow:dir(rtl) { + -gtk-icon-source: url("file://${panEndSvg}"); + } + menu menuitem:hover arrow:dir(ltr), menu menuitem:selected arrow:dir(ltr), + .menu menuitem:hover arrow:dir(ltr), .menu menuitem:selected arrow:dir(ltr), + .context-menu menuitem:hover arrow:dir(ltr), .context-menu menuitem:selected arrow:dir(ltr), + menu menuitem:hover arrow:dir(rtl), menu menuitem:selected arrow:dir(rtl), + .menu menuitem:hover arrow:dir(rtl), .menu menuitem:selected arrow:dir(rtl), + .context-menu menuitem:hover arrow:dir(rtl), .context-menu menuitem:selected arrow:dir(rtl) { color: #${base16.base00}; + -gtk-icon-source: url("file://${panEndHoverSvg}"); } check, radio { min-width: 14px;