{ config, lib, pkgs, ... }: let inherit (lib.modules) mkIf; inherit (lib.options) mkEnableOption; cfg = config.modules.system.services.grafana; port = 4022; in { options.modules.system.services.prometheus.enable = mkEnableOption "Grafana, a graphing service"; config = mkIf cfg.enable { services.prometheus = { enable = true; package = pkgs.prometheus; inherit port; exporters = { node = { enable = true; port = 4023; enabledCollectors = ["systemd" "processes"]; }; postgres = { enable = true; port = 4024; user = "postgres"; }; nginx = { enable = true; port = 4025; }; }; scrapeConfigs = [ { job_name = "prometheus"; scrape_interval = "30s"; static_configs = [{targets = ["localhost:${toString port}"];}]; } { job_name = "node"; scrape_interval = "30s"; static_configs = [{targets = ["localhost:${toString config.services.prometheus.exporters.node.port}"];}]; } { job_name = "postgres"; scrape_interval = "30s"; static_configs = [{targets = ["localhost:${toString config.services.prometheus.exporters.postgres.port}"];}]; } { job_name = "nginx"; scrape_interval = "30s"; static_configs = [{targets = ["localhost:${toString config.services.prometheus.exporters.nginx.port}"];}]; } ]; }; }; }