Krolyxon
Commit bf9a79c

Branches

Refs →

aurora.configquickshellauroraSettings.qml

105 lines · 4.7 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, matuScheme: "scheme-content", matuContrast: 0.0,
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 privacyIndicators: true
21 })
22
23 property alias fontSize: a.fontSize
24 property alias wsFontSize: a.wsFontSize
25 property alias barHeight: a.barHeight
26 property alias barAlpha: a.barAlpha
27 property alias panelAlpha: a.panelAlpha
28 property alias matuScheme: a.matuScheme
29 property alias matuContrast: a.matuContrast
30 property alias osdTimeout: a.osdTimeout
31 property alias desktopClock: a.desktopClock
32 property alias desktopViz: a.desktopViz
33 property alias vizBars: a.vizBars
34 property alias dock: a.dock
35 property alias dockPinned: a.dockPinned
36 property alias wallFolder: a.wallFolder
37 property alias notifSound: a.notifSound
38 property alias notifVolume: a.notifVolume
39 property alias idleDim: a.idleDim
40 property alias idleOff: a.idleOff
41 property alias idleLock: a.idleLock
42 property alias idleSuspend: a.idleSuspend
43 property alias charTone: a.charTone
44 property alias portalAutoOpen: a.portalAutoOpen
45 property alias chargeMode: a.chargeMode
46 property alias batLow: a.batLow
47 property alias batCritical: a.batCritical
48 property alias batCriticalAction: a.batCriticalAction
49 property alias privacyIndicators: a.privacyIndicators
50
51 function reset() {
52 for (var k in defaults) a[k] = defaults[k]
53 }
54 function togglePin(id) {
55 var l = dockPinned.slice(), i = l.indexOf(id)
56 if (i >= 0) l.splice(i, 1); else l.push(id)
57 dockPinned = l
58 }
59
60 FileView {
61 id: fv
62 path: root.file
63 blockLoading: true // loaded before first use (e.g. Wall.random() right after startup)
64 watchChanges: true
65 onFileChanged: reload()
66 onAdapterUpdated: writeAdapter()
67 onLoadFailed: err => {
68 if (err === FileViewError.FileNotFound)
69 Quickshell.execDetached(["sh", "-c", 'mkdir -p "${1%/*}"', "sh", root.file])
70 writeLater.start()
71 }
72 adapter: JsonAdapter {
73 id: a
74 property int fontSize: 12
75 property int wsFontSize: 11
76 property int barHeight: 22
77 property real barAlpha: 1.0
78 property real panelAlpha: 0.88
79 property string matuScheme: "scheme-content" // matugen -t (Wall.qml), accent = its primary_container (= wallpaper colour)
80 property real matuContrast: 0.0 // matugen --contrast, -1..1
81 property int osdTimeout: 1500
82 property bool desktopClock: true
83 property bool desktopViz: true
84 property int vizBars: 64
85 property bool dock: true
86 property list<string> dockPinned: ["foot", "librewolf", "pcmanfm", "obsidian"]
87 property string wallFolder: "dusky-dark"
88 property bool notifSound: true
89 property real notifVolume: 0.7
90 property int idleDim: 150 // hypridle timeouts in seconds, 0 = never (Idle.qml)
91 property int idleOff: 330
92 property int idleLock: 600
93 property int idleSuspend: 0
94 property int charTone: 0 // glyph picker emoji skin tone, 0 = none, 1-5 light..dark
95 property bool portalAutoOpen: true // open captive portal login pages in $BROWSER (Net.qml)
96 property string chargeMode: "off" // off | conservation (Battery.qml)
97 property int batLow: 15 // low battery warning, %
98 property int batCritical: 5
99 property string batCriticalAction: "none" // none | suspend | poweroff
100 property bool privacyIndicators: true // mic/camera/screen-share icons in the bar (Privacy.qml)
101 }
102 }
103 // first run: create the file once the directory exists
104 Timer { id: writeLater; interval: 300; onTriggered: fv.writeAdapter() }
105}