diff --git a/nix/readTree/default.nix b/nix/readTree/default.nix index dedef5724..55da146be 100644 --- a/nix/readTree/default.nix +++ b/nix/readTree/default.nix @@ -1,7 +1,5 @@ { ... }: -args: initPath: - let inherit (builtins) attrNames @@ -18,7 +16,7 @@ let readDir substring; - argsWithPath = parts: + argsWithPath = args: parts: let meta.locatedAt = parts; in meta // (if isAttrs args then args else args meta); @@ -39,8 +37,8 @@ let # The marker is added to every set that was imported directly by # readTree. - importWithMark = path: parts: - let imported = import path (argsWithPath parts); + importWithMark = args: path: parts: + let imported = import path (argsWithPath args parts); in if (isAttrs imported) then imported // (marker parts) else imported; @@ -49,11 +47,11 @@ let let res = match "(.*)\.nix" file; in if res == null then null else head res; - readTree = path: parts: + readTree = args: initPath: parts: let - dir = readDirVisible path; - self = importWithMark path parts; - joinChild = c: path + ("/" + c); + dir = readDirVisible initPath; + self = importWithMark args initPath parts; + joinChild = c: initPath + ("/" + c); # Import subdirectories of the current one, unless the special # `.skip-subtree` file exists which makes readTree ignore the @@ -65,16 +63,19 @@ let filterDir = f: dir."${f}" == "directory"; children = if hasAttr ".skip-subtree" dir then [] else map (c: { name = c; - value = readTree (joinChild c) (parts ++ [ c ]); + value = readTree args (joinChild c) (parts ++ [ c ]); }) (filter filterDir (attrNames dir)); # Import Nix files nixFiles = filter (f: f != null) (map nixFileName (attrNames dir)); nixChildren = map (c: let p = joinChild (c + ".nix"); in { name = c; - value = importWithMark p (parts ++ [ c ]); + value = importWithMark args p (parts ++ [ c ]); }) nixFiles; in if dir ? "default.nix" then (if isAttrs self then self // (listToAttrs children) else self) else (listToAttrs (nixChildren ++ children) // (marker parts)); -in readTree initPath [ (baseNameOf initPath) ] + +in { + __functor = _: args: initPath: readTree args initPath [ (baseNameOf initPath) ]; +}