diff options
Diffstat (limited to '.local/bin/vol')
-rwxr-xr-x | .local/bin/vol | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/.local/bin/vol b/.local/bin/vol index 4da6c18..84c913e 100755 --- a/.local/bin/vol +++ b/.local/bin/vol @@ -27,26 +27,31 @@ main() [ $# -lt 1 ] && usage && exit 1 + DEFAULT_SINK_NAME="$(pactl info | awk -F': ' '/Default Sink/ { print $NF }')" + DEFAULT_SINK_INDEX="$(pactl list short sinks | awk -v index_number="$DEFAULT_SINK_NAME" '$2==index_number {print $1}')" + case "$1" in inc) - amixer set Master ${2:-5}%+ > /dev/null - notify="Level increased to $(volume_level)%" + pactl set-sink-volume @DEFAULT_SINK@ +${2:-5}% > /dev/null + notify="Increased '$DEFAULT_SINK_NAME' ($DEFAULT_SINK_INDEX) to $(volume_level)%" ;; dec) - amixer set Master ${2:-5}%- > /dev/null - notify="Level decreased to $(volume_level)%" + pactl set-sink-volume @DEFAULT_SINK@ -${2:-5}% > /dev/null + notify="Decreased '$DEFAULT_SINK_NAME' ($DEFAULT_SINK_INDEX) to $(volume_level)%" ;; set) - amixer set Master $2% > /dev/null - notify="Level set to $(volume_level)%" + [ -z "$2" ] && usage && exit 1 + + pactl set-sink-volume @DEFAULT_SINK@ $2% > /dev/null + notify="Set '$DEFAULT_SINK_NAME' ($DEFAULT_SINK_INDEX) to $(volume_level)%" ;; on) - amixer set Master on > /dev/null - notify="Unmuted at $(volume_level)%" + pactl set-sink-mute @DEFAULT_SINK@ 0 > /dev/null + notify="Unmuted '$DEFAULT_SINK_NAME' ($DEFAULT_SINK_INDEX) at $(volume_level)%" ;; off) - amixer set Master off > /dev/null - notify="Muted" + pactl set-sink-mute @DEFAULT_SINK@ 1 > /dev/null + notify="Muted '$DEFAULT_SINK_NAME' ($DEFAULT_SINK_INDEX)" ;; toggle) case "$(volume_state)" in @@ -56,17 +61,23 @@ main() ;; esac + printf "%s\n" "$notify" notify-send -n 19269 -s -t 2 -i "$(volume_icon)" "Volume" "$notify" } volume_level() { - amixer get Master | awk '/Left:/ { print $5 }' | head -n 1 | tr -d '[]%' + + pactl list sinks \ + | perl -000ne 'if(/#'"$DEFAULT_SINK_INDEX"'/){/(Volume:.*)/; print "$1\n"}' \ + | sed 's/.*\ \(.*\)%.*/\1/g' } volume_state() { - amixer get Master | awk '/Left:/ { print $6 }' | head -n 1 | tr -d '[]' + pactl list sinks \ + | perl -000ne 'if(/#'"$DEFAULT_SINK_INDEX"'/){/(Mute:.*)/; print "$1\n"}' \ + | awk '$NF == "no" { print "on" } $NF == "yes" { print "off" }' } volume_icon() |