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;
}
