Files
nix-config/modules/misc/tv-on-off.nix
2025-11-14 19:22:24 +01:00

41 lines
1.2 KiB
Nix

{ pkgs, lib, ... }:
let
cec = "${pkgs.v4l-utils}/bin/cec-ctl";
tvOn = pkgs.writeShellScriptBin "tvOn" ''
if [ $(${cec} -A | ${pkgs.gnugrep}/bin/grep cec0 | ${pkgs.coreutils}/bin/wc -l) -gt 0 ]; then
${cec} --tv --skip-info
${cec} --skip-info --user-control-pressed ui-cmd=power-on-function --to TV
echo "Turning TV on!"
fi
'';
tvOff = pkgs.writeShellScriptBin "tvOff" ''
if [ $(${cec} -A | ${pkgs.gnugrep}/bin/grep cec0 | ${pkgs.coreutils}/bin/wc -l) -gt 0 ]; then
${cec} -C --skip-info
${cec} --tv --skip-info
${cec} --standby --skip-info --to TV
echo "Turning TV off!"
${pkgs.coreutils}/bin/sleep 2
fi
'';
in
{
environment.systemPackages = with pkgs; [
tvOff
tvOn
];
# after suspend, do `cec-ctl -A | grep cec0 | wc -l`, if >0, do `cec-ctl --standby --to TV`
# similar on wakeup, if present send `cec-ctl --user-control-pressed ui-cmd=power-on-function --to TV`
environment.etc."systemd/system-sleep/sleep-turn-tv-off-on.sh".source =
pkgs.writeShellScript "post-sleep-turn-tv-off.sh" ''
case $1/$2 in
pre/*)
${tvOff}/bin/tvOff
;;
post/*)
${tvOn}/bin/tvOn
;;
esac
'';
}