dotfiles/eww/scripts/get-audio

73 lines
1.3 KiB
Bash
Executable file

#!/bin/env zsh
volume() {
pactl get-sink-volume @DEFAULT_SINK@ | rg 'Volume: front-left:\s+\d+\s+/\s+(\d+)%' -or '$1' --color=never
}
mute() {
if [[ "$(pactl get-sink-mute @DEFAULT_SINK@)" =~ 'yes' ]]; then
echo "true"
else
echo "false"
fi
}
get_device_id() {
~/.config/eww/scripts/get-audio-device-id "$1"
}
HEADPHONES=""
HEADPHONES_ICON='󰋋'
SPEAKERS=""
SPEAKERS_ICON='󰓃'
HEADPHONE_MIC=""
HEADPHONE_MIC_ICON='󰋎'
BLUE_MIC=""
BLUE_MIC_ICON=''
UNKNOWN_ICON='?'
get_ids() {
HEADPHONES="$(get_device_id 'headphones')"
SPEAKERS="$(get_device_id 'speakers')"
HEADPHONE_MIC="$(get_device_id 'headphone_mic')"
BLUE_MIC="$(get_device_id 'blue_mic')"
}
audio_sink() {
case "$(pactl get-default-sink)" in
"$HEADPHONES") echo "$HEADPHONES_ICON"
;;
"$SPEAKERS") echo "$SPEAKERS_ICON"
;;
*) echo "$UNKNOWN_ICON"
;;
esac
}
audio_source() {
case "$(pactl get-default-source)" in
"$HEADPHONE_MIC") echo "$HEADPHONE_MIC_ICON"
;;
"$BLUE_MIC") echo "$BLUE_MIC_ICON"
;;
*) echo "$UNKNOWN_ICON"
;;
esac
}
audio() {
echo "{\"volume\":$(volume),\"muted\":$(mute),\"sink\":\"$(audio_sink)\",\"source\":\"$(audio_source)\"}"
}
get_ids
audio
sleep 3
get_ids
audio
pactl subscribe | while read -r LINE; do
if [[ "$LINE" =~ 'change' ]]; then
audio
get_ids
fi
done