diff --git a/nixosModules/bcachefs.nix b/nixosModules/bcachefs.nix index 43dc7b43c..c17cd9306 100644 --- a/nixosModules/bcachefs.nix +++ b/nixosModules/bcachefs.nix @@ -1,15 +1,11 @@ { lib, pkgs, - config, ... }: { # If we also need zfs, we can use the unstable version as we otherwise don't have a new enough kernel version boot.zfs.package = pkgs.zfsUnstable; - boot.kernelPackages = lib.mkIf config.boot.zfs.enabled ( - lib.mkForce config.boot.zfs.package.latestCompatibleLinuxPackages - ); # Enable bcachefs support boot.supportedFilesystems.bcachefs = lib.mkDefault true; diff --git a/nixosModules/installer/default.nix b/nixosModules/installer/default.nix index 56086efb5..49620e460 100644 --- a/nixosModules/installer/default.nix +++ b/nixosModules/installer/default.nix @@ -47,6 +47,7 @@ in (modulesPath + "/profiles/installation-device.nix") (modulesPath + "/profiles/all-hardware.nix") (modulesPath + "/profiles/base.nix") + ./zfs-latest.nix ]; environment.systemPackages = [ pkgs.nixos-facter ]; diff --git a/nixosModules/installer/zfs-latest.nix b/nixosModules/installer/zfs-latest.nix new file mode 100644 index 000000000..d33bd9d4c --- /dev/null +++ b/nixosModules/installer/zfs-latest.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; +}