Commit Diff


commit - fab1807bd2b1387ffe544b4f1ce2a238f3266d8d
commit + 4111d5f31df2319dba1e656b095a0cc5347e4e04
blob - 29d733874d858708bbeabb8bb9e02d92193b69f2
blob + 88da87ef43b469fc8e6110fe0d0d0ea394337e20
--- dwm/config.h
+++ dwm/config.h
@@ -87,6 +87,7 @@ static const Key keys[] = {
 	{ MODKEY,			XK_s,		spawn,		{.v = dmscript("dmenu_surf") }},
 	{ MODKEY|ShiftMask,		XK_s,		spawn,		{.v = dmscript("dmenu_surf_history") }},
 	{ MODKEY|ShiftMask,		XK_m,		spawn,		{.v = dmscript("dmenu_man") }},
+	{ MODKEY,			XK_n,		spawn,		{.v = dmscript("dmenu_audio") }},
 	{ MODKEY|ShiftMask,		XK_w,		spawn,		{.v = dmscript("dmenu_word") }},
 	{ MODKEY|ControlMask,		XK_h,		spawn,		{.v = runst("htop") }},
 	{ MODKEY,			XK_c,		spawn,		{.v = runst("env", "LC_ALL=C", "qalc") }},
blob - /dev/null
blob + c0b6c406a510920acceb794fbd62009f29e198bc (mode 755)
--- /dev/null
+++ scripts/dmenu_audio
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+while true; do
+	muted=$(sndioctl output.mute | cut -d= -f2)
+	level=$(sndioctl output.level | cut -d= -f2)
+
+	[ "$muted" = 1 ] && m="Unmute" || m="Mute"
+	if [ "$muted" = 1 ]; then
+		m1=' (Muted)'
+		m2='Unmute'
+	else
+		m1=''
+		m2='Mute'
+	fi
+
+	p=$(printf 'Level: %.2f%s' "$level" "$m1")
+	r=$(printf '+\n-\n%s\n' "$m2" | dmenu -p "$p" -l 5) || break
+
+	case "$r" in
+	+)
+		level=$(printf 'scale=2; %.2f+0.1\n' "$level" | bc)
+		sndioctl "output.level=$level"
+		;;
+	-)
+		level=$(printf 'scale=2; %.2f-0.1\n' "$level" | bc)
+		sndioctl "output.level=$level"
+		;;
+	Mute)
+		sndioctl 'output.mute=1'
+		;;
+	Unmute)
+		sndioctl 'output.mute=0'
+		;;
+	*)
+		if echo "$r" | grep -qE '^(0|1|0\.[0-9]+)$'; then
+			sndioctl "output.level=$r"
+		fi
+		;;
+	esac
+done