Krolyxon
Commit a9ecc13

Branches

Refs →

aurora.configquickshellauroraSettings.qml

100 lines · 4.3 KB · QML

1pragma Singleton
2import QtQuick
3import Quickshell
4import Quickshell.Io
5
6// User knobs persisted to ~/.config/aurora/settings.json (outside the shell dir, so syncing the
7// config never clobbers it). Written on every change, re-read when edited by hand.
8Singleton {
9 id: root
10 readonly property string file: Quickshell.env("HOME") + "/.config/aurora/settings.json"
11
12 // defaults live here; reset() puts them back
13 readonly property var defaults: ({
14 fontSize: 12, wsFontSize: 11, barHeight: 22, barAlpha: 1.0, panelAlpha: 0.88, accentIndex: 14,
15 osdTimeout: 1500, desktopClock: true, desktopViz: true, vizBars: 64,
16 dock: true, dockPinned: ["foot", "librewolf", "pcmanfm", "obsidian"], wallFolder: "dusky-dark",
17 notifSound: true, notifVolume: 0.7,
18 idleDim: 150, idleOff: 330, idleLock: 600, idleSuspend: 0, charTone: 0, portalAutoOpen: true,
19 chargeMode: "off", batLow: 15, batCritical: 5, batCriticalAction: "none"
20 })
21
22 property alias fontSize: a.fontSize
23 property alias wsFontSize: a.wsFontSize
24 property alias barHeight: a.barHeight
25 property alias barAlpha: a.barAlpha
26 property alias panelAlpha: a.panelAlpha
27 property alias accentIndex: a.accentIndex
28 property alias osdTimeout: a.osdTimeout
29 property alias desktopClock: a.desktopClock
30 property alias desktopViz: a.desktopViz
31 property alias vizBars: a.vizBars
32 property alias dock: a.dock
33 property alias dockPinned: a.dockPinned
34 property alias wallFolder: a.wallFolder
35 property alias notifSound: a.notifSound
36 property alias notifVolume: a.notifVolume
37 property alias idleDim: a.idleDim
38 property alias idleOff: a.idleOff
39 property alias idleLock: a.idleLock
40 property alias idleSuspend: a.idleSuspend
41 property alias charTone: a.charTone
42 property alias portalAutoOpen: a.portalAutoOpen
43 property alias chargeMode: a.chargeMode
44 property alias batLow: a.batLow
45 property alias batCritical: a.batCritical
46 property alias batCriticalAction: a.batCriticalAction
47
48 function reset() {
49 for (var k in defaults) a[k] = defaults[k]
50 }
51 function togglePin(id) {
52 var l = dockPinned.slice(), i = l.indexOf(id)
53 if (i >= 0) l.splice(i, 1); else l.push(id)
54 dockPinned = l
55 }
56
57 FileView {
58 id: fv
59 path: root.file
60 blockLoading: true // loaded before first use (e.g. Wall.random() right after startup)
61 watchChanges: true
62 onFileChanged: reload()
63 onAdapterUpdated: writeAdapter()
64 onLoadFailed: err => {
65 if (err === FileViewError.FileNotFound)
66 Quickshell.execDetached(["sh", "-c", 'mkdir -p "${1%/*}"', "sh", root.file])
67 writeLater.start()
68 }
69 adapter: JsonAdapter {
70 id: a
71 property int fontSize: 12
72 property int wsFontSize: 11
73 property int barHeight: 22
74 property real barAlpha: 1.0
75 property real panelAlpha: 0.88
76 property int accentIndex: 14
77 property int osdTimeout: 1500
78 property bool desktopClock: true
79 property bool desktopViz: true
80 property int vizBars: 64
81 property bool dock: true
82 property list<string> dockPinned: ["foot", "librewolf", "pcmanfm", "obsidian"]
83 property string wallFolder: "dusky-dark"
84 property bool notifSound: true
85 property real notifVolume: 0.7
86 property int idleDim: 150 // hypridle timeouts in seconds, 0 = never (Idle.qml)
87 property int idleOff: 330
88 property int idleLock: 600
89 property int idleSuspend: 0
90 property int charTone: 0 // glyph picker emoji skin tone, 0 = none, 1-5 light..dark
91 property bool portalAutoOpen: true // open captive portal login pages in $BROWSER (Net.qml)
92 property string chargeMode: "off" // off | conservation | limit80 (Battery.qml)
93 property int batLow: 15 // low battery warning, %
94 property int batCritical: 5
95 property string batCriticalAction: "none" // none | suspend | poweroff
96 }
97 }
98 // first run: create the file once the directory exists
99 Timer { id: writeLater; interval: 300; onTriggered: fv.writeAdapter() }
100}