From 7b55910a786c7652ac80a576399ebd9f81a8ac72 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 11 Sep 2026 17:20:50 +0200 Subject: feat(palette): generate every themed config from one scheme Colours were written down five times: rofi's palette.rasi, the waybar theme, the kitty theme, the conky and dunst templates, and a MACCHIATO dict inside udt-accent. Changing scheme meant finding all five, and they had already drifted: the active waybar theme was Macchiato while theme.css next to it was Mocha, and nothing imported the latter. Now a scheme is two files. palette/.conf holds the colours under the scheme's own names, and palette/roles-.conf says what each is for. palette/roles.conf is one `scheme =` line selecting the pair. bin/udt-palette renders that into each consumer's syntax and install.sh runs it first. The role map is per-scheme rather than shared because the palettes are genuinely different shapes: Nord has no `base`, Dracula no `surface0`, and forcing Catppuccin's names onto them would have meant either renaming their colours or inventing values. A role names a palette colour with two optional modifiers, `name/75` for alpha and `name*50` for brightness. The second exists because GTK's shade() has no palette name to point at. Ships macchiato, tokyo-night, nord and dracula. --selftest resolves every role in every scheme and asserts they define the same set, so a scheme that cannot satisfy a consumer fails at install rather than when someone switches to it. Verified against the live configs: all 46 waybar colours resolve identically to the previously active theme including its alpha() and shade() derivations, the kitty theme is colour-for-colour identical, and the rofi palette has the same 26 values. Generated files are gitignored; switching scheme and switching back reproduces the originals. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_015gbjA2bmswN8jyPDKzrvqe --- palette/roles-macchiato.conf | 115 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 palette/roles-macchiato.conf (limited to 'palette/roles-macchiato.conf') diff --git a/palette/roles-macchiato.conf b/palette/roles-macchiato.conf new file mode 100644 index 0000000..0a34f03 --- /dev/null +++ b/palette/roles-macchiato.conf @@ -0,0 +1,115 @@ +# Role assignments for Catppuccin Macchiato. +# Copyright (C) 2026 Danilo M. +# Licensed under the GNU General Public License v2 only. +# +# Every role in here names a colour from palette/macchiato.conf. See +# palette/roles.conf for what the roles mean and how to select a scheme. + +[ui] +# Surfaces, darkest to lightest. Most consumers only need the first three. +bg = base +bg_alt = mantle +bg_deep = crust +surface = surface0 +surface_alt = surface1 +border = surface1 + +# Text, brightest to dimmest. +fg = text +fg_dim = subtext0 +fg_faint = overlay0 + +# The one colour that tracks the wallpaper. udt-accent overrides this per +# wallpaper for rofi, dunst, Hyprland and Firefox; the value here is the +# fallback, and what the consumers that do not track it sit on permanently. +accent = lavender + +[state] +# Notification urgency, waybar module states, conky warnings. +warning = yellow +critical = red +success = green +info = teal + +[waybar] +# Bar chrome. These were already role names in ~/.config/waybar/theme.css. +main_br = subtext0 +main_bg = crust +main_fg = text +hover_bg = base +hover_fg = text/75 +outline = crust*50 + +# Per-module backgrounds. Alternating depths, not semantic: the bar reads as +# stripes, so neighbouring modules differ. +workspaces = mantle +temperature = mantle +memory = base +cpu = surface0 +time = surface0 +date = base +tray = mantle +volume = mantle +backlight = base +battery = surface0 +charging = green + +[conky] +# conky indexes colours by number. The names say what each number draws. +heading = lavender +label = subtext0 +rule = surface1 +value = teal +highlight = mauve +ok = green +body = text +body_outline = surface1 +body_shade = mantle + +[terminal] +# The 16 ANSI slots, plus kitty's own chrome. normal and bright are separate +# because a scheme may offer distinct pairs; Catppuccin and Dracula do not, so +# these name the same colours twice. +cursor = rosewater +selection_bg = rosewater +selection_fg = base +url = rosewater +tab_active_bg = mauve +tab_active_fg = crust +tab_inactive_bg = mantle +tab_inactive_fg = text +border_active = lavender +border_inactive = overlay0 + +black = surface1 +red = red +green = green +yellow = yellow +blue = blue +magenta = pink +cyan = teal +white = subtext1 + +bright_black = surface2 +bright_red = red +bright_green = green +bright_yellow = yellow +bright_blue = blue +bright_magenta = pink +bright_cyan = teal +bright_white = subtext0 + +# kitty extras: marks, scrollbar, bell, tab bar ground. +mark1 = lavender +mark2 = mauve +mark3 = sapphire +scrollbar_handle = overlay2 +scrollbar_track = surface1 +bell_border = yellow +tab_bar_bg = crust + +[accents] +# The hues udt-accent snaps a wallpaper to. Near-neutral tints (rosewater, +# flamingo) and near-duplicate hues (maroon, sapphire) are left out so the +# snapping has one candidate per region of the wheel. +snap = pink mauve lavender red peach yellow green teal sky blue -- cgit v1.2.3