self: super:
with builtins;
let lib = super.lib; in
{
  lib = (super.lib or {}) // {
    loadFile = name: toFile (baseNameOf (toString name)) (readFile name);
    findFiles = pattern:
      let go = curr:
        let dir = readDir curr; in
        let files = lib.filterAttrs (name: type:
          type == "regular" &&
          match pattern name != null) dir; in
        let dirs = lib.filterAttrs (name: type: type == "directory") dir; in
        map (name: "${curr}/${name}") (attrNames files) ++
        lib.concatMap (name: go "${curr}/${name}") (attrNames dirs)
        ;
      in go;
  };
}