{
  config,
  pkgs,
  lib,
  ...
}: {
  # IOMMU and VFIO settings
  # boot.kernelParams = [
  #   "amd_iommu=on" # Use "intel_iommu=on" for Intel CPUs
  #   "iommu=pt"
  #   "vfio-pci.ids=10de:2504,10de:228e" # Replace with your GPU's vendor:device IDs
  # ];

  # boot.kernelModules = [
  #   "vfio_pci"
  #   "vfio"
  #   "vfio_iommu_type1"
  #   "vfio_virqfd"
  # ];
  #
  # # Early loading of VFIO
  # boot.initrd.kernelModules = [
  #   "vfio_pci"
  #   "vfio"
  #   "vfio_iommu_type1"
  #   "vfio_virqfd"
  # ];

  # Define the Windows 11 VM
  virtualisation.libvirtd.qemu.verbatimConfig = ''
    user = "root"
    group = "root"
    cgroup_device_acl = [
      "/dev/null", "/dev/full", "/dev/zero",
      "/dev/random", "/dev/urandom",
      "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
      "/dev/rtc","/dev/hpet"
    ]
  '';

  virtualisation.libvirtd.hooks.qemu = {
    "win11" = ''
      # Add any VM hooks here if needed
    '';
  };

  systemd.services.libvirtd-win11 = {
    description = "Windows 11 VM";
    after = ["libvirtd.service"];
    requires = ["libvirtd.service"];
    serviceConfig = {
      Type = "oneshot";
      RemainAfterExit = "yes";
      ExecStart = "${pkgs.libvirt}/bin/virsh define ${./windows.xml} && ${pkgs.libvirt}/bin/virsh start win11";
      ExecStop = "${pkgs.libvirt}/bin/virsh shutdown win11";
    };
    wantedBy = ["multi-user.target"];
  };

  # Setup Looking Glass shared memory
  systemd.tmpfiles.rules = [
    "f /dev/shm/looking-glass 0660 root qemu-libvirtd 32M"
  ];

  environment.systemPackages = with pkgs; [
    virt-manager
    OVMF
    swtpm
    win-virtio
    looking-glass-client
  ];

  # Networking for VM
  networking.bridges.virbr0.interfaces = [];
  networking.interfaces.virbr0.useDHCP = true;

  # Enable huge pages for better performance
  boot.kernel.sysctl."vm.nr_hugepages" = 8192;

  # Optional: Enable looking glass for low-latency VM display
}
