1
1
Fork 0
nixos/options/custom/scripts/audio.sh
Myned 20cd92006e
audio: refactor with argc
Signed-off-by: Myned <dev@bjork.tech>
2024-09-27 14:51:18 -05:00

68 lines
1.5 KiB
Bash

#! /usr/bin/env bash
# @describe Wrapper for toggling between audio profiles
#
# https://github.com/sigoden/argc
# HACK: Condition based on file content, requires execution at login to set state
#?? exec-once = audio --init
# @meta combine-shorts
# @arg profile=Normalizer EasyEffects profile to toggle to
# @option -F --flat=`_default_flat` Flat profile to toggle from
# @option -f --file=`_default_file` Specify file for state
# @flag -b --bypass Toggle bypass instead of flat profile
# @flag -i --init Enforce state without toggling
_default_file() {
echo "$HOME/.audio"
}
_default_flat() {
echo Flat
}
eval "$(argc --argc-eval "$0" "$@")"
# Get current profile from file
if [[ -f "${argc_file:-}" ]]; then
profile="$(cat "${argc_file:-}")"
else
# Create file with flat profile if missing
profile="${argc_flat:-}"
echo "$profile" > "${argc_file:-}"
fi
# Toggle profile
if ! [[ "${argc_init:-}" ]]; then
if [[ "$profile" == "${argc_profile:-}" ]]; then
# Flat or bypass
if [[ "${argc_bypass:-}" ]]; then
profile=1
else
profile="${argc_flat:-}"
fi
else
# Specified profile
profile="${argc_profile:-}"
fi
fi
# Enforce profile
if [[ "$profile" == 1 ]]; then
easyeffects --bypass 1 # Enable
if ! [[ "${argc_init:-}" ]]; then
notify-send "> audio" "Bypass" --urgency low
fi
else
easyeffects --load-preset "$profile"
easyeffects --bypass 2 # Disable
if ! [[ "${argc_init:-}" ]]; then
notify-send "> audio" "$profile" --urgency low
fi
fi
# Save state
echo "$profile" > "${argc_file:-}"