diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/attrsets.nix | 23 | ||||
-rw-r--r-- | lib/customisation.nix | 15 | ||||
-rw-r--r-- | lib/default.nix | 2 | ||||
-rw-r--r-- | lib/sources.nix | 15 | ||||
-rw-r--r-- | lib/systems/platforms.nix | 2 | ||||
-rw-r--r-- | lib/tests/misc.nix | 17 |
6 files changed, 56 insertions, 18 deletions
diff --git a/lib/attrsets.nix b/lib/attrsets.nix index de88763854d69..8b5c0ef4cea62 100644 --- a/lib/attrsets.nix +++ b/lib/attrsets.nix @@ -3,7 +3,7 @@ let inherit (builtins) head tail length; - inherit (lib.trivial) id; + inherit (lib.trivial) flip id mergeAttrs pipe; inherit (lib.strings) concatStringsSep concatMapStringsSep escapeNixIdentifier sanitizeDerivationName; inherit (lib.lists) foldr foldl' concatMap concatLists elemAt all partition groupBy take foldl; in @@ -77,6 +77,25 @@ rec { let errorMsg = "cannot find attribute `" + concatStringsSep "." attrPath + "'"; in attrByPath attrPath (abort errorMsg); + /* Map each attribute in the given set and merge them into a new attribute set. + + Type: + concatMapAttrs :: + (String -> a -> AttrSet) + -> AttrSet + -> AttrSet + + Example: + concatMapAttrs + (name: value: { + ${name} = value; + ${name + value} = value; + }) + { x = "a"; y = "b"; } + => { x = "a"; xa = "a"; y = "b"; yb = "b"; } + */ + concatMapAttrs = f: flip pipe [ (mapAttrs f) attrValues (foldl' mergeAttrs { }) ]; + /* Update or set specific paths of an attribute set. @@ -606,7 +625,7 @@ rec { getMan = getOutput "man"; /* Pick the outputs of packages to place in buildInputs */ - chooseDevOutputs = drvs: builtins.map getDev drvs; + chooseDevOutputs = builtins.map getDev; /* Make various Nix tools consider the contents of the resulting attribute set when looking for what to build, find, etc. diff --git a/lib/customisation.nix b/lib/customisation.nix index cc9a9b1c55d0a..bd7ee3c83b8cf 100644 --- a/lib/customisation.nix +++ b/lib/customisation.nix @@ -38,12 +38,15 @@ rec { // (drv.passthru or {}) // - (if (drv ? crossDrv && drv ? nativeDrv) - then { - crossDrv = overrideDerivation drv.crossDrv f; - nativeDrv = overrideDerivation drv.nativeDrv f; - } - else { })); + # TODO(@Artturin): remove before release 23.05 and only have __spliced. + (lib.optionalAttrs (drv ? crossDrv && drv ? nativeDrv) { + crossDrv = overrideDerivation drv.crossDrv f; + nativeDrv = overrideDerivation drv.nativeDrv f; + }) + // + lib.optionalAttrs (drv ? __spliced) { + __spliced = {} // (lib.mapAttrs (_: sDrv: overrideDerivation sDrv f) drv.__spliced); + }); /* `makeOverridable` takes a function from attribute set to attribute set and diff --git a/lib/default.nix b/lib/default.nix index 8bb06954518b9..cc4bedc5869b6 100644 --- a/lib/default.nix +++ b/lib/default.nix @@ -78,7 +78,7 @@ let inherit (self.attrsets) attrByPath hasAttrByPath setAttrByPath getAttrFromPath attrVals attrValues getAttrs catAttrs filterAttrs filterAttrsRecursive foldAttrs collect nameValuePair mapAttrs - mapAttrs' mapAttrsToList mapAttrsRecursive mapAttrsRecursiveCond + mapAttrs' mapAttrsToList concatMapAttrs mapAttrsRecursive mapAttrsRecursiveCond genAttrs isDerivation toDerivation optionalAttrs zipAttrsWithNames zipAttrsWith zipAttrs recursiveUpdateUntil recursiveUpdate matchAttrs overrideExisting showAttrPath getOutput getBin diff --git a/lib/sources.nix b/lib/sources.nix index 9db3d23295421..3ad7dc6335549 100644 --- a/lib/sources.nix +++ b/lib/sources.nix @@ -166,7 +166,7 @@ let in type == "directory" || lib.any (ext: lib.hasSuffix ext base) exts; in cleanSourceWith { inherit filter src; }; - pathIsGitRepo = path: (commitIdFromGitRepoOrError path)?value; + pathIsGitRepo = path: (_commitIdFromGitRepoOrError path)?value; /* Get the commit id of a git repo. @@ -174,17 +174,16 @@ let Example: commitIdFromGitRepo <nixpkgs/.git> */ commitIdFromGitRepo = path: - let commitIdOrError = commitIdFromGitRepoOrError path; + let commitIdOrError = _commitIdFromGitRepoOrError path; in commitIdOrError.value or (throw commitIdOrError.error); - /* - Get the commit id of a git repo. + # Get the commit id of a git repo. - Returns `{ value = commitHash }` or `{ error = "... message ..." }`. + # Returns `{ value = commitHash }` or `{ error = "... message ..." }`. - Example: commitIdFromGitRepo <nixpkgs/.git> - */ - commitIdFromGitRepoOrError = + # Example: commitIdFromGitRepo <nixpkgs/.git> + # not exported, used for commitIdFromGitRepo + _commitIdFromGitRepoOrError = let readCommitFromFile = file: path: let fileName = path + "/${file}"; packedRefsName = path + "/packed-refs"; diff --git a/lib/systems/platforms.nix b/lib/systems/platforms.nix index 41c25484cea03..d574943e47df3 100644 --- a/lib/systems/platforms.nix +++ b/lib/systems/platforms.nix @@ -557,7 +557,7 @@ rec { else if platform.isRiscV then riscv-multiplatform - else if platform.parsed.cpu == lib.systems.parse.cpuTypes.mipsel then fuloong2f_n32 + else if platform.parsed.cpu == lib.systems.parse.cpuTypes.mipsel then (import ./examples.nix { inherit lib; }).mipsel-linux-gnu else if platform.parsed.cpu == lib.systems.parse.cpuTypes.powerpc64le then powernv diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 31c938a8ffda1..b73da4f1010d4 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -478,6 +478,23 @@ runTests { # ATTRSETS + testConcatMapAttrs = { + expr = concatMapAttrs + (name: value: { + ${name} = value; + ${name + value} = value; + }) + { + foo = "bar"; + foobar = "baz"; + }; + expected = { + foo = "bar"; + foobar = "baz"; + foobarbaz = "baz"; + }; + }; + # code from the example testRecursiveUpdateUntil = { expr = recursiveUpdateUntil (path: l: r: path == ["foo"]) { |