{config, ...}: let
  cfg = config.services.grafana;
  secrets = config.sops.secrets;
in {
  sops.secrets."grafana/oidc_client_secret" = {
    owner = "grafana";
  };
  services.grafana = {
    enable = true;
    settings = {
      server = {
        root_url = "https://${cfg.settings.server.domain}";
        domain = "monitor.${config.networking.domain}";
      };
      "auth.generic_oauth" = {
        enabled = true;
        name = "authentik";
        client_id = "TNMLGFxpovO0jPptxD0nYmjnuytXd1MphjFS20uE";
        client_secret = "$__file{${secrets."grafana/oidc_client_secret".path}}";
        scopes = toString ["openid" "profile" "email"];
        auth_url = "https://auth.tristans.cloud/application/o/authorize/";
        token_url = "https://auth.tristans.cloud/application/o/token/";
        api_url = "https://auth.tristans.cloud/application/o/userinfo/";
        redirect_url = "https://auth.tristans.cloud/application/o/grafana/end-session/";
        role_attribute_path = "contains(groups[*], 'Grafana Admins') && 'Admin' || contains(groups[*], 'Grafana Editors') && 'Editor' || 'Viewer'";
      };
    };
  };
  services.nginx.virtualHosts = {
    ${cfg.settings.server.domain} = {
      forceSSL = true;
      enableACME = true;
      locations."/" = {
        proxyWebsockets = true;
        proxyPass = "http://localhost:${toString cfg.settings.server.http_port}";
      };
    };
  };
}
