{ lib, lib', inputs, pkgs, config, ... }: let inherit (lib'.generators) toHyprConf; inherit (config.local.systemVars) username; inherit (inputs.hypridle.packages.${pkgs.system}) hypridle; hyprlock = "${inputs.hyprlock.packages.${pkgs.system}.hyprlock}/bin/hyprlock"; in { config = lib.mkIf config.local.modules.hyprland.enable { hjem.users.${username} = { packages = [hypridle]; files = { ".config/hypr/hypridle.conf".text = toHyprConf { attrs = { general = { lock_cmd = "pidof ${hyprlock} || ${hyprlock}"; unlock_cmd = "pkill --signal SIGUSR1 ${hyprlock}"; before_sleep_cmd = "loginctl lock-session"; after_sleep_cmd = "hyprctl dispatch dpms on"; }; listener = [ { timeout = 300; # 5m on-timeout = "loginctl lock-session"; } { timeout = 330; # 5.5m on-timeout = "hyprctl dipsatch dpms off"; on-resume = "hyprctl dispatch dpms on"; } { timeout = 600; # 10m on-timeout = "systemctl suspend"; } ]; }; }; }; }; # needed when using uwsm as the session manager systemd.user.services.hypridle = { name = "hypridle"; after = ["graphical-session.target"]; description = "Hyprland's Idle Daemon"; wantedBy = ["graphical-session.target"]; restartTriggers = ["${config.hjem.users.${username}.files.".config/hypr/hypridle.conf".text}"]; serviceConfig = { Type = "exec"; ExecStart = "${hypridle}/bin/hypridle"; Restart = "on-failure"; Slice = "background-graphical.slice"; }; }; }; }