diff --git a/flake.lock b/flake.lock index 05c8579..9aa2c24 100644 --- a/flake.lock +++ b/flake.lock @@ -18,11 +18,11 @@ }, "nixos-unstable": { "locked": { - "lastModified": 1726658796, - "narHash": "sha256-SiiWCVg/W8i6jvpgQj3NNd3YtV+jfnn/t3Za7hfn1iE=", + "lastModified": 1726798147, + "narHash": "sha256-k/Ojv+MUDKUbj8JPd1MulJrf5BVz3jIUfrreMHbeTBE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "75ac2a58e988a346960938ab16cea903a3cb053a", + "rev": "e88358265511d3a73b30dc6e4c15579844b35280", "type": "github" }, "original": { diff --git a/nix/installer.nix b/nix/installer.nix index 740567a..3423b3a 100644 --- a/nix/installer.nix +++ b/nix/installer.nix @@ -5,6 +5,10 @@ ... }: { + imports = [ + ./latest-zfs-kernel.nix + ./nix-settings.nix + ]; # more descriptive hostname than just "nixos" networking.hostName = lib.mkDefault "nixos-installer"; @@ -16,7 +20,6 @@ # use latest kernel we can support to get more hardware support boot.zfs.package = pkgs.zfsUnstable; - boot.kernelPackages = pkgs.zfsUnstable.latestCompatibleLinuxPackages; documentation.enable = false; documentation.man.man-db.enable = false; @@ -33,10 +36,6 @@ # 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; +}