pragma Singleton pragma ComponentBehavior: Bound import QtQuick import Quickshell import Quickshell.Io Singleton { id: root property var palette: theme.palette property alias themes: cache.themes property alias currentTheme: cache.current Process { running: true command: ["bash", "-c", `inotifywait -m -r ~/.config/lux/themes/ -e modify,move,create,delete | while read dir action; do ls -m "$dir"; done`] stderr: StdioCollector { onStreamFinished: console.log(`line read: ${this.text}`) } stdout: SplitParser { splitMarker: "\n" onRead: data => { const themes = data.split(", ").filter(item => item.endsWith(".json")).map(item => item.replace(".json", "")); if (themes.length == 0) { return; } root.themes = themes; } } } FileView { path: `${Paths.cache}/theme.json` watchChanges: true onFileChanged: reload() // when changes are made to properties in the adapter, save them onAdapterUpdated: writeAdapter() JsonAdapter { id: cache property string current: "dark" property list themes: ["dark"] onThemesChanged: { if (!themes.includes(current)) { current = themes[0]; } } } } FileView { path: `${Paths.config}/themes/${root.currentTheme}.json` watchChanges: true onFileChanged: reload() // when changes are made to properties in the adapter, save them onAdapterUpdated: writeAdapter() JsonAdapter { id: theme property JsonObject palette: JsonObject { property color primary: "#605dff" property color primarycontent: "#edf1fe" property color secondary: "#f43098" property color secondarycontent: "#f9e4f0" property color accent: "#00d3bb" property color accentcontent: "#084d49" property color neutral: "#09090b" property color neutralcontent: "#e4e4e7" property color base100: "#1d232a" property color base200: "#191e24" property color base300: "#15191e" property color basecontent: "#ecf9ff" property color info: "#00bafe" property color infocontent: "#042e49" property color success: "#00d390" property color successcontent: "#004c39" property color warning: "#fcb700" property color warningcontent: "#793205" property color error: "#ff627d" property color errorcontent: "#4d0218" property int radiusSelector: 8 property int radiusField: 8 property int radiusBox: 8 property int border: 2 } } } }