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