Generic Builder Syntax Recall from that the builder looked something like this: PATH=$perl/bin:$PATH tar xvfz $src cd hello-* ./configure --prefix=$out make make install The builders for almost all Unix packages look like this — set up some environment variables, unpack the sources, configure, build, and install. For this reason the standard environment provides some Bash functions that automate the build process. A builder using the generic build facilities in shown in . Build script using the generic build functions buildInputs="$perl" source $stdenv/setup genericBuild The buildInputs variable tells setup to use the indicated packages as inputs. This means that if a package provides a bin subdirectory, it's added to PATH; if it has a include subdirectory, it's added to GCC's header search path; and so on.How does it work? setup tries to source the file pkg/nix-support/setup-hook of all dependencies. These “setup hooks” can then set up whatever environment variables they want; for instance, the setup hook for Perl sets the PERL5LIB environment variable to contain the lib/site_perl directories of all inputs. The function genericBuild is defined in the file $stdenv/setup. The final step calls the shell function genericBuild, which performs the steps that were done explicitly in . The generic builder is smart enough to figure out whether to unpack the sources using gzip, bzip2, etc. It can be customised in many ways; see the Nixpkgs manual for details. Discerning readers will note that the buildInputs could just as well have been set in the Nix expression, like this: buildInputs = [ perl ]; The perl attribute can then be removed, and the builder becomes even shorter: source $stdenv/setup genericBuild In fact, mkDerivation provides a default builder that looks exactly like that, so it is actually possible to omit the builder for Hello entirely.