mirror of
https://github.com/TECHNOFAB11/disko.git
synced 2025-12-12 08:00:05 +01: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
|
# 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)));
|
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)));
|
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)
|
# option for valid contents of partitions (basically like devices, but without tables)
|
||||||
partitionType = mkOption {
|
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;
|
default = null;
|
||||||
};
|
};
|
||||||
|
|
||||||
# option for valid contents of devices
|
# option for valid contents of devices
|
||||||
deviceType = mkOption {
|
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;
|
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, ... }: {
|
lvm_pv = types.submodule ({ config, ... }: {
|
||||||
options = {
|
options = {
|
||||||
type = mkOption {
|
type = mkOption {
|
||||||
|
|
@ -1158,7 +1214,7 @@ rec {
|
||||||
type = types.enum [ "disk" ];
|
type = types.enum [ "disk" ];
|
||||||
};
|
};
|
||||||
device = mkOption {
|
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;
|
content = diskoLib.deviceType;
|
||||||
_meta = mkOption {
|
_meta = mkOption {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue