_:

let
  sources = import ../npins;

  lib = import sources.nix-lib {
    inherit ((import sources.nixpkgs { })) lib;

    keysRoot = ../keys;
  };

  meta = import ../meta lib;

  inherit (lib.extra) getAllKeys;
in

lib.extra
// rec {
  # Get publickeys associated to a node
  getNodeKeys =
    node:
    let
      names = builtins.foldl' (names: group: names ++ meta.organization.groups.${group}) (
        meta.nodes.${node}.admins ++ [ "/machines/${node}" ]
      ) meta.nodes.${node}.adminGroups;
    in
    rootKeys ++ (getAllKeys names);

  rootKeys = getAllKeys meta.organization.groups.root;

  machineKeys =
    rootKeys ++ (getAllKeys (builtins.map (n: "machines/${n}") (builtins.attrNames meta.nodes)));
}