{ self, config, lib, ... }: let inherit (lib) enabled filterAttrs flatten mapAttrsToList; in { services.grafana.provision.datasources.settings = { datasources = [{ name = "Prometheus"; type = "prometheus"; url = "http://[::1]:${toString config.services.prometheus.port}"; orgId = 1; }]; deleteDatasources = [{ name = "Prometheus"; orgId = 1; }]; }; services.prometheus = enabled { listenAddress = "[::]"; retentionTime = "1w"; scrapeConfigs = let configToScrapeConfig = hostName: { config, ... }: let hostConfig = config; in hostConfig.services.prometheus.exporters |> filterAttrs (exporterName: exporterConfig: exporterName != "minio" && exporterName != "unifi-poller" && exporterName != "tor" && exporterConfig.enable or false) |> mapAttrsToList (exporterName: exporterConfig: { job_name = "${exporterName}-${hostName}"; static_configs = [{ targets = [ "${hostName}:${toString exporterConfig.port}" ]; }]; }); in self.nixosConfigurations |> mapAttrsToList configToScrapeConfig |> flatten; }; }