diff options
author | EuAndreh <eu@euandre.org> | 2022-08-16 18:58:19 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2022-08-16 18:58:19 -0300 |
commit | 6d3b1e32f80f3a450d30bec461e0a1993112d5d1 (patch) | |
tree | 0af8fdec0926092a5e138ae0bdefe5c2041035a1 | |
parent | bin/tuivid: Add working version (diff) | |
download | dotfiles-6d3b1e32f80f3a450d30bec461e0a1993112d5d1.tar.gz dotfiles-6d3b1e32f80f3a450d30bec461e0a1993112d5d1.tar.xz |
bin/volume: Add working version
-rwxr-xr-x | bin/volume | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/bin/volume b/bin/volume new file mode 100755 index 0000000..991fbc7 --- /dev/null +++ b/bin/volume @@ -0,0 +1,112 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + volume ACTION + volume -h + EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message + + ACTION one of: + - up + - down + - toggle + - rotate + + + Manage the audio output. + + + Examples: + + Increase the volume: + + $ volume up + + + Toggle mute/unmute in the current audio output: + + $ volume toggle + + + Change the audio output: + + $ volume rotate + EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) +ACTION="${1:-}" + +eval "$(assert-arg "$ACTION" 'ACTION')" + + +rotate() { + # This script assumes that at most 2 sinks exist at any time. + # When this premise is no longer true, it needs to be upgraded. + + CURRENT="$(pacmd list-sinks | grep '\* index' | cut -d: -f2 | tr -d ' ')" + OTHER="$(pacmd list-sinks | grep index | grep -v '\* index' | tail -n1 | cut -d: -f2 | tr -d ' ')" + + if [ "$CURRENT" = 0 ]; then + pacmd set-default-sink "$OTHER" + else + pacmd set-default-sink 0 + fi +} + +case "$ACTION" in + up) + pactl set-sink-volume @DEFAULT_SINK@ +10% + ;; + down) + pactl set-sink-volume @DEFAULT_SINK@ -10% + ;; + toggle) + pactl set-sink-mute @DEFAULT_SINK@ toggle + ;; + rotate) + rotate + ;; + *) + printf 'Bad ACTION: %s.\n\n' "$ACTION" >&2 + usage >&2 + exit 2 + ;; +esac |