mirror of
https://github.com/nickolaj-jepsen/nixos.git
synced 2026-01-22 08:06:50 +01:00
95 lines
2.3 KiB
Text
95 lines
2.3 KiB
Text
|
|
#!/usr/bin/env bash
|
||
|
|
|
||
|
|
# FROM HERE: https://github.com/end-4/dots-hyprland/blob/6c09531bc2d168e79b2a76f0174b297a3b66b9b0/.config/eww/scripts/volume
|
||
|
|
|
||
|
|
cd ~/.config/eww
|
||
|
|
|
||
|
|
volicons=("" "" "")
|
||
|
|
XDG_CACHE_HOME="$HOME/.cache"
|
||
|
|
lock=0
|
||
|
|
|
||
|
|
vol() {
|
||
|
|
wpctl get-volume @DEFAULT_AUDIO_$1@ | awk '{print int($2*100)}'
|
||
|
|
}
|
||
|
|
ismuted() {
|
||
|
|
wpctl get-volume @DEFAULT_AUDIO_"$1"@ | rg -i muted
|
||
|
|
echo $?
|
||
|
|
}
|
||
|
|
setvol() {
|
||
|
|
wpctl set-volume @DEFAULT_AUDIO_"$1"@ "$(awk -v n="$2" 'BEGIN{print (n / 100)}')"
|
||
|
|
}
|
||
|
|
setmute() {
|
||
|
|
wpctl set-mute @DEFAULT_AUDIO_"$1"@ toggle
|
||
|
|
}
|
||
|
|
|
||
|
|
if [ "$1" = "--once" ]; then
|
||
|
|
lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
|
||
|
|
ismuted=$(ismuted "SINK")
|
||
|
|
|
||
|
|
if [ "$ismuted" = 1 ]; then
|
||
|
|
icon="${volicons[$lvl]}"
|
||
|
|
else
|
||
|
|
icon=""
|
||
|
|
fi
|
||
|
|
audio=1
|
||
|
|
if [ "$(wpctl status | grep 'MUTED')" == "" ]; then
|
||
|
|
audio=1
|
||
|
|
else
|
||
|
|
audio=0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo '{"icon":"'"$icon"'","audio":"'"$audio"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}'
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [ "$1" = "mute" ]; then
|
||
|
|
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
||
|
|
echo "Can only mute SINK or SOURCE"; exit 1
|
||
|
|
fi
|
||
|
|
setmute "$2"
|
||
|
|
elif [ "$1" = "setvol" ]; then
|
||
|
|
if [ "$2" != "SOURCE" ] && [ "$2" != "SINK" ]; then
|
||
|
|
echo "Can only set volume for SINK or SOURCE"; exit 1
|
||
|
|
elif [ "$3" -lt 1 ] || [ "$3" -gt 100 ]; then
|
||
|
|
echo "Volume must be between 1 and 100"; exit 1
|
||
|
|
fi
|
||
|
|
setvol "$2" "$3"
|
||
|
|
else
|
||
|
|
# initial values
|
||
|
|
lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
|
||
|
|
ismuted=$(ismuted "SINK")
|
||
|
|
|
||
|
|
if [ "$ismuted" = 1 ]; then
|
||
|
|
icon="${volicons[$lvl]}"
|
||
|
|
else
|
||
|
|
icon=""
|
||
|
|
fi
|
||
|
|
audio=1
|
||
|
|
if [ "$(wpctl status | grep 'MUTED')" == "" ]; then
|
||
|
|
audio=1
|
||
|
|
else
|
||
|
|
audio=0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo '{"icon":"'"$icon"'","audio":"'"$audio"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}'
|
||
|
|
|
||
|
|
# event loop
|
||
|
|
pactl subscribe | rg --line-buffered "on sink" | while read -r _; do
|
||
|
|
lvl=$(awk -v n="$(vol "SINK")" 'BEGIN{print int(n/34)}')
|
||
|
|
ismuted=$(ismuted "SINK")
|
||
|
|
|
||
|
|
if [ "$ismuted" = 1 ]; then
|
||
|
|
icon="${volicons[$lvl]}"
|
||
|
|
else
|
||
|
|
icon=""
|
||
|
|
fi
|
||
|
|
audio=1
|
||
|
|
if [ "$(wpctl status | grep 'MUTED')" == "" ]; then
|
||
|
|
audio=1
|
||
|
|
else
|
||
|
|
audio=0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo '{"icon":"'"$icon"'","audio":"'"$audio"'","percent":"'"$(vol "SINK")"'","microphone":"'"$(vol "SOURCE")"'"}'
|
||
|
|
done
|
||
|
|
fi
|