From 4f01824832da8455a40446dc2ee949545f470ec5 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Fri, 11 Sep 2026 16:30:31 +0200 Subject: refactor(theme): read the palette from unified-desktop-theme Both components had their own copy of the Macchiato colours, and the second copy appeared the moment there was a second component. Editing the palette meant editing it in as many places as there were shells, and they would have drifted. They now read ~/.cache/wal/udt-palette.qml, which udt-accent generates from unified-desktop-theme's palette.rasi. The file is watched, so a palette change reaches a running shell in place, the same way the accent already did. What is left in Theme.qml is a fallback, used before the file has been read and on a machine where unified-desktop-theme is not installed, which is what keeps each directory runnable on its own. The file is parsed rather than imported: a generated QML singleton cannot be imported without a qmldir beside it, and the wal cache has no reason to carry one. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01G7NRsGyF9jGfPYS4zPqpN7 --- volume-osd/Theme.qml | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'volume-osd/Theme.qml') diff --git a/volume-osd/Theme.qml b/volume-osd/Theme.qml index 4b9af5c..21e6c1a 100644 --- a/volume-osd/Theme.qml +++ b/volume-osd/Theme.qml @@ -15,30 +15,44 @@ import Quickshell import Quickshell.Io import QtQuick +// The palette comes from unified-desktop-theme: udt-accent writes +// ~/.cache/wal/udt-palette.qml on every wallpaper change, holding the +// Macchiato colours from its palette.rasi plus the accent snapped from the +// wallpaper. Watching that file is what makes a theme edit show up here. +// +// The defaults below are only what renders before the file is read, or on a +// machine where unified-desktop-theme is not installed. Singleton { id: root - // Catppuccin Macchiato. Fixed, same base as unified-desktop-theme. - readonly property color base: "#24273a" - readonly property color surface: "#363a4f" - readonly property color text: "#cad3f5" - readonly property color subtext: "#a5adcb" - readonly property color red: "#ed8796" - - // Tracks the wallpaper, like rofi and dunst do. Lavender until read. + property color base: "#24273a" + property color surface: "#363a4f" + property color text: "#cad3f5" + property color subtext: "#a5adcb" + property color red: "#ed8796" property color accent: "#b7bdf8" readonly property string fontFamily: "Noto Sans" readonly property int fontSize: 16 - // udt-accent writes one line: `* { accent: #rrggbbaa; }` + // Parsed rather than imported: a generated file cannot be a QML import + // without a qmldir next to it, and the cache directory has no reason to + // carry one. The format is fixed and machine-written, so a regex is enough. FileView { - path: `${Quickshell.env("HOME")}/.cache/wal/udt-accent.rasi` + path: `${Quickshell.env("HOME")}/.cache/wal/udt-palette.qml` watchChanges: true onFileChanged: reload() onLoaded: { - const m = text().match(/accent:\s*(#[0-9a-fA-F]{6})/); - if (m) root.accent = m[1]; + const pick = key => { + const m = text().match(new RegExp(`property color ${key}: "(#[0-9a-fA-F]{6})"`)); + return m ? m[1] : null; + }; + root.base = pick("base") ?? root.base; + root.surface = pick("surface0") ?? root.surface; + root.text = pick("text") ?? root.text; + root.subtext = pick("subtext0") ?? root.subtext; + root.red = pick("red") ?? root.red; + root.accent = pick("accent") ?? root.accent; } } } -- cgit v1.2.3