From 72624394013bb4b284dd5c3ad3441625f71b49c6 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 19 Jul 2018 21:52:11 +0200 Subject: add top-level layout type --- example/config.nix | 107 ++++++++++++++++++++++++++++------------------------- lib/default.nix | 7 ++++ 2 files changed, 63 insertions(+), 51 deletions(-) diff --git a/example/config.nix b/example/config.nix index e9766fe..36c0950 100644 --- a/example/config.nix +++ b/example/config.nix @@ -1,57 +1,62 @@ # usage: nix-instantiate --eval --json --strict example/config.nix | jq . { - type = "table"; - format = "gpt"; - partitions = [ - { - type = "partition"; - part-type = "ESP"; - start = "1MiB"; - end = "1024MiB"; - fs-type = "fat32"; - bootable = true; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - }; - } - { - type = "partition"; - part-type = "primary"; - start = "1024MiB"; - end = "100%"; - content = { - type = "luks"; - algo = "aes-xts..."; - name = "crypted"; - keyfile = "/tmp/secret.key"; - content = { - type = "lvm"; - name = "pool"; - lvs = { - root = { - type = "lv"; - size = "10G"; - mountpoint = "/"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/"; - }; - }; - home = { - type = "lv"; - size = "10G"; - content = { - type = "filesystem"; - format = "ext4"; - mountpoint = "/home"; + type = "layout"; + content = { + "/dev/sda" = { + type = "table"; + format = "gpt"; + partitions = [ + { + type = "partition"; + part-type = "ESP"; + start = "1MiB"; + end = "1024MiB"; + fs-type = "fat32"; + bootable = true; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + } + { + type = "partition"; + part-type = "primary"; + start = "1024MiB"; + end = "100%"; + content = { + type = "luks"; + algo = "aes-xts..."; + name = "crypted"; + keyfile = "/tmp/secret.key"; + content = { + type = "lvm"; + name = "pool"; + lvs = { + root = { + type = "lv"; + size = "10G"; + mountpoint = "/"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + home = { + type = "lv"; + size = "10G"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/home"; + }; + }; }; }; }; - }; - }; - } - ]; + } + ]; + }; + }; } diff --git a/lib/default.nix b/lib/default.nix index 2075b27..bc3aac7 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -12,6 +12,9 @@ let }; }; + config.layout = q: x: + foldl' mergeAttrs {} (mapAttrsToList (name: config-f { device = name; }) x.content); + config.lv = q: x: config-f { device = "/dev/${q.vgname}/${q.name}"; } x.content; @@ -35,6 +38,10 @@ let mkfs.${x.format} ${q.device} ''; + format.layout = q: x: '' + ${concatStrings (mapAttrsToList (name: format-f { device = name; }) x.content)} + ''; + format.lv = q: x: '' lvcreate -L ${x.size} -n ${q.name} ${q.vgname} ${format-f { device = "/dev/${q.vgname}/${q.name}"; } x.content} -- cgit v1.2.3