Compare commits

..

4 commits

Author SHA1 Message Date
8cd6aa6afe maybe its permission issues 2025-06-15 06:14:33 -04:00
23bf9ccaa3 meow 2025-06-15 06:11:29 -04:00
e0c6926ba0 more fixes 2025-06-15 05:57:32 -04:00
1a13656f95 add end script 2025-06-15 05:35:32 -04:00
3 changed files with 105 additions and 2 deletions

View file

@ -9,8 +9,12 @@
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "uas" "usbhid" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.initrd.kernelModules = [ "vfio" "vfio_iommu_type1" "vfio_pci" ];
boot.kernelModules = [ "kvm-amd" ];
boot.kernelParams = [
"amd_iommu=on"
"vfio-pci.ids=10de:2484,10de228b,1022:149c,15b7:5045,1dbe:5236,1022:149c"
];
boot.extraModulePackages = [ ];
fileSystems."/" =

View file

@ -0,0 +1,61 @@
#!/run/current-system/sw/bin/bash
echo "qemu-hook: ${1} ${2}" >> /tmp/qemu-hook.log
set -x
readonly GUEST_NAME="$1"
readonly HOOK_NAME="$2"
readonly STATE_NAME="$3"
function start_hook() {
# Stops GUI
systemctl isolate multi-user.target
# Avoids race condition
sleep 2
# Unloads the NVIDIA drivers
modprobe -r nvidia_drm
modprobe -r nvidia_uvm
modprobe -r nvidia_modeset
modprobe -r nvidia
# Other code you might want to run
}
function revert_hook() {
virsh nodedev-reattach pci_0000_0a_00_0
virsh nodedev-reattach pci_0000_0a_00_1
virsh nodedev-reattach pci_0000_06_00_1
virsh nodedev-reattach pci_0000_06_00_3
virsh nodedev-reattach pci_0000_0c_00_3
modprobe -r vfio-pci
# Loads the NVIDIA drivers
modprobe nvidia_modeset
modprobe nvidia_uvm
modprobe nvidia_drm
modprobe nvidia
modprobe -r xhci_pci
modprobe xhci_pci
# Starts the UI again
systemctl restart display-manager
systemctl isolate graphical.target
}
# I am not using the script from Passthrough-Post
# because hooks option saves it to /var/lib/libvirt/hooks/qemu.d.
# It's simpler to just rewrite it for NixOS.
if [[ "$GUEST_NAME" != "win11" ]]; then
exit 0
fi
if [[ "$HOOK_NAME" == "prepare" && "$STATE_NAME" == "begin" ]]; then
start_hook
elif [[ "$HOOK_NAME" == "release" && "$STATE_NAME" == "end" ]]; then
revert_hook
fi

View file

@ -17,6 +17,44 @@
}).fd];
};
};
hooks.qemu = {
win11 = ./scripts/vm-win11-hook.sh;
};
};
systemd.services.libvirtd = {
path = let
env = pkgs.buildEnv {
name = "qemu-hook-env";
paths = with pkgs; [
bash
libvirt
kmod
systemd
ripgrep
sd
];
};
in
[ env ];
/*preStart =
''
mkdir -p /var/lib/libvirt/hooks
mkdir -p /var/lib/libvirt/hooks/qemu.d/win10/prepare/begin
mkdir -p /var/lib/libvirt/hooks/qemu.d/win10/release/end
mkdir -p /var/lib/libvirt/vgabios
ln -sf /home/regent/symlinks/qemu /var/lib/libvirt/hooks/qemu
ln -sf /home/regent/symlinks/kvm.conf /var/lib/libvirt/hooks/kvm.conf
ln -sf /home/regent/symlinks/start.sh /var/lib/libvirt/hooks/qemu.d/win11/prepare/begin/start.sh
ln -sf /home/regent/symlinks/stop.sh /var/lib/libvirt/hooks/qemu.d/win11/release/end/stop.sh
chmod +x /var/lib/libvirt/hooks/qemu
chmod +x /var/lib/libvirt/hooks/kvm.conf
chmod +x /var/lib/libvirt/hooks/qemu.d/win11/prepare/begin/start.sh
chmod +x /var/lib/libvirt/hooks/qemu.d/win11/release/end/stop.sh
'';*/
};
users.extraUsers.regent.extraGroups = [ "libvirtd" ];