Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions example/bcachefs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@
# Example showing mounted subvolumes in a multi-disk configuration.
mounted_subvolumes_in_multi = {
type = "bcachefs_filesystem";
# Mount the full filesystem to allow browsing subvolume structure
mountpoint = "/subvolumes";
passwordFile = "/tmp/secret.key";
extraFormatArgs = [
"--compression=lz4"
Expand Down
6 changes: 3 additions & 3 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 17 additions & 17 deletions lib/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,21 @@ let
loc: defs:
let
evaled = lib.evalModules {
modules =
[
{
freeformType = lib.types.lazyAttrsOf lib.types.raw;
options.type = lib.mkOption {
type = lib.types.str;
};
}
]
++ map (
{ value, file }:
{
_file = file;
config = value;
}
) defs;
modules = [
{
freeformType = lib.types.lazyAttrsOf lib.types.raw;
options.type = lib.mkOption {
type = lib.types.str;
};
}
]
++ map (
{ value, file }:
{
_file = file;
config = value;
}
) defs;
};
inherit (evaled.config) type;
in
Expand Down Expand Up @@ -1195,6 +1194,7 @@ let
};

binfmt = import ./binfmt.nix;
} // outputs;
}
// outputs;
in
diskoLib
29 changes: 17 additions & 12 deletions lib/make-disk-image.nix
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ let
checked = diskoCfg.checkScripts;

configSupportsZfs = config.boot.supportedFilesystems.zfs or false;
configSupportsBcachefs = config.boot.supportedFilesystems.bcachefs or false;
binfmt = diskoLib.binfmt {
inherit
diskoLib
Expand All @@ -29,19 +30,19 @@ let

vmTools = pkgs.vmTools.override (
{
rootModules =
[
"9p"
"9pnet_virtio" # we can drop those in future if we stop supporting 24.11
rootModules = [
"9p"
"9pnet_virtio" # we can drop those in future if we stop supporting 24.11

"virtiofs"
"virtio_pci"
"virtio_blk"
"virtio_balloon"
"virtio_rng"
]
++ (lib.optional configSupportsZfs "zfs")
++ cfg.extraRootModules;
"virtiofs"
"virtio_pci"
"virtio_blk"
"virtio_balloon"
"virtio_rng"
]
++ (lib.optional configSupportsZfs "zfs")
++ (lib.optional configSupportsBcachefs "bcachefs")
++ cfg.extraRootModules;
kernel = pkgs.aggregateModules (
[
cfg.kernelPackages.kernel
Expand All @@ -50,6 +51,10 @@ let
++ lib.optional (
lib.elem "zfs" cfg.extraRootModules || configSupportsZfs
) cfg.kernelPackages.${config.boot.zfs.package.kernelModuleAttribute}
++ lib.optional (
(lib.elem "bcachefs" cfg.extraRootModules || configSupportsBcachefs)
&& options.boot.bcachefs ? modulePackage
) (cfg.kernelPackages.callPackage pkgs.bcachefs-tools.kernelModule { })
);
}
// lib.optionalAttrs (diskoLib.vmToolsSupportsCustomQemu lib) {
Expand Down
30 changes: 15 additions & 15 deletions lib/tests.nix
Original file line number Diff line number Diff line change
Expand Up @@ -237,21 +237,21 @@ let
(
{ config, ... }:
{
boot.supportedFilesystems =
[
"btrfs"
"cifs"
"f2fs"
"jfs"
"ntfs"
"reiserfs"
"vfat"
"xfs"
]
++ lib.optional (
config.networking.hostId != null
&& lib.meta.availableOn pkgs.stdenv.hostPlatform config.boot.zfs.package
) "zfs";
boot.supportedFilesystems = [
"btrfs"
"cifs"
"f2fs"
"jfs"
"ntfs"
"reiserfs"
"vfat"
"xfs"
"bcachefs"
]
++ lib.optional (
config.networking.hostId != null
&& lib.meta.availableOn pkgs.stdenv.hostPlatform config.boot.zfs.package
) "zfs";
}
)

Expand Down
3 changes: 2 additions & 1 deletion lib/types/luks.nix
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,8 @@ in
{
boot.initrd.luks.devices.${config.name} = {
inherit (config) device;
} // config.settings;
}
// config.settings;
}
])
++ (lib.optional (config.content != null) config.content._config);
Expand Down
53 changes: 26 additions & 27 deletions lib/types/lvm_vg.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@
}:
let
# Load kernel modules to ensure device mapper types are available
kernelModules =
[
# Prevent unbootable systems if LVM snapshots are present at boot time.
"dm-snapshot"
]
++ lib.filter (x: x != "") (
map (lv: lib.optionalString (lv.lvm_type != null && lv.lvm_type != "thinlv") "dm-${lv.lvm_type}") (
lib.attrValues config.lvs
)
);
kernelModules = [
# Prevent unbootable systems if LVM snapshots are present at boot time.
"dm-snapshot"
]
++ lib.filter (x: x != "") (
map (lv: lib.optionalString (lv.lvm_type != null && lv.lvm_type != "thinlv") "dm-${lv.lvm_type}") (
lib.attrValues config.lvs
)
);
in
{
options = {
Expand Down Expand Up @@ -182,24 +181,24 @@ in
_config = lib.mkOption {
internal = true;
readOnly = true;
default =
[ { boot.initrd.kernelModules = kernelModules; } ]
++ map (lv: [
(lib.optional (lv.content != null) lv.content._config)
(lib.optional (lv.lvm_type != null) {
boot.initrd.kernelModules =
[
(if lv.lvm_type == "mirror" then "dm-mirror" else "dm-raid")
]
++ lib.optional (lv.lvm_type == "raid0") "raid0"
++ lib.optional (lv.lvm_type == "raid1") "raid1"
# ++ lib.optional (lv.lvm_type == "raid10") "raid10"
++ lib.optional (
lv.lvm_type == "raid4" || lv.lvm_type == "raid5" || lv.lvm_type == "raid6"
) "raid456";
default = [
{ boot.initrd.kernelModules = kernelModules; }
]
++ map (lv: [
(lib.optional (lv.content != null) lv.content._config)
(lib.optional (lv.lvm_type != null) {
boot.initrd.kernelModules = [
(if lv.lvm_type == "mirror" then "dm-mirror" else "dm-raid")
]
++ lib.optional (lv.lvm_type == "raid0") "raid0"
++ lib.optional (lv.lvm_type == "raid1") "raid1"
# ++ lib.optional (lv.lvm_type == "raid10") "raid10"
++ lib.optional (
lv.lvm_type == "raid4" || lv.lvm_type == "raid5" || lv.lvm_type == "raid6"
) "raid456";

})
]) (lib.attrValues config.lvs);
})
]) (lib.attrValues config.lvs);
description = "NixOS configuration";
};
_pkgs = lib.mkOption {
Expand Down
3 changes: 2 additions & 1 deletion lib/types/mdadm.nix
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@
boot.initrd.services.swraid.enable = true;
}
)
] ++ lib.optional (config.content != null) config.content._config;
]
++ lib.optional (config.content != null) config.content._config;
description = "NixOS configuration";
};
_pkgs = lib.mkOption {
Expand Down
49 changes: 25 additions & 24 deletions lib/types/zfs_fs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -124,19 +124,20 @@
fi
'';
})
// lib.optionalAttrs
(config.options.mountpoint or "" != "none" && config.options.canmount or "" != "off")
{
fs.${config.mountpoint} = ''
if ! findmnt ${config._name} "${rootMountPoint}${config.mountpoint}" >/dev/null 2>&1; then
mount ${config._name} "${rootMountPoint}${config.mountpoint}" \
-o X-mount.mkdir \
${lib.concatMapStringsSep " " (opt: "-o ${opt}") config.mountOptions} \
${lib.optionalString ((config.options.mountpoint or "") != "legacy") "-o zfsutil"} \
-t zfs
fi
'';
};
//
lib.optionalAttrs
(config.options.mountpoint or "" != "none" && config.options.canmount or "" != "off")
{
fs.${config.mountpoint} = ''
if ! findmnt ${config._name} "${rootMountPoint}${config.mountpoint}" >/dev/null 2>&1; then
mount ${config._name} "${rootMountPoint}${config.mountpoint}" \
-o X-mount.mkdir \
${lib.concatMapStringsSep " " (opt: "-o ${opt}") config.mountOptions} \
${lib.optionalString ((config.options.mountpoint or "") != "legacy") "-o zfsutil"} \
-t zfs
fi
'';
};
};

_unmount = diskoLib.mkUnmountOption {
Expand All @@ -149,15 +150,16 @@
fi
'';
})
// lib.optionalAttrs
(config.options.mountpoint or "" != "none" && config.options.canmount or "" != "off")
{
fs.${config.mountpoint} = ''
if findmnt ${config._name} "${rootMountPoint}${config.mountpoint}" >/dev/null 2>&1; then
umount "${rootMountPoint}${config.mountpoint}"
fi
'';
};
//
lib.optionalAttrs
(config.options.mountpoint or "" != "none" && config.options.canmount or "" != "off")
{
fs.${config.mountpoint} = ''
if findmnt ${config._name} "${rootMountPoint}${config.mountpoint}" >/dev/null 2>&1; then
umount "${rootMountPoint}${config.mountpoint}"
fi
'';
};
};

_config = lib.mkOption {
Expand All @@ -170,8 +172,7 @@
device = "${config._name}";
fsType = "zfs";
options =
config.mountOptions
++ lib.optional ((config.options.mountpoint or "") != "legacy") "zfsutil";
config.mountOptions ++ lib.optional ((config.options.mountpoint or "") != "legacy") "zfsutil";
};
};
description = "NixOS configuration";
Expand Down
8 changes: 4 additions & 4 deletions tests/bcachefs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ diskoLib.testLib.makeDiskoTest {
# Verify device membership and labels.
machine.succeed("bcachefs show-super /dev/vda2 | grep 'Devices:' | grep -q '3'");
machine.succeed("bcachefs show-super /dev/vdd1 | grep 'Devices:' | grep -q '1'");
machine.succeed("bcachefs show-super /dev/vda2 | grep -qE '^[[:space:]]+Label:[[:space:]]+vdb2[[:space:]]\([[:digit:]]+\)'");
machine.succeed("bcachefs show-super /dev/vda2 | grep -qE '^[[:space:]]+Label:[[:space:]]+vdc1[[:space:]]\([[:digit:]]+\)'");
machine.succeed("bcachefs show-super /dev/vda2 | grep -qE '^[[:space:]]+Label:[[:space:]]+vdd1[[:space:]]\([[:digit:]]+\)'");
machine.succeed("bcachefs show-super /dev/vdd1 | grep -qE '^[[:space:]]+Label:[[:space:]]+vde1[[:space:]]\([[:digit:]]+\)'");
machine.succeed(r"bcachefs show-super /dev/vda2 | grep -qE '^[[:space:]]+Label:[[:space:]]+vdb2[[:space:]]\([[:digit:]]+\)'");
machine.succeed(r"bcachefs show-super /dev/vda2 | grep -qE '^[[:space:]]+Label:[[:space:]]+vdc1[[:space:]]\([[:digit:]]+\)'");
machine.succeed(r"bcachefs show-super /dev/vda2 | grep -qE '^[[:space:]]+Label:[[:space:]]+vdd1[[:space:]]\([[:digit:]]+\)'");
machine.succeed(r"bcachefs show-super /dev/vdd1 | grep -qE '^[[:space:]]+Label:[[:space:]]+vde1[[:space:]]\([[:digit:]]+\)'");
machine.fail("bcachefs show-super /dev/vda2 | grep 'Label:' | grep -q 'non-existent'");

# @todo Verify format arguments.
Expand Down
11 changes: 6 additions & 5 deletions tests/disko-install/configuration.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,12 @@
];
};
services.openssh.enable = true;
boot.kernelParams =
[ "console=tty0" ]
++ (lib.optional (pkgs.stdenv.hostPlatform.isAarch) "ttyAMA0,115200")
++ (lib.optional (pkgs.stdenv.hostPlatform.isRiscV64) "ttySIF0,115200")
++ [ "console=ttyS0,115200" ];
boot.kernelParams = [
"console=tty0"
]
++ (lib.optional (pkgs.stdenv.hostPlatform.isAarch) "console=ttyAMA0,115200")
++ (lib.optional (pkgs.stdenv.hostPlatform.isRiscV64) "console=ttySIF0,115200")
++ [ "console=ttyS0,115200" ];

# reduce closure size
nixpkgs.flake.setFlakeRegistry = false;
Expand Down
5 changes: 3 additions & 2 deletions tests/disko-install/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@ let

self.nixosConfigurations.testmachine.config.system.build.toplevel
self.nixosConfigurations.testmachine.config.system.build.diskoScript
] ++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);
]
++ builtins.map (i: i.outPath) (builtins.attrValues self.inputs);

closureInfo = pkgs.closureInfo { rootPaths = dependencies; };
in
pkgs.nixosTest {
pkgs.testers.nixosTest {
name = "disko-test";
nodes.machine = {
virtualisation.emptyDiskImages = [ 4096 ];
Expand Down