{ config, lib, masterDomain, securityTemplates, ... }: let cfg = config.os.srv.grafana; in { options.os.srv.grafana = { enable = lib.mkEnableOption "enables grafana"; proxyConfig = lib.mkOption { type = lib.types.attrs; default = { }; }; }; config = lib.mkIf cfg.enable { services.grafana = { enable = true; settings.server = { http_addr = "127.0.0.1"; http_port = 3000; }; provision = { enable = true; datasources.settings.datasources = [ { name = "Prometheus"; type = "prometheus"; url = "http://127.0.0.1:9090"; } { name = "Loki"; type = "loki"; url = "http://127.0.0.1:3100"; } ]; }; }; os.srv.grafana.proxyConfig = { "grafana.${masterDomain}" = { enableACME = true; forceSSL = true; locations."/" = { proxyPass = "http://${config.os.core.network.ips.vm2-gateway}:3000"; extraConfig = securityTemplates.restrictToInternal; }; }; }; }; }