dxvk_1: fix build compatibility with GCC 14 (#360918)
[NixPkgs.git] / nixos / modules / virtualisation / google-compute-image.nix
blob8bdbd75783a41d7f92adc775d72309dfaa32c655
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 with lib;
9 let
10   cfg = config.virtualisation.googleComputeImage;
11   defaultConfigFile = pkgs.writeText "configuration.nix" ''
12     { ... }:
13     {
14       imports = [
15         <nixpkgs/nixos/modules/virtualisation/google-compute-image.nix>
16       ];
17     }
18   '';
22   imports = [
23     ./google-compute-config.nix
24     ./disk-size-option.nix
25     ../image/file-options.nix
26     (lib.mkRenamedOptionModuleWith {
27       sinceRelease = 2411;
28       from = [
29         "virtualisation"
30         "googleComputeImage"
31         "diskSize"
32       ];
33       to = [
34         "virtualisation"
35         "diskSize"
36       ];
37     })
38   ];
40   options = {
41     virtualisation.googleComputeImage.configFile = mkOption {
42       type = with types; nullOr str;
43       default = null;
44       description = ''
45         A path to a configuration file which will be placed at `/etc/nixos/configuration.nix`
46         and be used when switching to a new configuration.
47         If set to `null`, a default configuration is used, where the only import is
48         `<nixpkgs/nixos/modules/virtualisation/google-compute-image.nix>`.
49       '';
50     };
52     virtualisation.googleComputeImage.compressionLevel = mkOption {
53       type = types.int;
54       default = 6;
55       description = ''
56         GZIP compression level of the resulting disk image (1-9).
57       '';
58     };
59     virtualisation.googleComputeImage.efi = mkEnableOption "EFI booting";
60   };
62   #### implementation
63   config = {
64     boot.initrd.availableKernelModules = [ "nvme" ];
65     boot.loader.grub = mkIf cfg.efi {
66       device = mkForce "nodev";
67       efiSupport = true;
68       efiInstallAsRemovable = true;
69     };
71     fileSystems."/boot" = mkIf cfg.efi {
72       device = "/dev/disk/by-label/ESP";
73       fsType = "vfat";
74     };
76     system.nixos.tags = [ "google-compute" ];
77     image.extension = "raw.tar.gz";
78     system.build.image = config.system.build.googleComputeImage;
79     system.build.googleComputeImage = import ../../lib/make-disk-image.nix {
80       name = "google-compute-image";
81       inherit (config.image) baseName;
82       postVM = ''
83         PATH=$PATH:${
84           with pkgs;
85           lib.makeBinPath [
86             gnutar
87             gzip
88           ]
89         }
90         pushd $out
91         tar -Sc $diskImage | gzip -${toString cfg.compressionLevel} > \
92           ${config.image.fileName}
93         rm $diskImage
94         popd
95       '';
96       format = "raw";
97       configFile = if cfg.configFile == null then defaultConfigFile else cfg.configFile;
98       partitionTableType = if cfg.efi then "efi" else "legacy";
99       inherit (config.virtualisation) diskSize;
100       inherit config lib pkgs;
101     };
103   };