{ config, pkgs, lib, ... }: let passthrough = pkgs.writeShellApplication { name = "pasthrough.sh"; runtimeInputs = lib.attrVals [ "coreutils" "kmod" "libvirtd" "procps" ] pkgs; text = '' GUEST_NAME="$1" HOOK_NAME="$2" STATE_NAME="$3" echo 19>/home/stitchynyan/startlogfile BASH_XTRACEFD=19 set -x # For the windows 10 VM if [[ "$GUEST_NAME" == "win10" ]]; then # Prepare hook if [[ "$HOOK_NAME/$STATE_NAME" == "prepare/begin" ]]; then # Remove Hyprland pkill Hyprland # Unbind VTconsoles echo 0 > /sys/class/vtconsole/vtcon0/bind echo 0 > /sys/class/vtconsole/vtcon1/bind # Unbind EFI-Framebuffer echo efi-framebuffer.0 > /sys/bus/platform/drivers/efi-framebuffer/unbind # We love race conditions sleep 2 # Unload Modules modprobe -r nvidia_drm nvidia_modeset nvidia_uvm nvidia # Unbind the GPU from display driver virsh nodedev-detach pci_0000_01_00_0 virsh nodedev-detach pci_0000_01_00_1 # Load VFIO Kernel Module modprobe vfio_pci sleep 2 elif [[ "$HOOK_NAME/$STATE_NAME" == "release/end" ]]; then # Re-Bind GPU to Nvidia Driver (replace the pci addresses with yours) virsh nodedev-reattach pci_0000_01_00_0 virsh nodedev-reattach pci_0000_01_00_1 modprobe -r vfio-pci #bind efi echo "efi-framebuffer.0" > /sys/bus/platform/drivers/efi-framebuffer/bind # Reload nvidia modules modprobe nvidia_drm modprobe nvidia_modeset modprobe nvidia_uvm modprobe nvidia # Rebind VT consoles echo 1 > /sys/class/vtconsole/vtcon0/bind bin/echo 1 > /sys/class/vtconsole/vtcon1/bind fi fi ''; in { imports = [ ./hardware-configuration.nix ../default.nix ]; virtualisation.libvirtd.hooks.qemu = { passthrough = "${passthrough}"; }; stitchyconf = { artPkgs.enable = true; }; virtualisation.libvirtd.enable = true; hardware = { steam-hardware.enable = true; }; networking.networkmanager.enable = true; services.syncthing = { enable = true; user = "stitchynyan"; openDefaultPorts = true; databaseDir = "/home/stitchynyan/.local/share/syncthing"; dataDir = "/home/stitchynyan"; }; networking.hostName = "malachite"; time.timeZone = "America/Los_Angeles"; # Read the Docs before Changing system.stateVersion = "23.05"; # Did you read the comment? }