let inherit (builtins) attrValues elemAt foldl' mapAttrs match readDir readFile ; ## `mergeAttrs` and `concatMapAttrs` are in `lib.trivial` and `lib.attrsets`, ## but we would rather avoid a dependency in nixpkgs for this file. mergeAttrs = x: y: x // y; concatMapAttrs = f: v: foldl' mergeAttrs { } (attrValues (mapAttrs f v)); removePubSuffix = s: let maybeMatch = match "(.*)\.pub" s; in if maybeMatch == null then s else elemAt maybeMatch 0; removeTrailingWhitespace = s: elemAt (match "(.*[^[:space:]])[[:space:]]*" s) 0; collectKeys = dir: concatMapAttrs (name: _: { "${removePubSuffix name}" = removeTrailingWhitespace (readFile (dir + "/${name}")); }) (readDir dir); in { contributors = collectKeys ./contributors; systems = collectKeys ./systems; }