diff --git a/default.nix b/default.nix index afba797b01fc..5f759c13014d 100644 --- a/default.nix +++ b/default.nix @@ -1,13 +1,15 @@ let - requiredVersion = import ./lib/minver.nix; + missingFeatures = map ({ description, ... }: description) (import ./lib/minfeatures.nix).missing; in -if !builtins ? nixVersion || builtins.compareVersions requiredVersion builtins.nixVersion == 1 then +if missingFeatures != [ ] then abort '' - This version of Nixpkgs requires Nix >= ${requiredVersion} but it is being - evaluated with Nix ${builtins.nixVersion or "(too old to know)"}, please upgrade: + This version of Nixpkgs requires an implementation of Nix with the following features: + - ${builtins.concatStringsSep "\n- " missingFeatures} + + Your are evaluating with Nix ${builtins.nixVersion or "(too old to know)"}, please upgrade: - If you are running NixOS, `nixos-rebuild' can be used to upgrade your system. diff --git a/lib/README.md b/lib/README.md index 1cf10670ecb2..d7c757a15c8c 100644 --- a/lib/README.md +++ b/lib/README.md @@ -19,7 +19,7 @@ This file evaluates to an attribute set containing two separate kinds of attribu Example: `lib.take` is an alias for `lib.lists.take`. Most files in this directory are definitions of sub-libraries, but there are a few others: -- [`minver.nix`](minver.nix): A string of the minimum version of Nix that is required to evaluate Nixpkgs. +- [`minfeatures.nix`](minfeatures.nix): A list of conditions for the used Nix version to match that are required to evaluate Nixpkgs. - [`tests`](tests): Tests, see [Running tests](#running-tests) - [`release.nix`](tests/release.nix): A derivation aggregating all tests - [`misc.nix`](tests/misc.nix): Evaluation unit tests for most sub-libraries diff --git a/lib/minfeatures.nix b/lib/minfeatures.nix new file mode 100644 index 000000000000..da804a854942 --- /dev/null +++ b/lib/minfeatures.nix @@ -0,0 +1,19 @@ +let + features = [ + { + description = "the `nixVersion` builtin"; + condition = builtins ? nixVersion; + } + { + description = "`builtins.nixVersion` reports at least 2.18"; + condition = builtins ? nixVersion && builtins.compareVersions "2.18" builtins.nixVersion != 1; + } + ]; + + evaluated = builtins.partition ({ condition, ... }: condition) features; +in +{ + all = features; + supported = evaluated.right; + missing = evaluated.wrong; +} diff --git a/lib/minver.nix b/lib/minver.nix deleted file mode 100644 index c9fc45354d2e..000000000000 --- a/lib/minver.nix +++ /dev/null @@ -1,2 +0,0 @@ -# Expose the minimum required version for evaluating Nixpkgs -"2.18"