// Copyright (C) 2026 Danilo M. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as // published by the Free Software Foundation. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. pragma Singleton 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 property color base: "#24273a" property color surface: "#363a4f" property color text: "#cad3f5" property color subtext: "#a5adcb" property color red: "#ed8796" property color green: "#a6da95" property color yellow: "#eed49f" property color overlay: "#6e738d" property color accent: "#b7bdf8" readonly property string fontFamily: "Noto Sans" readonly property int fontSize: 16 // 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-palette.qml` watchChanges: true onFileChanged: reload() onLoaded: { 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.green = pick("green") ?? root.green; root.yellow = pick("yellow") ?? root.yellow; root.overlay = pick("overlay0") ?? root.overlay; root.accent = pick("accent") ?? root.accent; } } }