133 lines
3 KiB
Nix
133 lines
3 KiB
Nix
|
{
|
||
|
pkgs,
|
||
|
lib,
|
||
|
config,
|
||
|
...
|
||
|
}:
|
||
|
let
|
||
|
cfg = config.services.gatus;
|
||
|
|
||
|
settingsFormat = pkgs.formats.yaml { };
|
||
|
|
||
|
inherit (lib)
|
||
|
getExe
|
||
|
literalExpression
|
||
|
maintainers
|
||
|
mkEnableOption
|
||
|
mkIf
|
||
|
mkOption
|
||
|
mkPackageOption
|
||
|
;
|
||
|
|
||
|
inherit (lib.types)
|
||
|
bool
|
||
|
int
|
||
|
nullOr
|
||
|
path
|
||
|
submodule
|
||
|
;
|
||
|
in
|
||
|
{
|
||
|
options.services.gatus = {
|
||
|
enable = mkEnableOption "Gatus";
|
||
|
|
||
|
package = mkPackageOption pkgs "gatus" { };
|
||
|
|
||
|
configFile = mkOption {
|
||
|
type = path;
|
||
|
default = settingsFormat.generate "gatus.yaml" cfg.settings;
|
||
|
defaultText = literalExpression ''
|
||
|
let settingsFormat = pkgs.formats.yaml { }; in settingsFormat.generate "gatus.yaml" cfg.settings;
|
||
|
'';
|
||
|
description = ''
|
||
|
Path to the Gatus configuration file.
|
||
|
Overrides any configuration made using the `settings` option.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
environmentFile = mkOption {
|
||
|
type = nullOr path;
|
||
|
default = null;
|
||
|
description = ''
|
||
|
File to load as environment file.
|
||
|
Environmental variables from this file can be interpolated in the configuration file using `''${VARIABLE}`.
|
||
|
This is useful to avoid putting secrets into the nix store.
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
settings = mkOption {
|
||
|
type = submodule {
|
||
|
freeformType = settingsFormat.type;
|
||
|
options = {
|
||
|
web.port = mkOption {
|
||
|
type = int;
|
||
|
default = 8080;
|
||
|
description = ''
|
||
|
The TCP port to serve the Gatus service at.
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
|
||
|
default = { };
|
||
|
|
||
|
example = literalExpression ''
|
||
|
{
|
||
|
web.port = 8080;
|
||
|
endpoints = [{
|
||
|
name = "website";
|
||
|
url = "https://twin.sh/health";
|
||
|
interval = "5m";
|
||
|
conditions = [
|
||
|
"[STATUS] == 200"
|
||
|
"[BODY].status == UP"
|
||
|
"[RESPONSE_TIME] < 300"
|
||
|
];
|
||
|
}];
|
||
|
}
|
||
|
'';
|
||
|
|
||
|
description = ''
|
||
|
Configuration for Gatus.
|
||
|
Supported options can be found at the [docs](https://gatus.io/docs).
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
openFirewall = mkOption {
|
||
|
type = bool;
|
||
|
default = false;
|
||
|
description = ''
|
||
|
Whether to open the firewall for the Gatus web interface.
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
|
||
|
config = mkIf cfg.enable {
|
||
|
systemd.services.gatus = {
|
||
|
description = "Automated developer-oriented status page";
|
||
|
after = [ "network.target" ];
|
||
|
wantedBy = [ "multi-user.target" ];
|
||
|
|
||
|
serviceConfig = {
|
||
|
DynamicUser = true;
|
||
|
User = "gatus";
|
||
|
Group = "gatus";
|
||
|
Type = "simple";
|
||
|
Restart = "on-failure";
|
||
|
ExecStart = getExe cfg.package;
|
||
|
StateDirectory = "gatus";
|
||
|
SyslogIdentifier = "gatus";
|
||
|
EnvironmentFile = lib.optional (cfg.environmentFile != null) cfg.environmentFile;
|
||
|
};
|
||
|
|
||
|
environment = {
|
||
|
GATUS_CONFIG_PATH = cfg.configFile;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
networking.firewall.allowedTCPPorts = lib.optionals cfg.openFirewall [ cfg.settings.web.port ];
|
||
|
};
|
||
|
|
||
|
meta.maintainers = with maintainers; [ pizzapim ];
|
||
|
}
|