{ config, lib, pkgs, ... }: let probesFormat = pkgs.formats.json { }; cfg = config.statelessUptimeKuma; in { options.statelessUptimeKuma = { build = { json = lib.mkOption { type = lib.types.package; }; script = lib.mkOption { type = lib.types.package; }; }; host = lib.mkOption { default = null; type = with lib.types; nullOr str; }; extraFlags = lib.mkOption { default = [ ]; example = [ "--scrape-http-keywords" ]; type = with lib.types; listOf str; description = lib.mdDoc '' Extra arguments to use for executing `stateless-uptime-kuma`. ''; }; lib = lib.mkOption { type = lib.types.raw; }; probesConfig = { monitors = lib.mkOption { type = with lib.types; attrsOf probesFormat.type; default = { }; }; tags = lib.mkOption { type = with lib.types; attrsOf probesFormat.type; default = { }; }; notifications = lib.mkOption { type = with lib.types; attrsOf probesFormat.type; default = { }; }; status_pages = lib.mkOption { type = with lib.types; attrsOf probesFormat.type; default = { }; }; }; }; config.statelessUptimeKuma = { lib = import ../lib { inherit lib; }; extraFlags = lib.optional (cfg.host != null) "--host ${cfg.host}"; build = { json = probesFormat.generate "probes.json" cfg.probesConfig; script = pkgs.writeShellApplication { name = "deploy-uptime-kuma-probes"; runtimeInputs = [ pkgs.statelessUptimeKuma ]; text = '' args=("$@") stateless-uptime-kuma apply-json -f ${cfg.build.json} ${builtins.concatStringsSep " " cfg.extraFlags} "''${args[@]}" ''; }; }; }; }