From efc80d7d89d40f54b76e0efcf83578c6b074906e Mon Sep 17 00:00:00 2001 From: David Arnold Date: Sat, 5 Nov 2022 15:17:35 -0500 Subject: types: init swap --- types.nix | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) (limited to 'types.nix') diff --git a/types.nix b/types.nix index 2ed3ccc..87a34a9 100644 --- a/types.nix +++ b/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 { -- cgit v1.2.3