summaryrefslogtreecommitdiff
path: root/.local/bin/set-audio-sink
diff options
context:
space:
mode:
Diffstat (limited to '.local/bin/set-audio-sink')
-rwxr-xr-x.local/bin/set-audio-sink61
1 files changed, 61 insertions, 0 deletions
diff --git a/.local/bin/set-audio-sink b/.local/bin/set-audio-sink
new file mode 100755
index 0000000..20ade7a
--- /dev/null
+++ b/.local/bin/set-audio-sink
@@ -0,0 +1,61 @@
+#!/usr/bin/env bash
+# Copyright 2020 Luke Shumaker
+
+errusage() {
+ if (( $# > 0 )); then
+ printf '%s: %s\n' "${0##*/}" "$(printf "$@")" >&2
+ fi
+ printf "Try '%s --help' for more information.\n" "${0##*/}" >&2
+ exit 2
+}
+
+usage() {
+ printf 'Usage: %s [OPTIONS] PULSE_SINK\n' "${0##*/}"
+ printf "Adjust default audio sink, and move currently running programs\n"
+ printf "to that sink.\n"
+ echo
+ printf 'OPTIONS:\n'
+ printf ' -h, --help Show this message\n'
+ printf ' -n, --dry-run Print what would be done, without doing it\n'
+}
+
+set -euE -o pipefail
+args=$(getopt -n "${0##*/}" -o 'hn' -l 'help,dry-run' -- "$@") || errusage
+eval "set -- $args"
+
+arg_dry_run=false
+while (( $# > 0 )); do
+ case "$1" in
+ -h|--help)
+ usage
+ exit 0
+ ;;
+ -n|--dry-run)
+ arg_dry_run=true
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ esac
+done
+if (( $# != 1 )); then
+ errusage
+fi
+
+(
+
+ new_sink=$1
+ printf 'pactl set-default-sink %q\n' "$new_sink"
+ while IFS=$'\t' read -r sink_input current_sink client driver sample_spec; do
+ printf 'pactl move-sink-input %q %q\n' "$sink_input" "$new_sink"
+ done < <(pactl list short sink-inputs)
+) | (
+ if $arg_dry_run; then
+ cat
+ else
+ bash -v
+ fi
+)
+