import Quickshell.Services.UPower import Quickshell.Services.Pipewire import QtQuick import QtQuick.Layouts import qs import qs.settings import qs.widgets Rectangle { id: root color: Colors.surface_container_low implicitWidth: iconLayout.implicitWidth + 14 implicitHeight: Settings.config.barHeight / 1.5 radius: Settings.config.rounding property var battery: UPower.displayDevice property var percentage: UPower.displayDevice.percentage property bool charging: UPower.displayDevice.state == UPowerDeviceState.Charging property bool hasBattery: UPower.displayDevice.isLaptopBattery property var audio: Pipewire.ready ? Pipewire.defaultAudioSink : "" property var audioPercentage: Pipewire.ready ? Pipewire.defaultAudioSink.audio.volume : 0 property bool audioMute: Pipewire.ready ? Pipewire.defaultAudioSink.audio.muted : false function getBatteryIcon() { if (charging) { return "\uf250"; } if (percentage <= 0.12) { return "\uf251"; } if (percentage <= 0.24) { return "\uf257"; } if (percentage <= 0.36) { return "\uf256"; } if (percentage <= 0.48) { return "\uf255"; } if (percentage <= 0.60) { return "\uf254"; } if (percentage <= 0.72) { return "\uf253"; } if (percentage <= 0.84) { return "\uf252"; } if (percentage >= 0.84) { return "\uf24f"; } } function getVolumeIcon() { if (audioMute) { return "\ue04f"; } if (audioPercentage <= 0.33) { return "\ue04e"; } if (audioPercentage <= 0.66) { return "\ue04d"; } if (audioPercentage >= 0.66) { return "\ue050"; } } RowLayout { id: iconLayout anchors.centerIn: parent CIcon { id: batteryIcon text: root.getBatteryIcon() } CIcon { id: volIcon text: root.getVolumeIcon() } } property var audioSink: Pipewire.defaultAudioSink PwObjectTracker { objects: Pipewire.ready ? Pipewire.defaultAudioSink : [] } }