76 lines
1.4 KiB
Bash
Executable file
76 lines
1.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
NOTIFY=(
|
|
notify-send
|
|
-u low
|
|
-h string:x-canonical-private-synchronous:change-audio
|
|
)
|
|
|
|
do_change_volume() {
|
|
local args=()
|
|
|
|
if [ "$1" = "up" ]; then
|
|
args+=("-i")
|
|
else
|
|
args+=("-d")
|
|
fi
|
|
shift
|
|
|
|
# Do not boost over 100% unless explitily asked for
|
|
if [ "$1" = "--force" ] || [ "$1" = "-f" ]; then
|
|
args=("--allow-boost" "${args[@]}")
|
|
shift
|
|
fi
|
|
|
|
# Volume
|
|
args+=("$1")
|
|
|
|
pamixer "${args[@]}"
|
|
|
|
newVolume="$(pamixer --get-volume || true)"
|
|
[ "$(pamixer --get-volume-human)" = "muted" ] && isMuted=true
|
|
|
|
MSG="Set volume to $newVolume%"
|
|
if [ "${isMuted:-false}" = true ]; then
|
|
MSG="$MSG (muted)"
|
|
fi
|
|
"${NOTIFY[@]}" \
|
|
-h "int:value:$newVolume" \
|
|
-- "$MSG"
|
|
}
|
|
|
|
do_toggle() {
|
|
local args=()
|
|
if [ "${2:-audio}" = mic ]; then
|
|
args+=(--default-source)
|
|
MSG="Toggled microphone"
|
|
else
|
|
MSG="Toggled audio output"
|
|
fi
|
|
|
|
pamixer "${args[@]}" --toggle-mute
|
|
|
|
if [ "$(pamixer "${args[@]}" --get-mute)" = true ]; then
|
|
MSG="$MSG (muted)"
|
|
else
|
|
MSG="$MSG (unmuted)"
|
|
fi
|
|
|
|
"${NOTIFY[@]}" -- "$MSG"
|
|
}
|
|
|
|
case "$1" in
|
|
up|down)
|
|
do_change_volume "$@"
|
|
;;
|
|
toggle)
|
|
do_toggle "$@"
|
|
;;
|
|
*)
|
|
echo "No suche option '$1'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|