diff --git a/Assets/Matugen/Matugen.qml b/Assets/Matugen/Matugen.qml index 5dd4113..7f662dc 100644 --- a/Assets/Matugen/Matugen.qml +++ b/Assets/Matugen/Matugen.qml @@ -7,6 +7,7 @@ import qs.Commons // Central place to define which templates we generate and where they write. // Users can extend it by dropping additional templates into: // - Assets/Matugen/templates/ +// - ~/.config/matugen/ (when enableUserTemplates is true) Singleton { id: root diff --git a/Commons/Settings.qml b/Commons/Settings.qml index 3746da0..f0ccc1b 100644 --- a/Commons/Settings.qml +++ b/Commons/Settings.qml @@ -247,6 +247,7 @@ Singleton { property bool foot: false property bool fuzzel: false property bool vesktop: false + property bool enableUserTemplates: false } // night light diff --git a/Modules/SettingsPanel/Tabs/ColorSchemeTab.qml b/Modules/SettingsPanel/Tabs/ColorSchemeTab.qml index 4caa660..e3e9aac 100644 --- a/Modules/SettingsPanel/Tabs/ColorSchemeTab.qml +++ b/Modules/SettingsPanel/Tabs/ColorSchemeTab.qml @@ -466,5 +466,22 @@ ColumnLayout { MatugenService.generateFromWallpaper() } } + + NDivider { + Layout.fillWidth: true + Layout.topMargin: Style.marginM * scaling + Layout.bottomMargin: Style.marginM * scaling + } + + NCheckbox { + label: "User Templates" + description: "Enable user-defined Matugen config from ~/.config/matugen/config.toml" + checked: Settings.data.matugen.enableUserTemplates + onToggled: checked => { + Settings.data.matugen.enableUserTemplates = checked + if (Settings.data.colorSchemes.useWallpaperColors) + MatugenService.generateFromWallpaper() + } + } } } diff --git a/Services/MatugenService.qml b/Services/MatugenService.qml index 9b476cb..b41a532 100644 --- a/Services/MatugenService.qml +++ b/Services/MatugenService.qml @@ -41,10 +41,22 @@ Singleton { var pathEsc = dynamicConfigPath.replace(/'/g, "'\\''") var extraRepo = (Quickshell.shellDir + "/Assets/Matugen/extra").replace(/'/g, "'\\''") var extraUser = (Settings.configDir + "matugen.d").replace(/'/g, "'\\''") + + // Build the main script var script = "cat > '" + pathEsc + "' << 'EOF'\n" + content + "EOF\n" + "for d in '" + extraRepo + "' '" + extraUser + "'; do\n" + " if [ -d \"$d\" ]; then\n" + " for f in \"$d\"/*.toml; do\n" + " [ -f \"$f\" ] && { echo; echo \"# extra: $f\"; cat \"$f\"; } >> '" + pathEsc + "'\n" + " done\n" + " fi\n" + "done\n" + "matugen image '" + wp + "' --config '" + pathEsc + "' --mode " + mode + + // Add user config execution if enabled + if (Settings.data.matugen.enableUserTemplates) { + var userConfigDir = (Quickshell.env("HOME") + "/.config/matugen/").replace(/'/g, "'\\''") + script += "\n# Execute user config if it exists\nif [ -f '" + userConfigDir + "config.toml' ]; then\n" + script += " matugen image '" + wp + "' --config '" + userConfigDir + "config.toml' --mode " + mode + "\n" + script += "fi" + } + + script += "\n" generateProcess.command = ["bash", "-lc", script] generateProcess.running = true } @@ -53,12 +65,13 @@ Singleton { id: generateProcess workingDirectory: Quickshell.shellDir running: false - stdout: StdioCollector { - onStreamFinished: Logger.log("Matugen", "Completed colors generation") - } + stderr: StdioCollector { - onStreamFinished: if (this.text !== "") - Logger.error(this.text) + onStreamFinished: { + if (this.text !== "") { + Logger.warn("MatugenService", "Matugen stderr:", this.text) + } + } } }