linuxPackages_latest.broadcom_sta: add patch to compile on Kernel 6.12 (#359484)
[NixPkgs.git] / nixos / modules / virtualisation / digital-ocean-image.nix
blob3d9fe52bb0db7e11164a84360aab29568200bd97
2   config,
3   lib,
4   pkgs,
5   ...
6 }:
8 with lib;
9 let
10   cfg = config.virtualisation.digitalOceanImage;
14   imports = [
15     ./digital-ocean-config.nix
16     ./disk-size-option.nix
17     ../image/file-options.nix
18     (lib.mkRenamedOptionModuleWith {
19       sinceRelease = 2411;
20       from = [
21         "virtualisation"
22         "digitalOceanImage"
23         "diskSize"
24       ];
25       to = [
26         "virtualisation"
27         "diskSize"
28       ];
29     })
30   ];
32   options = {
33     virtualisation.digitalOceanImage.configFile = mkOption {
34       type = with types; nullOr path;
35       default = null;
36       description = ''
37         A path to a configuration file which will be placed at
38         `/etc/nixos/configuration.nix` and be used when switching
39         to a new configuration. If set to `null`, a default
40         configuration is used that imports
41         `(modulesPath + "/virtualisation/digital-ocean-config.nix")`.
42       '';
43     };
45     virtualisation.digitalOceanImage.compressionMethod = mkOption {
46       type = types.enum [
47         "gzip"
48         "bzip2"
49       ];
50       default = "gzip";
51       example = "bzip2";
52       description = ''
53         Disk image compression method. Choose bzip2 to generate smaller images that
54         take longer to generate but will consume less metered storage space on your
55         Digital Ocean account.
56       '';
57     };
58   };
60   #### implementation
61   config =
62     let
63       format = "qcow2";
64     in
65     {
66       image.extension = lib.concatStringsSep "." [
67         format
68         (
69           {
70             "gzip" = "gz";
71             "bzip2" = "bz2";
72           }
73           .${cfg.compressionMethod}
74         )
75       ];
76       system.nixos.tags = [ "digital-ocean" ];
77       system.build.image = config.system.build.digitalOceanImage;
78       system.build.digitalOceanImage = import ../../lib/make-disk-image.nix {
79         name = "digital-ocean-image";
80         inherit (config.image) baseName;
81         inherit (config.virtualisation) diskSize;
82         inherit
83           config
84           lib
85           pkgs
86           format
87           ;
88         postVM =
89           let
90             compress =
91               {
92                 "gzip" = "${pkgs.gzip}/bin/gzip";
93                 "bzip2" = "${pkgs.bzip2}/bin/bzip2";
94               }
95               .${cfg.compressionMethod};
96           in
97           ''
98             ${compress} $diskImage
99           '';
100         configFile =
101           if cfg.configFile == null then
102             config.virtualisation.digitalOcean.defaultConfigFile
103           else
104             cfg.configFile;
105       };
107     };
109   meta.maintainers = with maintainers; [
110     arianvp
111     eamsden
112   ];