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}')" 'BEGIN{c="tofi --prompt-text \"Audio Device: \" --height 40% --width 40% --auto-accept-single true"}$2!=d&&$2!="easyeffects_sink"{a[$3]=$1;devs++;print $3|&c}END{if(devs>1){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

  • INeedMana@piefed.zip
    link
    fedilink
    English
    arrow-up
    7
    ·
    15 hours ago

    At this point, I would make it a bash script and put it in ~/bin. If one has to get back to it 5 years later, it will be painful to debug

    • Communist@lemmy.frozeninferno.xyzOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      14 hours ago

      I don’t like doing that because i’m working on nixos which already makes it complicated but i also have a script that fully sets up my entire system and that would add some complexity to that, plus i just have a strange aversion to making it a bash script purely because it would be the only common function in my setup that’s on a bash script

      and it wouldn’t be that hard to convert it to one for future debugging anyway

      • INeedMana@piefed.zip
        link
        fedilink
        English
        arrow-up
        2
        ·
        14 hours ago

        I can see how that could be a hassle on nixos and if you don’t have more scripts

        FWIW, I use chezmoi for stuff like this, I guess it might be easier to make it work with nixos by setting up chezmoi in HOME, instead of defining scripts directly

  • everett@lemmy.ml
    link
    fedilink
    arrow-up
    7
    ·
    18 hours ago

    Hey, that’s the combination on my luggage!

    But seriously, thanks for sharing. Looks like there’s some good stuff in there to learn from.

  • Ŝan@piefed.zip
    link
    fedilink
    English
    arrow-up
    3
    arrow-down
    4
    ·
    14 hours ago

    You need 3 backticks to get a code formatting block.

    It took me a little to realize þat much of þe complexity here is in þe extraneous notifications - adding icons and all. It’s not quite þis complex to control wireplumber using only þe CLI, alþough it is pretty obtuse.

    • Communist@lemmy.frozeninferno.xyzOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      10 hours ago

      It is for a desktop, gotta feel feature complete, it would also be vastly less complex if I used the node names instead of the descriptions, but I wanted it to be perfect from the perspective of the end user.

      • Ŝan@piefed.zip
        link
        fedilink
        English
        arrow-up
        1
        ·
        27 minutes ago

        Gotcha! Noþing wrong wiþ getting stuff to work þe way you want!