| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | { config, lib, pkgs, ... }: | 
					
						
							| 
									
										
										
										
											2012-02-25 21:36:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-14 16:26:48 +02:00
										 |  |  | with lib; | 
					
						
							| 
									
										
										
										
											2012-02-25 21:36:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  | let | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cfg = config.virtualbox; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | in { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   options = { | 
					
						
							|  |  |  |     virtualbox = { | 
					
						
							|  |  |  |       baseImageSize = mkOption { | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  |         type = types.int; | 
					
						
							|  |  |  |         default = 10 * 1024; | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  |         description = ''
 | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  |           The size of the VirtualBox base image in MiB. | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   config = { | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-15 13:34:41 +01:00
										 |  |  |     system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix { | 
					
						
							|  |  |  |       name = "nixos-ova-${config.system.nixosLabel}-${pkgs.stdenv.system}"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  |       inherit pkgs lib config; | 
					
						
							|  |  |  |       partitioned = true; | 
					
						
							|  |  |  |       diskSize = cfg.baseImageSize; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       configFile = pkgs.writeText "configuration.nix" | 
					
						
							|  |  |  |         ''
 | 
					
						
							|  |  |  |           { | 
					
						
							|  |  |  |             imports = [ <nixpkgs/nixos/modules/virtualisation/virtualbox-image.nix> ]; | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  |           } | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  |         '';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       postVM = | 
					
						
							|  |  |  |         ''
 | 
					
						
							|  |  |  |           echo "creating VirtualBox disk image..." | 
					
						
							| 
									
										
										
										
											2016-03-15 13:34:41 +01:00
										 |  |  |           ${pkgs.vmTools.qemu}/bin/qemu-img convert -f raw -O vdi $diskImage disk.vdi | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  |           rm $diskImage | 
					
						
							| 
									
										
										
										
											2016-03-15 13:34:41 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           echo "creating VirtualBox VM..." | 
					
						
							|  |  |  |           export HOME=$PWD | 
					
						
							|  |  |  |           export PATH=${pkgs.linuxPackages.virtualbox}/bin:$PATH | 
					
						
							|  |  |  |           vmName="NixOS ${config.system.nixosLabel} (${pkgs.stdenv.system})" | 
					
						
							|  |  |  |           VBoxManage createvm --name "$vmName" --register \ | 
					
						
							|  |  |  |             --ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"} | 
					
						
							|  |  |  |           VBoxManage modifyvm "$vmName" \ | 
					
						
							|  |  |  |             --memory 1536 --acpi on --vram 32 \ | 
					
						
							|  |  |  |             ${optionalString (pkgs.stdenv.system == "i686-linux") "--pae on"} \ | 
					
						
							|  |  |  |             --nictype1 virtio --nic1 nat \ | 
					
						
							|  |  |  |             --audiocontroller ac97 --audio alsa \ | 
					
						
							|  |  |  |             --rtcuseutc on \ | 
					
						
							|  |  |  |             --usb on --mouse usbtablet | 
					
						
							|  |  |  |           VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on | 
					
						
							|  |  |  |           VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \ | 
					
						
							|  |  |  |             --medium disk.vdi | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           echo "exporting VirtualBox VM..." | 
					
						
							|  |  |  |           mkdir -p $out | 
					
						
							|  |  |  |           fn="$out/nixos-${config.system.nixosLabel}-${pkgs.stdenv.system}.ova" | 
					
						
							|  |  |  |           VBoxManage export "$vmName" --output "$fn" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           mkdir -p $out/nix-support | 
					
						
							|  |  |  |           echo "file ova $fn" >> $out/nix-support/hydra-build-products | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  |         '';
 | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  |     fileSystems."/".device = "/dev/disk/by-label/nixos"; | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  |     boot.loader.grub.device = "/dev/sda"; | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-02 04:54:31 +02:00
										 |  |  |     virtualisation.virtualbox.guest.enable = true; | 
					
						
							| 
									
										
										
										
											2015-09-28 14:31:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-04 11:29:51 +02:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2012-02-25 21:36:00 +00:00
										 |  |  | } |