aboutsummaryrefslogtreecommitdiff
path: root/scripts/.local/bin/personal/volctl
blob: 43d2a9a0fef56900c378c60f46c533cece7645fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash

# A script to manage the volume on my system universally
# Depends on: bash, pactl, libnotify
# By David Penkowoj, 2024-09-16

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