Fetcher functions
When using Nix, you will frequently need to download source code and other
files from the internet. Nixpkgs comes with a few helper functions that allow
you to fetch fixed-output derivations in a structured way.
The two fetcher primitives are fetchurl and
fetchzip. Both of these have two required arguments, a
URL and a hash. The hash is typically sha256, although
many more hash algorithms are supported. Nixpkgs contributors are currently
recommended to use sha256. This hash will be used by Nix
to identify your source. A typical usage of fetchurl is provided below.
The main difference between fetchurl and
fetchzip is in how they store the contents.
fetchurl will store the unaltered contents of the URL
within the Nix store. fetchzip on the other hand will
decompress the archive for you, making files and directories directly
accessible in the future. fetchzip can only be used with
archives. Despite the name, fetchzip is not limited to
.zip files and can also be used with any tarball.
fetchpatch works very similarly to
fetchurl with the same arguments expected. It expects
patch files as a source and and performs normalization on them before
computing the checksum. For example it will remove comments or other unstable
parts that are sometimes added by version control systems and can change over
time.
Other fetcher functions allow you to add source code directly from a VCS such
as subversion or git. These are mostly straightforward names based on the
name of the command used with the VCS system. Because they give you a working
repository, they act most like fetchzip.
fetchsvn
Used with Subversion. Expects url to a Subversion
directory, rev, and sha256.
fetchgit
Used with Git. Expects url to a Git repo,
rev, and sha256.
rev in this case can be full the git commit id (SHA1
hash) or a tag name like refs/tags/v1.0.
fetchfossil
Used with Fossil. Expects url to a Fossil archive,
rev, and sha256.
fetchcvs
Used with CVS. Expects cvsRoot, tag,
and sha256.
fetchhg
Used with Mercurial. Expects url,
rev, and sha256.
A number of fetcher functions wrap part of fetchurl and
fetchzip. They are mainly convenience functions intended
for commonly used destinations of source code in Nixpkgs. These wrapper
fetchers are listed below.
fetchFromGitHub
fetchFromGitHub expects four arguments.
owner is a string corresponding to the GitHub user or
organization that controls this repository. repo
corresponds to the name of the software repository. These are located at
the top of every GitHub HTML page as
owner/repo. rev
corresponds to the Git commit hash or tag (e.g v1.0)
that will be downloaded from Git. Finally, sha256
corresponds to the hash of the extracted directory. Again, other hash
algorithms are also available but sha256 is currently
preferred.
fetchFromGitLab
This is used with GitLab repositories. The arguments expected are very
similar to fetchFromGitHub above.
fetchFromBitbucket
This is used with BitBucket repositories. The arguments expected are very
similar to fetchFromGitHub above.
fetchFromSavannah
This is used with Savannah repositories. The arguments expected are very
similar to fetchFromGitHub above.
fetchFromRepoOrCz
This is used with repo.or.cz repositories. The arguments expected are very
similar to fetchFromGitHub above.