From 38f2ca6b8044076bfd4bc2503500f49d9a46f090 Mon Sep 17 00:00:00 2001 From: Adam Chance <6444703+drakon64@users.noreply.github.com> Date: Thu, 27 Mar 2025 12:03:57 +0000 Subject: [PATCH] nixos/virtualisation: add contents setting to googleComputeImage Allow placing files and directories in the image --- .../virtualisation/google-compute-image.nix | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/nixos/modules/virtualisation/google-compute-image.nix b/nixos/modules/virtualisation/google-compute-image.nix index 98190e7e2276..e1021c755aea 100644 --- a/nixos/modules/virtualisation/google-compute-image.nix +++ b/nixos/modules/virtualisation/google-compute-image.nix @@ -56,6 +56,33 @@ in GZIP compression level of the resulting disk image (1-9). ''; }; + + virtualisation.googleComputeImage.contents = mkOption { + type = with types; listOf attrs; + default = [ ]; + description = '' + The files and directories to be placed in the image. + This is a list of attribute sets {source, target, mode, user, group} where + `source' is the file system object (regular file or directory) to be + grafted in the file system at path `target', `mode' is a string containing + the permissions that will be set (ex. "755"), `user' and `group' are the + user and group name that will be set as owner of the files. + `mode', `user', and `group' are optional. + When setting one of `user' or `group', the other needs to be set too. + ''; + example = literalExpression '' + [ + { + source = ./default.nix; + target = "/etc/nixos/default.nix"; + mode = "0644"; + user = "root"; + group = "root"; + } + ]; + ''; + }; + virtualisation.googleComputeImage.efi = mkEnableOption "EFI booting"; }; @@ -99,6 +126,7 @@ in ''; format = "raw"; configFile = if cfg.configFile == null then defaultConfigFile else cfg.configFile; + inherit (cfg) contents; partitionTableType = if cfg.efi then "efi" else "legacy"; inherit (config.virtualisation) diskSize; inherit config lib pkgs;