# based on https://github.com/NickCao/nixos-riscv/blob/master/qemu.nix { config, pkgs, lib, ...}: { boot.loader.generic-extlinux-compatible.enable = false; boot.kernelParams = [ "console=ttyS0" "earlycon" ]; boot.initrd.availableKernelModules = [ "pci_host_generic" "virtio_pci" "9p" "9pnet_virtio" ]; fileSystems."/" = { device = "none"; fsType = "tmpfs"; options = [ "defaults" "mode=755" ]; }; fileSystems."/nix/store" = { device = "nix-store"; fsType = "9p"; options = [ "ro" "trans=virtio" "version=9p2000.L" "msize=1M" ]; }; systemd.services."autotty@hvc0".enable = false; systemd.services.mount-pstore.enable = false; services.getty.autologinUser = "root"; networking.firewall.enable = false; #virtualisation.docker.enable = true; system.build.vm = let qemu-path = "${pkgs.pkgsBuildBuild.qemu}/bin/qemu-system-${pkgs.targetPlatform.qemuArch}"; closure = config.system.build.toplevel; qemu-args = [ "-M" "virt" "-smp" "2" # cpus "-m" "2G" # mem "-kernel" "${closure}/kernel" "-initrd" "${closure}/initrd" "-append" "$(cat ${closure}/kernel-params) init=${closure}/init" "-device" "virtio-rng-pci" "-netdev" "user,id=end0" "-device" "virtio-net-pci,netdev=end0" "-netdev" "user,id=end1" "-device" "virtio-net-pci,netdev=end1" "-fsdev" "local,security_model=passthrough,id=nix-store,path=/nix/store,readonly=on" "-device" "virtio-9p-pci,id=nix-store,fsdev=nix-store,mount_tag=nix-store" "-nographic" ]; in pkgs.writeShellScriptBin "run-vm" '' exec ${qemu-path} ${lib.escapeShellArgs qemu-args} ''; }