summary refs log tree commit diff
diff options
context:
space:
mode:
authorSilvan Mosberger <contact@infinisil.com>2022-10-26 15:10:47 +0200
committerSilvan Mosberger <contact@infinisil.com>2022-10-26 15:10:47 +0200
commit9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f (patch)
tree3303523225306fd66a4cd882866a8cb255458e00
parent8e75d721c25618b34fd30ffd12ba9a4c17fd75f5 (diff)
downloadnixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.tar
nixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.tar.gz
nixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.tar.bz2
nixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.tar.lz
nixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.tar.xz
nixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.tar.zst
nixpkgs-9bfc4bbd63433c44aba71b01c54fa3c5130fcb0f.zip
lib: Automatically generate lib.filesytem docs
-rw-r--r--doc/doc-support/lib-function-docs.nix1
-rw-r--r--doc/functions/library.xml2
-rw-r--r--lib/filesystem.nix58
3 files changed, 43 insertions, 18 deletions
diff --git a/doc/doc-support/lib-function-docs.nix b/doc/doc-support/lib-function-docs.nix
index f6d613cac0b..cbcbed4310a 100644
--- a/doc/doc-support/lib-function-docs.nix
+++ b/doc/doc-support/lib-function-docs.nix
@@ -22,6 +22,7 @@ with pkgs; stdenv.mkDerivation {
     docgen lists 'List manipulation functions'
     docgen debug 'Debugging functions'
     docgen options 'NixOS / nixpkgs option handling'
+    docgen filesystem 'Filesystem functions'
     docgen sources 'Source filtering functions'
   '';
 }
diff --git a/doc/functions/library.xml b/doc/functions/library.xml
index 21bcf5b88c9..b291356c14b 100644
--- a/doc/functions/library.xml
+++ b/doc/functions/library.xml
@@ -26,5 +26,7 @@
 
  <xi:include href="./library/generated/options.xml" />
 
+ <xi:include href="./library/generated/filesystem.xml" />
+
  <xi:include href="./library/generated/sources.xml" />
 </section>
diff --git a/lib/filesystem.nix b/lib/filesystem.nix
index 0a1275e547c..94819605520 100644
--- a/lib/filesystem.nix
+++ b/lib/filesystem.nix
@@ -1,9 +1,23 @@
+# Functions for copying sources to the Nix store.
 { lib }:
-{ # haskellPathsInDir : Path -> Map String Path
-  # A map of all haskell packages defined in the given path,
-  # identified by having a cabal file with the same name as the
-  # directory itself.
-  haskellPathsInDir = root:
+
+let
+  inherit (lib.strings)
+    hasPrefix
+    ;
+in
+
+{
+  /*
+    A map of all haskell packages defined in the given path,
+    identified by having a cabal file with the same name as the
+    directory itself.
+
+    Type: Path -> Map String Path
+  */
+  haskellPathsInDir =
+    # The directory within to search
+    root:
     let # Files in the root
         root-files = builtins.attrNames (builtins.readDir root);
         # Files with their full paths
@@ -17,15 +31,18 @@
             builtins.pathExists (value + "/${name}.cabal")
           ) root-files-with-paths;
     in builtins.listToAttrs cabal-subdirs;
-  # locateDominatingFile :  RegExp
-  #                      -> Path
-  #                      -> Nullable { path : Path;
-  #                                    matches : [ MatchResults ];
-  #                                  }
-  # Find the first directory containing a file matching 'pattern'
-  # upward from a given 'file'.
-  # Returns 'null' if no directories contain a file matching 'pattern'.
-  locateDominatingFile = pattern: file:
+  /*
+    Find the first directory containing a file matching 'pattern'
+    upward from a given 'file'.
+    Returns 'null' if no directories contain a file matching 'pattern'.
+
+    Type: RegExp -> Path -> Nullable { path : Path; matches : [ MatchResults ]; }
+  */
+  locateDominatingFile =
+    # The pattern to search for
+    pattern:
+    # The file to start searching upward from
+    file:
     let go = path:
           let files = builtins.attrNames (builtins.readDir path);
               matches = builtins.filter (match: match != null)
@@ -44,10 +61,15 @@
     in go (if isDir then file else parent);
 
 
-  # listFilesRecursive: Path -> [ Path ]
-  #
-  # Given a directory, return a flattened list of all files within it recursively.
-  listFilesRecursive = dir: lib.flatten (lib.mapAttrsToList (name: type:
+  /*
+    Given a directory, return a flattened list of all files within it recursively.
+
+    Type: Path -> [ Path ]
+  */
+  listFilesRecursive =
+    # The path to recursively list
+    dir:
+    lib.flatten (lib.mapAttrsToList (name: type:
     if type == "directory" then
       lib.filesystem.listFilesRecursive (dir + "/${name}")
     else