You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
#!/bin/bash |
|
#---------------------------------------------------------------- |
|
# volctl — Volume control wrapper for PipeWire + WirePlumber |
|
# |
|
# Replaces the old ratflow volctl (PulseAudio-based). |
|
# Uses wpctl (WirePlumber CLI) for volume management. |
|
# |
|
# Usage: |
|
# volctl up — increase volume by 5% |
|
# volctl down — decrease volume by 5% |
|
# volctl toggle — toggle mute on default sink |
|
# volctl mute — mute default sink |
|
# volctl unmute — unmute default sink |
|
# |
|
# Environment: |
|
# SINK_NUM — if set, selects Nth sink (0=default, 1=next, etc.) |
|
# mirrors the old VOLCTL_SINK_NUM behavior |
|
# |
|
# Dependencies: wireplumber, wpctl, pipewire, pipewire-pulse |
|
#---------------------------------------------------------------- |
|
|
|
STEP=5 |
|
|
|
# Resolve which sink to use based on SINK_NUM (like old VOLCTL_SINK_NUM) |
|
# SINK_NUM=0 or unset → default sink, SINK_NUM=1 → second sink, etc. |
|
get_sink_id() { |
|
local num="${SINK_NUM:-0}" |
|
if [ "$num" = "0" ]; then |
|
echo "@DEFAULT_AUDIO_SINK@" |
|
else |
|
# List sinks and pick the Nth one (1-indexed in SINK_NUM) |
|
local sinks |
|
sinks=$(wpctl status | grep -A 100 'Audio' | grep -A 100 'Sinks:' | grep -oP '\d+\.' | head -n $((num + 1)) | tail -1 | tr -d '.') |
|
if [ -z "$sinks" ]; then |
|
echo "@DEFAULT_AUDIO_SINK@" |
|
else |
|
echo "$sinks" |
|
fi |
|
fi |
|
} |
|
|
|
SINK=$(get_sink_id) |
|
|
|
case "$1" in |
|
up) |
|
wpctl set-volume -l 1.5 "$SINK" "${STEP}%+" |
|
;; |
|
down) |
|
wpctl set-volume "$SINK" "${STEP}%-" |
|
;; |
|
toggle) |
|
wpctl set-mute "$SINK" toggle |
|
;; |
|
mute) |
|
wpctl set-mute "$SINK" 1 |
|
;; |
|
unmute) |
|
wpctl set-mute "$SINK" 0 |
|
;; |
|
*) |
|
echo "Usage: volctl {up|down|toggle|mute|unmute}" |
|
echo " Set SINK_NUM env var to select sink (0=default, 1=second, etc.)" |
|
exit 1 |
|
;; |
|
esac |
|
|
|
# Optional: send signal to waybar to update volume display |
|
# pkill -SIGRTMIN+1 waybar
|
|
|