#!/bin/bash -e json="$(pw-dump)" fmt='"\(.id) \(.info.props."node.nick")"' _jq() { jq -r "$*" <<< "$json" } getdev() { local d d="$(_jq ".[].metadata | select(.)[] | select(.key == \"default.configured.audio.$1\").value.name")" _jq ".[] | select(.info.props.\"node.name\" == \"$d\") | $fmt" } getdevs() { _jq ".[] | select(.info.props.\"media.class\" == \"Audio/$1\") | $fmt" } case "$1" in s) CLASS=Sink ;; m) CLASS=Source ;; *) exit 1 ;; esac dev="$(getdev "${CLASS,,}")" if [ -n "$dev" ]; then devs="$(getdevs "$CLASS" | grep -v "$dev")"$'\n'"* $dev" else devs="$(getdevs "$CLASS")" fi read -r id <<< "$(dmenu -l 16 <<< "$devs" | sed 's/*//')" wpctl set-default "$id" touch "$XDG_RUNTIME_DIR/sbar/vol"