_config: use lists to merge config via nixos' imports =

This commit is contained in:
lassulus 2022-10-01 21:29:36 +02:00
parent fba7b03a21
commit a215a19759

View file

@ -33,8 +33,8 @@ rec {
deepMergeMap :: -> (AttrSet -> AttrSet ) -> [ AttrSet ] -> Attrset deepMergeMap :: -> (AttrSet -> AttrSet ) -> [ AttrSet ] -> Attrset
Example: Example:
deepMergeMap (x: x.t = "test") [ { x = { y = 1; z = 3; }; } { x = { 123 = 234; }; } ] deepMergeMap (x: x.t = "test") [ { x = { y = 1; z = 3; }; } { x = { bla = 234; }; } ]
=> { x = { y = 1; z = 3; 123 = 234; t = "test"; }; } => { x = { y = 1; z = 3; bla = 234; t = "test"; }; }
*/ */
deepMergeMap = f: listOfAttrs: deepMergeMap = f: listOfAttrs:
foldr (attr: acc: (recursiveUpdate acc (f attr))) {} listOfAttrs; foldr (attr: acc: (recursiveUpdate acc (f attr))) {} listOfAttrs;
@ -216,12 +216,12 @@ rec {
}; };
config = mkOption { config = mkOption {
readOnly = true; readOnly = true;
default = diskoLib.deepMergeMap (dev: dev._config) (flatten (map attrValues [ default = { imports = flatten (map (dev: dev._config) (flatten (map attrValues [
config.devices.disk config.devices.disk
config.devices.lvm_vg config.devices.lvm_vg
config.devices.mdadm config.devices.mdadm
config.devices.zpool config.devices.zpool
])); ])));};
}; };
}; };
}); });
@ -283,12 +283,12 @@ rec {
_config = mkOption { _config = mkOption {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: { default = dev: [{
fileSystems.${config.mountpoint} = { fileSystems.${config.mountpoint} = {
device = dev; device = dev;
fsType = "btrfs"; fsType = "btrfs";
}; };
}; }];
}; };
}; };
}); });
@ -351,12 +351,12 @@ rec {
_config = mkOption { _config = mkOption {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: { default = dev: [{
fileSystems.${config.mountpoint} = { fileSystems.${config.mountpoint} = {
device = dev; device = dev;
fsType = config.format; fsType = config.format;
}; };
}; }];
}; };
}; };
}); });
@ -409,7 +409,7 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: default = dev:
diskoLib.deepMergeMap (partition: partition._config dev) config.partitions; map (partition: partition._config dev) config.partitions;
}; };
}; };
}); });
@ -495,7 +495,7 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: default = dev:
optionalAttrs (!isNull config.content) (config.content._config (diskoLib.deviceNumbering dev config.index)); optional (!isNull config.content) (config.content._config (diskoLib.deviceNumbering dev config.index));
}; };
}; };
}); });
@ -536,7 +536,7 @@ rec {
_config = mkOption { _config = mkOption {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: {}; default = dev: [];
}; };
}; };
}); });
@ -589,7 +589,7 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = default =
diskoLib.deepMergeMap (lv: lv._config config.name) (attrValues config.lvs); map (lv: lv._config config.name) (attrValues config.lvs);
}; };
}; };
}); });
@ -649,7 +649,12 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = vg: default = vg:
optionalAttrs (!isNull config.content) (config.content._config "/dev/${vg}/${config.name}"); [
(optional (!isNull config.content) (config.content._config "/dev/${vg}/${config.name}"))
(optional (!isNull config.lvm_type) {
boot.initrd.kernelModules = [ "dm-${config.lvm_type}" ];
})
];
}; };
}; };
}); });
@ -689,7 +694,7 @@ rec {
_config = mkOption { _config = mkOption {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: {}; default = dev: [];
}; };
}; };
}); });
@ -775,15 +780,16 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = default =
recursiveUpdate [
(diskoLib.deepMergeMap (dataset: dataset._config config.name) (attrValues config.datasets)) (map (dataset: dataset._config config.name) (attrValues config.datasets))
(optionalAttrs (!isNull config.mountpoint) { (optional (!isNull config.mountpoint) {
fileSystems.${config.mountpoint} = { fileSystems.${config.mountpoint} = {
device = config.name; device = config.name;
fsType = "zfs"; fsType = "zfs";
options = lib.optional ((config.options.mountpoint or "") != "legacy") "zfsutil"; options = lib.optional ((config.options.mountpoint or "") != "legacy") "zfsutil";
}; };
}); })
];
}; };
}; };
}); });
@ -865,14 +871,14 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = zpool: default = zpool:
optionalAttrs (config.zfs_type == "volume" && !isNull config.content) (config.content._config "/dev/zvol/${zpool}/${config.name}") // (optional (config.zfs_type == "volume" && !isNull config.content) (config.content._config "/dev/zvol/${zpool}/${config.name}")) ++
optionalAttrs (config.zfs_type == "filesystem" && config.options.mountpoint or "" != "none") { (optional (config.zfs_type == "filesystem" && config.options.mountpoint or "" != "none") {
fileSystems.${config.mountpoint} = { fileSystems.${config.mountpoint} = {
device = "${zpool}/${config.name}"; device = "${zpool}/${config.name}";
fsType = "zfs"; fsType = "zfs";
options = lib.optional ((config.options.mountpoint or "") != "legacy") "zfsutil"; options = lib.optional ((config.options.mountpoint or "") != "legacy") "zfsutil";
}; };
}; });
}; };
}; };
}); });
@ -931,7 +937,7 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = default =
optionalAttrs (!isNull config.content) (config.content._config "/dev/md/${config.name}"); optional (!isNull config.content) (config.content._config "/dev/md/${config.name}");
}; };
}; };
}); });
@ -973,7 +979,7 @@ rec {
_config = mkOption { _config = mkOption {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: {}; default = dev: [];
}; };
}; };
}); });
@ -1034,10 +1040,10 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = dev: default = dev:
recursiveUpdate { [
# TODO do we need this always in initrd and only there? # TODO do we need this always in initrd and only there?
boot.initrd.luks.devices.${config.name}.device = dev; { boot.initrd.luks.devices.${config.name}.device = dev; }
} (optionalAttrs (!isNull config.content) (config.content._config "/dev/mapper/${config.name}")); ] ++ (optional (!isNull config.content) (config.content._config "/dev/mapper/${config.name}"));
}; };
}; };
}); });
@ -1079,7 +1085,7 @@ rec {
internal = true; internal = true;
readOnly = true; readOnly = true;
default = default =
optionalAttrs (!isNull config.content) (config.content._config config.device); optional (!isNull config.content) (config.content._config config.device);
}; };
}; };
}); });