Nix (package manager): Difference between revisions

DHCP (talk | contribs)
m update links
Roxwize (talk | contribs)
Marked this version for translation
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
<languages/>
<languages/>
<translate>
<!--T:1-->
{{Navbox Nix}}
{{Navbox Nix}}
{{Disambiguation|message=This article is about the Nix package manager. Not to be confused with the [[Nix ecosystem]], the [[Nix (language)|Nix language]] or the [[Nix (command)|Nix command]].}}
{{Disambiguation|message=<translate><!--T:35--> This article is about the Nix package manager. Not to be confused with the [[<tvar name="1">Nix ecosystem</tvar>|Nix ecosystem]], the [[<tvar name="2">Nix (language)</tvar>|Nix language]] or the [[<tvar name="3">Nix (command)</tvar>|Nix command]].</translate>}}
Nix is a package manager and build system that parses reproducible build instructions specified in the [[Nix (language)|Nix Expression Language]], a pure functional language with lazy evaluation. Nix expressions are pure functions<ref>Values cannot change during computation. Functions always produce the same output if their input does not change. </ref>taking dependencies as arguments and producing a ''[[Derivations|derivation]]'' specifying a reproducible build environment for the package. Nix stores the results of the build in unique addresses specified by a hash of the complete dependency tree, creating an immutable package store (aka the [[#Nix store|nix store]]) that allows for atomic upgrades, rollbacks and concurrent installation of different versions of a package, essentially eliminating [[Wikipedia:Dependency hell|dependency hell]].
 
<translate><!--T:1-->
Nix is a package manager and build system that parses reproducible build instructions specified in the [[<tvar name="1">Nix (language)</tvar>|Nix Expression Language]], a pure functional language with lazy evaluation. Nix expressions are pure functions<ref>Values cannot change during computation. Functions always produce the same output if their input does not change.</ref> taking dependencies as arguments and producing a ''[[<tvar name="2">Derivations</tvar>|derivation]]'' specifying a reproducible build environment for the package. Nix stores the results of the build in unique addresses specified by a hash of the complete dependency tree, creating an immutable package store (aka the [[#Nix store|nix store]]) that allows for atomic upgrades, rollbacks and concurrent installation of different versions of a package, essentially eliminating [[<tvar name="3">Wikipedia:Dependency hell</tvar>|dependency hell]].


== Usage == <!--T:2-->
== Usage == <!--T:2-->
Line 10: Line 10:
<!--T:3-->
<!--T:3-->
=== Installation ===
=== Installation ===
On [[NixOS]], Nix is automatically installed.
On [[<tvar name="1">NixOS</tvar>|NixOS]], Nix is automatically installed.


<!--T:4-->
<!--T:4-->
On other Linux distributions or on macOS, you can install Nix following the [https://nix.dev/manual/nix/stable/installation/ installation section of the Nix manual].
On other Linux distributions or on macOS, you can install Nix following the [<tvar name="1">https://nix.dev/manual/nix/stable/installation/</tvar> installation section of the Nix manual].


=== Nix commands === <!--T:5-->
=== Nix commands === <!--T:5-->


<!--T:6-->
<!--T:6-->
The [[Nix (command line utilities)|Nix commands]] are documented in the [https://nix.dev/manual/nix/stable/command-ref/ Nix reference manual]: main commands, utilities and experimental commands. Prior to version 2.0 (released in February 2018) there have been different commands.
The [[<tvar name="1">Nix (command line utilities)</tvar>|Nix commands]] are documented in the [<tvar name="2">https://nix.dev/manual/nix/stable/command-ref/</tvar> Nix reference manual]: main commands, utilities and experimental commands. Prior to version 2.0 (released in February 2018) there have been different commands.


<!--T:7-->
<!--T:7-->
=== Configuration ===
=== Configuration ===
On NixOS, Nix can be configured using the [https://search.nixos.org/options?query=nix. <code>nix</code> option].  
On NixOS, Nix can be configured using the [<tvar name="1">https://search.nixos.org/options?query=nix</tvar> <code>nix</code> option].  


<!--T:8-->
<!--T:8-->
Standalone Nix is configured through <code>nix.conf</code> (usually found in <code>/etc/nix/</code>). Details on the available options are [https://nix.dev/manual/nix/stable/command-ref/conf-file found in the Nix reference manual].  
Standalone Nix is configured through <code>nix.conf</code> (usually found in <code>/etc/nix/</code>). Details on the available options are [<tvar name="1">https://nix.dev/manual/nix/stable/command-ref/conf-file</tvar> found in the Nix reference manual].  


<!--T:9-->
<!--T:9-->
You can also configure Nix using [[Home Manager]], which manages declarative environments for a single user. For system-wide configuration, you can use [https://github.com/numtide/system-manager System Manager] on Linux and [https://github.com/nix-darwin/nix-darwin nix-darwin] on macOS.
You can also configure Nix using [[<tvar name="1">Home Manager</tvar>|Home Manager]], which manages declarative environments for a single user. For system-wide configuration, you can use [<tvar name="2">https://github.com/numtide/system-manager</tvar> System Manager] on Linux and [<tvar name="3">https://github.com/nix-darwin/nix-darwin</tvar> nix-darwin] on macOS.


== Internals == <!--T:10-->
== Internals == <!--T:10-->
Line 67: Line 67:
<!--T:17-->
<!--T:17-->
Sandboxing is enabled by default on Linux, and disabled by default on macOS.
Sandboxing is enabled by default on Linux, and disabled by default on macOS.
In pull requests for [https://github.com/NixOS/nixpkgs/ Nixpkgs] people are asked to test builds with sandboxing enabled (see <code>Tested using sandboxing</code> in the pull request template) because in [https://nixos.org/hydra/ official Hydra builds] sandboxing is also used.
In pull requests for [<tvar name="1">https://github.com/NixOS/nixpkgs/</tvar> Nixpkgs] people are asked to test builds with sandboxing enabled (see <code>Tested using sandboxing</code> in the pull request template) because in [<tvar name="2">https://nixos.org/hydra/</tvar> official Hydra builds] sandboxing is also used.


<!--T:18-->
<!--T:18-->
Line 78: Line 78:


<!--T:21-->
<!--T:21-->
* [https://code.tvl.fyi/tree/tvix tvix]
* [<tvar name="1">https://code.tvl.fyi/tree/tvix</tvar> tvix]


<!--T:22-->
<!--T:22-->
Line 84: Line 84:


<!--T:23-->
<!--T:23-->
* [https://lix.systems/ lix]
* [<tvar name="1">https://lix.systems/</tvar> lix]


<!--T:24-->
<!--T:24-->
Earlier attempts can be found on [https://riir-nix.github.io/ riir-nix]
Earlier attempts can be found on [<tvar name="1">https://riir-nix.github.io/</tvar> riir-nix]


<!--T:25-->
<!--T:25-->