Split out indicators

This commit is contained in:
David Heinemeier Hansson
2026-05-20 13:05:56 +02:00
parent 8476fa7d82
commit 3b9700682c
12 changed files with 527 additions and 162 deletions
@@ -0,0 +1,39 @@
import QtQuick
import Quickshell.Io
import qs.Ui
BarIndicator {
id: root
property string state: "idle"
property string icon: ""
active: state === "recording"
activeText: icon
inactiveText: "󰍬"
activeTooltipText: state
inactiveTooltipText: "Dictation"
function update(raw) {
var data = extractData(raw)
state = String(data.alt || data.class || "idle")
if (state === "recording") icon = "󰍬"
else if (state === "transcribing") icon = "󰔟"
else icon = ""
}
Process {
command: ["bash", "-lc", "omarchy-voxtype-status"]
running: true
stdout: SplitParser {
onRead: function(data) { root.update(data) }
}
}
onPressed: function(button) {
if (!root.bar) return
if (button === Qt.RightButton) root.bar.run("omarchy-voxtype-config")
else root.bar.run("omarchy-voxtype-model")
}
}
+51
View File
@@ -0,0 +1,51 @@
import QtQuick
import Quickshell.Io
import qs.Commons
import qs.Ui
BarIndicator {
id: root
property string statusText: ""
property string statusTooltip: ""
active: statusText !== ""
activeText: statusText
inactiveText: "󰂛"
activeTooltipText: statusTooltip
inactiveTooltipText: "Do Not Disturb"
function refresh() {
if (!root.bar || statusProc.running) return
statusProc.command = ["bash", "-lc", Util.shellQuote(root.bar.omarchyPath + "/shell/scripts/indicators/notification-silencing.sh")]
statusProc.running = true
}
function update(raw) {
var data = extractData(raw)
statusText = data.text || ""
statusTooltip = data.tooltip || ""
}
onBarChanged: refresh()
Component.onCompleted: refresh()
Connections {
target: root.bar
ignoreUnknownSignals: true
function onIndicatorsRefreshRequested() { root.refresh() }
}
Process {
id: statusProc
stdout: StdioCollector {
waitForEnd: true
onStreamFinished: root.update(text)
}
}
onPressed: function() {
if (root.bar) root.bar.run("omarchy-toggle-notification-silencing")
}
}
@@ -0,0 +1,51 @@
import QtQuick
import Quickshell.Io
import qs.Commons
import qs.Ui
BarIndicator {
id: root
property string statusText: ""
property string statusTooltip: ""
active: statusText !== ""
activeText: statusText
inactiveText: "󰻂"
activeTooltipText: statusTooltip
inactiveTooltipText: "Screen recording"
function refresh() {
if (!root.bar || statusProc.running) return
statusProc.command = ["bash", "-lc", Util.shellQuote(root.bar.omarchyPath + "/shell/scripts/indicators/screen-recording.sh")]
statusProc.running = true
}
function update(raw) {
var data = extractData(raw)
statusText = data.text || ""
statusTooltip = data.tooltip || ""
}
onBarChanged: refresh()
Component.onCompleted: refresh()
Connections {
target: root.bar
ignoreUnknownSignals: true
function onIndicatorsRefreshRequested() { root.refresh() }
}
Process {
id: statusProc
stdout: StdioCollector {
waitForEnd: true
onStreamFinished: root.update(text)
}
}
onPressed: function() {
if (root.bar) root.bar.run("omarchy-capture-screenrecording")
}
}
@@ -0,0 +1,56 @@
import QtQuick
import Quickshell.Io
import qs.Ui
BarIndicator {
id: root
activeText: "󰅶"
inactiveText: "󰅶"
activeTooltipText: "No lock or screensaver"
inactiveTooltipText: "Idle enabled"
function refresh() {
if (!statusProc.running) statusProc.running = true
}
function toggle() {
if (root.bar) root.bar.run("omarchy-toggle-idle")
refreshTimer.restart()
}
Component.onCompleted: refresh()
Connections {
target: root.bar
ignoreUnknownSignals: true
function onIndicatorsRefreshRequested() { root.refresh() }
}
Process {
id: statusProc
command: ["bash", "-lc", "omarchy-shell idle status 2>/dev/null"]
stdout: StdioCollector {
waitForEnd: true
onStreamFinished: {
var data = root.extractData(text)
root.active = data && data.enabled === false
}
}
}
Timer {
id: refreshTimer
interval: 1500
onTriggered: root.refresh()
}
Timer {
interval: 5000
running: true
repeat: true
onTriggered: root.refresh()
}
onPressed: function() { root.toggle() }
}