Trivial builders
Nixpkgs provides a couple of functions that help with building
derivations. The most important one,
stdenv.mkDerivation, has already been
documented above. The following functions wrap
stdenv.mkDerivation, making it easier to use
in certain cases.
runCommand
This takes three arguments, name,
env, and buildCommand.
name is just the name that Nix will append
to the store path in the same way that
stdenv.mkDerivation uses its
name attribute. env is an
attribute set specifying environment variables that will be set
for this derivation. These attributes are then passed to the
wrapped stdenv.mkDerivation.
buildCommand specifies the commands that
will be run to create this derivation. Note that you will need
to create $out for Nix to register the
command as successful.
An example of using runCommand is provided
below.
(import <nixpkgs> {}).runCommand "my-example" {} ''
echo My example command is running
mkdir $out
echo I can write data to the Nix store > $out/message
echo I can also run basic commands like:
echo ls
ls
echo whoami
whoami
echo date
date
''
runCommandCC
This works just like runCommand. The only
difference is that it also provides a C compiler in
buildCommand’s environment. To minimize your
dependencies, you should only use this if you are sure you will
need a C compiler as part of running your command.
writeTextFile, writeText,
writeTextDir, writeScript,
writeScriptBin
These functions write text to the Nix store.
This is useful for creating scripts from Nix expressions.
writeTextFile takes an attribute set and
expects two arguments, name and
text. name corresponds to
the name used in the Nix store path. text
will be the contents of the file. You can also set
executable to true to make this file have
the executable bit set.
Many more commands wrap writeTextFile
including writeText,
writeTextDir,
writeScript, and
writeScriptBin. These are convenience
functions over writeTextFile.
symlinkJoin
This can be used to put many derivations into the same directory
structure. It works by creating a new derivation and adding
symlinks to each of the paths listed. It expects two arguments,
name, and paths.
name is the name used in the Nix store path
for the created derivation. paths is a list of
paths that will be symlinked. These paths can be to Nix store
derivations or any other subdirectory contained within.