{ lib, config, pkgs, system, inputs , ... }: with lib; let cfg = config.modules.desktop.hypridle; in { options.modules.desktop.hypridle = { enable = mkEnableOption "Enable hypridle, hyprland's idle daemon"; package = mkOption { type = types.package; default = inputs.hypridle.packages.${system}.hypridle; example = "pkgs.hypridle"; }; }; config = mkIf cfg.enable { hm.services.hypridle = let hyprctl = "${config.modules.desktop.hyprland.package}/bin/hyprctl"; in { enable = true; package = cfg.package; settings = { general = { lock_cmd = "${pkgs.procps}/bin/pidof hyprlock || ${lib.getExe config.modules.desktop.hyprlock.package}"; unlock_cmd = "${pkgs.procps}/bin/pkill -USR1 hyprlock"; before_sleep_cmd = "${pkgs.systemd}/bin/loginctl lock-session"; # lock the screen before sleeping after_sleep_cmd = "${hyprctl} dispatch dpms on"; # turn on the screen to avoid moving mouse/pressing key }; listener = [ { timeout = 60 * 1; on-timeout = "${lib.getExe pkgs.brightnessctl} -c backlight -s set 1%"; # dim screen, save brightness state on-resume = "${lib.getExe pkgs.brightnessctl} -c backlight -r"; # restore previous screen brightness state } { timeout = 90; # 1.5 min on-timeout = "${hyprctl} dispatch dpms off"; # turn off screen on-resume = "${hyprctl} dispatch dpms on"; # turn it back on } { timeout = 60 * 2; # 2 min on-timeout = "${pkgs.systemd}/bin/loginctl lock-session"; # lock computer } { timeout = 60 * 15; # 15 min on-timeout = "${pkgs.systemd}/bin/systemctl suspend"; # sleep/suspend } ]; }; }; }; }