{ config, ... }:
let
  cfg = config.services.prometheus;
in
{
  services.prometheus = {
    enable = true;
    pushgateway = {
      enable = true;
      web = {
        listen-address = "sisko.wg.aciceri.dev:9094";
      };
    };
    checkConfig = false; # Otherwise it will fail because it cannot access bearer_token_file
    webExternalUrl = "https://status.wg.aciceri.dev";
    globalConfig.scrape_interval = "10s";
    scrapeConfigs = [
      {
        job_name = "hass";
        metrics_path = "/api/prometheus";
        bearer_token_file = config.age.secrets.home-assistant-token.path;
        static_configs = [
          {
            targets = [
              "sisko.wg.aciceri.dev:${builtins.toString config.services.home-assistant.config.http.server_port}"
            ];
          }
        ];
      }
      {
        job_name = "pushgateway";
        static_configs = [
          {
            targets = [ cfg.pushgateway.web.listen-address ];
          }
        ];
      }
      {
        job_name = "node";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9100") [
              "sisko"
              "picard"
              "kirk"
            ];
          }
        ];
      }
      {
        job_name = "wireguard";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9586") [
              "picard"
              "kirk"
            ];
          }
        ];
      }
      {
        job_name = "zfs";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9134") [
              "picard"
              "kirk"
            ];
          }
        ];
      }
      {
        job_name = "restic";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9753") [ "sisko" ];
          }
        ];
      }
      {
        job_name = "postgres";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9187") [ "sisko" ];
          }
        ];
      }
      {
        job_name = "nginx";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9117") [ "sisko" ];
          }
        ];
      }
      {
        job_name = "smartctl";
        static_configs = [
          {
            targets = builtins.map (host: "${host}.wg.aciceri.dev:9633") [
              "sisko"
              "kirk"
              "picard"
            ];
          }
        ];
      }
    ];
  };
  environment.persistence."/persist".directories = [
    "/var/lib/${cfg.stateDir}"
  ];
}
