ZFS: Difference between revisions
improve module that selects the oldest kernel. |
|||
Line 17: | Line 17: | ||
boot.kernelPackages = pkgs.linuxPackages_6_6 | boot.kernelPackages = pkgs.linuxPackages_6_6 | ||
} | } | ||
</syntaxhighlight>This snippet will configure the latest compatible kernel | </syntaxhighlight> | ||
This snippet will configure the latest compatible kernel. | |||
Note that this can over time jump back to old kernel versions because non-lts kernel version | |||
get removed over time and their newer replacements might be not supported by zfs yet. | |||
<syntaxhighlight lang="nix"> | <syntaxhighlight lang="nix"> | ||
{ lib, pkgs, ... }: | { | ||
lib, | |||
pkgs, | |||
config, | |||
... | |||
}: | |||
let | let | ||
isUnstable = config.boot.zfs.package == pkgs.zfsUnstable; | |||
zfsCompatibleKernelPackages = lib.filterAttrs ( | |||
(builtins. | 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 | in | ||
{ | { | ||
# Note this might jump back and | # Note this might jump back and worth as kernel get added or removed. | ||
boot.kernelPackages = | boot.kernelPackages = latestKernelPackage; | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |