Files
dotfiles/.config/quickshell/nucleus-shell/services/Volume.qml

50 lines
1.4 KiB
QML
Executable File

pragma Singleton
import QtQuick
import Quickshell
import Quickshell.Services.Pipewire
Singleton {
PwObjectTracker {
objects: [
Pipewire.defaultAudioSource,
Pipewire.defaultAudioSink,
Pipewire.nodes,
Pipewire.links
]
}
property var sinks: Pipewire.nodes.values.filter(node => node.isSink && !node.isStream && node.audio)
property PwNode defaultSink: Pipewire.defaultAudioSink
property var sources: Pipewire.nodes.values.filter(node => !node.isSink && !node.isStream && node.audio)
property PwNode defaultSource: Pipewire.defaultAudioSource
property real volume: defaultSink?.audio?.volume ?? 0
property bool muted: defaultSink?.audio?.muted ?? false
function setVolume(to: real): void {
if (defaultSink?.ready && defaultSink?.audio) {
defaultSink.audio.muted = false;
defaultSink.audio.volume = Math.max(0, Math.min(1, to));
}
}
function setSourceVolume(to: real): void {
if (defaultSource?.ready && defaultSource?.audio) {
defaultSource.audio.muted = false;
defaultSource.audio.volume = Math.max(0, Math.min(1, to));
}
}
function setDefaultSink(sink: PwNode): void {
Pipewire.preferredDefaultAudioSink = sink;
}
function setDefaultSource(source: PwNode): void {
Pipewire.preferredDefaultAudioSource = source;
}
function init() {
}
}