{ config, lib, options, pkgs, ... }: {
  options = {
    virtualisation = {
      runAsRoot = lib.mkOption {
        type = lib.types.bool;
        default = false;
      };
    };
  };

  config = {
    virtualisation =
      let
        vmConfig = {
          boot.loader.efi.efiSysMountPoint = lib.mkVMOverride "/boot";
        };
      in {
        vmVariant = vmConfig;
        vmVariantWithBootLoader = vmConfig;
      };

    # 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 (
              with { inherit (mergedSystem.mergedValue) vm; };
                if (vm.name == packageName)
                then
                  vm
                else
                  let
                    prefix = lib.concatStringsSep " " (lib.optional config.virtualisation.runAsRoot "sudo");
                    wrapped = pkgs.writeShellApplication {
                      name = "run-${config.system.name}-vm";
                      text = ''
                        ${prefix} ${vm}/bin/run-${config.system.name}-vm
                      '';
                    };
                  in
                    # Rename package to `nixos-vm`
                    pkgs.symlinkJoin {
                      name = packageName;
                      paths = [ wrapped ];
                    });
      };
  };
}