Under Construction!§

This Page is still under heavy development and may remain unfinished or subjected to major changes over time

Terminology§

Nix is a purely functional package manager. This means that it treats packages like values built by functions that don’t have side-effects, and never change after they have been built (known as immutability). This results in the purity of a package which ensures reproducibility in any environment and at any future point in time. For every package that it builds, it firsts computes a derivation (by evaluating expressions written in the Nix language) which consists of information about all the dependencies of a package, build commands, miscellaneous meta-information, and a prefix or store path into which said package shall be installed, which is in the form of /nix/store/HASH-NAME-VERSION, where the hash is built from all the input dependencies required to build the package. Then, it realises that derivation by running the specified build commands in an isolated environment (in a sandbox). This allows Nix to guarantee reproducibility, and allows it to support binary cache, by substituting the store path from some other location. This also enables us to have multiple versions of the same package, since each one will have it's own isolated prefix, and makes easy to rollback to a previous version of a package. And since the build environment is completely isolated from the host system, non-privileged users can install software completely securely

NixOS is a GNU/Linux distribution that uses Nix, both a package manager, as well as a configuration manager. The system derivation is realised from configuration files written in the Nix language containing data about all the applications to be installed on the system and subsequently their configuration. In addition to all the benefits provided by Nix, because of the way it is configured, all updates and rollbacks are atomic (and can be automated), and in case anything doesn't function as intended, such as when the system doesn't even boot, every single derivation that was installed 1 is listed in the boot loader, and you can boot directly into it. This, along with the fact that NixOS provides for completely reproducible configurations, and allows to easily switch between conflicting package arrangements, makes it an ideal choice for use in multi-PC setups, such as home office configurations, for small organizations or even to rejuvenate individual setups with the amount of benefits that it offers. Thus, I have chosen NixOS above all others in pursuit of a reliable, relatively stable distro that I could conveniently use to manage the computers that I own

nixpkgs, basically the main package repository to use with Nix, is a giant collection of package descriptions as well as configuration modules written in the Nix language, that serves to build multiple applications for our day-to-day use, as well as the tools required to properly define a NixOS Configuration. It provides a vast number of applications, programs and services, language-specific package sets, cross-compilation tools, and many other such packages, which makes Nix such a powerful tool

The Nix programming language is simple, lazy 2, pure, functional, and dynamically typed, which specializes in building packages. The Nix Pills Tutorial dives into the language syntax and semantics in detail

Resources§

Below is a list of handy, helpful resources and documentation that can be used to learn more about the Nix ecosystem in depth:

Footnotes§

1

Provided that they are not garbage collected - Removing or modifying a package from the configuration doesn't exactly delete older versions from the system. All they do is create a new derivation that no longer contains symlinks to the older packages. Since disk space is limited, unused packages should be removed at some point, which can be done using nix-collect-garbage -d or nix store --gc 2: Evaluation of expressions is delayed until their values are actually needed. For more information, see this