diff options
Diffstat (limited to '.local/bin/set-audio-sink')
-rwxr-xr-x | .local/bin/set-audio-sink | 61 |
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 +) + |