{ config, pkgs, ... }: { # boot settings boot = { kernelPackages = pkgs.linuxPackages_latest; kernelParams = [ # checking for cache splitting destroys performance on some # windows games running via wine/proton, disable it and # tank their performance impact, which is lower than checking # and handling the splits. "split_lock_detect=off" ]; # do not use default kernel module (r8169) for the realtek rtl8125 ethernet # controller, as it has issues with packet loss and can't keep up with the high # 2.5g link speed. # the out-of-tree module r8125 also has issues however, as apparently when sending # off packets the hardware offloading done on the network chip fails massively, # corrupting a huge amount of packets, breaking off connections and distorting video. # the fix to disable the hardware offloading is handled by systemd-networkd below. blacklistedKernelModules = [ "r8169" ]; extraModulePackages = [ config.boot.kernelPackages.r8125 ]; kernelModules = [ "r8125" ]; loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = true; }; initrd.systemd.enable = true; }; # hardware settings hardware = { enableRedistributableFirmware = true; enableAllFirmware = true; graphics = { enable = true; enable32Bit = true; extraPackages = with pkgs; [ vpl-gpu-rt intel-media-driver intel-vaapi-driver intel-compute-runtime intel-ocl ]; }; bluetooth = { enable = true; powerOnBoot = true; }; }; # swap alternative zramSwap = { enable = true; algorithm = "zstd"; swapDevices = 1; memoryPercent = 50; }; networking = { useDHCP = false; dhcpcd.enable = false; }; systemd.network = { enable = true; networks = { # ethernet through the rtl8125 ethernet controller (supports 2.5g) "10-ether" = { name = "enp7s0"; DHCP = "yes"; # higher priority if available dhcpV4Config.RouteMetric = 10; dhcpV6Config.RouteMetric = 10; }; }; # the rtl8125 notoriously has extreme issues with offloaded calculations # sent from linux machines, and corrupts packets badly, crippling connectivity. # we disable most forms of offloading to the chip here, instead handling them # in our own kernel. this fixes most of the issues. links."10-rtl8125-hardware-offloading" = { matchConfig.Driver = "r8125"; # match by driver to prevent udev renaming issues linkConfig = { # keep naming behavior consistent with defaults NamePolicy = "keep kernel database onboard slot path"; MACAddressPolicy = "persistent"; # kill hardware offloading for this chipset ReceiveChecksumOffload = false; # rx off TransmitChecksumOffload = false; # tx off TCPSegmentationOffload = false; # tso off TCP6SegmentationOffload = false; # tso off (ipv6) GenericSegmentationOffload = false; # gso off GenericReceiveOffload = false; # gro off }; }; }; # sound security.rtkit.enable = true; services.pipewire = { enable = true; alsa = { enable = true; support32Bit = true; }; pulse.enable = true; jack.enable = true; }; }