{ config, lib, pkgs, modulesPath, ... }: let # Set common boot paramaters commonKernelParams = [ # Nvidia settings "nvidia_drm.fbdev=1" "nouveau.config=NvGspRm=1" # VM/GPU passthrough "amd_iommu=on" "iommu=pt" "nested=1" # Virtualization nonsense "transparent_hugepage=never" # Isolate devices into IOMMU groups "pcie_acs_override=downstream,multifunction" "pci=routeirq" ]; in { imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; boot = { kernelPackages = pkgs.unstable.linuxPackages_latest; blacklistedKernelModules = [ "pcspkr" ]; kernel.sysctl."vm.max_map_count" = 2147483642; kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:1f82,10de:10fa" ]; initrd = { availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; kernelModules = [ "vfio" "vfio_pci" "vfio_iommu_type1" "kvm-amd" ]; # Encryption and TPM systemd.enable = true; luks.devices = { "crypt-ssd" = { device = "/dev/disk/by-uuid/52110c74-19b6-40ef-9710-e6c9b157005f"; preLVM = true; allowDiscards = true; }; }; }; }; # Additional entry to boot from the second GPU specialisation = { gputwo.configuration = { boot.kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:2504,10de:228e" ]; }; }; # Mount everything as necessary fileSystems = { "/" = { device = "/dev/disk/by-uuid/bbfed7d1-62f2-4d8e-b63f-7f6ec932105b"; fsType = "btrfs"; options = [ "subvol=@" "noatime" "nodiratime" "discard" ]; }; "/home" = { device = "/dev/disk/by-uuid/bbfed7d1-62f2-4d8e-b63f-7f6ec932105b"; fsType = "btrfs"; options = [ "subvol=@home" "noatime" "nodiratime" "discard" ]; }; "/nix" = { device = "/dev/disk/by-uuid/bbfed7d1-62f2-4d8e-b63f-7f6ec932105b"; fsType = "btrfs"; options = [ "subvol=@nix" "noatime" "nodiratime" "discard" ]; }; "/var" = { device = "/dev/disk/by-uuid/bbfed7d1-62f2-4d8e-b63f-7f6ec932105b"; fsType = "btrfs"; options = [ "subvol=@var" "noatime" "nodiratime" "discard" ]; }; "/boot" = { device = "/dev/disk/by-uuid/3B4A-76C9"; fsType = "vfat"; options = [ "fmask=0022" "dmask=0022" ]; }; # Games and such "/mnt/Linux1" = { device = "/dev/disk/by-uuid/b2901f8c-ffda-4b88-bb63-a9ea0c96ccb4"; options = [ "nosuid" "nodev" "nofail" "x-gvfs-show" ]; }; "/mnt/Linux2" = { device = "/dev/disk/by-uuid/f08e4f38-162c-402f-ba2a-5925151b78bf"; options = [ "nosuid" "nodev" "nofail" "x-gvfs-show" ]; }; "/mnt/Windows1" = { device = "/dev/disk/by-uuid/10BC97B2BC979138"; options = [ "nosuid" "nodev" "noauto" ]; }; "/mnt/Windows2" = { device = "/dev/disk/by-uuid/0A5A3420237C863A"; options = [ "nosuid" "nodev" "noauto" ]; }; # Miscellaneous mounts "/etc/libvirt" = { device = "/dev/disk/by-uuid/f18a0302-9914-471d-828c-85ab1a67a8be"; options = [ "nosuid" "nodev" "nofail" ]; }; "/etc/libvirt/VMs/Bulk" = { depends = [ "/etc/libvirt" ]; device = "/dev/disk/by-uuid/3eb36c3e-81ac-4281-89f0-c89242d88dd6"; options = [ "nosuid" "nodev" "nofail" ]; }; "/var/lib/libvirt" = { depends = [ "/etc/libvirt" ]; device = "/etc/libvirt/varlibvirt"; options = [ "bind" "rw" ]; }; # Network mounts "/home/jimbo/JimboNFS" = { device = "${config.ips.server}:/export/JimboNFS"; fsType = "nfs4"; options = [ "x-systemd.automount" "_netdev" "nofail" "noauto" ]; }; }; # Set the swap partition swapDevices = [ { device = "/dev/disk/by-uuid/1a6a68d0-8ae7-4836-a585-b708597937a1"; } ]; # Enables DHCP on each ethernet and wireless interface. networking.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; }