diff --git a/doc/manual/expressions/language-constructs.xml b/doc/manual/expressions/language-constructs.xml index 4d316609c..82d3afed1 100644 --- a/doc/manual/expressions/language-constructs.xml +++ b/doc/manual/expressions/language-constructs.xml @@ -6,7 +6,7 @@ Language Constructs -Recursive sets +
Recursive sets Recursive sets are just normal sets, but the attributes can refer to each other. For example, @@ -38,10 +38,10 @@ does not terminateActually, Nix detects infinite recursion in this case and aborts (infinite recursion encountered).. - +
-Let-expressions +
Let-expressions A let-expression allows you to define local variables for an expression. For instance, @@ -56,10 +56,10 @@ evaluates to "foobar". - +
-Inheriting attributes +
Inheriting attributes When defining a set or in a let-expression it is often convenient to copy variables from the surrounding lexical scope (e.g., when you want to propagate @@ -129,10 +129,10 @@ a = src-set.a; b = src-set.b; c = src-set.c; when used while defining local variables in a let-expression or while defining a set. - +
-Functions +
Functions Functions have the following form: @@ -248,10 +248,10 @@ in concat { x = "foo"; y = "bar"; } - +
-Conditionals +
Conditionals Conditionals look like this: @@ -262,10 +262,10 @@ where e1 is an expression that should evaluate to a Boolean value (true or false). - +
-Assertions +
Assertions Assertions are generally used to check that certain requirements on or between features and dependencies hold. They look like this: @@ -349,11 +349,11 @@ stdenv.mkDerivation { - +
-With-expressions +
With-expressions A with-expression, @@ -394,16 +394,16 @@ let a = 1; in let a = 2; in let a = 3; in let a = 4; in ... - +
-Comments +
Comments Comments can be single-line, started with a # character, or inline/multi-line, enclosed within /* ... */. - +
diff --git a/doc/manual/expressions/language-values.xml b/doc/manual/expressions/language-values.xml index 4a72c67a8..6c0fcbacb 100644 --- a/doc/manual/expressions/language-values.xml +++ b/doc/manual/expressions/language-values.xml @@ -7,7 +7,7 @@ Values -Simple Values +
Simple Values Nix has the following basic data types: @@ -193,10 +193,10 @@ stdenv.mkDerivation { - +
-Lists +
Lists Lists are formed by enclosing a whitespace-separated list of values between square brackets. For example, @@ -217,10 +217,10 @@ function and the fifth being a set. Note that lists are only lazy in values, and they are strict in length. - +
-Sets +
Sets Sets are really the core of the language, since ultimately the Nix language is all about creating derivations, which are really just @@ -307,7 +307,7 @@ a form of object-oriented programming, for example. - +
diff --git a/doc/manual/installation/multi-user.xml b/doc/manual/installation/multi-user.xml index 331b5f128..835bd3a52 100644 --- a/doc/manual/installation/multi-user.xml +++ b/doc/manual/installation/multi-user.xml @@ -30,7 +30,7 @@ arbitrary Nix expressions, they may not get pre-built binaries. - +
Setting up the build users @@ -52,10 +52,10 @@ This creates 10 build users. There can never be more concurrent builds than the number of build users, so you may want to increase this if you expect to do many builds at the same time. - +
- +
Running the daemon @@ -78,10 +78,10 @@ export NIX_REMOTE=daemon into the users’ login scripts. - +
- +
Restricting access @@ -101,7 +101,7 @@ cannot connect to the Unix domain socket /nix/var/nix/daemon-socket/socket, so they cannot perform Nix operations. - +
diff --git a/doc/manual/introduction/about-nix.xml b/doc/manual/introduction/about-nix.xml index ec6f1ca3f..dd09e2283 100644 --- a/doc/manual/introduction/about-nix.xml +++ b/doc/manual/introduction/about-nix.xml @@ -25,7 +25,7 @@ of the package’s build dependency graph). This enables many powerful features. -Multiple versions +
Multiple versions You can have multiple versions or variants of a package installed at the same time. This is especially important when @@ -39,10 +39,10 @@ uninstalling an application cannot break other applications, since these operations never “destructively” update or delete files that are used by other packages. - +
-Complete dependencies +
Complete dependencies Nix helps you make sure that package dependency specifications are complete. In general, when you’re making a package for a package @@ -68,10 +68,10 @@ scanning binaries for the hash parts of Nix store paths (such as r8vvq9kq…). This sounds risky, but it works extremely well. - +
-Multi-user support +
Multi-user support Nix has multi-user support. This means that non-privileged users can securely install software. Each user can have a different @@ -82,10 +82,10 @@ package won’t be built or downloaded a second time. At the same time, it is not possible for one user to inject a Trojan horse into a package that might be used by another user. - +
-Atomic upgrades and rollbacks +
Atomic upgrades and rollbacks Since package management operations never overwrite packages in the Nix store but just add new versions in different paths, they are @@ -103,10 +103,10 @@ $ nix-env --upgrade some-packages $ nix-env --rollback - +
-Garbage collection +
Garbage collection When you uninstall a package like this… @@ -126,10 +126,10 @@ $ nix-collect-garbage This deletes all packages that aren’t in use by any user profile or by a currently running program. - +
-Functional package language +
Functional package language Packages are built from Nix expressions, which is a simple functional language. A Nix expression describes @@ -145,10 +145,10 @@ function and call it any number of times with the appropriate arguments. Due to the hashing scheme, variants don’t conflict with each other in the Nix store. - +
-Transparent source/binary deployment +
Transparent source/binary deployment Nix expressions generally describe how to build a package from source, so an installation action like @@ -172,31 +172,31 @@ Nix would first check if the file if so, fetch the pre-built binary referenced from there; otherwise, it would fall back to building from source. - +
-Nix Packages collection +
Nix Packages collection We provide a large set of Nix expressions containing hundreds of existing Unix packages, the Nix Packages collection (Nixpkgs). - +
-Managing build environments +
Managing build environments Nix is extremely useful for developers as it makes it easy to automatically set up the build environment for a package. Given a @@ -232,17 +232,17 @@ specifications, Nix makes an excellent basis for a continuous build system. --> - +
-Portability +
Portability Nix runs on Linux and macOS. - +
-NixOS +
NixOS NixOS is a Linux distribution based on Nix. It uses Nix not just for package management but also to manage the system @@ -253,16 +253,16 @@ earlier state. Also, users can install software without root privileges. For more information and downloads, see the NixOS homepage. - +
-License +
License Nix is released under the terms of the GNU LGPLv2.1 or (at your option) any later version. - +
diff --git a/doc/manual/src/expressions/language-constructs.md b/doc/manual/src/expressions/language-constructs.md index 121e4d998..20d003348 100644 --- a/doc/manual/src/expressions/language-constructs.md +++ b/doc/manual/src/expressions/language-constructs.md @@ -1,5 +1,7 @@ # Language Constructs +## Recursive sets + Recursive sets are just normal sets, but the attributes can refer to each other. For example, @@ -24,6 +26,8 @@ example, does not terminate\[1\]. +## Let-expressions + A let-expression allows you to define local variables for an expression. For instance, @@ -34,6 +38,8 @@ For instance, evaluates to `"foobar"`. +## Inheriting attributes + When defining a set or in a let-expression it is often convenient to copy variables from the surrounding lexical scope (e.g., when you want to propagate attributes). This can be shortened using the `inherit` @@ -95,6 +101,8 @@ is equivalent to when used while defining local variables in a let-expression or while defining a set. +## Functions + Functions have the following form: pattern: body @@ -187,6 +195,8 @@ you can bind them to an attribute, e.g., let concat = { x, y }: x + y; in concat { x = "foo"; y = "bar"; } +## Conditionals + Conditionals look like this: if e1 then e2 else e3 @@ -194,6 +204,8 @@ Conditionals look like this: where e1 is an expression that should evaluate to a Boolean value (`true` or `false`). +## Assertions + Assertions are generally used to check that certain requirements on or between features and dependencies hold. They look like this: @@ -257,6 +269,8 @@ The points of interest are: non-`null` value was passed. This prevents an unnecessary rebuild of Subversion if OpenSSL changes. +## With-expressions + A *with-expression*, with e1; e2 @@ -285,6 +299,8 @@ establishes the same scope as let a = 1; in let a = 2; in let a = 3; in let a = 4; in ... +## Comments + Comments can be single-line, started with a `#` character, or inline/multi-line, enclosed within `/* ... */`. diff --git a/doc/manual/src/expressions/language-values.md b/doc/manual/src/expressions/language-values.md index fac0be47e..8ffe2f0f9 100644 --- a/doc/manual/src/expressions/language-values.md +++ b/doc/manual/src/expressions/language-values.md @@ -1,5 +1,7 @@ # Values +## Simple Values + Nix has the following basic data types: - *Strings* can be written in three ways. @@ -127,6 +129,8 @@ Nix has the following basic data types: - The null value, denoted as `null`. +## Lists + Lists are formed by enclosing a whitespace-separated list of values between square brackets. For example, @@ -143,6 +147,8 @@ function and the fifth being a set. Note that lists are only lazy in values, and they are strict in length. +## Sets + Sets are really the core of the language, since ultimately the Nix language is all about creating derivations, which are really just sets of attributes to be passed to build scripts. diff --git a/doc/manual/src/installation/multi-user.md b/doc/manual/src/installation/multi-user.md index 6493e717b..4a861691d 100644 --- a/doc/manual/src/installation/multi-user.md +++ b/doc/manual/src/installation/multi-user.md @@ -20,6 +20,8 @@ Nix store/database that performs the operation. > caches. So while unprivileged users may install packages from > arbitrary Nix expressions, they may not get pre-built binaries. +## Setting up the build users + The *build users* are the special UIDs under which builds are performed. They should all be members of the *build users group* `nixbld`. This group should have no other members. The build users should not be @@ -35,6 +37,8 @@ This creates 10 build users. There can never be more concurrent builds than the number of build users, so you may want to increase this if you expect to do many builds at the same time. +## Running the daemon + The [Nix daemon](#sec-nix-daemon) should be started as follows (as `root`): @@ -50,6 +54,8 @@ should put a line like into the users’ login scripts. +## Restricting access + To limit which users can perform Nix operations, you can use the permissions on the directory `/nix/var/nix/daemon-socket`. For instance, if you want to restrict the use of Nix to the members of a group called