From 7b243d810dd86a84734eb0a7c7e3c71599b72975 Mon Sep 17 00:00:00 2001 From: uttarayan21 Date: Sat, 15 Feb 2025 10:04:19 +0530 Subject: [PATCH] feat: backup before adding vms --- nixos/ryu/configuration.nix | 1 + nixos/ryu/ryu.nix | 24 ++++-- nixos/ryu/vms/default.nix | 6 ++ nixos/ryu/vms/vfio.nix | 0 nixos/ryu/vms/win11.nix | 154 ++++++++++++++++++++++++++++++++++++ 5 files changed, 179 insertions(+), 6 deletions(-) create mode 100644 nixos/ryu/vms/default.nix create mode 100644 nixos/ryu/vms/vfio.nix create mode 100644 nixos/ryu/vms/win11.nix diff --git a/nixos/ryu/configuration.nix b/nixos/ryu/configuration.nix index 2707eeec..1dbc4ac0 100644 --- a/nixos/ryu/configuration.nix +++ b/nixos/ryu/configuration.nix @@ -7,6 +7,7 @@ # Include the results of the hardware scan. ./ryu.nix ./services + # ./vms ]; programs = { diff --git a/nixos/ryu/ryu.nix b/nixos/ryu/ryu.nix index f5e118c4..8d7adefd 100644 --- a/nixos/ryu/ryu.nix +++ b/nixos/ryu/ryu.nix @@ -78,17 +78,29 @@ # hardware.bluetooth.settings = { - boot.initrd.availableKernelModules = ["vmd" "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"]; - boot.initrd.kernelModules = ["nvidia" "nvidia_modeset" "nvidia_drm"]; + boot.initrd.availableKernelModules = [ + "vmd" + "xhci_pci" + "ahci" + "nvme" + "usbhid" + "usb_storage" + "sd_mod" + ]; boot.kernelModules = [ - # "vfio_pci" - # "vfio" - "kvm-intel" "i2c-dev" ]; + boot.initrd.kernelModules = [ + "nvidia" + "nvidia_modeset" + "nvidia_drm" + ]; + boot.kernelParams = [ + "intel_iommu=on" + "vfio-pci.ids=" + ]; boot.extraModulePackages = []; - boot.kernelParams = ["intel_iommu=on"]; # services.udev.packages = [pkgs.yubikey-personalization pkgs.yubikey-personalization-gui pkgs.via]; services.udev.packages = [pkgs.via]; services.yubikey-agent.enable = true; diff --git a/nixos/ryu/vms/default.nix b/nixos/ryu/vms/default.nix new file mode 100644 index 00000000..fb0743da --- /dev/null +++ b/nixos/ryu/vms/default.nix @@ -0,0 +1,6 @@ +{ + imports = [ + # ./vfio.nix + ./win11.nix + ]; +} diff --git a/nixos/ryu/vms/vfio.nix b/nixos/ryu/vms/vfio.nix new file mode 100644 index 00000000..e69de29b diff --git a/nixos/ryu/vms/win11.nix b/nixos/ryu/vms/win11.nix new file mode 100644 index 00000000..d2acb8a7 --- /dev/null +++ b/nixos/ryu/vms/win11.nix @@ -0,0 +1,154 @@ +{ config, pkgs, lib, ... }: + +{ + virtualisation.libvirtd.enable = true; + virtualisation.libvirtd.qemu.ovmf.enable = true; + virtualisation.libvirtd.qemu.swtpm.enable = true; + + # 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 = let + win11xml = pkgs.writeText "win11.xml" '' + + win11 + 16 + 8 + + + + + + hvm + /run/libvirt/nix-ovmf/OVMF_CODE.fd + /var/lib/libvirt/qemu/nvram/win11_VARS.fd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + ''; + in "${pkgs.libvirt}/bin/virsh define ${win11xml} && ${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 +} \ No newline at end of file