diff --git a/bin/sway_volume b/bin/sway_volume index ec2728a..c1a4f1d 100755 --- a/bin/sway_volume +++ b/bin/sway_volume @@ -1,7 +1,5 @@ #!/bin/bash source $HOME/.config/sway/bin/sway_helpers -SINK=$(pactl info | grep "Default Sink" | cut -d ' ' -f 3) -SOURCE=$(pactl info | grep "Default Source" | cut -d ' ' -f 3) ICON_PATH=$HOME/.local/share/icons/Tela-circle-dark/16/actions NOTIFY_APP="dunstify -a volume -h string:x-dunst-stack-tag:volume" APP="pavucontrol" @@ -12,11 +10,21 @@ VOL1="●" # echo -e '\u25cc' VOL2="◌" +function _get_default_sink() { + pactl info | grep "Default Sink" | cut -d ' ' -f 3 +} + +function _get_sink_nick() { + pactl -f json list sinks | jq -c ".[] | select(.name | contains(\"$1\")) | .properties.\"device.nick\"" | sed 's/"//g' +} + function notify() { + SINK=$(_get_default_sink) SINK_VOLUME=$(pactl list sinks | grep "Name: $SINK" -A 8 | grep -oE '[0-9]*%' | head -n 1 | sed 's/%//') SOURCE_VOLUME=$(pactl list sources | grep "Name: $SOURCE" -A 8 | grep -oE '[0-9]*%' | head -n 1 | sed 's/%//') MUTE=$(pactl list sinks | grep "Name: $SINK" -A 8 | grep 'Mute:' | cut -d " " -f 2) SOURCE_MUTE=$(pactl list sources | grep "Name: $SOURCE" -A 8 | grep 'Mute:' | cut -d " " -f 2) + NICK=$(_get_sink_nick $SINK) ICON=$ICON_PATH/audio-volume-high.svg SINK_ICON="" @@ -35,11 +43,16 @@ function notify() { fi TITLE="${SINK_ICON} ${SINK_VOLUME}% / ${SOURCE_ICON} ${SOURCE_VOLUME}%" # $NOTIFY_APP -i $ICON -a "Volume" "$TEXT" - $NOTIFY_APP -i $ICON "$TITLE" "$(getProgressString 10 "$VOL1" "$VOL2" $SINK_VOLUME)" + $NOTIFY_APP -i $ICON "$TITLE" "$NICK\n$(getProgressString 10 "$VOL1" "$VOL2" $SINK_VOLUME)" +} + +function _toggle_sink() { + sink_next=$(pactl list sinks | grep node\.name | grep -oE '"[a-zA-Z0-9_.-]*"' | grep -v $1 | sed 's/"//g' | sort -R) + pactl set-default-sink $sink_next } ## helpers -function _toggle() { +function _toggle_app() { a=$1 if [ $(pgrep $a) ]; then killall $a @@ -49,6 +62,8 @@ function _toggle() { } ## main +SINK=$(pactl info | grep "Default Sink" | cut -d ' ' -f 3) +SOURCE=$(pactl info | grep "Default Source" | cut -d ' ' -f 3) if [ -z "$SINK" ]; then _log VOLUME ERROR args: $* exit 1 @@ -84,10 +99,15 @@ case $1 in paplay $SOUND & notify ;; + # toggle between sinks + t*) + _toggle_sink $SINK + notify + ;; # show gui - gui) + g*) _check_app $APP - _toggle $APP + _toggle_app $APP ;; *) echo "invalid command: \"$1\"" diff --git a/waybar.d/config b/waybar.d/config index 6298d8c..2897b99 100644 --- a/waybar.d/config +++ b/waybar.d/config @@ -160,7 +160,7 @@ "min-length": 7, "max-length": 12, "on-click": "$HOME/.config/sway/bin/sway_volume mute", - "on-click-middle": "$HOME/.config/sway/bin/sway_volume source-mute", + "on-click-middle": "$HOME/.config/sway/bin/sway_volume toggle-sink", "on-click-right": "$HOME/.config/sway/bin/sway_volume gui", "on-scroll-up": "$HOME/.config/sway/bin/sway_volume increase", "on-scroll-down": "$HOME/.config/sway/bin/sway_volume decrease-mute"