diff --git a/configuration.nix b/configuration.nix index 301014b..c84dbfe 100644 --- a/configuration.nix +++ b/configuration.nix @@ -11,7 +11,6 @@ with pkgs; { # Kernel configuration boot = { - kernelPackages = linuxPackages_zen; blacklistedKernelModules = [ "btusb" "bluetooth" @@ -183,6 +182,7 @@ with pkgs; ./modules/periodic.nix ./modules/power.nix ./modules/monitoring.nix + ./modules/latest-zfs-kernel.nix ]; } diff --git a/modules/latest-zfs-kernel.nix b/modules/latest-zfs-kernel.nix new file mode 100644 index 0000000..d33bd9d --- /dev/null +++ b/modules/latest-zfs-kernel.nix @@ -0,0 +1,28 @@ +{ + lib, + pkgs, + config, + ... +}: + +let + isUnstable = config.boot.zfs.package == pkgs.zfsUnstable; + zfsCompatibleKernelPackages = lib.filterAttrs ( + name: kernelPackages: + (builtins.match "linux_[0-9]+_[0-9]+" name) != null + && (builtins.tryEval kernelPackages).success + && ( + (!isUnstable && !kernelPackages.zfs.meta.broken) + || (isUnstable && !kernelPackages.zfs_unstable.meta.broken) + ) + ) pkgs.linuxKernel.packages; + latestKernelPackage = lib.last ( + lib.sort (a: b: (lib.versionOlder a.kernel.version b.kernel.version)) ( + builtins.attrValues zfsCompatibleKernelPackages + ) + ); +in +{ + # Note this might jump back and worth as kernel get added or removed. + boot.kernelPackages = latestKernelPackage; +}