blob: fb5a4cde354e69155762745e3a08f3d6798bc955 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
{ pkgs, config, lib, ... }:
let
gpuIDs = [
"10de:28e0"
"10de:22be"
];
in
{
virtualisation = {
libvirtd = {
enable = true;
qemu = {
swtpm.enable = true;
ovmf.enable = true;
ovmf.packages = [ pkgs.OVMFFull.fd ];
};
};
spiceUSBRedirection.enable = true;
# docker.enable = true;
podman = {
enable = true;
dockerCompat = true;
};
};
services.spice-vdagentd.enable = true;
programs.virt-manager.enable = true;
systemd.tmpfiles.rules = [ "f /dev/shm/looking-glass 0660 compromyse kvm -" ];
environment.extraOutputsToInstall = [ "dev" ];
environment.systemPackages = [
pkgs.looking-glass-client
pkgs.libvirt
#pkgs.vagrant
pkgs.virt-viewer
pkgs.guestfs-tools
pkgs.distrobox
(pkgs.writeShellScriptBin "db-create" ''
mkdir -p "$HOME/db"
distrobox create --name my-distrobox --home "$HOME/db" --init --image ubuntu:24.04
'')
(pkgs.writeShellScriptBin "pin-cpu" ''
if [[ $1 == "" ]]; then
cpus="8-15"
else
cpus=$1
fi
systemctl set-property --runtime -- user.slice AllowedCPUs="$cpus"
systemctl set-property --runtime -- system.slice AllowedCPUs="$cpus"
systemctl set-property --runtime -- init.scope AllowedCPUs="$cpus"
'')
(pkgs.writeShellScriptBin "unpin-cpu" ''
systemctl set-property --runtime -- user.slice AllowedCPUs=""
systemctl set-property --runtime -- system.slice AllowedCPUs=""
systemctl set-property --runtime -- init.scope AllowedCPUs=""
'')
(pkgs.writeShellScriptBin "vfio-bind" ''
sudo modprobe -r nvidia_drm nvidia_modeset nvidia_uvm i2c_nvidia_gpu nvidia
sudo modprobe vfio
sudo modprobe vfio_iommu_type1
sudo modprobe vfio_pci
systemctl --user -M compromyse@ stop pipewire.service pipewire.socket
sudo virsh nodedev-detach pci_0000_01_00_0
sudo virsh nodedev-detach pci_0000_01_00_1
systemctl --user -M compromyse@ restart pipewire.service pipewire.socket
'')
(pkgs.writeShellScriptBin "vfio-unbind" ''
systemctl --user -M compromyse@ stop pipewire.service pipewire.socket
sudo virsh nodedev-reattach pci_0000_01_00_0
sudo virsh nodedev-reattach pci_0000_01_00_1
systemctl --user -M compromyse@ restart pipewire.service pipewire.socket
sudo modprobe -r vfio_pci
sudo modprobe -r vfio_iommu_type1
sudo modprobe -r vfio
sudo modprobe nvidia_drm nvidia_modeset nvidia_uvm i2c_nvidia_gpu nvidia
'')
];
boot = {
/* initrd.kernelModules = [
"vfio_pci"
"vfio"
"vfio_iommu_type1"
"nvidia"
"nvidia_modeset"
"nvidia_uvm"
"nvidia_drm"
]; */
kernelParams = [
"skippatcheck"
"pci_acs_override=downstream,multifunction"
/* ("vfio-pci.ids=" + lib.concatStringsSep "," gpuIDs) */
];
};
# Use the custom kernel package set
boot.kernelPackages = pkgs.linuxPackages_xanmod_latest;
# boot.kernelPatches = [
# {
# # https://github.com/Kinsteen/win10-gpu-passthrough/blob/main/pat_patch.diff
# name = "disable-pat-check";
# patch = ../dist/disable-pat-check.patch;
# }
# {
# # https://aur.archlinux.org/cgit/aur.git/tree/1001-6.8.0-add-acs-overrides.patch?h=linux-vfio
# name = "acso";
# patch = ../dist/acso.patch;
# }
# ];
# boot.kernelParams = [ "skippatcheck" "pcie_acs_override=downstream,multifunction" ];
}
|