From 44e17e9ee6de8b5e583dd5417e2061a34d78c261 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Tue, 24 Sep 2024 11:37:48 +0200 Subject: [PATCH] fix zfs latest again --- nixosModules/bcachefs.nix | 4 ---- nixosModules/installer/default.nix | 1 + nixosModules/installer/zfs-latest.nix | 28 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 nixosModules/installer/zfs-latest.nix 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; +}