{ config, lib, pkgs, ... }: with lib; let grep = "${pkgs.gnugrep}/bin/grep"; hyprctl = "${config.programs.hyprland.package}/bin/hyprctl"; hyprlock = "${ config.home-manager.users.${config.custom.username}.programs.hyprlock.package }/bin/hyprlock"; loginctl = "${pkgs.systemd}/bin/loginctl"; pgrep = "${pkgs.coreutils}/bin/pgrep"; pw-cli = "${pkgs.pipewire}/bin/pw-cli"; systemctl = "${pkgs.systemd}/bin/systemctl"; cfg = config.custom.services.hypridle; in { options.custom.services.hypridle.enable = mkOption {default = false;}; config.home-manager.users.${config.custom.username} = mkIf cfg.enable { # https://github.com/hyprwm/hypridle # https://wiki.hyprland.org/Hypr-Ecosystem/hypridle services.hypridle = { enable = true; settings = { general = { before_sleep_cmd = "${pgrep} hyprlock || ${hyprlock} --immediate"; lock_cmd = "${pgrep} hyprlock || ${hyprlock}"; }; listener = [ { timeout = 15 * 60; # Seconds on-timeout = "${loginctl} lock-session"; } { timeout = 20 * 60; # Seconds on-timeout = "${hyprctl} dispatch dpms off"; } { # FIXME: Add resume offset to mynix timeout = 60 * 60; # Seconds on-timeout = "${pw-cli} info all | ${grep} running || ${systemctl} suspend-then-hibernate"; # Suspend if no audio } ]; }; }; }; }