# SPDX-FileCopyrightText: 2022 Richard Brežák # # SPDX-License-Identifier: LGPL-3.0-or-later { pkgs, lib, inputs', options, config, ... }: let inherit (lib) singleton mkForce mapAttrs mkOverride filter ; kernelPackages = pkgs.linuxKernel.packages.linux_6_10; zfs_2_2_6 = args: (pkgs.callPackage ( { callPackage, kernel ? null, stdenv, linuxKernel, nixosTests, ... } @ args: let stdenv' = if kernel == null then stdenv else kernel.stdenv; in (callPackage "${inputs'.nixpkgs}/pkgs/os-specific/linux/zfs/generic.nix" args { # You have to ensure that in `pkgs/top-level/linux-kernels.nix` # this attribute is the correct one for this package. kernelModuleAttribute = "zfs_2_2"; # check the release notes for compatible kernels kernelCompatible = kernel: kernel.kernelOlder "6.11"; # this package should point to the latest release. version = "2.2.6"; tests = [ nixosTests.zfs.installer nixosTests.zfs.series_2_2 ]; hash = "sha256-wkgoYg6uQOHVq8a9sJXzO/QXJ6q28l7JXWkC+BFvOb0="; }) ) args) .overrideAttrs (old: { postInstall = lib.pipe old.postInstall [ (lib.splitString "\n") (lib.filter (line: line != "(cd $out/share/bash-completion/completions; ln -s zfs zpool)")) lib.concatLines ]; }); in { environment.systemPackages = [ kernelPackages.turbostat ]; environment.variables.NOUVEAU_USE_ZINK = "1"; hardware.cpu.intel.updateMicrocode = true; boot = { initrd.systemd.enable = true; initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sr_mod" "rtsx_pci_sdmmc" "nvme" "vmd" ]; initrd.kernelModules = [ "dm_crypt" "encrypted_keys" "trusted" "nhpoly1305_avx2" "nhpoly1305_sse2" "nhpoly1305" "crypto_null" "polyval_clmulni" "polyval_generic" "gf128mul" "dm_mod" "crypto_simd" "cryptd" "adiantum" "libpoly1305" "libchacha20poly1305" "chacha_x86_64" "libchacha" "poly1305_x86_64" ]; kernelModules = [ "kvm-intel" ]; kernelParams = [ "zfs.zfs_arc_max=8589934592" "zfs.zfs_arc_sys_free=3221225472" "nouveau.config=NvGspRm=1" "usbcore.autosuspend=-1" ]; kernelPackages = kernelPackages; zfs.package = zfs_2_2_6 { configFile = "user"; }; zfs.modulePackage = zfs_2_2_6 { configFile = "kernel"; kernel = config.boot.kernelPackages.kernel; }; }; hardware.enableRedistributableFirmware = true; # hardware.tuxedo-keyboard.enable = true; # chaotic.mesa-git = { # enable = true; # fallbackSpecialisation = false; # }; specialisation.nvidia.configuration = {config, ...}: { environment.variables.NIXOS_SPECIALISATION = "nvidia"; boot.loader.grub.enable = mkOverride 0 false; boot.kernelPackages = mkForce pkgs.linuxPackages_6_10; boot.kernelParams = [ "nvidia.NVreg_EnableS0ixPowerManagement=1" "nvidia.NVreg_S0ixPowerManagementVideoMemoryThreshold=2048" ]; chaotic.mesa-git.enable = mkForce false; hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.mkDriver { version = "560.35.03"; sha256_64bit = "sha256-8pMskvrdQ8WyNBvkU/xPc/CtcYXCa7ekP73oGuKfH+M="; sha256_aarch64 = ""; openSha256 = "sha256-/32Zf0dKrofTmPZ3Ratw4vDM7B+OgpC4p7s+RHUjCrg="; settingsSha256 = "sha256-kQsvDgnxis9ANFmwIwB7HX5MkIAcpEEAHc8IBOLdXvk="; persistencedSha256 = "sha256-E2J2wYYyRu7Kc3MMZz/8ZIemcZg68rkzvqEwFAL3fFs="; }; hardware.nvidia = { open = true; nvidiaPersistenced = true; powerManagement.enable = true; powerManagement.finegrained = true; prime.reverseSync.enable = false; prime.offload.enable = true; modesetting.enable = true; }; services.xserver.videoDrivers = mkForce ["nvidia"]; }; }