my nix configs for my servers and desktop

more fixes

Changed files
+94 -21
hosts
focalor
-20
hosts/focalor/scripts/end.sh
··· 1 - #!/usr/bin/env bash 2 - set -x 3 - 4 - virsh nodedev-reattach pci_0000_0a_00_0 5 - virsh nodedev-reattach pci_0000_0a_00_1 6 - virsh nodedev-reattach pci_0000_06_00_1 7 - virsh nodedev-reattach pci_0000_06_00_3 8 - virsh nodedev-reattach pci_0000_0c_00_3 9 - 10 - modprobe -r vfio-pci 11 - 12 - modprobe nvidia_modeset 13 - modprobe nvidia_uvm 14 - modprobe nvidia_drm 15 - modprobe nvidia 16 - 17 - modprobe -r xhci_pci 18 - modprobe xhci_pci 19 - 20 - systemctl restart display-manager
···
+57
hosts/focalor/scripts/vm-win11-hook.sh
···
··· 1 + #!/run/current-system/sw/bin/bash 2 + 3 + readonly GUEST_NAME="$1" 4 + readonly HOOK_NAME="$2" 5 + readonly STATE_NAME="$3" 6 + 7 + function start_hook() { 8 + # Stops GUI 9 + systemctl isolate multi-user.target 10 + 11 + # Avoids race condition 12 + sleep 2 13 + 14 + # Unloads the NVIDIA drivers 15 + modprobe -r nvidia_drm 16 + modprobe -r nvidia_uvm 17 + modprobe -r nvidia_modeset 18 + modprobe -r nvidia 19 + 20 + # Other code you might want to run 21 + } 22 + 23 + function revert_hook() { 24 + virsh nodedev-reattach pci_0000_0a_00_0 25 + virsh nodedev-reattach pci_0000_0a_00_1 26 + virsh nodedev-reattach pci_0000_06_00_1 27 + virsh nodedev-reattach pci_0000_06_00_3 28 + virsh nodedev-reattach pci_0000_0c_00_3 29 + 30 + modprobe -r vfio-pci 31 + 32 + # Loads the NVIDIA drivers 33 + modprobe nvidia_modeset 34 + modprobe nvidia_uvm 35 + modprobe nvidia_drm 36 + modprobe nvidia 37 + 38 + modprobe -r xhci_pci 39 + modprobe xhci_pci 40 + 41 + # Starts the UI again 42 + systemctl restart display-manager 43 + systemctl isolate graphical.target 44 + } 45 + 46 + # I am not using the script from Passthrough-Post 47 + # because hooks option saves it to /var/lib/libvirt/hooks/qemu.d. 48 + # It's simpler to just rewrite it for NixOS. 49 + if [[ "$GUEST_NAME" != "win11" ]]; then 50 + exit 0 51 + fi 52 + 53 + if [[ "$HOOK_NAME" == "prepare" && "$STATE_NAME" == "begin" ]]; then 54 + start_hook 55 + elif [[ "$HOOK_NAME" == "release" && "$STATE_NAME" == "end" ]]; then 56 + revert_hook 57 + fi
+36 -1
hosts/focalor/vfio.nix
··· 18 }; 19 }; 20 hooks.qemu = { 21 - end = "./scripts/end.sh"; 22 }; 23 }; 24 25 users.extraUsers.regent.extraGroups = [ "libvirtd" ];
··· 18 }; 19 }; 20 hooks.qemu = { 21 + "win11" = ./scripts/vm-win11-hook.sh; 22 }; 23 + }; 24 + 25 + systemd.services.libvirtd = { 26 + path = let 27 + env = pkgs.buildEnv { 28 + name = "qemu-hook-env"; 29 + paths = with pkgs; [ 30 + bash 31 + libvirt 32 + kmod 33 + systemd 34 + ripgrep 35 + sd 36 + ]; 37 + }; 38 + in 39 + [ env ]; 40 + 41 + /*preStart = 42 + '' 43 + mkdir -p /var/lib/libvirt/hooks 44 + mkdir -p /var/lib/libvirt/hooks/qemu.d/win10/prepare/begin 45 + mkdir -p /var/lib/libvirt/hooks/qemu.d/win10/release/end 46 + mkdir -p /var/lib/libvirt/vgabios 47 + 48 + ln -sf /home/regent/symlinks/qemu /var/lib/libvirt/hooks/qemu 49 + ln -sf /home/regent/symlinks/kvm.conf /var/lib/libvirt/hooks/kvm.conf 50 + ln -sf /home/regent/symlinks/start.sh /var/lib/libvirt/hooks/qemu.d/win11/prepare/begin/start.sh 51 + ln -sf /home/regent/symlinks/stop.sh /var/lib/libvirt/hooks/qemu.d/win11/release/end/stop.sh 52 + 53 + chmod +x /var/lib/libvirt/hooks/qemu 54 + chmod +x /var/lib/libvirt/hooks/kvm.conf 55 + chmod +x /var/lib/libvirt/hooks/qemu.d/win11/prepare/begin/start.sh 56 + chmod +x /var/lib/libvirt/hooks/qemu.d/win11/release/end/stop.sh 57 + '';*/ 58 }; 59 60 users.extraUsers.regent.extraGroups = [ "libvirtd" ];
+1
result
···
··· 1 + /nix/store/4483jzzk7w649g57g0p1gfnk2skkz85v-nixos-system-focalor-25.05.20250525.7c43f08