first commit arch
This commit is contained in:
194
arch/polybar/scripts/pavolume.sh
Executable file
194
arch/polybar/scripts/pavolume.sh
Executable file
@@ -0,0 +1,194 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# finds the active sink for pulse audio and increments the volume. useful when you have multiple audio outputs and have a key bound to vol-up and down
|
||||
|
||||
osd='no'
|
||||
inc='2'
|
||||
capvol='no'
|
||||
maxvol='200'
|
||||
autosync='yes'
|
||||
|
||||
# Muted status
|
||||
# yes: muted
|
||||
# no : not muted
|
||||
curStatus="no"
|
||||
active_sink=""
|
||||
limit=$((100 - inc))
|
||||
maxlimit=$((maxvol - inc))
|
||||
|
||||
reloadSink() {
|
||||
active_sink=$(pacmd list-sinks | awk '/* index:/{print $3}')
|
||||
}
|
||||
|
||||
function volUp {
|
||||
|
||||
getCurVol
|
||||
|
||||
if [ "$capvol" = 'yes' ]
|
||||
then
|
||||
if [ "$curVol" -le 100 ] && [ "$curVol" -ge "$limit" ]
|
||||
then
|
||||
pactl set-sink-volume "$active_sink" -- 100%
|
||||
elif [ "$curVol" -lt "$limit" ]
|
||||
then
|
||||
pactl set-sink-volume "$active_sink" -- "+$inc%"
|
||||
fi
|
||||
elif [ "$curVol" -le "$maxvol" ] && [ "$curVol" -ge "$maxlimit" ]
|
||||
then
|
||||
pactl set-sink-volume "$active_sink" "$maxvol%"
|
||||
elif [ "$curVol" -lt "$maxlimit" ]
|
||||
then
|
||||
pactl set-sink-volume "$active_sink" "+$inc%"
|
||||
fi
|
||||
|
||||
getCurVol
|
||||
|
||||
if [ ${osd} = 'yes' ]
|
||||
then
|
||||
qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0
|
||||
fi
|
||||
|
||||
if [ ${autosync} = 'yes' ]
|
||||
then
|
||||
volSync
|
||||
fi
|
||||
}
|
||||
|
||||
function volDown {
|
||||
|
||||
pactl set-sink-volume "$active_sink" "-$inc%"
|
||||
getCurVol
|
||||
|
||||
if [ ${osd} = 'yes' ]
|
||||
then
|
||||
qdbus org.kde.kded /modules/kosd showVolume "$curVol" 0
|
||||
fi
|
||||
|
||||
if [ ${autosync} = 'yes' ]
|
||||
then
|
||||
volSync
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
function getSinkInputs {
|
||||
input_array=$(pacmd list-sink-inputs | grep -B 4 "sink: $1 " | awk '/index:/{print $2}')
|
||||
}
|
||||
|
||||
function volSync {
|
||||
getSinkInputs "$active_sink"
|
||||
getCurVol
|
||||
|
||||
for each in $input_array
|
||||
do
|
||||
pactl set-sink-input-volume "$each" "$curVol%"
|
||||
done
|
||||
}
|
||||
|
||||
function getCurVol {
|
||||
curVol=$(pacmd list-sinks | grep -A 15 "index: $active_sink$" | grep 'volume:' | grep -E -v 'base volume:' | awk -F : '{print $3}' | grep -o -P '.{0,3}%'| sed s/.$// | tr -d ' ')
|
||||
}
|
||||
|
||||
function volMute {
|
||||
case "$1" in
|
||||
mute)
|
||||
pactl set-sink-mute "$active_sink" 1
|
||||
curVol=0
|
||||
status=1
|
||||
;;
|
||||
unmute)
|
||||
pactl set-sink-mute "$active_sink" 0
|
||||
getCurVol
|
||||
status=0
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ${osd} = 'yes' ]
|
||||
then
|
||||
qdbus org.kde.kded /modules/kosd showVolume ${curVol} ${status}
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
function volMuteStatus {
|
||||
curStatus=$(pacmd list-sinks | grep -A 15 "index: $active_sink$" | awk '/muted/{ print $2}')
|
||||
}
|
||||
|
||||
# Prints output for bar
|
||||
# Listens for events for fast update speed
|
||||
function listen {
|
||||
firstrun=0
|
||||
|
||||
pactl subscribe 2>/dev/null | {
|
||||
while true; do
|
||||
{
|
||||
# If this is the first time just continue
|
||||
# and print the current state
|
||||
# Otherwise wait for events
|
||||
# This is to prevent the module being empty until
|
||||
# an event occurs
|
||||
if [ $firstrun -eq 0 ]
|
||||
then
|
||||
firstrun=1
|
||||
else
|
||||
read -r event || break
|
||||
if ! echo "$event" | grep -e "on card" -e "on sink"
|
||||
then
|
||||
# Avoid double events
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
} &>/dev/null
|
||||
output
|
||||
done
|
||||
}
|
||||
}
|
||||
|
||||
function output() {
|
||||
reloadSink
|
||||
getCurVol
|
||||
volMuteStatus
|
||||
if [ "${curStatus}" = 'yes' ]
|
||||
then
|
||||
echo " $curVol%"
|
||||
else
|
||||
echo " $curVol%"
|
||||
fi
|
||||
} #}}}
|
||||
|
||||
reloadSink
|
||||
case "$1" in
|
||||
--up)
|
||||
volUp
|
||||
;;
|
||||
--down)
|
||||
volDown
|
||||
;;
|
||||
--togmute)
|
||||
volMuteStatus
|
||||
if [ "$curStatus" = 'yes' ]
|
||||
then
|
||||
volMute unmute
|
||||
else
|
||||
volMute mute
|
||||
fi
|
||||
;;
|
||||
--mute)
|
||||
volMute mute
|
||||
;;
|
||||
--unmute)
|
||||
volMute unmute
|
||||
;;
|
||||
--sync)
|
||||
volSync
|
||||
;;
|
||||
--listen)
|
||||
# Listen for changes and immediately create new output for the bar
|
||||
# This is faster than having the script on an interval
|
||||
listen
|
||||
;;
|
||||
*)
|
||||
# By default print output for bar
|
||||
output
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user