lib/minfeatures: init from minver.nix (#433057)

+6 -4
default.nix
···
let
-
requiredVersion = import ./lib/minver.nix;
in
-
if !builtins ? nixVersion || builtins.compareVersions requiredVersion builtins.nixVersion == 1 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:
- If you are running NixOS, `nixos-rebuild' can be used to upgrade your system.
···
let
+
missingFeatures = map ({ description, ... }: description) (import ./lib/minfeatures.nix).missing;
in
+
if missingFeatures != [ ] then
abort ''
+
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.
+1 -1
lib/README.md
···
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.
- [`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
···
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:
+
- [`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
+19
lib/minfeatures.nix
···
···
+
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;
+
}
-2
lib/minver.nix
···
-
# Expose the minimum required version for evaluating Nixpkgs
-
"2.18"
···