more fixes
This commit is contained in:
parent
1a13656f95
commit
e0c6926ba0
4 changed files with 94 additions and 21 deletions
|
@ -1,20 +0,0 @@
|
|||
#!/usr/bin/env bash
|
||||
set -x
|
||||
|
||||
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
|
||||
|
||||
modprobe nvidia_modeset
|
||||
modprobe nvidia_uvm
|
||||
modprobe nvidia_drm
|
||||
modprobe nvidia
|
||||
|
||||
modprobe -r xhci_pci
|
||||
modprobe xhci_pci
|
||||
|
||||
systemctl restart display-manager
|
57
hosts/focalor/scripts/vm-win11-hook.sh
Normal file
57
hosts/focalor/scripts/vm-win11-hook.sh
Normal file
|
@ -0,0 +1,57 @@
|
|||
#!/run/current-system/sw/bin/bash
|
||||
|
||||
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
|
|
@ -18,9 +18,44 @@
|
|||
};
|
||||
};
|
||||
hooks.qemu = {
|
||||
end = "./scripts/end.sh";
|
||||
"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" ];
|
||||
}
|
1
result
Symbolic link
1
result
Symbolic link
|
@ -0,0 +1 @@
|
|||
/nix/store/4483jzzk7w649g57g0p1gfnk2skkz85v-nixos-system-focalor-25.05.20250525.7c43f08
|
Loading…
Add table
Add a link
Reference in a new issue