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

let
  plistPath = "${config.out}/user/Library/LaunchAgents/org.nixos.lorri.plist";
  expectedPath = "${lib.makeBinPath [config.nix.package pkgs.git pkgs.gnutar pkgs.gzip]}";
  expectedNixPath = "${"nixpkgs="+ toString pkgs.path}";
in
{
  services.lorri.enable = true;
  test = ''
    PATH=${lib.makeBinPath [ pkgs.xcbuild pkgs.jq ]}:$PATH

    plutil -lint ${plistPath}
    plutil -convert json -o service.json ${plistPath}

    <service.json jq -e ".EnvironmentVariables.PATH     == \"${expectedPath}\""
    <service.json jq -e ".EnvironmentVariables.NIX_PATH == \"${expectedNixPath}\""
    <service.json jq -e ".KeepAlive                     == true"
    <service.json jq -e ".Label                         == \"org.nixos.lorri\""
    <service.json jq -e ".ProcessType                   == \"Background\""
    <service.json jq -e ".ProgramArguments|length       == 3"
    <service.json jq -e ".ProgramArguments[0]           == \"/bin/sh\""
    <service.json jq -e ".ProgramArguments[1]           == \"-c\""
    <service.json jq -e ".ProgramArguments[2]           == \"exec ${pkgs.lorri}/bin/lorri daemon\""
    <service.json jq -e ".RunAtLoad                     == true"
  '';
}