summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Hensing <roberth@users.noreply.github.com>2020-03-01 11:05:34 +0100
committerGitHub <noreply@github.com>2020-03-01 11:05:34 +0100
commite38a01db5d8afe312d684e8c2ddbdb4e11d9307f (patch)
tree8e57912a3d467cbaab77fd558fdc7f71230734ab
parent02ca096a85eced0d653004ae95f7cc6d8597b13e (diff)
parenta96f37db10fb2892d0420a7ef51c5b157d9e58dd (diff)
Merge pull request #68491 from roberth/fix-dontRecurseIntoAttrs
Fix dontRecurseIntoAttrs + add to lib + doc
-rw-r--r--doc/functions/library/attrsets.xml44
-rw-r--r--lib/attrsets.nix14
-rw-r--r--lib/default.nix3
-rw-r--r--pkgs/top-level/all-packages.nix6
4 files changed, 62 insertions, 5 deletions
diff --git a/doc/functions/library/attrsets.xml b/doc/functions/library/attrsets.xml
index b1ea05a2381d..3c5823c25891 100644
--- a/doc/functions/library/attrsets.xml
+++ b/doc/functions/library/attrsets.xml
@@ -1667,4 +1667,48 @@ recursiveUpdate
]]></programlisting>
</example>
</section>
+
+ <section xml:id="function-library-lib.attrsets.recurseIntoAttrs">
+ <title><function>lib.attrsets.recurseIntoAttrs</function></title>
+
+ <subtitle><literal>recurseIntoAttrs :: AttrSet -> AttrSet</literal>
+ </subtitle>
+
+ <xi:include href="./locations.xml" xpointer="lib.attrsets.recurseIntoAttrs" />
+
+ <para>
+ Make various Nix tools consider the contents of the resulting
+ attribute set when looking for what to build, find, etc.
+ </para>
+
+ <para>
+ This function only affects a single attribute set; it does not apply itself recursively for nested attribute sets.
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <varname>attrs</varname>
+ </term>
+ <listitem>
+ <para>
+ An attribute set to scan for derivations.
+ </para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <example xml:id="function-library-lib.attrsets.recurseIntoAttrs-example">
+ <title>Making Nix look inside an attribute set</title>
+<programlisting><![CDATA[
+{ pkgs ? import <nixpkgs> {} }:
+{
+ myTools = pkgs.lib.recurseIntoAttrs {
+ inherit (pkgs) hello figlet;
+ };
+}
+]]></programlisting>
+ </example>
+ </section>
+
</section>
diff --git a/lib/attrsets.nix b/lib/attrsets.nix
index 32994432d53d..72430522f7d8 100644
--- a/lib/attrsets.nix
+++ b/lib/attrsets.nix
@@ -473,6 +473,20 @@ rec {
/* Pick the outputs of packages to place in buildInputs */
chooseDevOutputs = drvs: builtins.map getDev drvs;
+ /* Make various Nix tools consider the contents of the resulting
+ attribute set when looking for what to build, find, etc.
+
+ This function only affects a single attribute set; it does not
+ apply itself recursively for nested attribute sets.
+ */
+ recurseIntoAttrs =
+ attrs: attrs // { recurseForDerivations = true; };
+
+ /* Undo the effect of recurseIntoAttrs.
+ */
+ dontRecurseIntoAttrs =
+ attrs: attrs // { recurseForDerivations = false; };
+
/*** deprecated stuff ***/
zipWithNames = zipAttrsWithNames;
diff --git a/lib/default.nix b/lib/default.nix
index d2fe018aa6af..f8cc5c4d8166 100644
--- a/lib/default.nix
+++ b/lib/default.nix
@@ -73,7 +73,8 @@ let
genAttrs isDerivation toDerivation optionalAttrs
zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil
recursiveUpdate matchAttrs overrideExisting getOutput getBin
- getLib getDev chooseDevOutputs zipWithNames zip;
+ getLib getDev chooseDevOutputs zipWithNames zip
+ recurseIntoAttrs dontRecurseIntoAttrs;
inherit (lists) singleton forEach foldr fold foldl foldl' imap0 imap1
concatMap flatten remove findSingle findFirst any all count
optional optionals toList range partition zipListsWith zipLists
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index c7bfb8a7acfa..839ca5a4d40c 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -62,9 +62,7 @@ in
inherit (lib) lowPrio hiPrio appendToName makeOverridable;
- # Applying this to an attribute set will cause nix-env to look
- # inside the set for derivations.
- recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
+ inherit (lib) recurseIntoAttrs;
# This is intended to be the reverse of recurseIntoAttrs, as it is
# defined now it exists mainly for documentation purposes, but you
@@ -72,7 +70,7 @@ in
# the Attrs which is useful for testing massive changes. Ideally,
# every package subset not marked with recurseIntoAttrs should be
# marked with this.
- dontRecurseIntoAttrs = x: x;
+ inherit (lib) dontRecurseIntoAttrs;
stringsWithDeps = lib.stringsWithDeps;