tv lidControl: init
This commit is contained in:
parent
dba0afc600
commit
70303049c0
@ -8,6 +8,7 @@
|
||||
./hw.nix
|
||||
./im.nix
|
||||
./iptables.nix
|
||||
./lidControl.nix
|
||||
./org.freedesktop.machine1.host-shell.nix
|
||||
./slock.nix
|
||||
./x0vncserver.nix
|
||||
|
45
tv/3modules/lidControl.nix
Normal file
45
tv/3modules/lidControl.nix
Normal file
@ -0,0 +1,45 @@
|
||||
with import ./lib;
|
||||
{ config, pkgs, ... }: {
|
||||
options = {
|
||||
tv.lidControl.enable = mkEnableOption "tv.lidControl";
|
||||
};
|
||||
config = let
|
||||
cfg = config.tv.lidControl;
|
||||
in mkIf cfg.enable {
|
||||
services.acpid.enable = true;
|
||||
services.acpid.lidEventCommands = /* sh */ ''
|
||||
set -- $1
|
||||
|
||||
# usage: vt_is_xserver NUMBER
|
||||
vt_is_xserver() {
|
||||
${pkgs.iproute}/bin/ss -lp src unix:/tmp/.X11-unix/X* |
|
||||
${pkgs.gnused}/bin/sed -n 's|.*/tmp/.X11-unix/X\([0-9]\+\)\>.*|\1|p' |
|
||||
${pkgs.gnugrep}/bin/grep -Fqx "$1"
|
||||
}
|
||||
|
||||
console=$(${pkgs.kbd}/bin/fgconsole)
|
||||
|
||||
if vt_is_xserver "$console"; then
|
||||
# usage: run_on_display COMMAND [ARG...]
|
||||
run_on_display() {
|
||||
owner=$(${pkgs.coreutils}/bin/stat -c %u /tmp/.X11-unix/X$console)
|
||||
${pkgs.systemd}/bin/systemd-run -GPq \
|
||||
-E DISPLAY=:$console \
|
||||
--uid=$owner \
|
||||
"$@"
|
||||
}
|
||||
case $3 in
|
||||
open)
|
||||
run_on_display ${pkgs.xorg.xset}/bin/xset dpms force on
|
||||
;;
|
||||
close)
|
||||
run_on_display ${pkgs.xorg.xset}/bin/xset dpms force off
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
'';
|
||||
services.logind.lidSwitch = "ignore";
|
||||
services.logind.lidSwitchDocked = "ignore";
|
||||
services.logind.lidSwitchExternalPower = "ignore";
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user