{ config, lib, pkgs, ... }: with lib; let cfg = config.services.hypridle; in { meta.maintainers = [ maintainers.khaneliman maintainers.fufexan ]; options.services.hypridle = { enable = mkEnableOption "Hypridle, Hyprland's idle daemon"; package = mkPackageOption pkgs "hypridle" { }; systemd = { enable = lib.mkEnableOption "Hypridle Systemd integration" // { default = true; }; target = lib.mkOption { type = lib.types.str; default = "graphical-session.target"; example = "hyprland-session.target"; description = '' The systemd target that will automatically start the hypridle service. ''; }; }; settings = lib.mkOption { type = with lib.types; let valueType = nullOr (oneOf [ bool int float str path (attrsOf valueType) (listOf valueType) ]) // { description = "Hypridle configuration value"; }; in valueType; default = { }; description = '' Hypridle configuration written in Nix. Entries with the same key should be written as lists. Variables' and colors' names should be quoted. See for more examples. ''; example = lib.literalExpression '' { general = { after_sleep_cmd = "hyprctl dispatch dpms on"; ignore_dbus_inhibit = false; lock_cmd = "hyprlock"; }; listener = [ { timeout = 900; on-timeout = "hyprlock"; } { timeout = 1200; on-timeout = "hyprctl dispatch dpms off"; on-resume = "hyprctl dispatch dpms on"; } ]; } ''; }; importantPrefixes = lib.mkOption { type = with lib.types; listOf str; default = [ "$" ]; example = [ "$" ]; description = '' List of prefix of attributes to source at the top of the config. ''; }; }; config = mkIf cfg.enable { xdg.configFile."hypr/hypridle.conf" = mkIf (cfg.settings != { }) { text = lib.hm.generators.toHyprconf { attrs = cfg.settings; inherit (cfg) importantPrefixes; }; }; systemd.user.services.hypridle = mkIf cfg.systemd.enable { Install = { WantedBy = [ cfg.systemd.target ]; }; Unit = { ConditionEnvironment = "WAYLAND_DISPLAY"; Description = "hypridle"; After = [ "graphical-session-pre.target" ]; PartOf = [ "graphical-session.target" ]; X-Restart-Triggers = [ "${config.xdg.configFile."hypr/hypridle.conf".source}" ]; }; Service = { ExecStart = "${getExe cfg.package}"; Restart = "always"; RestartSec = "10"; }; }; }; }