#!/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 )