diff options
Diffstat (limited to 'modules/services/grafana/default.nix')
-rw-r--r-- | modules/services/grafana/default.nix | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/modules/services/grafana/default.nix b/modules/services/grafana/default.nix new file mode 100644 index 0000000..773090b --- /dev/null +++ b/modules/services/grafana/default.nix @@ -0,0 +1,54 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.my.services.grafana; + secrets = config.age.secrets; +in { + options.my.services.grafana = with lib; { + enable = mkEnableOption "grafana observability stack"; + vhostName = mkOption { + type = types.str; + example = "dash.fcuny.net"; + description = "Name for the virtual host"; + }; + }; + + config = lib.mkIf cfg.enable { + services.grafana = { + enable = true; + security.adminUser = "fcuny"; + analytics.reporting.enable = false; + port = 4000; + provision = { + enable = true; + datasources = [{ + name = "prometheus"; + type = "prometheus"; + isDefault = true; + url = "http://localhost:9090"; + }]; + dashboards = [{ + disableDeletion = true; + options.path = ./dashboards; + }]; + }; + }; + + services.nginx.virtualHosts."${cfg.vhostName}" = { + forceSSL = true; + useACMEHost = cfg.vhostName; + locations."/" = { + proxyPass = "http://${config.services.grafana.addr}:${ + toString config.services.grafana.port + }"; + proxyWebsockets = true; + }; + }; + + security.acme.certs."${cfg.vhostName}" = { + dnsProvider = "gcloud"; + credentialsFile = secrets."acme/credentials".path; + }; + + my.services.backup = { paths = [ "/var/lib/grafana" ]; }; + }; +} |