diff --git a/nixos/modules/services/backup/sanoid.nix b/nixos/modules/services/backup/sanoid.nix index 0d8a90e4d6939..a664cb9e5ae7f 100644 --- a/nixos/modules/services/backup/sanoid.nix +++ b/nixos/modules/services/backup/sanoid.nix @@ -58,19 +58,8 @@ let }; }; - commonConfig = config: { - settings = { - hourly = mkDefault config.hourly; - daily = mkDefault config.daily; - monthly = mkDefault config.monthly; - yearly = mkDefault config.yearly; - autoprune = mkDefault config.autoprune; - autosnap = mkDefault config.autosnap; - }; - }; - datasetOptions = { - useTemplate = mkOption { + use_template = mkOption { description = "Names of the templates to use for this dataset."; type = (types.listOf (types.enum (attrNames cfg.templates))) // { description = "list of template names"; @@ -84,20 +73,17 @@ let default = false; }; - processChildrenOnly = mkOption { + process_children_only = mkOption { description = "Whether to only snapshot child datasets if recursing."; type = types.bool; default = false; }; }; - datasetConfig = config: { - settings = { - use_template = mkDefault config.useTemplate; - recursive = mkDefault config.recursive; - process_children_only = mkDefault config.processChildrenOnly; - }; - }; + mkDefaultSettings = config: + mapAttrs (n: mkDefault) + (filterAttrs (n: v: n!="settings" && !hasPrefix "_" n) + config); # Extract pool names from configured datasets pools = unique (map (d: head (builtins.match "([^/]+).*" d)) (attrNames cfg.datasets)); @@ -136,7 +122,7 @@ in { datasets = mkOption { type = types.attrsOf (types.submodule ({ config, ... }: { options = commonOptions // datasetOptions; - config = mkMerge [ (commonConfig config) (datasetConfig config) ]; + config.settings = mkDefaultSettings config; })); default = {}; description = "Datasets to snapshot."; @@ -145,7 +131,7 @@ in { templates = mkOption { type = types.attrsOf (types.submodule ({ config, ... }: { options = commonOptions; - config = commonConfig config; + config.settings = mkDefaultSettings config; })); default = {}; description = "Templates for datasets."; diff --git a/nixos/tests/sanoid.nix b/nixos/tests/sanoid.nix index 66ddaad60ea25..710ad76031679 100644 --- a/nixos/tests/sanoid.nix +++ b/nixos/tests/sanoid.nix @@ -33,7 +33,7 @@ in { autosnap = true; }; - datasets."pool/test".useTemplate = [ "test" ]; + datasets."pool/test".use_template = [ "test" ]; }; services.syncoid = {