From 4de5aac8e9b8d8b839b0eaee61a893a41f0b968f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Sun, 22 Sep 2024 17:56:58 +0200 Subject: [PATCH] improve selecting latest zfs kernel --- nix/installer.nix | 17 ++++------------- nix/latest-zfs-kernel.nix | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 nix/latest-zfs-kernel.nix diff --git a/nix/installer.nix b/nix/installer.nix index 14b2b42..3423b3a 100644 --- a/nix/installer.nix +++ b/nix/installer.nix @@ -4,15 +4,11 @@ pkgs, ... }: -let - latestZfsCompatibleLinuxPackages = lib.pipe pkgs.linuxKernel.packages [ - builtins.attrValues - (builtins.filter (kPkgs: (builtins.tryEval kPkgs).success && kPkgs ? kernel && kPkgs.kernel.pname == "linux" && !kPkgs.zfs.meta.broken)) - (builtins.sort (a: b: (lib.versionOlder a.kernel.version b.kernel.version))) - lib.last - ]; -in { + imports = [ + ./latest-zfs-kernel.nix + ./nix-settings.nix + ]; # more descriptive hostname than just "nixos" networking.hostName = lib.mkDefault "nixos-installer"; @@ -24,7 +20,6 @@ in # use latest kernel we can support to get more hardware support boot.zfs.package = pkgs.zfsUnstable; - boot.kernelPackages = latestZfsCompatibleLinuxPackages; documentation.enable = false; documentation.man.man-db.enable = false; @@ -41,10 +36,6 @@ in # alternative to nixos-generate-config ] ++ lib.optional (pkgs.lib.versionAtLeast lib.version "24.11") pkgs.nixos-facter; - imports = [ - ./nix-settings.nix - ]; - # Don't add nixpkgs to the image to save space, for our intended use case we don't need it system.installer.channel.enable = false; } diff --git a/nix/latest-zfs-kernel.nix b/nix/latest-zfs-kernel.nix new file mode 100644 index 0000000..0bc8041 --- /dev/null +++ b/nix/latest-zfs-kernel.nix @@ -0,0 +1,26 @@ +{ + 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; +}