lib.attrsets: attribute set functions
Operations on attribute sets.
lib.attrsets.attrByPath
Return an attribute from nested attribute sets.
Nix has an attribute selection operator . or
which is sufficient for such queries, as long as the number of attributes is static. For example:
(x.a.b or 6) == attrByPath ["a" "b"] 6 x
# and
(x.${f p}."example.com" or 6) == attrByPath [ (f p) "example.com" ] 6 x
Inputs
attrPath
: A list of strings representing the attribute path to return from set
default
: Default value if attrPath
does not resolve to an existing value
set
: The nested attribute set to select values from
Type
attrByPath :: [String] -> Any -> AttrSet -> Any
Examples
lib.attrsets.attrByPath
usage example
x = { a = { b = 3; }; }
# ["a" "b"] is equivalent to x.a.b
# 6 is a default value to return if the path does not exist in attrset
attrByPath ["a" "b"] 6 x
=> 3
attrByPath ["z" "z"] 6 x
=> 6
Located at lib/attrsets.nix:65 in <nixpkgs>
.
lib.attrsets.hasAttrByPath
Return if an attribute from nested attribute set exists.
Nix has a has attribute operator ?
, which is sufficient for such queries, as long as the number of attributes is static. For example:
(x?a.b) == hasAttrByPath ["a" "b"] x
# and
(x?${f p}."example.com") == hasAttrByPath [ (f p) "example.com" ] x
Laws:
1. nix
hasAttrByPath [] x == true
Inputs
attrPath
: A list of strings representing the attribute path to check from set
e
: The nested attribute set to check
Type
hasAttrByPath :: [String] -> AttrSet -> Bool
Examples
lib.attrsets.hasAttrByPath
usage example
x = { a = { b = 3; }; }
hasAttrByPath ["a" "b"] x
=> true
hasAttrByPath ["z" "z"] x
=> false
hasAttrByPath [] (throw "no need")
=> true
Located at lib/attrsets.nix:133 in <nixpkgs>
.
lib.attrsets.longestValidPathPrefix
Return the longest prefix of an attribute path that refers to an existing attribute in a nesting of attribute sets.
Can be used after mapAttrsRecursiveCond
to apply a condition,
although this will evaluate the predicate function on sibling attributes as well.
Note that the empty attribute path is valid for all values, so this function only throws an exception if any of its inputs does.
Laws:
1. nix
attrsets.longestValidPathPrefix [] x == []
nix hasAttrByPath (attrsets.longestValidPathPrefix p x) x == true
Inputs
attrPath
: A list of strings representing the longest possible path that may be returned.
v
: The nested attribute set to check.
Type
attrsets.longestValidPathPrefix :: [String] -> Value -> [String]
Examples
lib.attrsets.longestValidPathPrefix
usage example
x = { a = { b = 3; }; }
attrsets.longestValidPathPrefix ["a" "b" "c"] x
=> ["a" "b"]
attrsets.longestValidPathPrefix ["a"] x
=> ["a"]
attrsets.longestValidPathPrefix ["z" "z"] x
=> []
attrsets.longestValidPathPrefix ["z" "z"] (throw "no need")
=> []
Located at lib/attrsets.nix:202 in <nixpkgs>
.
lib.attrsets.setAttrByPath
Create a new attribute set with value
set at the nested attribute location specified in attrPath
.
Inputs
attrPath
: A list of strings representing the attribute path to set
value
: The value to set at the location described by attrPath
Type
setAttrByPath :: [String] -> Any -> AttrSet
Examples
lib.attrsets.setAttrByPath
usage example
setAttrByPath ["a" "b"] 3
=> { a = { b = 3; }; }
Located at lib/attrsets.nix:265 in <nixpkgs>
.
lib.attrsets.getAttrFromPath
Like attrByPath
, but without a default value. If it doesn't find the
path it will throw an error.
Nix has an attribute selection operator which is sufficient for such queries, as long as the number of attributes is static. For example:
x.a.b == getAttrByPath ["a" "b"] x
# and
x.${f p}."example.com" == getAttrByPath [ (f p) "example.com" ] x
Inputs
attrPath
: A list of strings representing the attribute path to get from set
set
: The nested attribute set to find the value in.
Type
getAttrFromPath :: [String] -> AttrSet -> Any
Examples
lib.attrsets.getAttrFromPath
usage example
x = { a = { b = 3; }; }
getAttrFromPath ["a" "b"] x
=> 3
getAttrFromPath ["z" "z"] x
=> error: cannot find attribute `z.z'
Located at lib/attrsets.nix:319 in <nixpkgs>
.
lib.attrsets.concatMapAttrs
Map each attribute in the given set and merge them into a new attribute set.
Inputs
f
: 1. Function argument
v
: 2. Function argument
Type
concatMapAttrs :: (String -> a -> AttrSet) -> AttrSet -> AttrSet
Examples
lib.attrsets.concatMapAttrs
usage example
concatMapAttrs
(name: value: {
${name} = value;
${name + value} = value;
})
{ x = "a"; y = "b"; }
=> { x = "a"; xa = "a"; y = "b"; yb = "b"; }
Located at lib/attrsets.nix:360 in <nixpkgs>
.
lib.attrsets.updateManyAttrsByPath
Update or set specific paths of an attribute set.
Takes a list of updates to apply and an attribute set to apply them to,
and returns the attribute set with the updates applied. Updates are
represented as { path = ...; update = ...; }
values, where path
is a
list of strings representing the attribute path that should be updated,
and update
is a function that takes the old value at that attribute path
as an argument and returns the new
value it should be.
Properties:
-
Updates to deeper attribute paths are applied before updates to more shallow attribute paths
-
Multiple updates to the same attribute path are applied in the order they appear in the update list
-
If any but the last
path
element leads into a value that is not an attribute set, an error is thrown -
If there is an update for an attribute path that doesn't exist, accessing the argument in the update function causes an error, but intermediate attribute sets are implicitly created as needed
Type
updateManyAttrsByPath :: [{ path :: [String]; update :: (Any -> Any); }] -> AttrSet -> AttrSet
Examples
lib.attrsets.updateManyAttrsByPath
usage example
updateManyAttrsByPath [
{
path = [ "a" "b" ];
update = old: { d = old.c; };
}
{
path = [ "a" "b" "c" ];
update = old: old + 1;
}
{
path = [ "x" "y" ];
update = old: "xy";
}
] { a.b.c = 0; }
=> { a = { b = { d = 1; }; }; x = { y = "xy"; }; }
Located at lib/attrsets.nix:423 in <nixpkgs>
.
lib.attrsets.attrVals
Return the specified attributes from a set.
Inputs
nameList
: The list of attributes to fetch from set
. Each attribute name must exist on the attrbitue set
set
: The set to get attribute values from
Type
attrVals :: [String] -> AttrSet -> [Any]
Examples
lib.attrsets.attrVals
usage example
attrVals ["a" "b" "c"] as
=> [as.a as.b as.c]
Located at lib/attrsets.nix:513 in <nixpkgs>
.
lib.attrsets.attrValues
Return the values of all attributes in the given set, sorted by attribute name.
Type
attrValues :: AttrSet -> [Any]
Examples
lib.attrsets.attrValues
usage example
attrValues {c = 3; a = 1; b = 2;}
=> [1 2 3]
Located at lib/attrsets.nix:539 in <nixpkgs>
.
lib.attrsets.getAttrs
Given a set of attribute names, return the set of the corresponding attributes from the given set.
Inputs
names
: A list of attribute names to get out of set
attrs
: The set to get the named attributes from
Type
getAttrs :: [String] -> AttrSet -> AttrSet
Examples
lib.attrsets.getAttrs
usage example
getAttrs [ "a" "b" ] { a = 1; b = 2; c = 3; }
=> { a = 1; b = 2; }
Located at lib/attrsets.nix:574 in <nixpkgs>
.
lib.attrsets.catAttrs
Collect each attribute named attr
from a list of attribute
sets. Sets that don't contain the named attribute are ignored.
Inputs
attr
: The attribute name to get out of the sets.
list
: The list of attribute sets to go through
Type
catAttrs :: String -> [AttrSet] -> [Any]
Examples
lib.attrsets.catAttrs
usage example
catAttrs "a" [{a = 1;} {b = 0;} {a = 2;}]
=> [1 2]
Located at lib/attrsets.nix:609 in <nixpkgs>
.
lib.attrsets.filterAttrs
Filter an attribute set by removing all attributes for which the given predicate return false.
Inputs
pred
: Predicate taking an attribute name and an attribute value, which returns true
to include the attribute, or false
to exclude the attribute.
set
: The attribute set to filter
Type
filterAttrs :: (String -> Any -> Bool) -> AttrSet -> AttrSet
Examples
lib.attrsets.filterAttrs
usage example
filterAttrs (n: v: n == "foo") { foo = 1; bar = 2; }
=> { foo = 1; }
Located at lib/attrsets.nix:644 in <nixpkgs>
.
lib.attrsets.filterAttrsRecursive
Filter an attribute set recursively by removing all attributes for which the given predicate return false.
Inputs
pred
: Predicate taking an attribute name and an attribute value, which returns true
to include the attribute, or false
to exclude the attribute.
set
: The attribute set to filter
Type
filterAttrsRecursive :: (String -> Any -> Bool) -> AttrSet -> AttrSet
Examples
lib.attrsets.filterAttrsRecursive
usage example
filterAttrsRecursive (n: v: v != null) { foo = { bar = null; }; }
=> { foo = {}; }
Located at lib/attrsets.nix:682 in <nixpkgs>
.
lib.attrsets.foldlAttrs
Like lib.lists.foldl'
but for attribute sets.
Iterates over every name-value pair in the given attribute set.
The result of the callback function is often called acc
for accumulator. It is passed between callbacks from left to right and the final acc
is the return value of foldlAttrs
.
Attention:
There is a completely different function lib.foldAttrs
which has nothing to do with this function, despite the similar name.
Inputs
f
: 1. Function argument
init
: 2. Function argument
set
: 3. Function argument
Type
foldlAttrs :: ( a -> String -> b -> a ) -> a -> { ... :: b } -> a
Examples
lib.attrsets.foldlAttrs
usage example
foldlAttrs
(acc: name: value: {
sum = acc.sum + value;
names = acc.names ++ [name];
})
{ sum = 0; names = []; }
{
foo = 1;
bar = 10;
}
->
{
sum = 11;
names = ["bar" "foo"];
}
foldlAttrs
(throw "function not needed")
123
{};
->
123
foldlAttrs
(acc: _: _: acc)
3
{ z = throw "value not needed"; a = throw "value not needed"; };
->
3
The accumulator doesn't have to be an attrset.
It can be as simple as a number or string.
foldlAttrs
(acc: _: v: acc * 10 + v)
1
{ z = 1; a = 2; };
->
121
Located at lib/attrsets.nix:776 in <nixpkgs>
.
lib.attrsets.foldAttrs
Apply fold functions to values grouped by key.
Inputs
op
: A function, given a value and a collector combines the two.
nul
: The starting value.
list_of_attrs
: A list of attribute sets to fold together by key.
Type
foldAttrs :: (Any -> Any -> Any) -> Any -> [AttrSets] -> Any
Examples
lib.attrsets.foldAttrs
usage example
foldAttrs (item: acc: [item] ++ acc) [] [{ a = 2; } { a = 3; }]
=> { a = [ 2 3 ]; }
Located at lib/attrsets.nix:817 in <nixpkgs>
.
lib.attrsets.collect
Recursively collect sets that verify a given predicate named pred
from the set attrs
. The recursion is stopped when the predicate is
verified.
Inputs
pred
: Given an attribute's value, determine if recursion should stop.
attrs
: The attribute set to recursively collect.
Type
collect :: (AttrSet -> Bool) -> AttrSet -> [x]
Examples
lib.attrsets.collect
usage example
collect isList { a = { b = ["b"]; }; c = [1]; }
=> [["b"] [1]]
collect (x: x ? outPath)
{ a = { outPath = "a/"; }; b = { outPath = "b/"; }; }
=> [{ outPath = "a/"; } { outPath = "b/"; }]
Located at lib/attrsets.nix:865 in <nixpkgs>
.
lib.attrsets.cartesianProduct
Return the cartesian product of attribute set value combinations.
Inputs
attrsOfLists
: Attribute set with attributes that are lists of values
Type
cartesianProduct :: AttrSet -> [AttrSet]
Examples
lib.attrsets.cartesianProduct
usage example
cartesianProduct { a = [ 1 2 ]; b = [ 10 20 ]; }
=> [
{ a = 1; b = 10; }
{ a = 1; b = 20; }
{ a = 2; b = 10; }
{ a = 2; b = 20; }
]
Located at lib/attrsets.nix:907 in <nixpkgs>
.
lib.attrsets.mapCartesianProduct
Return the result of function f applied to the cartesian product of attribute set value combinations. Equivalent to using cartesianProduct followed by map.
Inputs
f
: A function, given an attribute set, it returns a new value.
attrsOfLists
: Attribute set with attributes that are lists of values
Type
mapCartesianProduct :: (AttrSet -> a) -> AttrSet -> [a]
Examples
lib.attrsets.mapCartesianProduct
usage example
mapCartesianProduct ({a, b}: "${a}-${b}") { a = [ "1" "2" ]; b = [ "3" "4" ]; }
=> [ "1-3" "1-4" "2-3" "2-4" ]
Located at lib/attrsets.nix:948 in <nixpkgs>
.
lib.attrsets.nameValuePair
Utility function that creates a {name, value}
pair as expected by builtins.listToAttrs
.
Inputs
name
: Attribute name
value
: Attribute value
Type
nameValuePair :: String -> Any -> { name :: String; value :: Any; }
Examples
lib.attrsets.nameValuePair
usage example
nameValuePair "some" 6
=> { name = "some"; value = 6; }
Located at lib/attrsets.nix:981 in <nixpkgs>
.
lib.attrsets.mapAttrs
Apply a function to each element in an attribute set, creating a new attribute set.
Inputs
f
: A function that takes an attribute name and its value, and returns the new value for the attribute.
attrset
: The attribute set to iterate through.
Type
mapAttrs :: (String -> Any -> Any) -> AttrSet -> AttrSet
Examples
lib.attrsets.mapAttrs
usage example
mapAttrs (name: value: name + "-" + value)
{ x = "foo"; y = "bar"; }
=> { x = "x-foo"; y = "y-bar"; }
Located at lib/attrsets.nix:1018 in <nixpkgs>
.
lib.attrsets.mapAttrs'
Like mapAttrs
, but allows the name of each attribute to be
changed in addition to the value. The applied function should
return both the new name and value as a nameValuePair
.
Inputs
f
: A function, given an attribute's name and value, returns a new nameValuePair
.
set
: Attribute set to map over.
Type
mapAttrs' :: (String -> Any -> { name :: String; value :: Any; }) -> AttrSet -> AttrSet
Examples
lib.attrsets.mapAttrs'
usage example
mapAttrs' (name: value: nameValuePair ("foo_" + name) ("bar-" + value))
{ x = "a"; y = "b"; }
=> { foo_x = "bar-a"; foo_y = "bar-b"; }
Located at lib/attrsets.nix:1055 in <nixpkgs>
.
lib.attrsets.mapAttrsToList
Call a function for each attribute in the given set and return the result in a list.
Inputs
f
: A function, given an attribute's name and value, returns a new value.
attrs
: Attribute set to map over.
Type
mapAttrsToList :: (String -> a -> b) -> AttrSet -> [b]
Examples
lib.attrsets.mapAttrsToList
usage example
mapAttrsToList (name: value: name + value)
{ x = "a"; y = "b"; }
=> [ "xa" "yb" ]
Located at lib/attrsets.nix:1093 in <nixpkgs>
.
lib.attrsets.attrsToList
Deconstruct an attrset to a list of name-value pairs as expected by builtins.listToAttrs
.
Each element of the resulting list is an attribute set with these attributes:
- name
(string): The name of the attribute
- value
(any): The value of the attribute
The following is always true:
builtins.listToAttrs (attrsToList attrs) == attrs
Warning
The opposite is not always true. In general expect that
attrsToList (builtins.listToAttrs list) != list
This is because the listToAttrs
removes duplicate names and doesn't preserve the order of the list.
Inputs
set
: The attribute set to deconstruct.
Type
attrsToList :: AttrSet -> [ { name :: String; value :: Any; } ]
Examples
lib.attrsets.attrsToList
usage example
attrsToList { foo = 1; bar = "asdf"; }
=> [ { name = "bar"; value = "asdf"; } { name = "foo"; value = 1; } ]
Located at lib/attrsets.nix:1141 in <nixpkgs>
.
lib.attrsets.mapAttrsRecursive
Like mapAttrs
, except that it recursively applies itself to the leaf attributes of a potentially-nested attribute set:
the second argument of the function will never be an attrset.
Also, the first argument of the mapping function is a list of the attribute names that form the path to the leaf attribute.
For a function that gives you control over what counts as a leaf, see mapAttrsRecursiveCond
.
{#map-attrs-recursive-example .example}
Map over leaf attributes
mapAttrsRecursive (path: value: concatStringsSep "-" (path ++ [value]))
{ n = { a = "A"; m = { b = "B"; c = "C"; }; }; d = "D"; }
{ n = { a = "n-a-A"; m = { b = "n-m-b-B"; c = "n-m-c-C"; }; }; d = "d-D"; }
Type
mapAttrsRecursive :: ([String] -> a -> b) -> AttrSet -> AttrSet
Located at lib/attrsets.nix:1169 in <nixpkgs>
.
lib.attrsets.mapAttrsRecursiveCond
Like mapAttrsRecursive
, but it takes an additional predicate that tells it whether to recurse into an attribute set.
If the predicate returns false, mapAttrsRecursiveCond
does not recurse, but instead applies the mapping function.
If the predicate returns true, it does recurse, and does not apply the mapping function.
{#map-attrs-recursive-cond-example .example}
Map over an leaf attributes defined by a condition
Map derivations to their name
attribute.
Derivatons are identified as attribute sets that contain { type = "derivation"; }
.
mapAttrsRecursiveCond
(as: !(as ? "type" && as.type == "derivation"))
(x: x.name)
attrs
Type
mapAttrsRecursiveCond :: (AttrSet -> Bool) -> ([String] -> a -> b) -> AttrSet -> AttrSet
Located at lib/attrsets.nix:1198 in <nixpkgs>
.
lib.attrsets.genAttrs
Generate an attribute set by mapping a function over a list of attribute names.
Inputs
names
: Names of values in the resulting attribute set.
f
: A function, given the name of the attribute, returns the attribute's value.
Type
genAttrs :: [ String ] -> (String -> Any) -> AttrSet
Examples
lib.attrsets.genAttrs
usage example
genAttrs [ "foo" "bar" ] (name: "x_" + name)
=> { foo = "x_foo"; bar = "x_bar"; }
Located at lib/attrsets.nix:1245 in <nixpkgs>
.
lib.attrsets.isDerivation
Check whether the argument is a derivation. Any set with
{ type = "derivation"; }
counts as a derivation.
Inputs
value
: Value to check.
Type
isDerivation :: Any -> Bool
Examples
lib.attrsets.isDerivation
usage example
nixpkgs = import <nixpkgs> {}
isDerivation nixpkgs.ruby
=> true
isDerivation "foobar"
=> false
Located at lib/attrsets.nix:1282 in <nixpkgs>
.
lib.attrsets.toDerivation
Converts a store path to a fake derivation.
Inputs
path
: A store path to convert to a derivation.
Type
toDerivation :: Path -> Derivation
Located at lib/attrsets.nix:1301 in <nixpkgs>
.
lib.attrsets.optionalAttrs
If cond
is true, return the attribute set as
,
otherwise an empty attribute set.
Inputs
cond
: Condition under which the as
attribute set is returned.
as
: The attribute set to return if cond
is true
.
Type
optionalAttrs :: Bool -> AttrSet -> AttrSet
Examples
lib.attrsets.optionalAttrs
usage example
optionalAttrs (true) { my = "set"; }
=> { my = "set"; }
optionalAttrs (false) { my = "set"; }
=> { }
Located at lib/attrsets.nix:1350 in <nixpkgs>
.
lib.attrsets.zipAttrsWithNames
Merge sets of attributes and use the function f
to merge attributes
values.
Inputs
names
: List of attribute names to zip.
f
: A function, accepts an attribute name, all the values, and returns a combined value.
sets
: List of values from the list of attribute sets.
Type
zipAttrsWithNames :: [ String ] -> (String -> [ Any ] -> Any) -> [ AttrSet ] -> AttrSet
Examples
lib.attrsets.zipAttrsWithNames
usage example
zipAttrsWithNames ["a"] (name: vs: vs) [{a = "x";} {a = "y"; b = "z";}]
=> { a = ["x" "y"]; }
Located at lib/attrsets.nix:1392 in <nixpkgs>
.
lib.attrsets.zipAttrsWith
Merge sets of attributes and use the function f to merge attribute values.
Like lib.attrsets.zipAttrsWithNames
with all key names are passed for names
.
Implementation note: Common names appear multiple times in the list of
names, hopefully this does not affect the system because the maximal
laziness avoid computing twice the same expression and listToAttrs
does
not care about duplicated attribute names.
Type
zipAttrsWith :: (String -> [ Any ] -> Any) -> [ AttrSet ] -> AttrSet
Examples
lib.attrsets.zipAttrsWith
usage example
zipAttrsWith (name: values: values) [{a = "x";} {a = "y"; b = "z";}]
=> { a = ["x" "y"]; b = ["z"]; }
Located at lib/attrsets.nix:1428 in <nixpkgs>
.
lib.attrsets.zipAttrs
Merge sets of attributes and combine each attribute value in to a list.
Like lib.attrsets.zipAttrsWith
with (name: values: values)
as the function.
Type
zipAttrs :: [ AttrSet ] -> AttrSet
Examples
lib.attrsets.zipAttrs
usage example
zipAttrs [{a = "x";} {a = "y"; b = "z";}]
=> { a = ["x" "y"]; b = ["z"]; }
Located at lib/attrsets.nix:1454 in <nixpkgs>
.
lib.attrsets.mergeAttrsList
Merge a list of attribute sets together using the //
operator.
In case of duplicate attributes, values from later list elements take precedence over earlier ones.
The result is the same as foldl mergeAttrs { }
, but the performance is better for large inputs.
For n list elements, each with an attribute set containing m unique attributes, the complexity of this operation is O(nm log n).
Inputs
list
: 1. Function argument
Type
mergeAttrsList :: [ Attrs ] -> Attrs
Examples
lib.attrsets.mergeAttrsList
usage example
mergeAttrsList [ { a = 0; b = 1; } { c = 2; d = 3; } ]
=> { a = 0; b = 1; c = 2; d = 3; }
mergeAttrsList [ { a = 0; } { a = 1; } ]
=> { a = 1; }
Located at lib/attrsets.nix:1488 in <nixpkgs>
.
lib.attrsets.recursiveUpdateUntil
Does the same as the update operator '//' except that attributes are merged until the given predicate is verified. The predicate should accept 3 arguments which are the path to reach the attribute, a part of the first attribute set and a part of the second attribute set. When the predicate is satisfied, the value of the first attribute set is replaced by the value of the second attribute set.
Inputs
pred
: Predicate, taking the path to the current attribute as a list of strings for attribute names, and the two values at that path from the original arguments.
lhs
: Left attribute set of the merge.
rhs
: Right attribute set of the merge.
Type
recursiveUpdateUntil :: ( [ String ] -> AttrSet -> AttrSet -> Bool ) -> AttrSet -> AttrSet -> AttrSet
Examples
lib.attrsets.recursiveUpdateUntil
usage example
recursiveUpdateUntil (path: l: r: path == ["foo"]) {
# first attribute set
foo.bar = 1;
foo.baz = 2;
bar = 3;
} {
#second attribute set
foo.bar = 1;
foo.quz = 2;
baz = 4;
}
=> {
foo.bar = 1; # 'foo.*' from the second set
foo.quz = 2; #
bar = 3; # 'bar' from the first set
baz = 4; # 'baz' from the second set
}
Located at lib/attrsets.nix:1566 in <nixpkgs>
.
lib.attrsets.recursiveUpdate
A recursive variant of the update operator ‘//’. The recursion stops when one of the attribute values is not an attribute set, in which case the right hand side value takes precedence over the left hand side value.
Inputs
lhs
: Left attribute set of the merge.
rhs
: Right attribute set of the merge.
Type
recursiveUpdate :: AttrSet -> AttrSet -> AttrSet
Examples
lib.attrsets.recursiveUpdate
usage example
recursiveUpdate {
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/hda";
} {
boot.loader.grub.device = "";
}
returns: {
boot.loader.grub.enable = true;
boot.loader.grub.device = "";
}
Located at lib/attrsets.nix:1625 in <nixpkgs>
.
lib.attrsets.matchAttrs
Recurse into every attribute set of the first argument and check that: - Each attribute path also exists in the second argument. - If the attribute's value is not a nested attribute set, it must have the same value in the right argument.
Inputs
pattern
: Attribute set structure to match
attrs
: Attribute set to check
Type
matchAttrs :: AttrSet -> AttrSet -> Bool
Examples
lib.attrsets.matchAttrs
usage example
matchAttrs { cpu = {}; } { cpu = { bits = 64; }; }
=> true
Located at lib/attrsets.nix:1664 in <nixpkgs>
.
lib.attrsets.overrideExisting
Override only the attributes that are already present in the old set useful for deep-overriding.
Inputs
old
: Original attribute set
new
: Attribute set with attributes to override in old
.
Type
overrideExisting :: AttrSet -> AttrSet -> AttrSet
Examples
lib.attrsets.overrideExisting
usage example
overrideExisting {} { a = 1; }
=> {}
overrideExisting { b = 2; } { a = 1; }
=> { b = 2; }
overrideExisting { a = 3; b = 2; } { a = 1; }
=> { a = 1; b = 2; }
Located at lib/attrsets.nix:1720 in <nixpkgs>
.
lib.attrsets.showAttrPath
Turns a list of strings into a human-readable description of those
strings represented as an attribute path. The result of this function is
not intended to be machine-readable.
Create a new attribute set with value
set at the nested attribute location specified in attrPath
.
Inputs
path
: Attribute path to render to a string
Type
showAttrPath :: [String] -> String
Examples
lib.attrsets.showAttrPath
usage example
showAttrPath [ "foo" "10" "bar" ]
=> "foo.\"10\".bar"
showAttrPath []
=> "<root attribute path>"
Located at lib/attrsets.nix:1758 in <nixpkgs>
.
lib.attrsets.getOutput
Get a package output.
If no output is found, fallback to .out
and then to the default.
The function is idempotent: getOutput "b" (getOutput "a" p) == getOutput "a" p
.
Inputs
output
: 1. Function argument
pkg
: 2. Function argument
Type
getOutput :: String -> :: Derivation -> Derivation
Examples
lib.attrsets.getOutput
usage example
"${getOutput "dev" pkgs.openssl}"
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev"
Located at lib/attrsets.nix:1797 in <nixpkgs>
.
lib.attrsets.getFirstOutput
Get the first of the outputs
provided by the package, or the default.
This function is alligned with _overrideFirst()
from the multiple-outputs.sh
setup hook.
Like getOutput
, the function is idempotent.
Inputs
outputs
: 1. Function argument
pkg
: 2. Function argument
Type
getFirstOutput :: [String] -> Derivation -> Derivation
Examples
lib.attrsets.getFirstOutput
usage example
"${getFirstOutput [ "include" "dev" ] pkgs.openssl}"
=> "/nix/store/00000000000000000000000000000000-openssl-1.0.1r-dev"
Located at lib/attrsets.nix:1834 in <nixpkgs>
.
lib.attrsets.getBin
Get a package's bin
output.
If the output does not exist, fallback to .out
and then to the default.
Inputs
pkg
: The package whose bin
output will be retrieved.
Type
getBin :: Derivation -> Derivation
Examples
lib.attrsets.getBin
usage example
"${getBin pkgs.openssl}"
=> "/nix/store/00000000000000000000000000000000-openssl-1.0.1r"
Located at lib/attrsets.nix:1872 in <nixpkgs>
.
lib.attrsets.getLib
Get a package's lib
output.
If the output does not exist, fallback to .out
and then to the default.
Inputs
pkg
: The package whose lib
output will be retrieved.
Type
getLib :: Derivation -> Derivation
Examples
lib.attrsets.getLib
usage example
"${getLib pkgs.openssl}"
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-lib"
Located at lib/attrsets.nix:1902 in <nixpkgs>
.
lib.attrsets.getStatic
Get a package's static
output.
If the output does not exist, fallback to .lib
, then to .out
, and then to the default.
Inputs
pkg
: The package whose static
output will be retrieved.
Type
getStatic :: Derivation -> Derivation
Examples
lib.attrsets.getStatic
usage example
"${lib.getStatic pkgs.glibc}"
=> "/nix/store/00000000000000000000000000000000-glibc-2.39-52-static"
Located at lib/attrsets.nix:1931 in <nixpkgs>
.
lib.attrsets.getDev
Get a package's dev
output.
If the output does not exist, fallback to .out
and then to the default.
Inputs
pkg
: The package whose dev
output will be retrieved.
Type
getDev :: Derivation -> Derivation
Examples
lib.attrsets.getDev
usage example
"${getDev pkgs.openssl}"
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-dev"
Located at lib/attrsets.nix:1961 in <nixpkgs>
.
lib.attrsets.getInclude
Get a package's include
output.
If the output does not exist, fallback to .dev
, then to .out
, and then to the default.
Inputs
pkg
: The package whose include
output will be retrieved.
Type
getInclude :: Derivation -> Derivation
Examples
lib.attrsets.getInclude
usage example
"${getInclude pkgs.openssl}"
=> "/nix/store/00000000000000000000000000000000-openssl-1.0.1r-dev"
Located at lib/attrsets.nix:1990 in <nixpkgs>
.
lib.attrsets.getMan
Get a package's man
output.
If the output does not exist, fallback to .out
and then to the default.
Inputs
pkg
: The package whose man
output will be retrieved.
Type
getMan :: Derivation -> Derivation
Examples
lib.attrsets.getMan
usage example
"${getMan pkgs.openssl}"
=> "/nix/store/9rz8gxhzf8sw4kf2j2f1grr49w8zx5vj-openssl-1.0.1r-man"
Located at lib/attrsets.nix:2020 in <nixpkgs>
.
lib.attrsets.chooseDevOutputs
Pick the outputs of packages to place in buildInputs
Inputs
pkgs
: List of packages.
Type
chooseDevOutputs :: [Derivation] -> [Derivation]
Located at lib/attrsets.nix:2037 in <nixpkgs>
.
lib.attrsets.recurseIntoAttrs
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.
Inputs
attrs
: An attribute set to scan for derivations.
Type
recurseIntoAttrs :: AttrSet -> AttrSet
Examples
lib.attrsets.recurseIntoAttrs
usage example
{ pkgs ? import <nixpkgs> {} }:
{
myTools = pkgs.lib.recurseIntoAttrs {
inherit (pkgs) hello figlet;
};
}
Located at lib/attrsets.nix:2074 in <nixpkgs>
.
lib.attrsets.dontRecurseIntoAttrs
Undo the effect of recurseIntoAttrs.
Inputs
attrs
: An attribute set to not scan for derivations.
Type
dontRecurseIntoAttrs :: AttrSet -> AttrSet
Located at lib/attrsets.nix:2094 in <nixpkgs>
.
lib.attrsets.unionOfDisjoint
unionOfDisjoint x y
is equal to x // y // z
where the
attrnames in z
are the intersection of the attrnames in x
and
y
, and all values assert
with an error message. This
operator is commutative, unlike (//).
Inputs
x
: 1. Function argument
y
: 2. Function argument
Type
unionOfDisjoint :: AttrSet -> AttrSet -> AttrSet
Located at lib/attrsets.nix:2121 in <nixpkgs>
.