{
  config,
  lib,
  pkgs,
  ...
}:
let
  cfg = config.services.pueue;
  yamlFormat = pkgs.formats.yaml { };
  configDir =
    if pkgs.stdenv.hostPlatform.isDarwin then "Library/Application Support" else config.xdg.configHome;
  configFile = yamlFormat.generate "pueue.yaml" ({ shared = { }; } // cfg.settings);
  pueuedBin = "${cfg.package}/bin/pueued";
in
{
  meta.maintainers = [ ];

  options.services.pueue = {
    enable = lib.mkEnableOption "Pueue, CLI process scheduler and manager";

    package = lib.mkPackageOption pkgs "pueue" { nullable = true; };

    settings = lib.mkOption {
      inherit (yamlFormat) type;
      default = { };
      example = lib.literalExpression ''
        {
          daemon = {
            default_parallel_tasks = 2;
          };
        }
      '';
      description = ''
        Configuration written to
        {file}`$XDG_CONFIG_HOME/pueue/pueue.yml`.
      '';
    };
  };

  config = lib.mkIf cfg.enable {
    home.packages = lib.mkIf (cfg.package != null) [ cfg.package ];

    home.file."${configDir}/pueue/pueue.yml".source = configFile;

    systemd.user = lib.mkIf (cfg.package != null) {
      services.pueued = {
        Unit = {
          Description = "Pueue Daemon - CLI process scheduler and manager";
        };

        Service = {
          Restart = "on-failure";
          ExecStart = "${pueuedBin} -v -c ${configFile}";
        };

        Install.WantedBy = [ "default.target" ];
      };
    };

    launchd.agents.pueued = lib.mkIf (cfg.package != null) {
      enable = true;

      config = {
        ProgramArguments = [
          pueuedBin
          "-v"
          "-c"
          "${configFile}"
        ];
        KeepAlive = {
          Crashed = true;
          SuccessfulExit = false;
        };
        ProcessType = "Background";
        RunAtLoad = true;
      };
    };
  };
}
