#/bin/sh list_of_sinks_to_toggle=("alsa_output.usb-HP__Inc_HyperX_Cloud_Alpha_Wireless_00000001-00.analog-stereo" "bluez_output.90_F2_60_64_1E_12.1") get_current_sink() { pactl get-default-sink } is_bluetooth_speaker_connected() { pactl list sinks | grep "Name:" | awk -F ' ' '{print $2}' | grep --color=never "bluez_output.90_F2_60_64_1E_12.1" } pre_change_command() { if [ $1 == "bluez_output.90_F2_60_64_1E_12.1" ] then if [ -z $(is_bluetooth_speaker_connected) ] then notify-send "Speaker Toggler" "Connecting bluetooth speakers" bluetoothctl connect 90:F2:60:64:1E:12 > /dev/null 2>&1 status=$? if [ $? -ne 0 ] then notify-send "Speaker Toggler" "Could not connect bluetooth speaker\nMaybe it is not turned on?" exit 1 fi while [ -z $(is_bluetooth_speaker_connected) ] do sleep 0.05 done fi fi } current_sink=$(get_current_sink) index=-1; for i in "${!list_of_sinks_to_toggle[@]}" do if [ "${list_of_sinks_to_toggle[$i]}" == "$current_sink" ] then index=$i fi done if [ $index == -1 ] then echo "err: current sink not found in cycle" fi next_index=$(((index + 1) % ${#list_of_sinks_to_toggle[@]} )) next_sink=${list_of_sinks_to_toggle[$next_index]} pre_change_command $next_sink pactl set-default-sink $next_sink