{ pkgs ? (import { }), lib ? pkgs.lib, }: let base-cmd = { apnet-mac, apnet-port, vm, }: '' ${pkgs.qemu}/bin/qemu-system-x86_64 -m 4G \ -kernel ${vm.kernel}/bzImage \ -initrd ${vm.ramdisk}/initrd \ -append "init=${vm.toplevel}/init loglevel=4 console=ttyS0" \ -display none -serial mon:stdio \ -netdev socket,mcast=230.0.0.1:${toString apnet-port},localaddr=127.0.0.1,id=apnet \ -device virtio-net,disable-legacy=on,disable-modern=off,netdev=apnet,mac=${apnet-mac} ''; border-vm = (import (pkgs.path + "/nixos/lib/eval-config.nix") { system = "x86_64-linux"; modules = [ ./border.nix ./vm-base.nix ]; }).config.system.build; client-vm = (import (pkgs.path + "/nixos/lib/eval-config.nix") { system = "x86_64-linux"; modules = [ ./client.nix ./vm-base.nix ]; }).config.system.build; border-launch = pkgs.writeShellScript "lauch-border" '' ${base-cmd { vm = border-vm; apnet-port = 1234; apnet-mac = "ba:ad:3d:ea:21:02"; }} ''; client-launch = pkgs.writeShellScript "lauch-client" '' ${base-cmd { vm = client-vm; apnet-port = 1235; apnet-mac = "ba:ad:3d:ea:21:01"; }} ''; in pkgs.linkFarm "vms" [ { name = "border"; path = border-launch; } { name = "client"; path = client-launch; } ]