my nix configs for my servers and desktop
at main 1.4 kB view raw
1#!/run/current-system/sw/bin/bash 2 3echo "qemu-hook: ${1} ${2}" >> /tmp/qemu-hook.log 4 5set -x 6 7readonly GUEST_NAME="$1" 8readonly HOOK_NAME="$2" 9readonly STATE_NAME="$3" 10 11function start_hook() { 12 # Stops GUI 13 systemctl isolate multi-user.target 14 15 # Avoids race condition 16 sleep 2 17 18 # Unloads the NVIDIA drivers 19 modprobe -r nvidia_drm 20 modprobe -r nvidia_uvm 21 modprobe -r nvidia_modeset 22 modprobe -r nvidia 23 24 # Other code you might want to run 25} 26 27function revert_hook() { 28 virsh nodedev-reattach pci_0000_0a_00_0 29 virsh nodedev-reattach pci_0000_0a_00_1 30 virsh nodedev-reattach pci_0000_06_00_1 31 virsh nodedev-reattach pci_0000_06_00_3 32 virsh nodedev-reattach pci_0000_0c_00_3 33 34 modprobe -r vfio-pci 35 36 # Loads the NVIDIA drivers 37 modprobe nvidia_modeset 38 modprobe nvidia_uvm 39 modprobe nvidia_drm 40 modprobe nvidia 41 42 modprobe -r xhci_pci 43 modprobe xhci_pci 44 45 # Starts the UI again 46 systemctl restart display-manager 47 systemctl isolate graphical.target 48} 49 50# I am not using the script from Passthrough-Post 51# because hooks option saves it to /var/lib/libvirt/hooks/qemu.d. 52# It's simpler to just rewrite it for NixOS. 53if [[ "$GUEST_NAME" != "win11" ]]; then 54 exit 0 55fi 56 57if [[ "$HOOK_NAME" == "prepare" && "$STATE_NAME" == "begin" ]]; then 58 #start_hook 59 echo "do nothing" 60elif [[ "$HOOK_NAME" == "release" && "$STATE_NAME" == "end" ]]; then 61 revert_hook 62fi