87 lines
3.0 KiB
QML
87 lines
3.0 KiB
QML
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|