#!/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