{ config, lib, pkgs, ... }: with lib; let cfg = config.sydnix.qemu; in { options.sydnix.qemu = { enable = mkEnableOption "Qemu"; }; config = mkIf cfg.enable (let # Necessary for UEFI boot with libvirt. qemu-uefi = pkgs.writeShellScriptBin "qemu-system-x86_64-uefi" '' qemu-system-x86_64 \ -bios ${pkgs.OVMF.fd}/FV/OVMF.fd \ "$@" ''; in { sydnix.impermanence.directories = [ # Most importantly, stores images and disks. "/var/lib/libvirt" ]; programs.virt-manager.enable = true; environment.systemPackages = [ pkgs.virtiofsd qemu-uefi ]; virtualisation.libvirtd = { enable = true; qemu.vhostUserPackages = [ pkgs.virtiofsd ]; }; # Hack to enable UEFI support. systemd.tmpfiles.rules = [ "L+ /var/lib/qemu/firmware - - - - ${pkgs.qemu}/share/qemu/firmware" ]; }); }