{ config, lib, options, pkgs, ... }: { options = {}; config = { # Replace native `qemu` with `remote-viewer` system.build = { vm = let packageName = "custom-nixos-vm"; mergedSystem = with options.system; lib.mergeDefinitions build.loc build.type (lib.lists.forEach ( builtins.filter (item: !(lib.path.hasPrefix ./. (/. + item.file))) build.definitionsWithLocations) (item: { inherit (item) file value; })); in lib.mkForce ( if (mergedSystem.mergedValue.vm.name == packageName) then mergedSystem.mergedValue.vm else let wrapped = pkgs.writeShellApplication { name = "run-${config.system.name}-vm"; text = '' ${mergedSystem.mergedValue.vm}/bin/run-${config.system.name}-vm ''; }; in # Rename package to `nixos-vm` pkgs.symlinkJoin { name = packageName; paths = [ wrapped ]; }); }; virtualisation = let vmConfig = { boot.loader.efi.efiSysMountPoint = lib.mkForce "/boot"; virtualisation = { qemu.options = [ "-display sdl" ]; sharedDirectories = { hostKeys = { source = "/etc/ssh"; target = "/etc/ssh"; }; }; }; }; in { vmVariantWithBootLoader = vmConfig; }; }; }