{ config, lib, pkgs, ... }: { options = { hrm.lid-handler.enable = lib.mkEnableOption "hrm.lid-handler"; }; config = let cfg = config.hrm.lid-handler; in lib.mkIf cfg.enable { services.acpid.enable = true; services.acpid.lidEventCommands = /* sh */ '' lid_state=$(${pkgs.gawk}/bin/awk '{print$2}' /proc/acpi/button/lid/*/state) # usage: vt_is_xserver NUMBER vt_is_xserver() { ${pkgs.iproute2}/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 $lid_state in open) run_on_display ${pkgs.xorg.xset}/bin/xset dpms force on ;; closed) run_on_display ${pkgs.xorg.xset}/bin/xset dpms force off ;; esac else case $lid_state in open) ${pkgs.brightnessctl}/bin/brightnessctl --restore >/dev/null 2>&1 ;; closed) brightness=$(${pkgs.brightnessctl}/bin/brightnessctl --quiet get) if test "$brightness" -gt 0; then ${pkgs.brightnessctl}/bin/brightnessctl --save >/dev/null 2>&1 ${pkgs.brightnessctl}/bin/brightnessctl --quiet set 0 fi ;; esac fi ''; services.logind.settings.Login.HandleLidSwitch = "ignore"; services.logind.settings.Login.HandleLidSwitchDocked = "ignore"; services.logind.settings.Login.HandleLidSwitchExternalPower = "ignore"; }; }