aboutsummaryrefslogtreecommitdiff
path: root/scripts/.local/bin/personal/volctl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/.local/bin/personal/volctl')
-rwxr-xr-xscripts/.local/bin/personal/volctl93
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