From ff7fa8760096e3f00a2515b35a1432237f104280 Mon Sep 17 00:00:00 2001 From: lassulus Date: Sat, 3 Dec 2022 12:08:19 +0100 Subject: add nodev support (for tmpfs, ramfs, nfs) --- types.nix | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) (limited to 'types.nix') diff --git a/types.nix b/types.nix index 377f546..fa24607 100644 --- a/types.nix +++ b/types.nix @@ -119,6 +119,7 @@ rec { meta :: types.devices -> AttrSet */ meta = devices: diskoLib.deepMergeMap (dev: dev._meta) (flatten (map attrValues (attrValues devices))); + /* Takes a disko device specification and returns a string which formats the disks create :: types.devices -> str @@ -215,7 +216,7 @@ rec { }; }; - /* topLevel type of the disko config, takes attrsets of disks mdadms zpools and lvm vgs. + /* topLevel type of the disko config, takes attrsets of disks, mdadms, zpools, nodevs, and lvm vgs. */ devices = types.submodule { options = { @@ -235,9 +236,82 @@ rec { type = types.attrsOf lvm_vg; default = {}; }; + nodev = mkOption { + type = types.attrsOf nodev; + default = {}; + }; }; }; + nodev = types.submodule ({ config, ... }: { + options = { + type = mkOption { + type = types.enum [ "nodev" ]; + default = "nodev"; + internal = true; + }; + fsType = mkOption { + type = types.str; + }; + device = mkOption { + type = types.str; + default = "none"; + }; + mountpoint = mkOption { + type = optionTypes.absolute-pathname; + default = config._module.args.name; + }; + mountOptions = mkOption { + type = types.listOf types.str; + default = []; + }; + _meta = mkOption { + internal = true; + readOnly = true; + type = diskoLib.jsonType; + default = { + }; + }; + _create = mkOption { + internal = true; + readOnly = true; + type = types.str; + default = ""; + }; + _mount = mkOption { + internal = true; + readOnly = true; + type = diskoLib.jsonType; + default = { + fs.${config.mountpoint} = '' + if ! findmnt ${config.fsType} "/mnt${config.mountpoint}" > /dev/null 2>&1; then + mount -t ${config.fsType} ${config.device} "/mnt${config.mountpoint}" \ + ${concatMapStringsSep " " (opt: "-o ${opt}") config.mountOptions} \ + -o X-mount.mkdir + fi + ''; + }; + }; + _config = mkOption { + internal = true; + readOnly = true; + default = [{ + fileSystems.${config.mountpoint} = { + device = config.device; + fsType = config.fsType; + options = config.mountOptions; + }; + }]; + }; + _pkgs= mkOption { + internal = true; + readOnly = true; + type = types.functionTo (types.listOf types.package); + default = pkgs: []; + }; + }; + }); + btrfs = types.submodule ({ config, ... }: { options = { type = mkOption { -- cgit v1.2.3