openbsd-dotfiles

Base configurations for my Openbsd desktop
git clone https://git.kausban.com/openbsd-dotfiles/raw/.git
Log | Files | Refs

commit 5c5ea2d04748f4062a72dfdb1972f3b662e45a92
parent b1c8075db826cb4ffb9feb0ea6e69ff9829d2f83
Author: KB <mail@kausban.com>
Date:   Thu, 14 Dec 2023 13:22:41 +0100

added sndiomenu to control USB dac

Diffstat:
A.bin/sndiomenu | 108+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 108 insertions(+), 0 deletions(-)

diff --git a/.bin/sndiomenu b/.bin/sndiomenu @@ -0,0 +1,108 @@ +#!/bin/sh +DMENU_CMD="dmenu -i -l 20 -fn mono-12" + +audio_record_on() { + [ "$(sysctl -n kern.audio.record)" = "1" ] +} + +sndio_server_dev() { + printf "audio%d" "$(sndioctl -n server.device)" +} + +sndio_server_dev_check() { + [ "$1" = "$(sndio_server_dev)" ] +} + +sndio_output_mute_check() { + [ "$(sndioctl -n output.mute)" = "1" ] +} + +sndio_output_level() { + level="$(sndioctl -n output.level)" + printf "%.f" "$(echo "$level * 100" | bc)" +} + +sndio_input_mute_check() { + [ "$(sndioctl -n input.mute)" = "1" ] +} + +sndio_input_level() { + level="$(sndioctl -n input.level)" + printf "%.f" "$(echo "$level * 100" | bc)" +} + +audio_devs() { + sndioctl -in server.device | tr ',' '\n' | while read -r num ; do + printf "audio%d\n" "$num" + done +} + +dev_for_audio_dev() { + dmesg | grep "^${1} at" | tail -n 1 | sed -E "s/${1} at //" +} + +audio_dev_desc() { + desc="$(dmesg | grep "^$(dev_for_audio_dev "$1") at" | tail -n 1 | sed -E "s/^.*\"(.+)\".*$/\1/")" + [ -z "$desc" ] && desc="$1" + printf "%s" "$desc" +} + +sndio_devs() { + audio_devs | while read -r dev ; do + desc="$(audio_dev_desc "$dev")" + num="$(echo "$dev" | sed -E "s/audio//")" + server_tag="" + if sndio_server_dev_check "$dev"; then + server_tag=" (SERVER)" + fi + printf "%d %s%s\n" "$num" "$desc" "$server_tag" + done +} + +set_sndio_dev() { + num="$(sndio_devs | eval $DMENU_CMD | cut -d ' ' -f1)" + sndioctl -q server.device="$num" +} + +toggle_sndio_output_mute() { + sndio_output_mute_check && sndioctl -q output.mute=0 || sndioctl -q output.mute=1 +} + +toggle_sndio_input_mute() { + sndio_input_mute_check && sndioctl -q input.mute=0 || sndioctl -q input.mute=1 +} + +sndio_status() { + output_level="$(sndio_output_level)" + record_status=$(audio_record_on && echo "ENABLED" || echo "DISABLED") + + input_message="No Input (${record_status})" + if sndioctl | grep 'input' > /dev/null 2>&1; then + input_level="$(sndio_input_level)" + input_message="Input: ${input_level}% (${record_status})" + fi + + notify-send "Audio Status" "Output: ${output_level}%\n${input_message}" -h string:x-dunst-stack-tag:sndio_status +} + +OPTIONS="server +mute-output +mute-input +status" + +selector=$(echo "$OPTIONS" | eval $DMENU_CMD) + +case "$selector" in + server) + set_sndio_dev + ;; + mute-output) + toggle_sndio_output_mute + ;; + mute-input) + toggle_sndio_input_mute + ;; + *) + sndio_status + ;; +esac