aboutsummaryrefslogtreecommitdiff
path: root/bin/volume
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2022-08-16 18:58:19 -0300
committerEuAndreh <eu@euandre.org>2022-08-16 18:58:19 -0300
commit6d3b1e32f80f3a450d30bec461e0a1993112d5d1 (patch)
tree0af8fdec0926092a5e138ae0bdefe5c2041035a1 /bin/volume
parentbin/tuivid: Add working version (diff)
downloaddotfiles-6d3b1e32f80f3a450d30bec461e0a1993112d5d1.tar.gz
dotfiles-6d3b1e32f80f3a450d30bec461e0a1993112d5d1.tar.xz
bin/volume: Add working version
Diffstat (limited to 'bin/volume')
-rwxr-xr-xbin/volume112
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