Krolyxon
Commit 9f61535

Branches

Refs →

aurora9f61535

aurora: centred clock, old desktop layout restyled, tab switches settings sections

Bar: no window title; time · day centred, one size (calendar drops from the centre).
Desktop: back to the old clock / date / stats / now playing at the old size, Nothing style,
cava as dot columns along the bottom; greeting and widget grid dropped.
Settings app: Tab / Shift+Tab switch sections.
Author
krolyxon
Date
2026-10-28 21:22 +0530
Parent
6dd12d2
Commit
9f615359c11a6137c5ab627995c36cede3b618dc

+98 −401

8 files changed

  1. M .config/quickshell/aurora/Bar.qml +7 −38
  2. M .config/quickshell/aurora/CalPopup.qml +3 −3
  3. M .config/quickshell/aurora/Cava.qml +1 −2
  4. M .config/quickshell/aurora/Desktop.qml +78 −343
  5. M .config/quickshell/aurora/SetAppearance.qml +1 −2
  6. M .config/quickshell/aurora/SetShell.qml +2 −2
  7. M .config/quickshell/aurora/Settings.qml +2 −7
  8. M .config/quickshell/aurora/SettingsApp.qml +4 −4
M .config/quickshell/aurora/Bar.qml View
@@ -9,8 +9,8 @@ import Quickshell.Services.UPower
99 // The bar: a strip docked at the top of every monitor.
1010 // Left: the mark (a dotted ring: click = runner; its centre turns the live colour while something records or listens,
1111 // the ring lights up in a wave on a new notification), this monitor's workspaces as dots, the cat.
12−// Centre: the active window (focused monitor only). Right: tray, recording, privacy, caffeine/airplane, headset,
13−// volume, net + bt, battery, clock (click = calendar). Clicks open the same panel tabs as always.
12+// Centre: time · day (click = calendar). Right: tray, recording, privacy, caffeine/airplane, headset, volume,
13+// net + bt, battery. Clicks open the same panel tabs as always.
1414 // After glyph-rice (github.com/Nebelung-cloud/glyph-rice, GPL-3.0), bar/Bar.qml.
1515 PanelWindow {
1616 id: bar
@@ -127,18 +127,12 @@ PanelWindow {
127127 CatLoop { height: parent.height }
128128 }
129129
130− // ---------------- center ----------------
131− Lb {
130+ // ---------------- center: time · day, one line (click = calendar) ----------------
131+ BarPill {
132132 anchors.centerIn: parent
133− width: Math.min(implicitWidth, parent.width * 0.32)
134− horizontalAlignment: Text.AlignHCenter
135− elide: Text.ElideRight
136− readonly property var active: ToplevelManager.activeToplevel
137− readonly property string app: active && active.appId ? String(active.appId).split(".").pop() : ""
138− visible: bar.monFocused && active !== null && active.title !== "" // the active window is global: focused monitor only
139− text: active ? (app !== "" ? app + " · " + active.title : active.title) : ""
140− px: 11
141− color: Theme.fgDim
133+ height: parent.height
134+ text: Theme.hh(clock.date) + ":" + Qt.formatDateTime(clock.date, "mm") + " · " + Qt.locale("en_US").toString(clock.date, "ddd d")
135+ onActivated: bar.toggleOverlay("cal", bar.modelData)
142136 }
143137
144138 // ---------------- right ----------------
@@ -263,31 +257,6 @@ PanelWindow {
263257 color: bar.batLow ? Theme.err : Theme.fg
264258 }
265259 }
266−
267− // clock: Doto from bar size 40 up (Doto is unreadable smaller), Space Mono below that
268− BarPill {
269− onActivated: bar.toggleOverlay("cal", bar.modelData)
270− Num {
271− visible: Theme.barSize >= 40
272− anchors.verticalCenter: parent.verticalCenter
273− text: Theme.hh(clock.date) + ":" + Qt.formatDateTime(clock.date, "mm")
274− font.pixelSize: 26
275− }
276− Text {
277− visible: Theme.barSize < 40
278− anchors.verticalCenter: parent.verticalCenter
279− text: Theme.hh(clock.date) + ":" + Qt.formatDateTime(clock.date, "mm")
280− font.family: Theme.mono
281− font.pixelSize: 14
282− font.bold: true
283− color: Theme.fg
284− }
285− Lb {
286− anchors.verticalCenter: parent.verticalCenter
287− text: Qt.locale("en_US").toString(clock.date, "ddd d")
288− px: 10
289− }
290− }
291260 }
292261 }
293262 }
M .config/quickshell/aurora/CalPopup.qml View
@@ -4,7 +4,7 @@ import Quickshell
44 import Quickshell.Wayland
55 import Quickshell.Hyprland
66
7−// Month calendar under the bar clock: Doto month, Monday first, ISO week numbers, today in a primary circle.
7+// Month calendar under the bar clock (top centre): Doto month, Monday first, ISO week numbers, today in a primary circle.
88 // Scroll / arrows change the month, up / down the year, space = back to today, Esc closes.
99 // After glyph-rice (github.com/Nebelung-cloud/glyph-rice, GPL-3.0), cal/Cal.qml.
1010 PanelWindow {
@@ -16,8 +16,8 @@ PanelWindow {
1616 Behavior on t { NumberAnimation { duration: Theme.t; easing.type: Easing.BezierSpline; easing.bezierCurve: Theme.glide } }
1717
1818 visible: t > 0
19− anchors { top: true; right: true }
20− margins { top: 6; right: 8 }
19+ anchors.top: true
20+ margins.top: 6
2121 implicitWidth: card.width
2222 implicitHeight: card.height + 20 // room for the slide
2323 exclusiveZone: 0
M .config/quickshell/aurora/Cava.qml View
@@ -9,8 +9,7 @@ import Quickshell.Services.Mpris
99 Singleton {
1010 id: root
1111 readonly property int bars: Math.max(8, Settings.vizBars)
12− // the home screen's cava widget (round Glyph matrix)
13− readonly property bool wanted: Settings.desktopClock && Settings.desktopViz && Settings.homeWidgets.indexOf("cava") >= 0
12+ readonly property bool wanted: Settings.desktopViz
1413 property bool available: false
1514 property var values: [] // 0..1 per bar
1615
M .config/quickshell/aurora/Desktop.qml View
@@ -2,20 +2,17 @@ import QtQuick
22 import Quickshell
33 import Quickshell.Wayland
44 import Quickshell.Hyprland
5−import Quickshell.Bluetooth
6−import Quickshell.Services.UPower
75
8−// The home screen of one monitor (Bottom layer: above the wallpaper, under windows, never takes input):
9−// a 300px Doto clock with a blinking colon, the date, a greeting, a meta line, and a bento of widgets
10−// (Settings.homeWidgets, 3 x 3 cells of 220px; wide ones span cells, what doesn't fit is left out).
11−// Laid out on a 1920 x 1080 canvas scaled to the screen. Clocks blink and the cover spins only while the workspace is empty.
12−// After glyph-rice (github.com/Nebelung-cloud/glyph-rice, GPL-3.0), home/Home.qml.
6+// The desktop layer of one monitor (Bottom layer: above the wallpaper, under windows, never takes input), in the
7+// Nothing style: a Doto clock (colon blinks while the workspace is empty), the date in spaced caps behind the live dot,
8+// a stats line, what's playing; cava along the bottom as columns of dots while music plays (Settings.desktopViz).
139 PanelWindow {
1410 id: win
1511 required property var modelData
1612 screen: modelData
13+ readonly property bool showClock: Settings.desktopClock
14+ readonly property bool showViz: Settings.desktopViz
1715
18− visible: Settings.desktopClock
1916 anchors { top: true; bottom: true; left: true; right: true }
2017 exclusionMode: ExclusionMode.Ignore
2118 color: "transparent"
@@ -28,361 +25,99 @@ PanelWindow {
2825 readonly property bool home: hmon && hmon.activeWorkspace ? hmon.activeWorkspace.toplevels.values.length === 0 : true
2926
3027 SystemClock { id: clock; precision: SystemClock.Minutes }
31− readonly property var en: Qt.locale("en_US")
32−
33− // blinking colon: two frames a second, not an animation on every vsync
34− property bool dim: false
35− Timer { running: win.home && Settings.blink && win.visible; interval: 500; repeat: true; onTriggered: win.dim = !win.dim }
36−
3728 readonly property var player: Media.player
38− function findBuds() {
39− var l = Bluetooth.devices.values
40− for (var i = 0; i < l.length; i++) if (l[i].connected && l[i].batteryAvailable) return l[i]
41− return null
42− }
43− readonly property var buds: findBuds()
44− readonly property var bat: UPower.displayDevice
45− readonly property real batPct: bat && bat.isPresent ? (bat.percentage > 1 ? bat.percentage / 100 : bat.percentage) : 0
4629
47− function week(d) { // ISO week
48− var t = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()))
49− t.setUTCDate(t.getUTCDate() + 4 - (t.getUTCDay() || 7))
50− return Math.ceil(((t - Date.UTC(t.getUTCFullYear(), 0, 1)) / 86400000 + 1) / 7)
51− }
52− readonly property string hello: {
53− var h = clock.date.getHours()
54− return h < 5 ? "Good night" : h < 12 ? "Good morning" : h < 18 ? "Good afternoon" : "Good evening"
55− }
56− // widget id -> width in cells
57− readonly property var kinds: ({ calendar: 1, cpu: 1, ram: 1, disk: 1, battery: 1, gpu: 1, player: 2, cava: 1, cat: 1, system: 3 })
58− function shows(id) {
59− if (id === "cava") return Settings.desktopViz && Cava.available
60− if (id === "battery") return bat !== null && bat.isPresent
61− if (id === "gpu") return Gpu.mode !== ""
62− return kinds[id] !== undefined
63− }
30+ // blinking colon: two frames a second, only while it can be seen
31+ property bool dim: false
32+ Timer { running: win.home && win.showClock && Settings.blink; interval: 500; repeat: true; onTriggered: win.dim = !win.dim }
6433
65− // the 1920 x 1080 canvas, scaled to the screen
66− Item {
67− id: stage
68− readonly property real s: Math.min(win.width / 1920, win.height / 1080)
69− width: win.width / s
70− height: win.height / s
71− scale: s
72− transformOrigin: Item.TopLeft
34+ Column {
35+ visible: win.showClock
36+ x: 56
37+ y: Theme.barHeight + 48
38+ spacing: 2
7339
7440 Row {
75− x: 182
76− y: 150
77− Num { text: Theme.hh(clock.date); font.pixelSize: 300 }
78− Num { text: ":"; font.pixelSize: 300; opacity: Settings.blink && win.dim ? 0.2 : 1 }
79− Num { text: Qt.formatDateTime(clock.date, "mm"); font.pixelSize: 300 }
80− }
81− Lb {
82− x: 190
83− y: 448
84− px: 14
85− text: win.en.toString(clock.date, "dddd · d MMMM") + " · week " + win.week(clock.date)
86− }
87− Text {
88− x: 188
89− y: 560
90− textFormat: Text.StyledText
91− text: win.hello + ",<br><font color=\"" + Theme.grey + "\">" + (Settings.name || Quickshell.env("USER") || "") + ".</font>"
92− font.family: Theme.ui
93− font.pixelSize: 54
94− font.weight: Font.Light
95− font.letterSpacing: -1
96− lineHeight: 1.1
97− color: Theme.fg
41+ Num { text: Theme.hh(clock.date); font.pixelSize: 96 }
42+ Num { text: ":"; font.pixelSize: 96; opacity: Settings.blink && win.dim ? 0.2 : 1 }
43+ Num { text: Qt.formatDateTime(clock.date, "mm"); font.pixelSize: 96 }
9844 }
9945 Row {
100− x: 190
101− y: 716
102− spacing: 28
103− Meta { icon: Theme.iBell; text: Notifs.count + (Notifs.count === 1 ? " notification" : " notifications") }
104− Meta { visible: win.buds !== null; icon: Theme.iHeadphones; text: win.buds ? (win.buds.name + " · " + Math.round(win.buds.battery * 100) + "%") : "" }
105− Meta { visible: win.player !== null && win.player.isPlaying; icon: Theme.iMusic; text: win.player ? (win.player.trackTitle || "") : "" }
106− }
107−
108− // bento: left to right, a widget that doesn't fit the row starts the next one, more than 3 rows are left out
109− Repeater {
110− model: {
111− var out = [], r = 0, c = 0, l = Settings.homeWidgets
112− for (var i = 0; i < l.length; i++) {
113− var id = l[i], w = win.kinds[id]
114− if (!w || !win.shows(id)) continue
115− if (c + w > 3) { r++; c = 0 }
116− if (r > 2) break
117− out.push({ id: id, x: 1140 + c * 240, y: 150 + r * 240 })
118− c += w
119− }
120− return out
121− }
122− delegate: Loader {
123− required property var modelData
124− x: modelData.x
125− y: modelData.y
126− sourceComponent: ({ calendar: calendarW, cpu: cpuW, ram: ramW, disk: diskW, battery: batteryW, gpu: gpuW,
127− player: playerW, cava: cavaW, cat: catW, system: systemW })[modelData.id] || null
128− }
129− }
130−
131− Component {
132− id: calendarW
133− W {
134− Column {
135− x: 24
136− y: 24
137− width: parent.width - 48
138− Lb { text: win.en.monthName(clock.date.getMonth()) }
139− Num { topPadding: lead + 8; text: clock.date.getDate(); font.pixelSize: 118 }
140− Row {
141− width: parent.width
142− topPadding: 14
143− Repeater {
144− model: ["M", "T", "W", "T", "F", "S", "S"]
145− Text {
146− required property string modelData
147− required property int index
148− readonly property bool today: (clock.date.getDay() + 6) % 7 === index
149− width: parent.width / 7
150− horizontalAlignment: Text.AlignHCenter
151− text: modelData
152− font.family: Theme.mono
153− font.pixelSize: 11
154− color: today ? Theme.fill : Theme.grey
155− Rectangle {
156− visible: parent.today
157− anchors.bottom: parent.bottom
158− anchors.horizontalCenter: parent.horizontalCenter
159− width: 10
160− height: 2
161− color: Theme.fill
162− }
163− }
164− }
165− }
166− }
167− }
168− }
169− Component { id: cpuW; RingW { f: SysStats.cpu; value: Math.round(SysStats.cpu * 100); label: "cpu %" } }
170− Component {
171− id: ramW
172− RingW {
173− f: SysStats.memTotal > 0 ? SysStats.memUsed / SysStats.memTotal : 0
174− value: Math.round(f * 100)
175− label: "ram · " + SysStats.memUsed.toFixed(1) + "g"
46+ topPadding: 14
47+ spacing: 12
48+ Rectangle { anchors.verticalCenter: parent.verticalCenter; width: 10; height: 10; radius: 5; color: Theme.live }
49+ Lb {
50+ anchors.verticalCenter: parent.verticalCenter
51+ text: Qt.locale("en_US").toString(clock.date, "dddd · d MMMM")
52+ px: 16
53+ color: Theme.fg
17654 }
17755 }
178− Component {
179− id: diskW
180− RingW {
181− readonly property var d: SysStats.disks.length ? SysStats.disks[0] : null
182− f: d ? d.used / d.size : 0
183− value: Math.round(f * 100)
184− label: "disk %"
185− }
186− }
187− Component {
188− id: batteryW
189− RingW {
190− readonly property bool charging: win.bat && win.bat.state === UPowerDeviceState.Charging
191− f: win.batPct
192− value: Math.round(win.batPct * 100)
193− label: charging ? "charging" : "battery"
194− on: !charging && win.batPct <= Settings.batLow / 100 ? Theme.err : Theme.fill
195− }
56+ Item { width: 1; height: 14 }
57+ Row {
58+ spacing: 22
59+ Stat { icon: Theme.iChip; text: Math.round(SysStats.cpu * 100) + "%" }
60+ Stat { icon: Theme.iMem; text: SysStats.memUsed.toFixed(1) + " / " + SysStats.memTotal.toFixed(1) + "g" }
61+ Stat { icon: Theme.iClock; text: "up " + Theme.fmtTime(SysStats.uptime) }
19662 }
197− Component {
198− id: gpuW
199− W {
200− round: true
201− Column {
202− anchors.centerIn: parent
203− spacing: 14
204− Icon { anchors.horizontalCenter: parent.horizontalCenter; text: Theme.iGpu; font.pixelSize: 56; color: Theme.fill }
205− Lb { anchors.horizontalCenter: parent.horizontalCenter; text: "gpu · " + Gpu.mode }
206− }
63+ Row {
64+ topPadding: 8
65+ spacing: 10
66+ visible: win.player !== null && (win.player.trackTitle || "") !== ""
67+ Icon {
68+ anchors.verticalCenter: parent.verticalCenter
69+ text: win.player && win.player.isPlaying ? Theme.iMusic : Theme.iPause
70+ font.pixelSize: 15
71+ color: win.player && win.player.isPlaying ? Theme.fill : Theme.grey
20772 }
208− }
209− // the player: the cover as dots in a circle, spinning while it plays
210− Component {
211− id: playerW
212− W {
213− span: 2
214− Item {
215− id: art
216− x: 28
217− anchors.verticalCenter: parent.verticalCenter
218− width: 164
219− height: 164
220− property real turn: 0
221− Timer {
222− running: win.home && Media.playing
223− interval: 33
224− repeat: true
225− onTriggered: art.turn = (art.turn + 360 / 14 / 30) % 360
226− }
227− DotArt { anchors.fill: parent; rotation: art.turn; url: win.player ? win.player.trackArtUrl : ""; step: 6 }
228− }
229− // MPRIS doesn't push the position: poke it while the progress shows
230− Timer {
231− running: win.home && Media.playing && Media.seekable
232− interval: 1000
233− repeat: true
234− onTriggered: win.player.positionChanged()
235− }
236− Column {
237− anchors.left: art.right
238− anchors.leftMargin: 26
239− anchors.right: parent.right
240− anchors.rightMargin: 28
241− anchors.verticalCenter: parent.verticalCenter
242− Lb { width: parent.width; elide: Text.ElideRight; text: "now playing · " + (win.player ? win.player.identity : "silence") }
243− Text {
244− width: parent.width
245− topPadding: 10
246− elide: Text.ElideRight
247− text: win.player ? (win.player.trackTitle || "Nothing on") : "Nothing on"
248− font.family: Theme.ui
249− font.pixelSize: 26
250− font.weight: Font.DemiBold
251− color: Theme.fg
252− }
253− Text {
254− width: parent.width
255− elide: Text.ElideRight
256− text: win.player ? (win.player.trackArtist || "") : ""
257− font.family: Theme.ui
258− font.pixelSize: 15
259− color: Theme.fgDim
260− }
261− Item { width: 1; height: 18 }
262− Seg {
263− width: parent.width
264− height: 6
265− n: 24
266− f: win.player && win.player.lengthSupported && win.player.length > 0 ? win.player.position / win.player.length : 0
267− }
268− Item { width: 1; height: 16 }
269− PlayControls { size: 22; play: 52 }
270− }
73+ Text {
74+ anchors.verticalCenter: parent.verticalCenter
75+ text: win.player ? win.player.trackTitle + (win.player.trackArtist ? " · " + win.player.trackArtist : "") : ""
76+ color: win.player && win.player.isPlaying ? Theme.fg : Theme.fgDim
77+ font.family: Theme.ui
78+ font.pixelSize: 15
27179 }
27280 }
273− // cava as a round Glyph Matrix: bass in the middle, highs to the sides, columns grow up and down from the middle
274− Component {
275− id: cavaW
276− W {
277− round: true
278− Grid {
279− anchors.centerIn: parent
280− columns: 15
281− spacing: 4
282− Repeater {
283− model: 15 * 15
284− Rectangle {
285− required property int index
286− readonly property int cx: index % 15 - 7
287− readonly property int cy: Math.floor(index / 15) - 7
288− readonly property int half: Math.floor(Math.sqrt(7.5 * 7.5 - cx * cx)) // half a column inside the circle
289− readonly property int n: Cava.values.length
290− readonly property real v: n ? Cava.values[Math.round(Math.abs(cx) / 7 * (n * 0.6 - 1))] || 0 : 0
291− width: 8
292− height: 8
293− radius: 4
294− // outside the circle: transparent, not invisible (Grid would close the gap)
295− color: Math.abs(cy) > half ? "transparent" : Math.abs(cy) < v * (half + 1) ? Theme.fill : Theme.s3
296− }
81+ }
82+
83+ // visualizer: a column of dots per bar along the bottom, lit from the bottom up, the top dot of each column brightest
84+ Row {
85+ id: viz
86+ visible: win.showViz && Cava.available && win.home
87+ anchors.bottom: parent.bottom
88+ anchors.bottomMargin: 18
89+ anchors.horizontalCenter: parent.horizontalCenter
90+ readonly property int rows: 14
91+ readonly property real d: 6
92+ readonly property real gap: Math.max(2, (win.width - 72) / Cava.bars - d)
93+ spacing: gap
94+ Repeater {
95+ model: Cava.bars
96+ delegate: Column {
97+ required property int index
98+ readonly property real v: index < Cava.values.length ? Cava.values[index] : 0
99+ readonly property int lit: Math.round(v * viz.rows)
100+ spacing: 4
101+ Repeater {
102+ model: viz.rows
103+ Rectangle {
104+ required property int index
105+ readonly property int up: viz.rows - index // rows .. 1, top to bottom
106+ width: viz.d
107+ height: viz.d
108+ radius: viz.d / 2
109+ color: up === parent.lit ? Theme.fill : up < parent.lit ? Theme.fade(Theme.fill, 0.45) : Theme.fade(Theme.s3, 0.5)
297110 }
298111 }
299112 }
300113 }
301− // the cat from the bar, big and as LED dots
302− Component {
303− id: catW
304− W {
305− CatLoop {
306− anchors.centerIn: parent
307− width: 180
308− height: 180
309− size: 120
310− layer.enabled: true
311− layer.effect: DotMask { step: 5 }
312− }
313− }
314− }
315− // system: numbers, and the cpu history as a dot matrix
316− Component {
317− id: systemW
318− W {
319− span: 3
320− Grid {
321− x: 34
322− anchors.verticalCenter: parent.verticalCenter
323− columns: 2
324− columnSpacing: 10
325− rowSpacing: 22
326− Stat { label: "cpu"; value: Math.round(SysStats.cpu * 100) + "%" }
327− Stat { label: "mem"; value: SysStats.memUsed.toFixed(1) + "G" }
328− Stat { label: "up"; value: Math.floor(SysStats.uptime / 3600) + ":" + ("0" + Math.floor(SysStats.uptime / 60) % 60).slice(-2) }
329− Stat { label: "disk"; value: SysStats.disks.length ? Math.round(SysStats.disks[0].used / SysStats.disks[0].size * 100) + "%" : "-" }
330− }
331− Column {
332− x: 344
333− anchors.verticalCenter: parent.verticalCenter
334− width: parent.width - x - 34
335− spacing: 12
336− Lb { text: "cpu · 40 s" }
337− Spark { width: parent.width; height: 92; slots: 34; values: SysStats.history }
338− }
339− }
340− }
341114 }
342115
343− // a bento cell: a square with radius 40, or a circle
344− component W: Rectangle {
345− property int span: 1
346− property bool round: false
347− width: span * 220 + (span - 1) * 20
348− height: 220
349− radius: round ? 110 : 40
350− color: Theme.s1
351− border.width: 1
352− border.color: Theme.s2
353− }
354− // round widget: a ring of dots lit by f, the number and a label inside
355− component RingW: Rectangle {
356− id: rw
357− property real f
358− property string value
359− property string label
360− property color on: Theme.fill
361− width: 220
362− height: 220
363− radius: 110
364− color: Theme.s1
365− border.width: 1
366− border.color: Theme.s2
367− Ring { anchors.fill: parent; anchors.margins: 12; f: rw.f; on: rw.on }
368− Column {
369− anchors.centerIn: parent
370− Num { anchors.horizontalCenter: parent.horizontalCenter; text: rw.value; font.pixelSize: 72 }
371− Lb { anchors.horizontalCenter: parent.horizontalCenter; topPadding: 8; text: rw.label }
372− }
373− }
374− component Meta: Row {
116+ component Stat: Row {
375117 property string icon
376118 property string text
377− spacing: 10
378− Icon { anchors.verticalCenter: parent.verticalCenter; text: parent.icon; font.pixelSize: 16 }
379− Lb { anchors.verticalCenter: parent.verticalCenter; text: parent.text }
380− }
381− component Stat: Column {
382− property string label
383− property string value
384− width: 130
385− Lb { text: parent.label }
386− Num { topPadding: lead + 6; text: parent.value }
119+ spacing: 8
120+ Icon { anchors.verticalCenter: parent.verticalCenter; text: parent.icon; font.pixelSize: 15; color: Theme.grey }
121+ Lb { anchors.verticalCenter: parent.verticalCenter; text: parent.text; px: 12 }
387122 }
388123 }
M .config/quickshell/aurora/SetAppearance.qml View
@@ -75,8 +75,7 @@ Flickable {
7575 Knob { label: "brightness"; from: 20; to: 100; value: Settings.wallBright; unit: "%"; onMoved: v => Settings.wallBright = v }
7676 Switch { label: "dot grid"; hint: "on the desktop when there is no wallpaper"; checked: Settings.dotGrid; onToggled: on => Settings.dotGrid = on }
7777
78− SectionLabel { text: "home screen" }
79− Field { label: "name"; value: Settings.name; placeholder: "greeting name (empty = your user name)"; onSubmitted: v => Settings.name = v }
78+ SectionLabel { text: "desktop" }
8079 Switch { label: "24-hour clock"; checked: Settings.clock24; onToggled: on => Settings.clock24 = on }
8180 Switch { label: "blinking colon"; checked: Settings.blink; onToggled: on => Settings.blink = on }
8281 Switch { label: "animations"; hint: "panels slide and fade, dots light up in waves"; checked: Settings.motion; onToggled: on => Settings.motion = on }
M .config/quickshell/aurora/SetShell.qml View
@@ -15,8 +15,8 @@ Flickable {
1515 spacing: 8
1616
1717 SectionLabel { text: "desktop" }
18− Switch { label: "clock"; hint: "home screen: Doto clock, greeting, widgets"; checked: Settings.desktopClock; onToggled: on => Settings.desktopClock = on }
19− Switch { label: "visualizer"; hint: "the round cava matrix widget while music plays"; checked: Settings.desktopViz; onToggled: on => Settings.desktopViz = on }
18+ Switch { label: "clock"; hint: "Doto clock, date, stats and what's playing on the desktop"; checked: Settings.desktopClock; onToggled: on => Settings.desktopClock = on }
19+ Switch { label: "visualizer"; hint: "cava as columns of dots along the bottom while music plays"; checked: Settings.desktopViz; onToggled: on => Settings.desktopViz = on }
2020 Knob { label: "visualizer bars"; from: 16; to: 128; value: Settings.vizBars; onMoved: v => Settings.vizBars = v }
2121
2222 SectionLabel { text: "dock" }
M .config/quickshell/aurora/Settings.qml View
@@ -20,7 +20,7 @@ Singleton {
2020 privacyIndicators: true, powerAuto: false, powerAc: "balanced", powerBat: "saver",
2121 motion: true, clock24: true, appIcons: "dots", barSize: 40,
2222 wallLook: "dots", wallPitch: 10, wallBright: 85, dotGrid: true,
23− name: "", blink: true, homeWidgets: ["calendar", "cpu", "ram", "player", "cava", "system"]
23+ blink: true
2424 })
2525
2626 property alias fontSize: a.fontSize
@@ -61,9 +61,7 @@ Singleton {
6161 property alias wallPitch: a.wallPitch
6262 property alias wallBright: a.wallBright
6363 property alias dotGrid: a.dotGrid
64− property alias name: a.name
6564 property alias blink: a.blink
66− property alias homeWidgets: a.homeWidgets
6765
6866 function reset() {
6967 for (var k in defaults) a[k] = defaults[k]
@@ -126,10 +124,7 @@ Singleton {
126124 property int wallPitch: 10 // dot step, px
127125 property int wallBright: 85 // %, from the background to the full image
128126 property bool dotGrid: true // dot grid on an empty desktop
129− property string name: "" // home screen greeting, empty = $USER
130− property bool blink: true // the home clock's colon blinks
131− // home screen bento, in order: calendar cpu ram disk battery gpu player cava cat system (Desktop.qml)
132− property list<string> homeWidgets: ["calendar", "cpu", "ram", "player", "cava", "system"]
127+ property bool blink: true // the desktop clock's colon blinks
133128 }
134129 }
135130 // first run: create the file once the directory exists
M .config/quickshell/aurora/SettingsApp.qml View
@@ -4,7 +4,7 @@ import Quickshell
44 // The settings app: a normal Hyprland window (class org.quickshell, title "aurora settings"), opened maximized by a
55 // window rule. glyph's prefs layout: the sections as a column of Doto words (the selected one large with the live dot),
66 // the page on the right under a caption, key hints at the bottom. One Loader, so only the shown section runs.
7−// Up/Down (outside text fields), Ctrl+Tab / Ctrl+Shift+Tab or Ctrl+J/K = sections, Esc closes.
7+// Tab / Shift+Tab, Up/Down (outside text fields) or Ctrl+J/K = sections, Esc closes.
88 // Opened with the `settings [section]` IPC. After glyph-rice (github.com/Nebelung-cloud/glyph-rice, GPL-3.0), prefs/Prefs.qml.
99 FloatingWindow {
1010 id: win
@@ -50,8 +50,8 @@ FloatingWindow {
5050 Keys.onPressed: e => {
5151 var ctrl = e.modifiers & Qt.ControlModifier
5252 if (e.key === Qt.Key_Escape) { win.closeRequested(); e.accepted = true }
53− else if (ctrl && (e.key === Qt.Key_Tab || e.key === Qt.Key_J)) { win.cycle(1); e.accepted = true }
54− else if (ctrl && (e.key === Qt.Key_Backtab || e.key === Qt.Key_K)) { win.cycle(-1); e.accepted = true }
53+ else if (e.key === Qt.Key_Tab || (ctrl && e.key === Qt.Key_J)) { win.cycle(1); e.accepted = true }
54+ else if (e.key === Qt.Key_Backtab || (ctrl && e.key === Qt.Key_K)) { win.cycle(-1); e.accepted = true }
5555 }
5656 // a click outside the page drops the focus out of text fields (arrows switch sections again)
5757 MouseArea { anchors.fill: parent; onClicked: root.forceActiveFocus() }
@@ -142,7 +142,7 @@ FloatingWindow {
142142 anchors.bottomMargin: 50
143143 spacing: 34
144144 Repeater {
145− model: ["↑↓ section", "ctrl tab next", "esc close"]
145+ model: ["tab · ↑↓ section", "esc close"]
146146 Lb { required property string modelData; text: modelData }
147147 }
148148 }