nixfiles/home/programs/hypridle.nix

104 lines
3.0 KiB
Nix

{
pkgs,
config,
lib,
...
}: let
cfg = config.nixfiles.services.hypridle;
inherit (lib.types) str int;
in {
options.nixfiles.services.hypridle = {
enable = lib.mkEnableOption "the hypridle configuration";
timeouts = let
mkTimeout = timeout: desc:
lib.mkOption {
description = "${desc}";
type = int;
default = timeout;
};
in {
dpms = mkTimeout 300 "DPMS timeout";
lock = mkTimeout 360 "Lock timeout";
locked-dpms = mkTimeout 10 "DPMS timeout while locked";
};
commands = {
dpms-off = lib.mkOption {
description = "DPMS off command";
default = "hyprctl dispatch dpms off";
type = str;
};
dpms-on = lib.mkOption {
description = "DPMS on command";
default = "hyprctl dispatch dpms on";
type = str;
};
# lock = lib.mkOption {
# description = "Lock command";
# default = "${pkgs.swaylock}/bin/swaylock";
# type = str;
# };
# unlock = lib.mkOption {
# description = "Unlock command";
# default = "${pkgs.procps}/bin/pkill -USR1 swaylock";
# type = str;
# };
};
};
config = lib.mkMerge [
(lib.mkIf cfg.enable {
services.hypridle = {
enable = true;
settings = let
lock = pkgs.writeShellScript "lock-once" ''
${pkgs.procps}/bin/pgrep -x swaylock > /dev/null || "${config.programs.swaylock.package}/bin/swaylock"
'';
in {
listener = let
dpms-wrapped = pkgs.writeShellScript "dpms-wrapped" ''
exec ${cfg.commands.dpms-off}
'';
lock-dpms = pkgs.writeShellScript "lock-dpms" ''
${pkgs.procps}/bin/pgrep -x swaylock > /dev/null && "${dpms-wrapped}"
'';
in [
{
timeout = cfg.timeouts.dpms;
on-timeout = cfg.commands.dpms-off;
on-resume = cfg.commands.dpms-on;
}
# {
# timeout = cfg.timeouts.locked-dpms;
# on-timeout = "${lock-dpms}";
# on-resume = cfg.commands.dpms-on;
# }
{
timeout = cfg.timeouts.lock;
on-timeout = "${lock}";
}
{
timeout = cfg.timeouts.lock + cfg.timeouts.locked-dpms;
on-timeout = cfg.commands.dpms-off;
on-resume = cfg.commands.dpms-on;
}
];
general = {
lock_cmd = "${lock}";
unlock_cmd = "${pkgs.procps}/bin/pkill -x -USR1 swaylock";
before_sleep_cmd = "${config.programs.swaylock.package}";
ignore_dbus_inhibit = false;
# after_sleep_cmd = "echo 'Awake...'";
};
};
};
})
# why isn't this handled automatically??
(lib.mkIf config.services.hypridle.enable {
home.packages = with pkgs; [
hypridle
];
})
];
}