$sinkswitch = wpctl set-default $(pw-dump | jaq -r '.[]|select(.type=="PipeWire:Interface:Node" and .info.props["media.class"]=="Audio/Sink")|[.id,.info.props["node.name"],.info.props["node.description"]]|@tsv' | awk -F'\t' -v d="$(wpctl inspect @DEFAULT_AUDIO_SINK@|awk -F'"' '/node.name/{print $2;exit}')" '$2!=d&&$2!="easyeffects_sink"{a[$3]=$1;n[++devs]=$3}END{if(devs>1){c="walker -d -p \"Audio Device: \"";for(i=1;i<=devs;i++)print n[i]|&c;close(c,"to");c|&getline p;if(p!=""){print a[p];system("notify-send --urgency=low --icon=/run/current-system/sw/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg \""p"\" -h string:x-canonical-private-synchronous:sink-state")}}else if(devs==1){for(k in a){print a[k];system("notify-send --urgency=low --icon=/run/current-system/sw/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg \""k"\" -h string:x-canonical-private-synchronous:sink-state")}}}') >/dev/null && pw-play --volume=0.2 /run/current-system/sw/share/sounds/freedesktop/stereo/audio-volume-change.oga >/dev/null &!


or, escaped for waybar:

"wpctl set-default $(pw-dump | jaq -r '.[]|select(.type==\"PipeWire:Interface:Node\" and .info.props[\"media.class\"]==\"Audio/Sink\")|[.id,.info.props[\"node.name\"],.info.props[\"node.description\"]]|@tsv' | awk -F'\\t' -v d=\"$(wpctl inspect @DEFAULT_AUDIO_SINK@|awk -F'\\\"' '/node.name/{print $2;exit}')\" '$2!=d&&$2!=\"easyeffects_sink\"{a[$3]=$1;n[++devs]=$3}END{if(devs>1){c=\"walker -d -p \\\"Audio Device: \\\"\";for(i=1;i<=devs;i++)print n[i]|&c;close(c,\"to\");c|&getline p;if(p!=\"\"){print a[p];system(\"notify-send --urgency=low --icon=/run/current-system/sw/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg \\\"\"p\"\\\" -h string:x-canonical-private-synchronous:sink-state\")}}else if(devs==1){for(k in a){print a[k];system(\"notify-send --urgency=low --icon=/run/current-system/sw/share/icons/Flat-Remix-Red-Dark/panel/audio-volume-high-symbolic.svg \\\"\"k\"\\\" -h string:x-canonical-private-synchronous:sink-state\")}}}') >/dev/null && pw-play --volume=0.2 /run/current-system/sw/share/sounds/freedesktop/stereo/audio-volume-change.oga >/dev/null &!"

there’s probably a lot to improve here, took forever to get this working, did not do a cleanup pass, jfc this took forever, replace tofi with your menu of choice, thought people should have this.

wishlist: change the icon based on volume level

  • CommunistOP
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    4 months ago

    Tbh all I care about is low dependencies and performance, dunno if that’d help