feat(quickshell): add dense telemetry bar
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
import Quickshell
|
||||
import Quickshell.Hyprland
|
||||
import Quickshell.Services.Pipewire
|
||||
import Quickshell.Services.SystemTray
|
||||
import QtQuick
|
||||
import qs.widgets.vitals
|
||||
|
||||
// Production/layer-shell adapter. All visual composition lives in the
|
||||
// Item-rooted DenseBarContent so the exact bar can be rendered headlessly.
|
||||
Scope {
|
||||
id: root
|
||||
|
||||
readonly property PwNode sink: Pipewire.defaultAudioSink
|
||||
readonly property real volume: sink?.audio?.volume ?? 0
|
||||
readonly property bool muted: sink?.audio?.muted ?? false
|
||||
|
||||
readonly property var workspaceIds: Hyprland.workspaces.values
|
||||
.filter(workspace => workspace.id > 0)
|
||||
.map(workspace => workspace.id)
|
||||
readonly property int activeWorkspaceId: Hyprland.focusedWorkspace?.id ?? 1
|
||||
readonly property var rootDisk: vitals.disks.length > 0 ? vitals.disks[0] : null
|
||||
|
||||
PwObjectTracker {
|
||||
objects: [root.sink]
|
||||
}
|
||||
|
||||
VitalsData {
|
||||
id: vitals
|
||||
active: true
|
||||
}
|
||||
|
||||
Variants {
|
||||
model: Quickshell.screens
|
||||
|
||||
PanelWindow {
|
||||
id: window
|
||||
|
||||
required property var modelData
|
||||
screen: modelData
|
||||
color: "transparent"
|
||||
implicitHeight: 164
|
||||
|
||||
anchors {
|
||||
top: true
|
||||
left: true
|
||||
right: true
|
||||
}
|
||||
|
||||
DenseBarContent {
|
||||
anchors.fill: parent
|
||||
|
||||
hostName: vitals.host || "LOCAL"
|
||||
telemetryReady: vitals.ready && !vitals.failed
|
||||
ratesReady: vitals.ratesReady && !vitals.failed
|
||||
cpuFraction: vitals.cpu
|
||||
cpuThreads: vitals.cpuThreads
|
||||
memoryFraction: vitals.memTotal > 0 ? vitals.memUsed / vitals.memTotal : 0
|
||||
memoryUsedText: vitals.fmtBytes(vitals.memUsed)
|
||||
temperatureCelsius: vitals.cpuTemp
|
||||
networkInterface: vitals.netIface || "NET"
|
||||
networkRxText: vitals.fmtRate(vitals.netRx)
|
||||
networkTxText: vitals.fmtRate(vitals.netTx)
|
||||
storageFraction: root.rootDisk && root.rootDisk.size > 0
|
||||
? root.rootDisk.used / root.rootDisk.size : 0
|
||||
storageFreeText: root.rootDisk
|
||||
? vitals.fmtBytes(root.rootDisk.size - root.rootDisk.used) + " FREE"
|
||||
: "-- FREE"
|
||||
workspaceIds: root.workspaceIds.length > 0 ? root.workspaceIds : [1, 2, 3, 4]
|
||||
activeWorkspaceId: root.activeWorkspaceId
|
||||
trayCount: SystemTray.items.values.length
|
||||
audioFraction: Math.max(0, Math.min(1, root.volume))
|
||||
audioMuted: root.muted
|
||||
|
||||
onWorkspaceActivated: workspaceId => {
|
||||
const workspace = Hyprland.workspaces.values.find(item => item.id === workspaceId);
|
||||
if (workspace)
|
||||
workspace.activate();
|
||||
else
|
||||
Hyprland.dispatch("workspace " + workspaceId);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user