86 lines
2.0 KiB
Nix
86 lines
2.0 KiB
Nix
{
|
|
pkgs,
|
|
lib,
|
|
cap-volume ? true,
|
|
unmute ? true,
|
|
...
|
|
}: let
|
|
keysetting =
|
|
pkgs.writeShellScriptBin "keysetting"
|
|
''
|
|
wpctl=${pkgs.wireplumber}/bin/wpctl
|
|
notify_send=${pkgs.libnotify}/bin/notify-send
|
|
brightnessctl=${pkgs.brightnessctl}/bin/brightnessctl
|
|
cut=${pkgs.coreutils}/bin/cut
|
|
grep=${pkgs.gnugrep}/bin/grep
|
|
tr=${pkgs.coreutils}/bin/tr
|
|
bc=${pkgs.bc}/bin/bc
|
|
|
|
cap_volume=${pkgs.coreutils}/bin/${lib.boolToString cap-volume}
|
|
unmute=${pkgs.coreutils}/bin/${lib.boolToString unmute}
|
|
|
|
notify-send () {
|
|
$notify_send -h string:x-canonical-private-synchronous:keysetting "$@"
|
|
}
|
|
|
|
getvol () {
|
|
echo "$(wpctl get-volume @DEFAULT_SINK@ | $tr -dc '[:digit:].')*100/1" | $bc
|
|
}
|
|
|
|
notifyvol () {
|
|
message="Volume: $(getvol)%"
|
|
if $wpctl get-volume @DEFAULT_SINK@ | $grep MUTED > /dev/null ; then
|
|
message="$message [MUTED]"
|
|
fi
|
|
notify-send "$message"
|
|
}
|
|
|
|
setvol () {
|
|
$wpctl set-volume @DEFAULT_SINK@ "$1"
|
|
notifyvol
|
|
}
|
|
|
|
volup () {
|
|
if $unmute ; then
|
|
$wpctl set-mute @DEFAULT_SINK@ 0
|
|
fi
|
|
|
|
if $cap_volume && [[ $(( $(getvol) + 5 )) -gt 100 ]] ; then
|
|
setvol 1
|
|
return
|
|
fi
|
|
|
|
setvol 5%+
|
|
# notifyvol
|
|
}
|
|
|
|
voldown () {
|
|
if $unmute ; then
|
|
$wpctl set-mute @DEFAULT_SINK@ 0
|
|
fi
|
|
setvol 5%-
|
|
# notifyvol
|
|
}
|
|
|
|
notifybright () {
|
|
notify-send "Brightness: $(($($brightnessctl g)*100/$($brightnessctl m)))%"
|
|
}
|
|
|
|
setbright () {
|
|
$brightnessctl s "$1"
|
|
notifybright
|
|
}
|
|
case "$1" in
|
|
volumeup) volup ;;
|
|
volumedown) voldown ;;
|
|
mute) $wpctl set-mute @DEFAULT_SINK@ toggle; notifyvol;;
|
|
monup) setbright 5%+;;
|
|
mondown) setbright 5%-;;
|
|
esac
|
|
'';
|
|
in
|
|
pkgs.symlinkJoin {
|
|
name = "wm-helpers";
|
|
paths = keysetting;
|
|
}
|