44 lines
1 KiB
Bash
Executable file
44 lines
1 KiB
Bash
Executable file
#!/bin/bash
|
|
until pactl info &>/dev/null; do
|
|
sleep 0.5
|
|
done
|
|
|
|
sleep 3
|
|
|
|
WOB_SOCK="${XDG_RUNTIME_DIR}/wob.sock"
|
|
prev_vol=""
|
|
prev_muted=""
|
|
|
|
get_vol() {
|
|
pactl get-sink-volume @DEFAULT_SINK@ 2>/dev/null | grep -oP '\d+(?=%)' | head -1
|
|
}
|
|
|
|
get_muted() {
|
|
pactl get-sink-mute @DEFAULT_SINK@ 2>/dev/null | grep -q yes && echo 1 || echo 0
|
|
}
|
|
|
|
pactl subscribe 2>/dev/null | grep --line-buffered "^Event 'change' on sink #" | while read -r _; do
|
|
# First read
|
|
vol1=$(get_vol)
|
|
muted1=$(get_muted)
|
|
|
|
# Wait and read again — if still changing (app connecting) the values won't match
|
|
sleep 0.25
|
|
vol2=$(get_vol)
|
|
muted2=$(get_muted)
|
|
|
|
# Skip if unstable
|
|
[ "$vol1" != "$vol2" ] || [ "$muted1" != "$muted2" ] && continue
|
|
|
|
# Skip if nothing changed from last shown value
|
|
[ "$vol2" = "$prev_vol" ] && [ "$muted2" = "$prev_muted" ] && continue
|
|
|
|
prev_vol="$vol2"
|
|
prev_muted="$muted2"
|
|
|
|
if [ "$muted2" = "1" ]; then
|
|
echo 0 > "$WOB_SOCK"
|
|
else
|
|
echo "$vol2" > "$WOB_SOCK"
|
|
fi
|
|
done
|