grafana-alloy: don't build the frontend twice
[NixPkgs.git] / nixos / modules / services / monitoring / mimir.nix
blob76fff95ae597b517fe06cbe46cb2312b7cf1e373
1 { config, lib, pkgs, ... }:
3 let
4   inherit (lib) escapeShellArgs mkEnableOption mkPackageOption mkIf mkOption types;
6   cfg = config.services.mimir;
8   settingsFormat = pkgs.formats.yaml {};
9 in {
10   options.services.mimir = {
11     enable = mkEnableOption "mimir";
13     configuration = mkOption {
14       type = (pkgs.formats.json {}).type;
15       default = {};
16       description = ''
17         Specify the configuration for Mimir in Nix.
18       '';
19     };
21     configFile = mkOption {
22       type = types.nullOr types.path;
23       default = null;
24       description = ''
25         Specify a configuration file that Mimir should use.
26       '';
27     };
29     package = mkPackageOption pkgs "mimir" { };
31     extraFlags = mkOption {
32       type = types.listOf types.str;
33       default = [];
34       example = [ "--config.expand-env=true" ];
35       description = ''
36         Specify a list of additional command line flags,
37         which get escaped and are then passed to Mimir.
38       '';
39     };
40   };
42   config = mkIf cfg.enable {
43     # for mimirtool
44     environment.systemPackages = [ cfg.package ];
46     assertions = [{
47       assertion = (
48         (cfg.configuration == {} -> cfg.configFile != null) &&
49         (cfg.configFile != null -> cfg.configuration == {})
50       );
51       message  = ''
52         Please specify either
53         'services.mimir.configuration' or
54         'services.mimir.configFile'.
55       '';
56     }];
58     systemd.services.mimir = {
59       description = "mimir Service Daemon";
60       wantedBy = [ "multi-user.target" ];
62       serviceConfig = let
63         conf = if cfg.configFile == null
64                then settingsFormat.generate "config.yaml" cfg.configuration
65                else cfg.configFile;
66       in
67       {
68         ExecStart = "${cfg.package}/bin/mimir --config.file=${conf} ${escapeShellArgs cfg.extraFlags}";
69         DynamicUser = true;
70         Restart = "always";
71         ProtectSystem = "full";
72         DevicePolicy = "closed";
73         NoNewPrivileges = true;
74         WorkingDirectory = "/var/lib/mimir";
75         StateDirectory = "mimir";
76       };
77     };
78   };