From 668015ed174a32f4124b89202833c3e243595607 Mon Sep 17 00:00:00 2001 From: Lucas Bergman Date: Mon, 19 Feb 2024 18:01:56 -0600 Subject: [PATCH] maint: Some Nix flake cleanups Specifically: 1. Switch from the nixosModule flake output (which is deprecated) to nixosModules.default 2. Remove "with lib;" it's convenient, but I've gotten feedback when upstreaming module changes that that shouldn't be a thing in nixpkgs anymore 3. Add a little type checking to the NixOS module options 4. Switch the default config to empty (but leave the example) 5. Use the convention "let cfg = config.services.heracles," a thing that's super common in NixOS --- flake.nix | 94 +++++++++++++++++-------------------------------------- 1 file changed, 29 insertions(+), 65 deletions(-) diff --git a/flake.nix b/flake.nix index b38c034..245c5b1 100644 --- a/flake.nix +++ b/flake.nix @@ -48,23 +48,26 @@ formatter = pkgs.alejandra; }) // { - nixosModule = { + nixosModules.default = { config, pkgs, lib, - }: - with lib; { - options = { - services.heracles.enable = mkEnableOption "enable heracles service"; - services.heracles.listen = mkOption { - description = "[host]:port address for heracles to listen on"; - default = "localhost:8080"; - defaultText = "localhost:8080"; - }; + }: { + options = { + services.heracles.enable = lib.mkEnableOption "enable heracles service"; + services.heracles.listen = lib.mkOption { + description = "[host]:port address for heracles to listen on"; + default = "localhost:8080"; + defaultText = "localhost:8080"; + type = lib.types.string; + }; - services.heracles.settings = mkOption { - description = "heracles dashboard Configuration"; - default = [ + services.heracles.settings = lib.mkOption { + description = "heracles dashboard Configuration"; + type = lib.types.listOf lib.types.attrs; + default = []; + defaultText = lib.literalExpression '' + [ { title = "A dashboard"; graphs = [ @@ -76,11 +79,11 @@ plots = [ { source = "http://heimdall:9001"; - query = '' + query = \'\' sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m])) - ''; + \'\'; meta = { - name_function = "`\${labels.instance}`"; + name_function = "''${labels.instance}"; named_axis = "y"; # yaxis formatting for this subplot d3_tick_format = "~s"; @@ -102,56 +105,17 @@ step_duration = "10min"; }; } - ]; - defaultText = '' - [ - { - title = "A dashboard"; - graphs = [ - { - title = "Graph title"; - query_type = "Range"; - # yaxis formatting default for this graph - d3_tick_format = "~s"; - plots = [ - { - source = "http://heimdall:9001"; - query = \'\' - sum by (instance)(irate(node_cpu_seconds_total{job="nodestats"}[5m])) - \'\'; - meta = { - name_label = "instance"; - name_prefix = "trace name prefix"; - name_suffix = "trace name suffix"; - named_axis = "y"; - # yaxis formatting for this subplot - d3_tick_format = "~s"; - }; - } - ]; - # span for this graph. - span = { - end = "now"; - duration = "1d"; - step_duration = "10min"; - }; - } - ]; - # default span for dashboard - span = { - end = "now"; - duration = "1d"; - step_duration = "10min"; - }; - } - ] - ''; - }; + ] + ''; }; + }; - config = mkIf config.services.heracles.enable { + config = let + cfg = config.services.heracles; + in + lib.mkIf cfg.enable { environment.etc."heracles.yaml" = { - text = generators.toYAML {} config.services.heracles.settings; + text = lib.generators.toYAML {} cfg.settings; }; systemd.services.heracles = { wantedBy = ["multi-user.target" "default.target"]; @@ -160,10 +124,10 @@ serviceConfig = { Restart = "on-failure"; RestartSec = "30s"; - ExecStart = "${pkgs.heracles}/bin/heracles --listen ${config.services.heracles.listen} --config=${config.environment.etc."heracles.yaml".target}"; + ExecStart = "${pkgs.heracles}/bin/heracles --listen ${cfg.listen} --config=${config.environment.etc."heracles.yaml".target}"; }; }; }; - }; + }; }; }