Files
i3-dot/i3/scripts/volume
T
2026-06-15 02:07:53 +07:00

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}%"