at 18.03-beta 2.3 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.virtualbox; 8 9in { 10 11 options = { 12 virtualbox = { 13 baseImageSize = mkOption { 14 type = types.int; 15 default = 10 * 1024; 16 description = '' 17 The size of the VirtualBox base image in MiB. 18 ''; 19 }; 20 }; 21 }; 22 23 config = { 24 system.build.virtualBoxOVA = import ../../lib/make-disk-image.nix { 25 name = "nixos-ova-${config.system.nixos.label}-${pkgs.stdenv.system}"; 26 27 inherit pkgs lib config; 28 partitionTableType = "legacy"; 29 diskSize = cfg.baseImageSize; 30 31 postVM = 32 '' 33 export HOME=$PWD 34 export PATH=${pkgs.virtualbox}/bin:$PATH 35 36 echo "creating VirtualBox pass-through disk wrapper (no copying invovled)..." 37 VBoxManage internalcommands createrawvmdk -filename disk.vmdk -rawdisk $diskImage 38 39 echo "creating VirtualBox VM..." 40 vmName="NixOS ${config.system.nixos.label} (${pkgs.stdenv.system})" 41 VBoxManage createvm --name "$vmName" --register \ 42 --ostype ${if pkgs.stdenv.system == "x86_64-linux" then "Linux26_64" else "Linux26"} 43 VBoxManage modifyvm "$vmName" \ 44 --memory 1536 --acpi on --vram 32 \ 45 ${optionalString (pkgs.stdenv.system == "i686-linux") "--pae on"} \ 46 --nictype1 virtio --nic1 nat \ 47 --audiocontroller ac97 --audio alsa \ 48 --rtcuseutc on \ 49 --usb on --mouse usbtablet 50 VBoxManage storagectl "$vmName" --name SATA --add sata --portcount 4 --bootable on --hostiocache on 51 VBoxManage storageattach "$vmName" --storagectl SATA --port 0 --device 0 --type hdd \ 52 --medium disk.vmdk 53 54 echo "exporting VirtualBox VM..." 55 mkdir -p $out 56 fn="$out/nixos-${config.system.nixos.label}-${pkgs.stdenv.system}.ova" 57 VBoxManage export "$vmName" --output "$fn" 58 59 rm -v $diskImage 60 61 mkdir -p $out/nix-support 62 echo "file ova $fn" >> $out/nix-support/hydra-build-products 63 ''; 64 }; 65 66 fileSystems."/" = { 67 device = "/dev/disk/by-label/nixos"; 68 autoResize = true; 69 }; 70 71 boot.growPartition = true; 72 boot.loader.grub.device = "/dev/sda"; 73 74 virtualisation.virtualbox.guest.enable = true; 75 76 }; 77}