programs: wob: split the script into an actual package
This commit is contained in:
parent
c0883dc777
commit
8b26fa1303
|
@ -89,7 +89,7 @@
|
|||
./wike.nix
|
||||
./wine.nix
|
||||
./wireshark.nix
|
||||
./wob.nix
|
||||
./wob
|
||||
./xarchiver.nix
|
||||
./xdg-desktop-portal.nix
|
||||
./xdg-utils.nix
|
||||
|
|
|
@ -8,6 +8,11 @@
|
|||
#
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
wob-pulse = pkgs.static-nix-shell.mkBash {
|
||||
pname = "wob-pulse";
|
||||
src = ./.;
|
||||
pkgs = [ "gnugrep" "gnused" "pulseaudio" ];
|
||||
};
|
||||
cfg = config.sane.programs.wob;
|
||||
in
|
||||
{
|
||||
|
@ -77,67 +82,12 @@ in
|
|||
description = "notify wob when pulseaudio volume changes";
|
||||
wantedBy = [ "wob.service" ];
|
||||
serviceConfig = {
|
||||
Exec = "${wob-pulse}/bin/wob-pulse";
|
||||
Type = "simple";
|
||||
Restart = "always";
|
||||
RestartSec = "20s";
|
||||
};
|
||||
path = with pkgs; [
|
||||
# coreutils
|
||||
gnugrep
|
||||
gnused
|
||||
pulseaudio
|
||||
];
|
||||
|
||||
# environment.WOB_VERBOSE = "1";
|
||||
|
||||
script = ''
|
||||
|
||||
debug() {
|
||||
printf "$@" >&2
|
||||
printf "\n" >&2
|
||||
}
|
||||
verbose() {
|
||||
if [ "$WOB_VERBOSE" = "1" ]; then
|
||||
debug "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
volismuted() {
|
||||
pactl get-sink-mute @DEFAULT_SINK@ | grep -q "Mute: yes"
|
||||
}
|
||||
|
||||
volget() {
|
||||
if volismuted; then
|
||||
verbose "muted"
|
||||
printf "0"
|
||||
else
|
||||
pactl get-sink-volume @DEFAULT_SINK@ | head -n1 | cut -d'/' -f2 | sed 's/ //g' | sed 's/\%//'
|
||||
fi
|
||||
}
|
||||
|
||||
notify_volume_change() {
|
||||
verbose "notify_volume_change"
|
||||
vol=$(volget)
|
||||
verbose "got volume: %d -> %d" "$lastvol" "$vol"
|
||||
if [ "$vol" != "$lastvol" ]; then
|
||||
debug "notify wob: %d -> %d" "$lastvol" "$vol"
|
||||
printf "%s\n" "$vol" > "$XDG_RUNTIME_DIR/${cfg.config.sock}"
|
||||
fi
|
||||
lastvol="$vol"
|
||||
}
|
||||
|
||||
pactl subscribe | while read -r line; do
|
||||
verbose "pactl says: %s" "$line"
|
||||
case "$line" in
|
||||
"Event 'change' on sink "*)
|
||||
notify_volume_change
|
||||
;;
|
||||
"Event 'change' on source "*)
|
||||
# microphone volume changed. ignore.
|
||||
;;
|
||||
esac
|
||||
done
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
48
hosts/common/programs/wob/wob-pulse
Executable file
48
hosts/common/programs/wob/wob-pulse
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p gnugrep -p gnused -p pulseaudio
|
||||
|
||||
debug() {
|
||||
printf "$@" >&2
|
||||
printf "\n" >&2
|
||||
}
|
||||
verbose() {
|
||||
if [ "$WOB_VERBOSE" = "1" ]; then
|
||||
debug "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
volismuted() {
|
||||
pactl get-sink-mute @DEFAULT_SINK@ | grep -q "Mute: yes"
|
||||
}
|
||||
|
||||
volget() {
|
||||
if volismuted; then
|
||||
verbose "muted"
|
||||
printf "0"
|
||||
else
|
||||
pactl get-sink-volume @DEFAULT_SINK@ | head -n1 | cut -d'/' -f2 | sed 's/ //g' | sed 's/\%//'
|
||||
fi
|
||||
}
|
||||
|
||||
notify_volume_change() {
|
||||
verbose "notify_volume_change"
|
||||
vol=$(volget)
|
||||
verbose "got volume: %d -> %d" "$lastvol" "$vol"
|
||||
if [ "$vol" != "$lastvol" ]; then
|
||||
debug "notify wob: %d -> %d" "$lastvol" "$vol"
|
||||
printf "%s\n" "$vol" > "$XDG_RUNTIME_DIR/${cfg.config.sock}"
|
||||
fi
|
||||
lastvol="$vol"
|
||||
}
|
||||
|
||||
pactl subscribe | while read -r line; do
|
||||
verbose "pactl says: %s" "$line"
|
||||
case "$line" in
|
||||
"Event 'change' on sink "*)
|
||||
notify_volume_change
|
||||
;;
|
||||
"Event 'change' on source "*)
|
||||
# microphone volume changed. ignore.
|
||||
;;
|
||||
esac
|
||||
done
|
Loading…
Reference in New Issue
Block a user