70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
|   | { config, pkgs, lib, ... }: | ||
|  | 
 | ||
|  | with lib; | ||
|  | 
 | ||
|  | let | ||
|  |   cfg = config.hyperv; | ||
|  | 
 | ||
|  | in { | ||
|  |   options = { | ||
|  |     hyperv = { | ||
|  |       baseImageSize = mkOption { | ||
|  |         type = types.int; | ||
|  |         default = 2048; | ||
|  |         description = ''
 | ||
|  |           The size of the hyper-v base image in MiB. | ||
|  |         '';
 | ||
|  |       }; | ||
|  |       vmDerivationName = mkOption { | ||
|  |         type = types.str; | ||
|  |         default = "nixos-hyperv-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}"; | ||
|  |         description = ''
 | ||
|  |           The name of the derivation for the hyper-v appliance. | ||
|  |         '';
 | ||
|  |       }; | ||
|  |       vmFileName = mkOption { | ||
|  |         type = types.str; | ||
|  |         default = "nixos-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}.vhdx"; | ||
|  |         description = ''
 | ||
|  |           The file name of the hyper-v appliance. | ||
|  |         '';
 | ||
|  |       }; | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   config = { | ||
|  |     system.build.hypervImage = import ../../lib/make-disk-image.nix { | ||
|  |       name = cfg.vmDerivationName; | ||
|  |       postVM = ''
 | ||
|  |         ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -o subformat=dynamic -O vhdx $diskImage $out/${cfg.vmFileName} | ||
|  |       '';
 | ||
|  |       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.hypervGuest.enable = true; | ||
|  |   }; | ||
|  | } |