mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-11-10 09:43:30 +01:00
48 lines
1.2 KiB
Nix
48 lines
1.2 KiB
Nix
# This turns ./outpaths.nix into chunks of a fixed size.
|
|
{
|
|
lib ? import ../../lib,
|
|
path ? ../..,
|
|
# The file containing all available attribute paths, which are split into chunks here
|
|
attrpathFile,
|
|
chunkSize,
|
|
myChunk,
|
|
includeBroken,
|
|
systems,
|
|
extraNixpkgsConfigJson,
|
|
}:
|
|
|
|
let
|
|
attrpaths = lib.importJSON attrpathFile;
|
|
myAttrpaths = lib.sublist (chunkSize * myChunk) chunkSize attrpaths;
|
|
|
|
unfiltered = import ./outpaths.nix {
|
|
inherit path;
|
|
inherit includeBroken systems;
|
|
extraNixpkgsConfig = builtins.fromJSON extraNixpkgsConfigJson;
|
|
};
|
|
|
|
# Turns the unfiltered recursive attribute set into one that is limited to myAttrpaths
|
|
filtered =
|
|
let
|
|
recurse =
|
|
index: paths: attrs:
|
|
lib.mapAttrs (
|
|
name: values:
|
|
if attrs ? ${name} then
|
|
if lib.any (value: lib.length value <= index + 1) values then
|
|
attrs.${name}
|
|
else
|
|
recurse (index + 1) values attrs.${name}
|
|
# Make sure nix-env recurses as well
|
|
// {
|
|
recurseForDerivations = true;
|
|
}
|
|
else
|
|
null
|
|
) (lib.groupBy (a: lib.elemAt a index) paths);
|
|
in
|
|
recurse 0 myAttrpaths unfiltered;
|
|
|
|
in
|
|
filtered
|