{ config, inputs, lib, libNginx, this, ... }: let cfg = config.nixfiles.modules.prometheus; in { options.nixfiles.modules.prometheus = { enable = lib.mkEnableOption "Prometheus"; port = lib.mkOption { description = "Port."; type = lib.types.port; default = 30111; }; domain = lib.mkOption { description = "Domain name sans protocol scheme."; type = lib.types.str; default = "prometheus.${config.networking.domain}"; }; }; config = lib.mkIf cfg.enable { nixfiles.modules.nginx = { enable = true; upstreams.prometheus.servers."127.0.0.1:${toString cfg.port}" = { }; virtualHosts.${cfg.domain} = { locations."/".proxyPass = "http://prometheus"; extraConfig = libNginx.config.internalOnly; }; }; services.prometheus = { enable = true; enableReload = true; listenAddress = "127.0.0.1"; inherit (cfg) port; extraFlags = [ "--web.external-url=https://${cfg.domain}" "--storage.tsdb.retention.size=50GB" "--storage.tsdb.retention.time=1y" "--storage.tsdb.wal-compression" ]; }; topology.nodes.${this.hostname}.services.prometheus = { name = "Prometheus"; icon = "${inputs.homelab-svg-assets}/assets/prometheus.svg"; info = cfg.domain; details.listen.text = "127.0.0.1:${toString cfg.port}"; }; }; }