aboutsummaryrefslogtreecommitdiff
path: root/tharos/grafana.nix
blob: fa2259eb80c7c83829d0cde901028b8dd0e6df7b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
{ self, lib, ... }:
{
  flake.machines.tharos = {
    nixos =
      { config, ... }:
      let
        grafana = {
          domain = config.services.grafana.settings.server.domain;
          port = config.services.grafana.settings.server.http_port;
          database = config.services.grafana.settings.database;
        };
      in
      {
        services.grafana = {
          enable = true;
          openFirewall = true;
          settings = {
            server = {
              domain = "grafana.${self.domain}";
              root_url = "https://${grafana.domain}";
            };
            database = {
              type = "postgres";
              user = grafana.database.name;
              host =
                let
                  nextcloud = config.services.nextcloud;
                in
                lib.mkIf nextcloud.enable nextcloud.config.dbhost;
            };
            security = {
              disable_initial_admin_creation = true;
            };
            "auth.anonymous" = {
              enabled = true;
              org_role = "Viewer";
            };
          };
        };
        services.postgresql = {
          enable = true;
          ensureDatabases = [ grafana.database.name ];
          ensureUsers = [
            {
              name = grafana.database.user;
              ensureDBOwnership = true;
            }
          ];
        };
        services.caddy = {
          virtualHosts.${grafana.domain}.extraConfig = ''
            reverse_proxy http://localhost:${toString grafana.port}
          '';
        };
      };

    vm =
      { pkgs, config, ... }:
      let
        grafana = {
          domain = config.services.grafana.settings.server.domain;
          port = config.services.grafana.settings.server.http_port;
        };
      in
      {
        services.grafana = {
          settings.server = {
            domain = lib.mkForce "grafana.localhost";
            root_url = lib.mkForce "http://${grafana.domain}:${toString grafana.port}";
          };
        };

        services.caddy.virtualHosts = {
          "http://${grafana.domain}:${toString config.virtualisation.exposedPorts.http.port}".extraConfig =
            config.services.caddy.virtualHosts.${grafana.domain}.extraConfig;
        };
        services.getty.helpLine = lib.mkBefore ''
          Grafana: http://${grafana.domain}:${
            with config.virtualisation; toString (portOffset + exposedPorts.http.port)
          }
        '';
      };
  };
}