{ self }: let lib' = self.lib.x86_64-linux-x86_64-genode; pkgs' = self.packages.x86_64-linux-x86_64-genode; in { config, lib, pkgs, ... }: let buildBootDescription = self.legacyPackages.x86_64-linux.callPackage ./buildBootDescription.nix { lib = lib'; }; genodeParams = lib'.runDhallCommand "params.dhall" { } '' vdiUuid=$(${pkgs.virtualbox}/bin/VBoxManage showmediuminfo ${config.system.build.virtualBoxVDI}/nixos.vdi | awk '/^UUID:/ {print $2}') dhall > $out << EOD { vdiFilename = "nixos.vdi" , vdiUuid = "$vdiUuid" , memorySize = ${toString config.virtualbox.memorySize} , vmName = "${config.virtualbox.vmName}" } EOD ''; bootDescription = buildBootDescription { name = "boot-description"; initConfig = "${./dhall}/vbox-host.dhall ${genodeParams}"; imageInputs = map pkgs'.genodeSources.depot [ "acpi_drv" "ahci_drv" "init" "input_filter" "libc" "libiconv" "nitpicker" "part_block" "platform_drv" "ps2_drv" "report_rom" "rtc_drv" "rump" "stdcxx" "vbox5" "vesa_drv" "vfs" ] ++ [ pkgs'.base-nova pkgs'.block_router ]; extraBinaries = [ "ld.lib.so" "libc.so" "libc_pipe.so" "libiconv.so" "libm.so" "libqemu-usb.so" "librump.so" "librump_fs.so" "libstdcxx.so" "libvfs.so" "libvfs_rump.so" ]; }; firmware = lib'.novaImage "stage0" { } bootDescription; # add system.build.virtualBoxVDI/nixos.vdi to disk image genodeDiskImage = with pkgs; runCommand "genode.disk" { nativeBuildInputs = [ e2fsprogs gptfdisk lzip vmTools.qemu ]; } '' qemu-img create -f raw fs.raw 16M qemu-img create -f raw zero.raw 1M mke2fs fs.raw cat zero.raw fs.raw zero.raw > gpt.raw sgdisk gpt.raw --new=partnum 1:34:-34 \ --typecode=1:${import ./dhall/partition-type} \ --change-name=1:genode mkdir -p $out lzip -c gpt.raw > "$out/genode-nixos-${config.system.nixos.label}.disk" ''; in { system.build.genodeDiskImage = pkgs.runCommand "nixos-vm" { preferLocalBuild = true; } '' mkdir -p $out/bin ln -s ${ pkgs.writeScript "run-nixos-vm" '' #! ${pkgs.runtimeShell} ${pkgs.vmTools.qemu}/bin/qemu-system-x86_64 \ -machine q35 \ -cpu phenom \ -m 512 \ -serial mon:stdio \ -kernel "${pkgs'.bender}" \ -initrd "${pkgs'.NOVA}/hypervisor-x86_64 arg=iommu novpid serial logmem,${firmware}" \ $@ '' } $out/bin/run-genode-vm ''; }