{ config, pkgs, lib, ... }:

{
  services.swayidle = {
    enable = true;
    package = config.lib.test.mkStubPackage { outPath = "@swayidle@"; };
    timeouts = [
      {
        timeout = 50;
        command = ''notify-send -t 10000 -- "Screen lock in 10 seconds"'';
      }
      {
        timeout = 60;
        command = "swaylock -fF";
      }
      {
        timeout = 300;
        command = ''swaymsg "output * dpms off"'';
        resumeCommand = ''swaymsg "output * dpms on"'';
      }
    ];
    events = [
      {
        event = "before-sleep";
        command = "swaylock -fF";
      }
      {
        event = "lock";
        command = "swaylock -fF";
      }
    ];
  };

  nmt.script = ''
    serviceFile=home-files/.config/systemd/user/swayidle.service

    assertFileExists "$serviceFile"

    serviceFileNormalized="$(normalizeStorePaths "$serviceFile")"

    assertFileContent "$serviceFileNormalized" ${
      builtins.toFile "expected.service" ''
        [Install]
        WantedBy=graphical-session.target

        [Service]
        Environment=PATH=/nix/store/00000000000000000000000000000000-bash/bin
        ExecStart=@swayidle@/bin/dummy -w timeout 50 'notify-send -t 10000 -- "Screen lock in 10 seconds"' timeout 60 'swaylock -fF' timeout 300 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' before-sleep 'swaylock -fF' lock 'swaylock -fF'
        Restart=always
        Type=simple

        [Unit]
        ConditionEnvironment=WAYLAND_DISPLAY
        Description=Idle manager for Wayland
        Documentation=man:swayidle(1)
        PartOf=graphical-session.target
      ''
    }
  '';
}