From 9d94b98e46f8cf5f8abdcdc3cf0a271071922bc8 Mon Sep 17 00:00:00 2001 From: Finn Landweber Date: Sat, 2 Mar 2024 12:25:00 +0100 Subject: [PATCH] nixos/borgmatic: refactor added configuration check at built time added borgmatic.enableConfigCheck whether or not it'll be executed. --- nixos/modules/services/backup/borgmatic.nix | 49 +++++++++++++-------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/nixos/modules/services/backup/borgmatic.nix b/nixos/modules/services/backup/borgmatic.nix index b27dd2817120..9cc0085c4c8a 100644 --- a/nixos/modules/services/backup/borgmatic.nix +++ b/nixos/modules/services/backup/borgmatic.nix @@ -76,29 +76,42 @@ in default = { }; type = types.attrsOf cfgType; }; + + enableConfigCheck = mkEnableOption (lib.mdDoc "checking all configurations during build time") // { default = true; }; }; - config = mkIf cfg.enable { + config = + let + configFiles = + (optionalAttrs (cfg.settings != null) { "borgmatic/config.yaml".source = cfgfile; }) // + mapAttrs' + (name: value: nameValuePair + "borgmatic.d/${name}.yaml" + { source = settingsFormat.generate "${name}.yaml" value; }) + cfg.configurations; + borgmaticCheck = name: f: pkgs.runCommandCC "${name} validation" { } '' + ${pkgs.borgmatic}/bin/borgmatic -c ${f.source} config validate + touch $out + ''; + in + mkIf cfg.enable { - warnings = [] - ++ optional (cfg.settings != null && cfg.settings ? location) - "`services.borgmatic.settings.location` is deprecated, please move your options out of sections to the global scope" - ++ optional (catAttrs "location" (attrValues cfg.configurations) != []) - "`services.borgmatic.configurations..location` is deprecated, please move your options out of sections to the global scope" - ; + warnings = [] + ++ optional (cfg.settings != null && cfg.settings ? location) + "`services.borgmatic.settings.location` is deprecated, please move your options out of sections to the global scope" + ++ optional (catAttrs "location" (attrValues cfg.configurations) != []) + "`services.borgmatic.configurations..location` is deprecated, please move your options out of sections to the global scope" + ; - environment.systemPackages = [ pkgs.borgmatic ]; + environment.systemPackages = [ pkgs.borgmatic ]; - environment.etc = (optionalAttrs (cfg.settings != null) { "borgmatic/config.yaml".source = cfgfile; }) // - mapAttrs' - (name: value: nameValuePair - "borgmatic.d/${name}.yaml" - { source = settingsFormat.generate "${name}.yaml" value; }) - cfg.configurations; + environment.etc = configFiles; - systemd.packages = [ pkgs.borgmatic ]; + systemd.packages = [ pkgs.borgmatic ]; - # Workaround: https://github.com/NixOS/nixpkgs/issues/81138 - systemd.timers.borgmatic.wantedBy = [ "timers.target" ]; - }; + # Workaround: https://github.com/NixOS/nixpkgs/issues/81138 + systemd.timers.borgmatic.wantedBy = [ "timers.target" ]; + + system.checks = mkIf cfg.enableConfigCheck (mapAttrsToList borgmaticCheck configFiles); + }; }