#!/bin/sh set -xe # depends on: awk, pactl, pacmd, notify-send MAX_VOL=150 STEP=10 notify() { volume=$(get_vol_$TARGET) if is_muted_$TARGET; then s="Muted" else s="Volume" fi s=$(echo "${TARGET} ${s}" | sed 's/^\(.\)/\U\1/') notify-send "${s}" "${volume}%" \ --app-name=volumesh \ --hint=int:value:"$volume" } round() { awk '{ print int($1/'$STEP')*'$STEP'; }' } round_vol() { rounded=$(get_vol_$TARGET | round) newvol=$(min $MAX_VOL $rounded) } min() { printf '%i\n' ${@} | sort -n | head -n1 } # Pulse{{{ get_vol_system() { pamixer --get-volume } is_muted_system() { test "$(pamixer --get-mute)" = "true" >/dev/null } change_vol_system() { pamixer "-$1" "$(min 120 $2)" round_vol pamixer --set-volume "${newvol}" if test -n "$VOLUME_CHANGE_SOUND" then paplay "$VOLUME_CHANGE_SOUND" fi } toggle_mute_system() { pactl set-sink-mute @DEFAULT_SINK@ toggle } #}}} # Mpd {{{ get_vol_mpd() { env LC_ALL=C mpc vol | sed -e 's/^.*://g' -e 's/%.*$//g' -e 's/ //g' } is_muted_mpd() { env LC_ALL=C mpc status | grep '\[paused\]' 1>/dev/null } change_vol_mpd() { case $1 in d) op="-";; i) op="+";; esac mpc vol "${op}${2}" &>/dev/null round_vol mpc vol "${newvol}" &>/dev/null } toggle_mute_mpd() { mpc toggle } #}}} usage() { local CNAME=$(basename $0) echo "${CNAME} [-m][-di ]" echo "${CNAME} [-m][-t]" echo "" echo "Options:" echo " -m --mpd Target mpd instead of PulseAudio" echo " -i --increase of volume to increase" echo " -d --decrease of volume to decrease" echo " -t --toggle Mute/Unmute target" echo " -h --help Show This help message" exit "$1" } TARGET=system while [ $# -gt 0 ]; do case $1 in -m | --mpd) TARGET=mpd shift ;; -i | --increase) shift change_vol_$TARGET i $1 shift ;; -d | --decrease) shift change_vol_$TARGET d $1 shift ;; -t | --toggle) toggle_mute_$TARGET shift ;; -h | --help) usage 0 ;; *) usage 1 ;; esac done notify # vim: fdm=marker