91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, pkgs, lib, ... }:
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  boolToStr = value: if value then "on" else "off";
 | 
						|
  cfg = config.vmware;
 | 
						|
 | 
						|
  subformats = [
 | 
						|
    "monolithicSparse"
 | 
						|
    "monolithicFlat"
 | 
						|
    "twoGbMaxExtentSparse"
 | 
						|
    "twoGbMaxExtentFlat"
 | 
						|
    "streamOptimized"
 | 
						|
  ];
 | 
						|
 | 
						|
in {
 | 
						|
  options = {
 | 
						|
    vmware = {
 | 
						|
      baseImageSize = mkOption {
 | 
						|
        type = types.int;
 | 
						|
        default = 2048;
 | 
						|
        description = ''
 | 
						|
          The size of the VMWare base image in MiB.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
      vmDerivationName = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        default = "nixos-vmware-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
 | 
						|
        description = ''
 | 
						|
          The name of the derivation for the VMWare appliance.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
      vmFileName = mkOption {
 | 
						|
        type = types.str;
 | 
						|
        default = "nixos-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.vmdk";
 | 
						|
        description = ''
 | 
						|
          The file name of the VMWare appliance.
 | 
						|
        '';
 | 
						|
      };
 | 
						|
      vmSubformat = mkOption {
 | 
						|
        type = types.enum subformats;
 | 
						|
        default = "monolithicSparse";
 | 
						|
        description = "Specifies which VMDK subformat to use.";
 | 
						|
      };
 | 
						|
      vmCompat6 = mkOption {
 | 
						|
        type = types.bool;
 | 
						|
        default = false;
 | 
						|
        example = true;
 | 
						|
        description = "Create a VMDK version 6 image (instead of version 4).";
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = {
 | 
						|
    system.build.vmwareImage = import ../../lib/make-disk-image.nix {
 | 
						|
      name = cfg.vmDerivationName;
 | 
						|
      postVM = ''
 | 
						|
        ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -o compat6=${boolToStr cfg.vmCompat6},subformat=${cfg.vmSubformat} -O vmdk $diskImage $out/${cfg.vmFileName}
 | 
						|
        rm $diskImage
 | 
						|
      '';
 | 
						|
      format = "raw";
 | 
						|
      diskSize = cfg.baseImageSize;
 | 
						|
      partitionTableType = "efi";
 | 
						|
      inherit config lib pkgs;
 | 
						|
    };
 | 
						|
 | 
						|
    fileSystems."/" = {
 | 
						|
      device = "/dev/disk/by-label/nixos";
 | 
						|
      autoResize = true;
 | 
						|
      fsType = "ext4";
 | 
						|
    };
 | 
						|
 | 
						|
    fileSystems."/boot" = {
 | 
						|
      device = "/dev/disk/by-label/ESP";
 | 
						|
      fsType = "vfat";
 | 
						|
    };
 | 
						|
 | 
						|
    boot.growPartition = true;
 | 
						|
 | 
						|
    boot.loader.grub = {
 | 
						|
      version = 2;
 | 
						|
      device = "nodev";
 | 
						|
      efiSupport = true;
 | 
						|
      efiInstallAsRemovable = true;
 | 
						|
    };
 | 
						|
 | 
						|
    virtualisation.vmware.guest.enable = true;
 | 
						|
  };
 | 
						|
}
 |