vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / virtualisation / vmware-image.nix
blob47b7c212bcd176dd42772fdf0e087155205e7944
1 { config, pkgs, lib, ... }:
2 let
3   boolToStr = value: if value then "on" else "off";
4   cfg = config.vmware;
6   subformats = [
7     "monolithicSparse"
8     "monolithicFlat"
9     "twoGbMaxExtentSparse"
10     "twoGbMaxExtentFlat"
11     "streamOptimized"
12   ];
14 in {
15   options = {
16     vmware = {
17       baseImageSize = lib.mkOption {
18         type = with lib.types; either (enum [ "auto" ]) int;
19         default = "auto";
20         example = 2048;
21         description = ''
22           The size of the VMWare base image in MiB.
23         '';
24       };
25       vmDerivationName = lib.mkOption {
26         type = lib.types.str;
27         default = "nixos-vmware-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
28         description = ''
29           The name of the derivation for the VMWare appliance.
30         '';
31       };
32       vmFileName = lib.mkOption {
33         type = lib.types.str;
34         default = "nixos-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.vmdk";
35         description = ''
36           The file name of the VMWare appliance.
37         '';
38       };
39       vmSubformat = lib.mkOption {
40         type = lib.types.enum subformats;
41         default = "monolithicSparse";
42         description = "Specifies which VMDK subformat to use.";
43       };
44       vmCompat6 = lib.mkOption {
45         type = lib.types.bool;
46         default = false;
47         example = true;
48         description = "Create a VMDK version 6 image (instead of version 4).";
49       };
50     };
51   };
53   config = {
54     system.build.vmwareImage = import ../../lib/make-disk-image.nix {
55       name = cfg.vmDerivationName;
56       postVM = ''
57         ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -o compat6=${boolToStr cfg.vmCompat6},subformat=${cfg.vmSubformat} -O vmdk $diskImage $out/${cfg.vmFileName}
58         rm $diskImage
59       '';
60       format = "raw";
61       diskSize = cfg.baseImageSize;
62       partitionTableType = "efi";
63       inherit config lib pkgs;
64     };
66     fileSystems."/" = {
67       device = "/dev/disk/by-label/nixos";
68       autoResize = true;
69       fsType = "ext4";
70     };
72     fileSystems."/boot" = {
73       device = "/dev/disk/by-label/ESP";
74       fsType = "vfat";
75     };
77     boot.growPartition = true;
79     boot.loader.grub = {
80       device = "nodev";
81       efiSupport = true;
82       efiInstallAsRemovable = true;
83     };
85     virtualisation.vmware.guest.enable = true;
86   };