From 4865f4f57263d6a77191198ef706e1d5cc5976ee Mon Sep 17 00:00:00 2001 From: Bartek Stalewski Date: Mon, 23 Aug 2021 20:25:41 +0200 Subject: [PATCH] Yet another approach to volume/mute control. --- _suckless/_scripts/dmenu-audio | 26 +++++++++++++++++ _suckless/_scripts/sb-volume | 53 ++++++++++------------------------ _suckless/dwm/config.h | 7 +++-- 3 files changed, 45 insertions(+), 41 deletions(-) create mode 100755 _suckless/_scripts/dmenu-audio diff --git a/_suckless/_scripts/dmenu-audio b/_suckless/_scripts/dmenu-audio new file mode 100755 index 0000000..8488d05 --- /dev/null +++ b/_suckless/_scripts/dmenu-audio @@ -0,0 +1,26 @@ +#!/bin/sh + +set_out() { + sinks=$(pamixer --list-sinks | grep -v '^Sinks:$' | awk -F'"' '{print $4}') + sel_sink=$(printf "$sinks" | dmenu -l 10 -i -p "wut") + pactl set-default-sink $(pamixer --list-sinks | grep "$sel_sink" | awk '{print $1}') + kill -46 $(pidof dwmblocks) +} + +set_in() { + sources=$(pamixer --list-sources | grep -v '^Sources:$' | grep -v 'Monitor of ' | awk -F'"' '{print $4}') + sel_source=$(printf "$sources" | dmenu -l 10 -i -p "wut") + pactl set-default-source $(pamixer --list-sources | grep "$sel_source" | awk '{print $1}') + kill -46 $(pidof dwmblocks) +} + +sinks=$(pamixer --list-sinks | grep -v '^Sinks:$' | awk -F'"' '{print $4}') +[ "$(echo "$sinks" | wc -l)" -lt 2 ] && + { notify-send "🔊 Only one sink detected."; exit; } + +chosen=$(printf "output\\ninput" | dmenu -i -p "What to change:") +case "$chosen" in + output) set_out ;; + input) set_in ;; + *) exit 1 ;; +esac diff --git a/_suckless/_scripts/sb-volume b/_suckless/_scripts/sb-volume index 7f0a6db..4aaa4cb 100755 --- a/_suckless/_scripts/sb-volume +++ b/_suckless/_scripts/sb-volume @@ -1,42 +1,19 @@ #!/bin/bash -if [ $(xrandr | grep DisplayPort | grep ' connected' | wc -l) -gt 0 ]; then - sink=$(pamixer --list-sinks | awk '/HDMI/ {print $1}') +if [ "${1}" = "micmute" ]; then + case $(cat '/sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness') in + 1) echo 0 | sudo tee /sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness;; + 0) echo 1 | sudo tee /sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness;; + esac + for i in $(pactl list short sources | grep -v '\.monitor' | awk '{print $1}'); do + pactl set-source-mute "${i}" toggle + done + kill -46 $(pidof dwmblocks) else - sink=$(pamixer --list-sinks | awk '/HD Audio Controller/ {print $1}') + vol="$(pamixer --get-volume)" + [ $(echo $vol | wc -c) -lt 4 ] && svol=" ${vol}%%" || svol="${vol}%%" + [ $(pamixer --get-mute) = true ] && volinfo="^c#eeeeee^^b#005577^\ue04f mute^d^" || volinfo="\ue050 ${svol}" + device=$(pamixer --list-sources | grep -v '^Sources:$' | grep -v 'Monitor of ' | head -n 1 | awk '{print $1}') + [ $(pamixer --source $device --get-mute) = true ] && micinfo="^c#eeeeee^^b#005577^\ue02b^d^" || micinfo="\ue02a^d^" + printf "${micinfo} ${volinfo}" fi - -case "${1}" in - "micmute") - case $(cat '/sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness') in - 1) echo 0 | sudo tee /sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness;; - 0) echo 1 | sudo tee /sys/devices/platform/thinkpad_acpi/leds/platform::micmute/brightness;; - esac - device=$(pamixer --list-sources | awk '/Raven/ {print $1}') - for i in $(pamixer --list-sources | grep -v Sources | awk '{print $1}'); do - pamixer --source $i -t - done - kill -46 $(pidof dwmblocks) - exit ;; - "volmute") - for i in $(pamixer --list-sinks | grep -v Sinks | awk '{print $1}'); do - pamixer --sink $i -t - done - kill -46 $(pidof dwmblocks) - exit ;; - "increase") - pamixer --sink $sink --allow-boost -i 5 - kill -46 $(pidof dwmblocks) - exit ;; - "decrease") - pamixer --sink $sink --allow-boost -d 5 - kill -46 $(pidof dwmblocks) - exit ;; -esac - -vol="$(pamixer --sink $sink --get-volume)" -[ $(echo $vol | wc -c) -lt 4 ] && svol=" ${vol}%%" || svol="${vol}%%" -[ $(pamixer --sink $sink --get-mute) = true ] && volinfo="^c#eeeeee^^b#005577^\ue04f mute^d^" || volinfo="\ue050 ${svol}" -device=$(pamixer --list-sources | awk '/Raven/ {print $1}') -[ $(pamixer --source $device --get-mute) = true ] && micinfo="^c#eeeeee^^b#005577^\ue02b^d^" || micinfo="\ue02a^d^" -printf "${micinfo} ${volinfo}" diff --git a/_suckless/dwm/config.h b/_suckless/dwm/config.h index 31b7479..1836d9e 100644 --- a/_suckless/dwm/config.h +++ b/_suckless/dwm/config.h @@ -112,6 +112,7 @@ static Key keys[] = { { MODKEY, XK_q, killclient, {0} }, { MODKEY, XK_e, togglescratch, {.ui = 0 } }, /* service controls */ + { CTRKEY, XK_a, spawn, SHCMD("dmenu-audio") }, { CTRKEY, XK_b, spawn, SHCMD("dmenu-bluetooth") }, { CTRKEY, XK_d, spawn, SHCMD("dmenu-display") }, { CTRKEY, XK_l, spawn, SHCMD("slock") }, @@ -138,10 +139,10 @@ static Key keys[] = { { MODKEY, XK_period, focusmon, {.i = +1 } }, { SHTKEY, XK_comma, tagmon, {.i = -1 } }, { SHTKEY, XK_period, tagmon, {.i = +1 } }, - { 0, XF86XK_AudioMute, spawn, SHCMD("sb-volume volmute") }, + { 0, XF86XK_AudioMute, spawn, SHCMD("pactl set-sink-mute @DEFAULT_SINK@ toggle; kill -46 $(pidof dwmblocks)") }, { 0, XF86XK_AudioMicMute, spawn, SHCMD("sb-volume micmute") }, - { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("sb-volume increase") }, - { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("sb-volume decrease") }, + { 0, XF86XK_AudioRaiseVolume, spawn, SHCMD("pactl set-sink-volume @DEFAULT_SINK@ +5%; kill -46 $(pidof dwmblocks)") }, + { 0, XF86XK_AudioLowerVolume, spawn, SHCMD("pactl set-sink-volume @DEFAULT_SINK@ -5%; kill -46 $(pidof dwmblocks)") }, { 0, XF86XK_MonBrightnessUp, spawn, SHCMD("sudo xbacklight -inc 10") }, { 0, XF86XK_MonBrightnessDown, spawn, SHCMD("sudo xbacklight -dec 10") }, };