add top-level layout type

This commit is contained in:
lassulus 2018-07-19 21:52:11 +02:00
parent 6232ab3078
commit 7262439401
2 changed files with 63 additions and 51 deletions

View File

@ -1,57 +1,62 @@
# usage: nix-instantiate --eval --json --strict example/config.nix | jq . # usage: nix-instantiate --eval --json --strict example/config.nix | jq .
{ {
type = "table"; type = "layout";
format = "gpt"; content = {
partitions = [ "/dev/sda" = {
{ type = "table";
type = "partition"; format = "gpt";
part-type = "ESP"; partitions = [
start = "1MiB"; {
end = "1024MiB"; type = "partition";
fs-type = "fat32"; part-type = "ESP";
bootable = true; start = "1MiB";
content = { end = "1024MiB";
type = "filesystem"; fs-type = "fat32";
format = "vfat"; bootable = true;
mountpoint = "/boot"; content = {
}; type = "filesystem";
} format = "vfat";
{ mountpoint = "/boot";
type = "partition"; };
part-type = "primary"; }
start = "1024MiB"; {
end = "100%"; type = "partition";
content = { part-type = "primary";
type = "luks"; start = "1024MiB";
algo = "aes-xts..."; end = "100%";
name = "crypted"; content = {
keyfile = "/tmp/secret.key"; type = "luks";
content = { algo = "aes-xts...";
type = "lvm"; name = "crypted";
name = "pool"; keyfile = "/tmp/secret.key";
lvs = { content = {
root = { type = "lvm";
type = "lv"; name = "pool";
size = "10G"; lvs = {
mountpoint = "/"; root = {
content = { type = "lv";
type = "filesystem"; size = "10G";
format = "ext4"; mountpoint = "/";
mountpoint = "/"; content = {
}; type = "filesystem";
}; format = "ext4";
home = { mountpoint = "/";
type = "lv"; };
size = "10G"; };
content = { home = {
type = "filesystem"; type = "lv";
format = "ext4"; size = "10G";
mountpoint = "/home"; content = {
type = "filesystem";
format = "ext4";
mountpoint = "/home";
};
};
}; };
}; };
}; };
}; }
}; ];
} };
]; };
} }

View File

@ -12,6 +12,9 @@ let
}; };
}; };
config.layout = q: x:
foldl' mergeAttrs {} (mapAttrsToList (name: config-f { device = name; }) x.content);
config.lv = q: x: config.lv = q: x:
config-f { device = "/dev/${q.vgname}/${q.name}"; } x.content; config-f { device = "/dev/${q.vgname}/${q.name}"; } x.content;
@ -35,6 +38,10 @@ let
mkfs.${x.format} ${q.device} mkfs.${x.format} ${q.device}
''; '';
format.layout = q: x: ''
${concatStrings (mapAttrsToList (name: format-f { device = name; }) x.content)}
'';
format.lv = q: x: '' format.lv = q: x: ''
lvcreate -L ${x.size} -n ${q.name} ${q.vgname} lvcreate -L ${x.size} -n ${q.name} ${q.vgname}
${format-f { device = "/dev/${q.vgname}/${q.name}"; } x.content} ${format-f { device = "/dev/${q.vgname}/${q.name}"; } x.content}