Go to file
Eelco Dolstra d4dcffd643
Add pure evaluation mode
In this mode, the following restrictions apply:

* The builtins currentTime, currentSystem and storePath throw an
  error.

* $NIX_PATH and -I are ignored.

* fetchGit and fetchMercurial require a revision hash.

* fetchurl and fetchTarball require a sha256 attribute.

* No file system access is allowed outside of the paths returned by
  fetch{Git,Mercurial,url,Tarball}. Thus 'nix build -f ./foo.nix' is
  not allowed.

Thus, the evaluation result is completely reproducible from the
command line arguments. E.g.

  nix build --pure-eval '(
    let
      nix = fetchGit { url = https://github.com/NixOS/nixpkgs.git; rev = "9c927de4b179a6dd210dd88d34bda8af4b575680"; };
      nixpkgs = fetchGit { url = https://github.com/NixOS/nixpkgs.git; ref = "release-17.09"; rev = "66b4de79e3841530e6d9c6baf98702aa1f7124e4"; };
    in (import (nix + "/release.nix") { inherit nix nixpkgs; }).build.x86_64-linux
  )'

The goal is to enable completely reproducible and traceable
evaluation. For example, a NixOS configuration could be fully
described by a single Git commit hash. 'nixos-rebuild' would do
something like

  nix build --pure-eval '(
    (import (fetchGit { url = file:///my-nixos-config; rev = "..."; })).system
  ')

where the Git repository /my-nixos-config would use further fetchGit
calls or Git externals to fetch Nixpkgs and whatever other
dependencies it has. Either way, the commit hash would uniquely
identify the NixOS configuration and allow it to reproduced.
2018-01-16 19:23:18 +01:00
.github Add an issue template to cut down on the confusion 2017-12-17 11:08:28 -05:00
config Add config.guess, config.sub and install-sh 2013-11-25 11:26:02 +00:00
corepkgs <nix/fetchurl.nix>: Support sha512 argument 2017-07-04 14:45:50 +02:00
doc/manual nix.conf: builders-use-substitutes 2018-01-09 22:40:07 +01:00
maintainers upload-release.pl: support aarch64-linux 2017-12-07 19:02:35 -05:00
misc docker: ensure that the installation works for users other than 'root', too 2017-10-07 17:28:34 +02:00
mk Add pure evaluation mode 2018-01-16 19:23:18 +01:00
perl Replace Unicode quotes in user-facing strings by ASCII 2017-07-30 12:32:45 +01:00
scripts installer: don't touch /etc/profile 2018-01-03 22:29:54 +01:00
src Add pure evaluation mode 2018-01-16 19:23:18 +01:00
tests Add pure evaluation mode 2018-01-16 19:23:18 +01:00
.dir-locals.el Add .dir-locals.el for Emacs 2016-01-28 11:12:04 +01:00
.editorconfig Add .editorconfig 2017-06-05 22:57:28 +01:00
.gitignore Reverse retry logic to retry in all but a few cases 2017-10-02 23:22:02 -04:00
.travis.yml Test the installer 2017-07-14 12:11:04 -04:00
bootstrap.sh bootstrap: Simplify & make more robust. 2011-09-06 12:11:05 +00:00
configure.ac use libbrotli directly when available 2017-12-30 20:26:33 -06:00
COPYING * Change this to LGPL to keep the government happy. 2006-04-25 16:41:06 +00:00
local.mk release.nix: Use fetchTarball and fetchGit 2017-12-22 11:35:32 +01:00
Makefile Remove nix-mode.el from Nix. 2017-08-19 21:16:30 -07:00
Makefile.config.in use libbrotli directly when available 2017-12-30 20:26:33 -06:00
nix.spec.in Fix RPM build 2017-10-24 15:44:29 +02:00
README.md Fix minor grammatical nitpick ("it's" vs. "its") in README.md. 2017-03-22 10:11:23 -04:00
release-common.nix release-common: Fix busybox builtins (busybox >= 1.27) 2017-10-07 07:43:55 -05:00
release.nix Add pure evaluation mode 2018-01-16 19:23:18 +01:00
shell.nix Simplify build by including nlohmann/json.hpp 2017-12-04 17:11:36 +01:00
version Bump 2016-01-20 16:34:37 +01:00

Nix, the purely functional package manager

Nix is a new take on package management that is fairly unique. Because of its purity aspects, a lot of issues found in traditional package managers don't appear with Nix.

To find out more about the tool, usage and installation instructions, please read the manual, which is available on the Nix website at http://nixos.org/nix/manual.

Contributing

Take a look at the Hacking Section of the manual. It helps you to get started with building Nix from source.

License

Nix is released under the LGPL v2.1

This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit.