pragma Singleton import Quickshell import QtQuick import Quickshell.Services.Pipewire Singleton { id: root property bool ready: Pipewire.ready property bool muted: ready ? defaultAudio.audio.muted : true property PwNode defaultAudio: Pipewire.defaultAudioSink property PwNode preferredAudio: Pipewire.preferredDefaultAudioSink property real percentage: Math.round(defaultAudio?.audio.volume * 100) readonly property list sinks: Pipewire.nodes.values.filter(n => n.audio && n.isSink && !n.isStream) readonly property list sources: Pipewire.nodes.values.filter(n => n.audio && !n.isSink && !n.isStream) PwObjectTracker { objects: [...root.sinks, ...root.sources] } function getVolumeIcon(sink) { let mute = root.ready ? sink.audio.muted : true; let volume = root.ready ? sink.audio.volume : 0; if (mute) { return "audio-volume-muted-symbolic"; } if (volume <= 0.33) { return "audio-volume-low-symbolic"; } if (volume <= 0.66) { return "audio-volume-medium-symbolic"; } if (volume >= 0.66) { return "audio-volume-high-symbolic"; } } function setDefaultSink(node: PwNode): void { Pipewire.preferredDefaultAudioSink = node; } }