mirror of
https://github.com/TECHNOFAB11/disko.git
synced 2025-12-11 23:50:05 +01:00
_config: use lists to merge config via nixos' imports =
This commit is contained in:
parent
fba7b03a21
commit
a215a19759
1 changed files with 37 additions and 31 deletions
60
types.nix
60
types.nix
|
|
@ -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);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue