linuxPackages_latest.broadcom_sta: add patch to compile on Kernel 6.12 (#359484)
[NixPkgs.git] / nixos / modules / virtualisation / hyperv-image.nix
blob8f77d384a9bad10227a88420fc7b3b67e63b6ea8
2   config,
3   pkgs,
4   lib,
5   ...
6 }:
8 with lib;
10 let
11   cfg = config.hyperv;
15   imports = [
16     ./disk-size-option.nix
17     ../image/file-options.nix
18     (lib.mkRenamedOptionModuleWith {
19       sinceRelease = 2411;
20       from = [
21         "hyperv"
22         "baseImageSize"
23       ];
24       to = [
25         "virtualisation"
26         "diskSize"
27       ];
28     })
29     (lib.mkRenamedOptionModuleWith {
30       sinceRelease = 2505;
31       from = [
32         "virtualisation"
33         "hyperv"
34         "vmFileName"
35       ];
36       to = [
37         "image"
38         "fileName"
39       ];
40     })
41   ];
43   options = {
44     hyperv = {
45       vmDerivationName = mkOption {
46         type = types.str;
47         default = "nixos-hyperv-${config.system.nixos.label}-${pkgs.stdenv.hostPlatform.system}";
48         description = ''
49           The name of the derivation for the hyper-v appliance.
50         '';
51       };
52     };
53   };
55   config = {
56     # Use a priority just below mkOptionDefault (1500) instead of lib.mkDefault
57     # to avoid breaking existing configs using that.
58     virtualisation.diskSize = lib.mkOverride 1490 (4 * 1024);
60     system.nixos.tags = [ "hyperv" ];
61     image.extension = "vhdx";
62     system.build.image = config.system.build.hypervImage;
63     system.build.hypervImage = import ../../lib/make-disk-image.nix {
64       name = cfg.vmDerivationName;
65       baseName = config.image.baseName;
66       postVM = ''
67         ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -o subformat=dynamic -O vhdx $diskImage $out/${config.image.fileName}
68         rm $diskImage
69       '';
70       format = "raw";
71       inherit (config.virtualisation) diskSize;
72       partitionTableType = "efi";
73       inherit config lib pkgs;
74     };
76     fileSystems."/" = {
77       device = "/dev/disk/by-label/nixos";
78       autoResize = true;
79       fsType = "ext4";
80     };
82     fileSystems."/boot" = {
83       device = "/dev/disk/by-label/ESP";
84       fsType = "vfat";
85     };
87     boot.growPartition = true;
89     boot.loader.grub = {
90       device = "nodev";
91       efiSupport = true;
92       efiInstallAsRemovable = true;
93     };
95     virtualisation.hypervGuest.enable = true;
96   };