ColorSchemeTab: set walker theme to noctalia on template activation

This commit is contained in:
Ly-sec
2025-10-29 16:25:03 +01:00
parent 98bed3d8be
commit d443d7dba3
9 changed files with 64 additions and 18 deletions
+2 -1
View File
@@ -101,7 +101,7 @@ Item {
SplitParser {
id: textStdoutSplit
onRead: (line) => root.parseDynamicContent(line)
onRead: line => root.parseDynamicContent(line)
}
StdioCollector {
@@ -142,6 +142,7 @@ Item {
_dynamicIcon = parsed.icon || ""
return
} catch (e) {
// Not a valid JSON, treat as plain text
}
}
+54 -8
View File
@@ -1,6 +1,7 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Quickshell
import Quickshell.Io
import qs.Commons
import qs.Services
@@ -669,10 +670,10 @@ ColumnLayout {
NCheckbox {
label: "Vicinae"
description: ProgramCheckerService.vicinaeAvailable ? I18n.tr("settings.color-scheme.templates.programs.vicinae.description", {
"filepath": "~/.local/share/vicinae/themes/matugen.toml"
}) : I18n.tr("settings.color-scheme.templates.programs.vicinae.description-missing", {
"app": "vicinae"
})
"filepath": "~/.local/share/vicinae/themes/matugen.toml"
}) : I18n.tr("settings.color-scheme.templates.programs.vicinae.description-missing", {
"app": "vicinae"
})
checked: Settings.data.templates.vicinae
enabled: ProgramCheckerService.vicinaeAvailable
opacity: ProgramCheckerService.vicinaeAvailable ? 1.0 : 0.6
@@ -686,16 +687,61 @@ ColumnLayout {
NCheckbox {
label: "Walker"
description: ProgramCheckerService.walkerAvailable ? I18n.tr("settings.color-scheme.templates.programs.walker.description", {
"filepath": "~/.config/walker/style.css"
}) : I18n.tr("settings.color-scheme.templates.programs.walker.description-missing", {
"app": "walker"
})
"filepath": "~/.config/walker/style.css"
}) : I18n.tr("settings.color-scheme.templates.programs.walker.description-missing", {
"app": "walker"
})
checked: Settings.data.templates.walker
enabled: ProgramCheckerService.walkerAvailable
opacity: ProgramCheckerService.walkerAvailable ? 1.0 : 0.6
onToggled: checked => {
if (ProgramCheckerService.walkerAvailable) {
Settings.data.templates.walker = checked
if (checked) {
// Update walker config.toml to use noctalia theme
var configFile = Quickshell.env("HOME") + "/.config/walker/config.toml"
var configDir = Quickshell.env("HOME") + "/.config/walker"
var configFileEsc = configFile.replace(/'/g, "'\\''")
var configDirEsc = configDir.replace(/'/g, "'\\''")
Logger.i("ColorSchemeTab", "Updating walker config:", configFile)
Logger.d("ColorSchemeTab", "Config file path:", configFileEsc)
Logger.d("ColorSchemeTab", "Config dir path:", configDirEsc)
// Remove existing theme line and insert new one at the top
var script = "echo '[Walker Config] Starting update...' && "
script += "mkdir -p '" + configDirEsc + "' && "
script += "echo '[Walker Config] Directory created/verified' && "
script += "if [ -f '" + configFileEsc + "' ]; then "
script += "echo '[Walker Config] File exists, removing old theme line' && "
script += "(grep -v '^theme[[:space:]]*=' '" + configFileEsc + "' > '" + configFileEsc + ".tmp' 2>/dev/null || cat '" + configFileEsc + "' > '" + configFileEsc + ".tmp') && "
script += "mv '" + configFileEsc + ".tmp' '" + configFileEsc + "' && "
script += "echo '[Walker Config] Removed old theme line'; "
script += "else echo '[Walker Config] File does not exist, will create'; "
script += "fi && "
script += "echo 'theme = \"noctalia\"' | cat - '" + configFileEsc + "' > '" + configFileEsc + ".tmp' && "
script += "mv '" + configFileEsc + ".tmp' '" + configFileEsc + "' && "
script += "echo '[Walker Config] Inserted theme at top' && "
script += "FINAL_THEME=$(grep '^theme' '" + configFileEsc + "' | head -1 2>/dev/null) && "
script += "echo '[Walker Config] Final theme line: '$FINAL_THEME || echo '[Walker Config] ERROR: Theme line not found after update'"
Logger.d("ColorSchemeTab", "Executing script:", script)
// Execute script using execDetached
Quickshell.execDetached(["sh", "-c", script])
// Verify the update after a short delay
Qt.callLater(function () {
var verifyScript = "grep '^theme' '" + configFileEsc + "' | head -1 2>/dev/null || echo 'NOT_FOUND'"
var verifyProcessStr = "import QtQuick; import Quickshell.Io; Process { command: [\"sh\", \"-c\", \"" + verifyScript.replace(/"/g, '\\"') + "\"]; stdout: StdioCollector {} }"
var verifyProcess = Qt.createQmlObject(verifyProcessStr, root, "walkerVerify")
verifyProcess.exited.connect(function (exitCode) {
Logger.i("ColorSchemeTab", "Walker theme verification:", verifyProcess.stdout.text || "NOT FOUND")
verifyProcess.destroy()
})
verifyProcess.running = true
})
}
AppThemeService.generate()
}
}