summaryrefslogtreecommitdiff
path: root/modules/virtualization.nix
blob: a92ffb94969ca4974bd274446f076c982dd3f62e (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
{ 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;
    };
  };
  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.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=""
    '')
  ];

  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" ];
}