summary refs log tree commit diff
path: root/nixos/modules/virtualisation
diff options
context:
space:
mode:
authorMartin Weinelt <hexa@darmstadt.ccc.de>2023-03-12 23:28:12 +0100
committerMartin Weinelt <hexa@darmstadt.ccc.de>2023-03-12 23:28:23 +0100
commitd03d74aa67d2b49e51097329ca0757be20010c80 (patch)
treef6c18b1255a5971d84265d3697df413904577ff5 /nixos/modules/virtualisation
parentcebf6aa8fd0da7d70630eb4699ba4f7e6348d6fa (diff)
parent6bab2b645b74c79cbc75942d84ce50fadb25dc60 (diff)
downloadnixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.tar
nixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.tar.gz
nixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.tar.bz2
nixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.tar.lz
nixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.tar.xz
nixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.tar.zst
nixpkgs-d03d74aa67d2b49e51097329ca0757be20010c80.zip
Merge remote-tracking branch 'origin/master' into staging-next
Conflicts:
- pkgs/development/python-modules/aiopulse/default.nix
- pkgs/development/python-modules/identify/default.nix
- pkgs/development/python-modules/spur/default.nix
Diffstat (limited to 'nixos/modules/virtualisation')
-rw-r--r--nixos/modules/virtualisation/qemu-vm.nix21
1 files changed, 18 insertions, 3 deletions
diff --git a/nixos/modules/virtualisation/qemu-vm.nix b/nixos/modules/virtualisation/qemu-vm.nix
index f42969d7b67..a55a21a46a5 100644
--- a/nixos/modules/virtualisation/qemu-vm.nix
+++ b/nixos/modules/virtualisation/qemu-vm.nix
@@ -152,9 +152,11 @@ let
 
       ${lib.optionalString cfg.useBootLoader
       ''
-        # Create a writable copy/snapshot of the boot disk.
-        # A writable boot disk can be booted from automatically.
-        ${qemu}/bin/qemu-img create -f qcow2 -F qcow2 -b ${bootDisk}/disk.img "$TMPDIR/disk.img"
+        if ${if !cfg.persistBootDevice then "true" else "! test -e $TMPDIR/disk.img"}; then
+          # Create a writable copy/snapshot of the boot disk.
+          # A writable boot disk can be booted from automatically.
+          ${qemu}/bin/qemu-img create -f qcow2 -F qcow2 -b ${bootDisk}/disk.img "$TMPDIR/disk.img"
+        fi
 
         NIX_EFI_VARS=$(readlink -f "''${NIX_EFI_VARS:-${cfg.efiVars}}")
 
@@ -370,6 +372,17 @@ in
           '';
       };
 
+    virtualisation.persistBootDevice =
+      mkOption {
+        type = types.bool;
+        default = false;
+        description =
+          lib.mdDoc ''
+            If useBootLoader is specified, whether to recreate the boot device
+            on each instantiaton or allow it to persist.
+            '';
+      };
+
     virtualisation.emptyDiskImages =
       mkOption {
         type = types.listOf types.ints.positive;
@@ -853,6 +866,8 @@ in
     # * The disks are attached in `virtualisation.qemu.drives`.
     #   Their order makes them appear as devices `a`, `b`, etc.
     # * `fileSystems."/boot"` is adjusted to be on device `b`.
+    # * The disk.img is recreated each time the VM is booted unless
+    #   virtualisation.persistBootDevice is set.
 
     # If `useBootLoader`, GRUB goes to the second disk, see
     # note [Disk layout with `useBootLoader`].