stateless-uptime-kuma/nixos/module.nix

65 lines
1.8 KiB
Nix
Raw Normal View History

2024-04-18 18:23:11 +02:00
{
config,
lib,
pkgs,
...
}:
2024-04-18 18:19:59 +02:00
let
2024-04-18 18:23:11 +02:00
probesFormat = pkgs.formats.json { };
2024-04-18 18:19:59 +02:00
cfg = config.statelessUptimeKuma;
in
{
options.statelessUptimeKuma = {
2024-04-18 19:36:28 +02:00
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;
};
2024-04-18 19:36:28 +02:00
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`.
'';
2024-04-18 18:19:59 +02:00
};
2024-04-18 20:27:17 +02:00
lib = lib.mkOption { type = lib.types.raw; };
2024-04-18 18:19:59 +02:00
probesConfig = {
monitors = lib.mkOption {
type = with lib.types; attrsOf probesFormat.type;
default = { };
2024-04-18 18:19:59 +02:00
};
tags = lib.mkOption {
type = with lib.types; attrsOf probesFormat.type;
default = { };
2024-04-18 18:19:59 +02:00
};
notifications = lib.mkOption {
type = with lib.types; attrsOf probesFormat.type;
default = { };
2024-04-18 18:19:59 +02:00
};
status_pages = lib.mkOption {
type = with lib.types; attrsOf probesFormat.type;
default = { };
};
2024-04-18 18:19:59 +02:00
};
};
config.statelessUptimeKuma = {
2024-04-18 20:27:17 +02:00
lib = import ../lib { inherit lib; };
extraFlags = lib.optional (cfg.host != null) "--host ${cfg.host}";
2024-04-18 19:36:28 +02:00
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[@]}"
2024-04-18 19:36:28 +02:00
'';
};
};
2024-04-18 18:19:59 +02:00
};
}