quickshell: tint YAMIS app icons to the wallpaper palette

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017EHJfY5Q72punsWX38nY1w
This commit is contained in:
rope 2026-08-21 14:40:02 +01:00
parent cb7b576a71
commit 1bea54f30c
2 changed files with 81 additions and 23 deletions

View file

@ -304,11 +304,19 @@ let
# so the "build" is a copy into the directory name the spec resolves by.
#
# FollowsColorScheme=true is a KDE key: only Plasma rewrites the embedded
# <style id="current-color-scheme"> block. Anywhere else — quickshell and
# GTK here — the icons render at that block's literal fallback, #d8dee9,
# a cool light grey that reads on every wallpaper's dark bar. Tinting per
# wallpaper would mean a sed over all 6101 files per theme, so the app
# icons deliberately stay one fixed colour while the folders track.
# <style id="current-color-scheme"> block. Anywhere else the icons render
# at that block's literal fallback, #d8dee9, and never track the wallpaper.
#
# Rewriting that string on disk would mean a copy of all 6101 files per
# wallpaper — 75MB across the set, and a 15MB rm -rf + cp inside
# theme-apply on every switch, which is the one path that has to stay
# quick. quickshell tints these at draw time instead (ColorOverlay against
# base05, the same trick the tray uses), so the launcher follows the
# palette live and nothing is copied. monoIcons below hands it the prefix
# that identifies a YAMIS icon.
#
# Consequence: GTK apps still see #d8dee9. That is fine on these dark
# themes, and it is the only consumer that reads these files directly.
yamisIcons = pkgs.runCommand "yamis-icon-theme" { } ''
mkdir -p $out/share/icons
cp -r ${pkgs.fetchgit {
@ -569,6 +577,10 @@ in
};
defaultWall = lib.mkOption { internal = true; type = lib.types.str; };
apply = lib.mkOption { internal = true; type = lib.types.path; };
# The installed YAMIS tree. quickshell needs the prefix to tell a
# monochrome icon from a Papirus fallback at draw time — see the tint
# note on yamisIcons above.
monoIcons = lib.mkOption { internal = true; type = lib.types.str; };
};
config = lib.mkMerge [{
@ -603,6 +615,7 @@ in
fred.theming = {
inherit walls defaultWall;
apply = themeApply;
monoIcons = "${yamisIcons}/share/icons/yet-another-monochrome-icon-set";
};
# Papirus-Fred inherits this by name, so it has to be on the icon search