{
  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]           == \"/bin/wait4path /nix/store && exec ${pkgs.lorri}/bin/lorri daemon\""
    <service.json jq -e ".RunAtLoad                     == true"
  '';
}