nichts/nyx/homes/notashelf/services/wayland/swayidle/default.nix

54 lines
1.4 KiB
Nix
Raw Normal View History

2024-04-09 23:11:33 +02:00
{
osConfig,
config,
pkgs,
lib,
...
}: let
inherit (lib) getExe mkIf;
env = osConfig.modules.usrEnv;
locker = getExe env.programs.screenlock.package;
systemctl = "${pkgs.systemd}/bin/systemctl";
suspendScript = pkgs.writeShellScript "suspend-script" ''
${pkgs.pipewire}/bin/pw-cli i all | ${pkgs.ripgrep}/bin/rg running
# only suspend if audio isn't running
if [ $? == 1 ]; then
${systemctl} suspend
fi
'';
in {
# TODO: can we make it so that it works with sway *or* hyprland based on which one is enabled?
config = mkIf env.desktops.hyprland.enable {
systemd.user.services.swayidle.Install.WantedBy = ["hyprland-session.target"];
# screen idle
services.swayidle = {
enable = true;
extraArgs = ["-d" "-w"];
events = [
{
event = "before-sleep";
command = "${pkgs.systemd}/bin/loginctl lock-session";
}
{
event = "lock";
command = "${locker}";
}
];
timeouts = [
{
timeout = 900;
command = suspendScript.outPath;
}
{
timeout = 1200;
command = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off";
resumeCommand = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on";
}
];
};
};
}