Virt-manager
Virt-manager (a.k.a. Virtual Machine Manager) is a GUI application for managing local and remote virtual machines through libvirt. It primarily targets KVM VMs, but also manages Xen and LXC (Linux Containers).
Prequisites
Though Virt-manager (using the KVM hypervisor) is able to take advantage of virtualisation capabilities without any UEFI/BIOS configuration, best performance demands that the host have Vt-x and Vt-d (Intel) or AMD-V and AMD-Vi (AMD) enabled.
These settings can usually be found under the UEFI/BIOS settings.
Installation
In your configuration file add:
virtualisation.libvirtd.enable = true;
programs.virt-manager.enable = true;
authentication unavailable: no polkit agent available to authenticate action 'org.libvirt.unix.manage'
To resolve, add your user to the libvirtd group:
{
users.users.<myuser>.extraGroups = [ "libvirtd" ];
}
Networking
The default network starts off inactive, you must enable it before it is accessible. This can be done by running the following command:
# virsh net-start default
And if you would like to enable it automatically at boot:
# virsh net-autostart default
By default, this will enable a virtual network bridge under the name virbr0.
Display
The default video may not allow different resolutions and is limited. It is recommended to use Virtio instead.
For information on how to use Virtio with your VM's, you can read up on Virtio on the libvirt wiki.
Shared folders
To be able to share a folder with a guest, you will need 'virtiofsd'. The recommended way to solve this problem is now to add pkgs.virtiofsd to virtualisation.libvirtd.qemu.vhostUserPackages:
virtualisation.libvirtd = {
enable = true;
qemu.vhostUserPackages = with pkgs; [ virtiofsd ];
};
Windows Guest
See Virtio-win guest tools for additional drivers for both paravirtual and emulated hardware
Guest Agent
When running NixOS as a guest, enable the QEMU guest agent with:
{
services.qemuGuest.enable = true;
services.spice-vdagentd.enable = true; # enable copy and paste between host and guest
}
The host must provide the needed virtio serial port under the special name org.qemu.guest_agent.0.
Wayland
In order to run on Wayland, virt-manager must be ran under XWayland with `$ GDK_BACKEND=x11 virt-manager` or a gdk cursor must be set. An example of setting a gdk cursor with home-manager is as follows:
home.pointerCursor = {
gtk.enable = true;
package = pkgs.vanilla-dmz;
name = "Vanilla-DMZ";
};