Files
quickdots/components/ConfigWriter.qml
2026-05-17 22:30:27 +00:00

69 lines
2.3 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Io
Item {
id: root
property string configPath:
Quickshell.env("HOME") + "/.config/quickshell/config/config.qml"
Process {
id: writerProc
running: false
onExited: (code) => {
if (code !== 0)
console.warn("[ConfigWriter] Patch failed (exit " + code + ")")
}
property string _name: "ConfigWriter"
}
function writeInt(key, value) {
const n = Math.round(value).toString()
const sh = "sed -i" +
" -e 's/\\(property int[[:space:]]\\+\\b" + key + "\\b:[ ]*\\)[0-9.]\\+/\\1" + n + "/'" +
" " + JSON.stringify(root.configPath)
writerProc.command = ["/bin/sh", "-c", sh]
writerProc.running = true
}
function writeBool(key, value) {
const v = value ? "true" : "false"
const sh = "sed -i" +
" -e 's/\\(property bool[[:space:]]\\+\\b" + key + "\\b:[ ]*\\)\\(true\\|false\\)/\\1" + v + "/'" +
" " + JSON.stringify(root.configPath)
writerProc.command = ["/bin/sh", "-c", sh]
writerProc.running = true
}
function writeInts(pairs) {
let args = ""
for (let i = 0; i < pairs.length; i++) {
const n = Math.round(pairs[i].value).toString()
args += " -e 's/\\(property int[[:space:]]\\+\\b" + pairs[i].key + "\\b:[ ]*\\)[0-9.]\\+/\\1" + n + "/'"
}
const sh = "sed -i" + args + " " + JSON.stringify(root.configPath)
writerProc.command = ["/bin/sh", "-c", sh]
writerProc.running = true
}
function writeArray(key, pairsQml) {
const sh =
"CFG=" + JSON.stringify(root.configPath) + "\n" +
"QS_PAIRS='" + pairsQml + "'\n" +
"awk -v pairs=\"$QS_PAIRS\" '" +
"/^[[:space:]]*property var[[:space:]]+" + key + ":[[:space:]]/{print \" property var " + key + ": \"pairs;sk=/\\]/?0:1;next}" +
"sk&&/\\]/{sk=0;next}" +
"sk{next}" +
"{print}'" +
" \"$CFG\" > \"${CFG}.tmp\" && mv \"${CFG}.tmp\" \"$CFG\"\n"
writerProc.command = ["/bin/sh", "-c", sh]
writerProc.running = true
}
function writeScript(sh) {
writerProc.command = ["/bin/sh", "-c", sh]
writerProc.running = true
}
}