aboutsummaryrefslogtreecommitdiffstats
path: root/bin/udt-palette
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-11 18:51:17 +0200
committerDanilo M. <danix@danix.xyz>2026-09-11 18:51:17 +0200
commitfd0a0e63d78138b485c2440781f6c210dd3df8a2 (patch)
tree710858fdb57e28fbddc926ddd65927f8aa592d83 /bin/udt-palette
parentee39bd927e056c2dae9d61230a95a05715b3a8c6 (diff)
downloadunified-desktop-theme-fd0a0e63d78138b485c2440781f6c210dd3df8a2.tar.gz
unified-desktop-theme-fd0a0e63d78138b485c2440781f6c210dd3df8a2.zip
feat(palette): generate the Kvantum theme so Qt apps follow the scheme
Qt and GTK were the one part of the desktop the palette never reached: Kvantum was pinned to a hand-installed catppuccin-macchiato-lavender directory, so pcmanfm-qt and every other Qt app stayed Macchiato no matter which scheme was selected. A Kvantum theme is a .kvconfig of colours and a .svg of widget artwork with colours baked into the paths, which looked like it needed redrawing. It did not: the SVG carries only 27 distinct colours, 12 of them palette colours and the rest neutral greys that are shading, not theme colour. Both files are now templates with the 12 as placeholders, derived from the theme this desktop was already running. Installs to ~/.config/Kvantum/udt/ under one fixed name for every scheme, so a switch needs no change to kvantum.kvconfig and leaves no stale theme behind. Adds accent_dim and accent_bright roles for Kvantum's hover and pressed states. Verified: no placeholders survive generation, the SVG still parses as XML, and pcmanfm-qt picks up the new colours on restart. Qt reads a theme at startup only, so running apps need restarting; AGENTS.md says so. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe
Diffstat (limited to 'bin/udt-palette')
-rwxr-xr-xbin/udt-palette24
1 files changed, 24 insertions, 0 deletions
diff --git a/bin/udt-palette b/bin/udt-palette
index 18dc0b1..edde7f3 100755
--- a/bin/udt-palette
+++ b/bin/udt-palette
@@ -223,6 +223,28 @@ def gen_kitty(res, scheme, palette):
return "\n".join(lines) + "\n"
+KVANTUM_ROLES = ["bg", "bg_alt", "surface", "surface_alt", "surface_high",
+ "fg", "fg_dim", "fg_faint", "mid_high", "accent",
+ "accent_dim", "accent_bright", "highlight", "critical"]
+
+
+def gen_kvantum(res, scheme, palette, template):
+ """Kvantum: substitute the palette into the widget theme.
+
+ A Kvantum theme is a .kvconfig of colours and a .svg of widget artwork with
+ colours baked into the paths. Only the palette colours are placeholders;
+ the neutral greys in the SVG are shading and shadow, not theme colour, so
+ they are left exactly as upstream drew them.
+
+ Derived from the catppuccin-macchiato-lavender theme, which is what this
+ desktop was already running by hand.
+ """
+ out = template
+ for role in KVANTUM_ROLES:
+ out = out.replace(f"@{role.upper()}@", hex6(res[role]))
+ return out
+
+
def gen_homepage(res, scheme, palette):
"""gethomepage: a custom.css overriding its ten-step colour ramp.
@@ -414,6 +436,8 @@ TARGETS = [
("templates/conky.conf", gen_conky, "templates/conky.conf.in"),
("bin/udt_colors.py", gen_accent_py, None),
("templates/homepage/custom.css", gen_homepage, None),
+ ("templates/kvantum/theme.kvconfig", gen_kvantum, "templates/kvantum/theme.kvconfig.in"),
+ ("templates/kvantum/theme.svg", gen_kvantum, "templates/kvantum/theme.svg.in"),
]