dots-of-war/eggs/scripts/audio-select.sh

54 lines
1.3 KiB
Bash
Raw Permalink Normal View History

2024-12-05 21:10:22 +00:00
#!/bin/bash
list_sinks_with_details() {
pactl list sinks | awk '
BEGIN {
sink_id = ""; sink_name = ""; desc = ""
}
/^Sink / {
if (sink_id != "" && desc != "Ignore") {
print sink_id"\t"desc
}
sink_id = $2;
sink_name = "";
desc = "";
}
/Name:/ {
gsub(/Name: /, "", $0);
sink_name = $0
}
/device.description =/ {
gsub(/.*device.description = "/, "", $0);
gsub(/"$/, "", $0);
desc = $0
}
END {
if (sink_id != "" && desc != "Ignore") {
print sink_id"\t"desc
}
}'
}
SELECTED=$(list_sinks_with_details | column -t -s $'\t' | fzf --height=~100%)
if [ -z "$SELECTED" ]; then
echo "No sink selected."
exit 1
fi
SELECTED_SINK_ID=$(echo "$SELECTED" | awk '{print $1}')
SELECTED_SINK_NAME=$(pactl list sinks | awk -v id="$SELECTED_SINK_ID" '
BEGIN { sink_id = ""; sink_name = "" }
/^Sink / { sink_id = $2 }
/Name:/ { gsub(/Name: /, "", $0); if (sink_id == id) sink_name = $0 }
END { print sink_name }
')
# if the selected sink name is a bluez output, then its bluetooth.
# prompt the user to choose a card profile.
# TODO
# Set the default sink
pactl set-default-sink $SELECTED_SINK_NAME
echo "Sink $SELECTED_SINK_NAME set as default."