nixos: generalize copy-paste from stage-1 and zfs to utils

Changed files
+6 -6
nixos
lib
modules
system
tasks
filesystems
+4
nixos/lib/utils.nix
···
rec {
+
# Check whenever fileSystem is needed for boot
+
fsNeededForBoot = fs: fs.neededForBoot
+
|| elem fs.mountPoint [ "/" "/nix" "/nix/store" "/var" "/var/log" "/var/lib" "/etc" ];
+
# Check whenever `b` depends on `a` as a fileSystem
# FIXME: it's incorrect to simply use hasPrefix here: "/dev/a" is not a parent of "/dev/ab"
fsBefore = a: b: ((any (x: elem x [ "bind" "move" ]) b.options) && (a.mountPoint == b.device))
+1 -3
nixos/modules/system/boot/stage-1.nix
···
# The initrd only has to mount `/` or any FS marked as necessary for
# booting (such as the FS containing `/nix/store`, or an FS needed for
# mounting `/`, like `/` on a loopback).
-
fileSystems = filter
-
(fs: fs.neededForBoot || elem fs.mountPoint [ "/" "/nix" "/nix/store" "/var" "/var/log" "/var/lib" "/etc" ])
-
config.system.build.fileSystems;
+
fileSystems = filter utils.fsNeededForBoot config.system.build.fileSystems;
# Some additional utilities needed in stage 1, like mount, lvm, fsck
+1 -3
nixos/modules/tasks/filesystems/zfs.nix
···
zfsFilesystems = filter (x: x.fsType == "zfs") config.system.build.fileSystems;
-
isRoot = fs: fs.neededForBoot || elem fs.mountPoint [ "/" "/nix" "/nix/store" "/var" "/var/log" "/var/lib" "/etc" ];
-
allPools = unique ((map fsToPool zfsFilesystems) ++ cfgZfs.extraPools);
-
rootPools = unique (map fsToPool (filter isRoot zfsFilesystems));
+
rootPools = unique (map fsToPool (filter fsNeededForBoot zfsFilesystems));
dataPools = unique (filter (pool: !(elem pool rootPools)) allPools);