diff options
Diffstat (limited to 'scripts/.local/bin/personal/volctl')
-rwxr-xr-x | scripts/.local/bin/personal/volctl | 93 |
1 files changed, 74 insertions, 19 deletions
diff --git a/scripts/.local/bin/personal/volctl b/scripts/.local/bin/personal/volctl index 8a02d1b..43d2a9a 100755 --- a/scripts/.local/bin/personal/volctl +++ b/scripts/.local/bin/personal/volctl @@ -1,23 +1,78 @@ #!/bin/bash # A script to manage the volume on my system universally +# Depends on: bash, pactl, libnotify +# By David Penkowoj, 2024-09-16 -sink="$(pactl get-default-sink)" -volume="$(pamixer --get-volume)" - -if [ "$1" = "increase" ] -then - pactl set-sink-volume "$sink" +5% -elif [ "$1" = "decrease" ] -then - pactl set-sink-volume "$sink" -5% -elif [ "$1" = "mute" ] -then - # TODO: Make this a toggle with memory - pactl set-sink-volume "$sink" 0% -elif [ "$1" = "check" ] -then - printf "%s\n" "$volume" -else - printf "[ Error ] Not enough arguments.\n" -fi +memfile="/tmp/$(whoami)-volctl.memtxt" + +# Headphones +def_sink="$(pactl get-default-sink)" +sink_volume="$(pactl get-sink-volume "$def_sink" | grep -o [0-9]*% | head -n 1)" + +# Microphone +def_source="$(pactl get-default-source)" +source_volume="$(pactl get-source-volume "$def_source" | grep -o [0-9]*% | head -n 1)" + +# Send notification +notify_volume() { + v="$2" + + if [ "$2" == "0%" ]; then + v="muted" + fi + + notify-send -u low -r "110" "$1 volume: $v" +} + +# Toggle headphones volume +toggle_deaf() { + newvol="0%" + + if [ "$sink_volume" == "0%" ]; then + newvol="$(<"$memfile")" + pactl set-sink-volume "$def_sink" "$newvol" + else + echo "$sink_volume" > "$memfile" + pactl set-sink-volume "$def_sink" 0% + fi + + # notify_volume "Output" "$newvol" +} + +# Toggle microphone volume +toggle_mute() { + newvol="0%" + + if [ "$source_volume" == "0%" ]; then + pactl set-source-volume "$def_source" 70% + newvol="70%" + else + pactl set-source-volume "$def_source" 0% + fi + + notify_volume "Input" "$newvol" +} + +# Decide what to do +case "$1" in + "up") + pactl set-sink-volume "$def_sink" +5% + ;; + "down") + pactl set-sink-volume "$def_sink" -5% + ;; + "deaf") + toggle_deaf + ;; + "mute") + toggle_mute + ;; + "get") + printf "In: %s, Out: %s\n" "$source_volume" "$sink_volume" + ;; + *) + printf "[ Error ] Usage: volctl [up|down|deaf|mute|get]" + exit 1 + ;; +esac |