{ config, lib, pkgs, username, ... }: let cfg = config.os.srv.virtualization; in { options.os.srv.virtualization = { kvm.enable = lib.mkEnableOption "KVM/QEMU virtualization with Virt-Manager"; docker.enable = lib.mkEnableOption "Docker Container Virtualization"; waydroid.enable = lib.mkEnableOption "Waydroid Container Virtualization"; }; config = lib.mkMerge [ (lib.mkIf cfg.kvm.enable { virtualisation.libvirtd = { enable = true; qemu.package = pkgs.qemu_kvm; qemu.swtpm.enable = true; }; systemd.services.libvirt-guests.enable = false; programs.virt-manager.enable = true; boot.initrd.kernelModules = (lib.optional (config.os.core.drivers.cpu == "amd") "kvm-amd") ++ (lib.optional (config.os.core.drivers.cpu == "intel") "kvm-intel"); }) (lib.mkIf cfg.docker.enable { virtualisation.docker.enable = true; environment.systemPackages = [ pkgs.docker-compose ]; users.users.${username}.extraGroups = [ "docker" ]; }) (lib.mkIf cfg.waydroid.enable { virtualisation.waydroid = { enable = true; package = pkgs.waydroid-nftables; }; environment.systemPackages = with pkgs; [ waydroid-helper ]; }) ]; }