Skip to content

lib.filesystem: filesystem functions

Functions for querying information about the filesystem without copying any files to the Nix store.

lib.filesystem.pathType

The type of a path. The path needs to exist and be accessible. The result is either "directory" for a directory, "regular" for a regular file, "symlink" for a symlink, or "unknown" for anything else.

Inputs

path

: The path to query

Type

pathType :: Path -> String

Examples

lib.filesystem.pathType usage example

pathType /.
=> "directory"

pathType /some/file.nix
=> "regular"

Located at lib/filesystem.nix:62 in <nixpkgs>.

lib.filesystem.pathIsDirectory

Whether a path exists and is a directory.

Inputs

path

: 1. Function argument

Type

pathIsDirectory :: Path -> Bool

Examples

lib.filesystem.pathIsDirectory usage example

pathIsDirectory /.
=> true

pathIsDirectory /this/does/not/exist
=> false

pathIsDirectory /some/file.nix
=> false

Located at lib/filesystem.nix:111 in <nixpkgs>.

lib.filesystem.pathIsRegularFile

Whether a path exists and is a regular file, meaning not a symlink or any other special file type.

Inputs

path

: 1. Function argument

Type

pathIsRegularFile :: Path -> Bool

Examples

lib.filesystem.pathIsRegularFile usage example

pathIsRegularFile /.
=> false

pathIsRegularFile /this/does/not/exist
=> false

pathIsRegularFile /some/file.nix
=> true

Located at lib/filesystem.nix:147 in <nixpkgs>.

lib.filesystem.haskellPathsInDir

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.

Inputs

root

: The directory within to search

Type

Path -> Map String Path

Located at lib/filesystem.nix:168 in <nixpkgs>.

lib.filesystem.locateDominatingFile

Find the first directory containing a file matching 'pattern' upward from a given 'file'. Returns 'null' if no directories contain a file matching 'pattern'.

Inputs

pattern

: The pattern to search for

file

: The file to start searching upward from

Type

RegExp -> Path -> Nullable { path : Path; matches : [ MatchResults ]; }

Located at lib/filesystem.nix:205 in <nixpkgs>.

lib.filesystem.listFilesRecursive

Given a directory, return a flattened list of all files within it recursively.

Inputs

dir

: The path to recursively list

Type

Path -> [ Path ]

Located at lib/filesystem.nix:242 in <nixpkgs>.

lib.filesystem.packagesFromDirectoryRecursive

Transform a directory tree containing package files suitable for callPackage into a matching nested attribute set of derivations.

For a directory tree like this:

my-packages
├── a.nix
├── b.nix
├── c
│  ├── my-extra-feature.patch
│  ├── package.nix
│  └── support-definitions.nix
└── my-namespace
   ├── d.nix
   ├── e.nix
   └── f
      └── package.nix

packagesFromDirectoryRecursive will produce an attribute set like this:

# packagesFromDirectoryRecursive {
#   callPackage = pkgs.callPackage;
#   directory = ./my-packages;
# }
{
  a = pkgs.callPackage ./my-packages/a.nix { };
  b = pkgs.callPackage ./my-packages/b.nix { };
  c = pkgs.callPackage ./my-packages/c/package.nix { };
  my-namespace = {
    d = pkgs.callPackage ./my-packages/my-namespace/d.nix { };
    e = pkgs.callPackage ./my-packages/my-namespace/e.nix { };
    f = pkgs.callPackage ./my-packages/my-namespace/f/package.nix { };
  };
}

In particular: - If the input directory contains a package.nix file, then callPackage <directory>/package.nix { } is returned. - Otherwise, the input directory's contents are listed and transformed into an attribute set. - If a file name has the .nix extension, it is turned into attribute where: - The attribute name is the file name without the .nix extension - The attribute value is callPackage <file path> { } - Other files are ignored. - Directories are turned into an attribute where: - The attribute name is the name of the directory - The attribute value is the result of calling packagesFromDirectoryRecursive { ... } on the directory.

As a result, directories with no `.nix` files (including empty
directories) will be transformed into empty attribute sets.

Inputs

Structured function argument

: Attribute set containing the following attributes. Additional attributes are ignored.

callPackage

: pkgs.callPackage

Type: `Path -> AttrSet -> a`

directory

: The directory to read package files from

Type: `Path`

Type

packagesFromDirectoryRecursive :: AttrSet -> AttrSet

Examples

lib.filesystem.packagesFromDirectoryRecursive usage example

packagesFromDirectoryRecursive {
  inherit (pkgs) callPackage;
  directory = ./my-packages;
}
=> { ... }

lib.makeScope pkgs.newScope (
  self: packagesFromDirectoryRecursive {
    callPackage = self.callPackage;
    directory = ./my-packages;
  }
)
=> { ... }

Located at lib/filesystem.nix:357 in <nixpkgs>.