47 lines
1.1 KiB
Bash
Executable File
47 lines
1.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# i3blocks volume block for PipeWire (PulseAudio compatible)
|
|
|
|
STEP=${1:-5%}
|
|
|
|
# Default sink
|
|
SINK=$(pactl info | awk '/Default Sink/ {print $3}')
|
|
[[ -z "$SINK" ]] && { echo "No audio"; exit 0; }
|
|
|
|
# Handle scroll/middle-click
|
|
case "$BLOCK_BUTTON" in
|
|
3) pactl set-sink-mute "$SINK" toggle ;; # right click = mute/unmute
|
|
4) pactl set-sink-volume "$SINK" +$STEP ;; # scroll up
|
|
5) pactl set-sink-volume "$SINK" -$STEP ;; # scroll down
|
|
esac
|
|
|
|
# Get current volume (front-left channel)
|
|
VOL=$(pactl list sinks | awk -v s="$SINK" '
|
|
$0 ~ "Name: " s {found=1}
|
|
found && /Volume:/ {gsub("%","",$5); print $5; exit}
|
|
')
|
|
|
|
# Get mute state
|
|
MUTED=$(pactl list sinks | awk -v s="$SINK" '
|
|
$0 ~ "Name: " s {found=1}
|
|
found && /Mute:/ {print $2; exit}
|
|
')
|
|
|
|
# Choose symbol
|
|
AUDIO_HIGH=''
|
|
AUDIO_MED=''
|
|
AUDIO_LOW=''
|
|
AUDIO_MUTED=''
|
|
MED_THRESH=50
|
|
LOW_THRESH=0
|
|
|
|
if [[ "$MUTED" == "no" ]]; then
|
|
SYMB=$AUDIO_HIGH
|
|
[[ $VOL -le $MED_THRESH ]] && SYMB=$AUDIO_MED
|
|
[[ $VOL -le $LOW_THRESH ]] && SYMB=$AUDIO_LOW
|
|
else
|
|
SYMB=$AUDIO_MUTED
|
|
fi
|
|
|
|
# Single-line output for i3blocks
|
|
echo "${SYMB} ${VOL}%"
|