diff --git a/home/wm/i3/default.nix b/home/wm/i3/default.nix index 4465bb0..9b1dd44 100644 --- a/home/wm/i3/default.nix +++ b/home/wm/i3/default.nix @@ -249,8 +249,8 @@ in "XF86AudioLowerVolume" = "exec --no-startup-id ${changeAudio} down 5"; "Control+XF86AudioRaiseVolume" = "exec --no-startup-id ${changeAudio} up 1"; "Control+XF86AudioLowerVolume" = "exec --no-startup-id ${changeAudio} down 1"; - "XF86AudioMute" = "exec pamixer --toggle-mute"; - "XF86AudioMicMute" = "exec pamixer --default-source --toggle-mute"; + "XF86AudioMute" = "exec --no-startup-id ${changeAudio} toggle"; + "XF86AudioMicMute" = "exec --no-startup-id ${changeAudio} toggle mic"; "XF86AudioPlay" = "exec playerctl play-pause"; "XF86AudioNext" = "exec playerctl next"; diff --git a/pkgs/change-audio/change-audio b/pkgs/change-audio/change-audio index 22479d4..5bb1588 100755 --- a/pkgs/change-audio/change-audio +++ b/pkgs/change-audio/change-audio @@ -2,16 +2,61 @@ set -euo pipefail -if [ "$1" = "up" ]; then - upDown="-i" -else - upDown="-d" -fi +NOTIFY=( + notify-send + -u low + -h string:x-canonical-private-synchronous:change-audio +) -pamixer --allow-boost "$upDown" "$2" -newVolume="$(pamixer --get-volume || true)" +do_change_volume() { + if [ "$1" = "up" ]; then + upDown="-i" + else + upDown="-d" + fi -notify-send -u low \ - -h string:x-canonical-private-synchronous:change-audio \ - -h "int:value:$newVolume" \ - -- "Set volume to $newVolume%" + pamixer --allow-boost "$upDown" "$2" + newVolume="$(pamixer --get-volume || true)" + [ "$(pamixer --get-volume-human)" = "muted" ] && isMuted=true + + MSG="Set volume to $newVolume%" + if [ "${isMuted:-false}" = true ]; then + MSG="$MSG (muted)" + fi + "${NOTIFY[@]}" \ + -h "int:value:$newVolume" \ + -- "$MSG" +} + +do_toggle() { + args=() + if [ "${2:-audio}" = mic ]; then + args+=(--default-source) + MSG="Toggled microphone" + else + MSG="Toggled audio output" + fi + + pamixer "${args[@]}" --toggle-mute + + if [ "$(pamixer "${args[@]}" --get-mute)" = true ]; then + MSG="$MSG (muted)" + else + MSG="$MSG (unmuted)" + fi + + "${NOTIFY[@]}" -- "$MSG" +} + +case "$1" in + up|down) + do_change_volume "$@" + ;; + toggle) + do_toggle "$@" + ;; + *) + echo "No suche option '$1'" >&2 + exit 1 + ;; +esac diff --git a/pkgs/change-audio/default.nix b/pkgs/change-audio/default.nix index c931ee6..bf0f45c 100644 --- a/pkgs/change-audio/default.nix +++ b/pkgs/change-audio/default.nix @@ -1,7 +1,7 @@ { lib, libnotify, makeWrapper, pamixer, shellcheck, stdenvNoCC }: stdenvNoCC.mkDerivation rec { pname = "change-audio"; - version = "0.1.1"; + version = "0.2.0"; src = ./change-audio;