mirror of
https://github.com/nix-community/disko
synced 2024-11-10 06:14:14 +00:00
types: init swap
This commit is contained in:
parent
aca927667a
commit
efc80d7d89
4 changed files with 131 additions and 3 deletions
52
example/swap.nix
Normal file
52
example/swap.nix
Normal file
|
@ -0,0 +1,52 @@
|
|||
{ disks ? [ "/dev/vdb" ], ... }: {
|
||||
disk = {
|
||||
vdb = {
|
||||
device = builtins.elemAt disks 0;
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "table";
|
||||
format = "gpt";
|
||||
partitions = [
|
||||
{
|
||||
type = "partition";
|
||||
name = "ESP";
|
||||
start = "1MiB";
|
||||
end = "100MiB";
|
||||
bootable = true;
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "root";
|
||||
type = "partition";
|
||||
start = "100MiB";
|
||||
end = "-1G";
|
||||
part-type = "primary";
|
||||
bootable = true;
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "ext4";
|
||||
mountpoint = "/";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "root";
|
||||
type = "partition";
|
||||
start = "-1G";
|
||||
end = "100%";
|
||||
part-type = "primary";
|
||||
bootable = true;
|
||||
content = {
|
||||
type = "swap";
|
||||
randomEncryption = true;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -42,5 +42,6 @@ in {
|
|||
# Remember to add config keys here if they are added to types
|
||||
fileSystems = lib.mkIf cfg.enableConfig (lib.mkMerge (lib.catAttrs "fileSystems" (types.diskoLib.config cfg.devices)));
|
||||
boot = lib.mkIf cfg.enableConfig (lib.mkMerge (lib.catAttrs "boot" (types.diskoLib.config cfg.devices)));
|
||||
swapDevices = lib.mkIf cfg.enableConfig (lib.mkMerge (lib.catAttrs "swapDevices" (types.diskoLib.config cfg.devices)));
|
||||
};
|
||||
}
|
||||
|
|
19
tests/swap.nix
Normal file
19
tests/swap.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
{ pkgs ? (import <nixpkgs> { })
|
||||
, makeDiskoTest ? (pkgs.callPackage ./lib.nix { }).makeDiskoTest
|
||||
}:
|
||||
makeDiskoTest {
|
||||
disko-config = ../example/swap.nix;
|
||||
extraTestScript = ''
|
||||
machine.succeed("mountpoint /");
|
||||
machine.succeed("swapon --show >&2");
|
||||
machine.succeed("""
|
||||
lsblk --json |
|
||||
${pkgs.jq}/bin/jq -e '.blockdevices[] |
|
||||
select(.name == "vda") |
|
||||
.children[] |
|
||||
select(.name == "vda3") |
|
||||
.children[0].mountpoints[0] == "[SWAP]"
|
||||
'
|
||||
""");
|
||||
'';
|
||||
}
|
62
types.nix
62
types.nix
|
@ -18,13 +18,13 @@ rec {
|
|||
|
||||
# option for valid contents of partitions (basically like devices, but without tables)
|
||||
partitionType = mkOption {
|
||||
type = types.nullOr (diskoLib.subType { inherit btrfs filesystem zfs mdraid luks lvm_pv; });
|
||||
type = types.nullOr (diskoLib.subType { inherit btrfs filesystem zfs mdraid luks lvm_pv swap; });
|
||||
default = null;
|
||||
};
|
||||
|
||||
# option for valid contents of devices
|
||||
deviceType = mkOption {
|
||||
type = types.nullOr (diskoLib.subType { inherit table btrfs filesystem zfs mdraid luks lvm_pv; });
|
||||
type = types.nullOr (diskoLib.subType { inherit table btrfs filesystem zfs mdraid luks lvm_pv swap; });
|
||||
default = null;
|
||||
};
|
||||
|
||||
|
@ -547,6 +547,62 @@ rec {
|
|||
};
|
||||
});
|
||||
|
||||
swap = types.submodule ({ config, ... }: {
|
||||
options = {
|
||||
type = mkOption {
|
||||
type = types.enum [ "swap" ];
|
||||
internal = true;
|
||||
};
|
||||
randomEncryption = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
_meta = mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.functionTo diskoLib.jsonType;
|
||||
default = dev: {
|
||||
};
|
||||
};
|
||||
_create = mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.functionTo types.str;
|
||||
default = dev: ''
|
||||
mkswap ${dev}
|
||||
'';
|
||||
};
|
||||
_mount = mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.functionTo diskoLib.jsonType;
|
||||
default = dev: {
|
||||
fs.${dev} = ''
|
||||
if ! $(swapon --show | grep -q '^${dev} '); then
|
||||
swapon ${dev}
|
||||
fi
|
||||
'';
|
||||
};
|
||||
};
|
||||
_config = mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
default = dev: [{
|
||||
swapDevices = [{
|
||||
device = dev;
|
||||
randomEncryption = config.randomEncryption;
|
||||
}];
|
||||
}];
|
||||
};
|
||||
_pkgs = mkOption {
|
||||
internal = true;
|
||||
readOnly = true;
|
||||
type = types.functionTo (types.listOf types.package);
|
||||
default = pkgs: [ pkgs.util-linux ];
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
lvm_pv = types.submodule ({ config, ... }: {
|
||||
options = {
|
||||
type = mkOption {
|
||||
|
@ -1158,7 +1214,7 @@ rec {
|
|||
type = types.enum [ "disk" ];
|
||||
};
|
||||
device = mkOption {
|
||||
type = optionTypes.absolute-pathname; # TODO check if subpath of /dev ?
|
||||
type = optionTypes.absolute-pathname; # TODO check if subpath of /dev ? - No! eg: /.swapfile
|
||||
};
|
||||
content = diskoLib.deviceType;
|
||||
_meta = mkOption {
|
||||
|
|
Loading…
Reference in a new issue