dotfiles/hosts/malachite/default.nix
2024-04-05 02:46:38 -07:00

107 lines
2.6 KiB
Nix

{ config, pkgs, lib, ... }:
let
passthrough = pkgs.writeShellApplication {
name = "pasthrough.sh";
runtimeInputs = lib.attrVals [ "coreutils" "kmod" "libvirt" "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?
}