Jump to content

NixOS/fr: Difference between revisions

From Official NixOS Wiki
Arm38 (talk | contribs)
No edit summary
Arm38 (talk | contribs)
Created page with "En supplément des images ISO, la [https://nixos.org/download/#nixos-iso page de téléchargement] apporte un certain nombre de méthodes alternatives pour installer NixOS. Cela inclut :"
 
(31 intermediate revisions by the same user not shown)
Line 6: Line 6:
Dans NixOS, tous les composants de la distribution — y compris le [https://fr.wikipedia.org/wiki/Noyau_Linux noyau Linux], les [https://fr.wikipedia.org/wiki/Gestionnaire_de_paquets paquets] installés et les fichiers de configuration système — sont construits par [[Special:MyLanguage/Nix|Nix]] depuis des [[Wikipedia:Pure function|fonctions pures]] appelées [[Special:MyLanguage/Nix Expression Language|expressions Nix]].
Dans NixOS, tous les composants de la distribution — y compris le [https://fr.wikipedia.org/wiki/Noyau_Linux noyau Linux], les [https://fr.wikipedia.org/wiki/Gestionnaire_de_paquets paquets] installés et les fichiers de configuration système — sont construits par [[Special:MyLanguage/Nix|Nix]] depuis des [[Wikipedia:Pure function|fonctions pures]] appelées [[Special:MyLanguage/Nix Expression Language|expressions Nix]].


Depuis que Nix utilise met des [https://fr.wikipedia.org/wiki/Fichier_exécutable exécutables] en cache, cela permet un compromis unique entre l'approche orientée autour de l'exécutable utilisée par des distributions comme Debian et l'approche orientée autour du [https://fr.wikipedia.org/wiki/Code_source code source] utilisée par des distributions comme Gentoo. Les binaires peuvent être utilisés comme des composants standard, et les paquets sur-mesure et les modules peuvent être utilisés automatiquement quand un binaire pré compilé n'est pas disponible.
Depuis que Nix met des [https://fr.wikipedia.org/wiki/Fichier_exécutable exécutables] en cache, cela permet d'avoir un compromis unique entre une approche orientée autour de l'exécutable présente dans des distributions comme Debian et une approche orientée autour du [https://fr.wikipedia.org/wiki/Code_source code source] utilisée dans des distributions comme Gentoo. Les binaires peuvent être utilisés comme des composants standard, tandis que les paquets sur-mesure et les modules peuvent être utilisés automatiquement quand un binaire pré-compilé n'est pas disponible.


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 14: Line 14:
== Installation ==
== Installation ==


Pour un guide d'installation complet, voir le [https://nixos.org/nixos/manual/index.html#ch-installation chapitre Installation du guide de NixOS]. Ce wiki inclut aussi des alternatives ou des guides supplémentaires, comme [[Special:MyLanguage/NixOS as a desktop|NixOS comme système de bureau]]
Pour un guide d'installation complet, voir le [https://nixos.org/nixos/manual/index.html#ch-installation chapitre "Installation" du guide de NixOS]. Ce wiki inclut aussi des alternatives ou des guides supplémentaires, comme : [[Special:MyLanguage/NixOS as a desktop|Utiliser NixOS comme système de bureau]].


La plupart des utilisateurs vont installer NixOS via [https://nixos.org/download/#nixos-iso une des images ISO]. Les variantes "graphique" et "minimale" de l'ISO sont disponibles pour chaque architecture supportée ; les images "graphiques" sont adaptées pour les utilisateurs souhaitant installer un environnement de bureau, et les images "minimales" sont conçues pour les utilisateurs souhaitant installer NixOS comme serveur, ou désirant des images ISO de taille réduite. Les images ISO sont des images hybrides qui peuvent être gravées sur des supports optiques ou copiées sur une clé USB et utilisées telles quelles. Voir le guide d'installation pour plus de détails.
La plupart des utilisateurs vont installer NixOS via [https://nixos.org/download/#nixos-iso une des images ISO]. Les variantes "graphique" et "minimale" de l'ISO sont disponibles pour chaque architecture supportée ; les images "graphiques" sont adaptées pour les utilisateurs souhaitant installer un environnement de bureau, et les images "minimales" sont conçues pour les utilisateurs souhaitant installer NixOS comme serveur, ou désirant des images ISO de taille réduite. Les images ISO sont des images hybrides qui peuvent être gravées sur des supports optiques ou copiées sur une clé USB et utilisées telles quelles. Voir le guide d'installation pour plus de détails.
Line 21: Line 21:
Cela inclut :
Cela inclut :


<div lang="en" dir="ltr" class="mw-content-ltr">
* Des machines virtuelles au format OVA (compatible avec VirtualBox),
* Virtual appliances in OVA format (compatible with VirtualBox);
* Amazon EC2 AMIs,
* Amazon EC2 AMIs;
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">
Line 30: Line 28:
</div>
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="System_architectures"></span>
=== System architectures ===
== Architectures système ==
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
NixOS fournit de manière native le support pour la plupart des appareils x86_64, ainsi que les appareils ARM64 génériques.
NixOS provides out of the box support for most x86_64 devices, and generic ARM64 devices.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="32-bit_x86_architectures"></span>
==== 32-bit x86 architectures ====
==== Architectures 32-bit x86 ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Le support des architectures 32-bit x86 (par exemple <code>i686</code>) est en déclin. Même si la plupart des paquets devraient toujours compiler et s'exécuter, la disponibilité de leur cache est significativement réduite <ref>https://discourse.nixos.org/t/limited-cache-availability-for-i686-32-bits-x86-architecture/37626</ref>.
Support for 32-bit x86 architectures (i.e. <code>i686</code>) has been declining. While most packages should still compile and run, their cache availability is significantly reduced<ref>https://discourse.nixos.org/t/limited-cache-availability-for-i686-32-bits-x86-architecture/37626</ref>. The 32-bit x86 ISO is no longer offered as a ready-built image, but it may still be built manually.
L'ISO 32-bit x86 n'est dorénavant plus proposée en tant qu'image prête à l'emploi, mais peut toujours être compilée manuellement.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="64-bit_x86_architectures"></span>
==== 64-bit x86 architectures ====
==== Architectures 64-bit x86 ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
La plupart des appareils <code>x86_64</code> devraient faire fonctionner NixOS sans problème.
Most <code>x86_64</code> devices should run NixOS without issues.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="32-bit_ARM_architectures"></span>
==== 32-bit ARM architectures ====
==== Architectures 32-bit ARM ====
</div>


{{Main|NixOS on ARM}}
{{Main|NixOS on ARM}}
<div lang="en" dir="ltr" class="mw-content-ltr">
NixOS n'est pas officiellement supportée sur les appareils ARM32 (tels que <code>armv6</code> et <code>armv7l</code>), cependant, pour certains de ces appareils, il pourrait y avoir un support de la communauté.
NixOS isn't officially supported on ARM32 devices (e.g. <code>armv6</code> and <code>armv7l</code>), however, for some of these devices, there may be community support.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="64-bit_ARM_architectures"></span>
==== 64-bit ARM architectures ====
==== Architectures 64-bit ARM ====
</div>


{{Main|NixOS on ARM}}
{{Main|NixOS on ARM}}
<div lang="en" dir="ltr" class="mw-content-ltr">
Tant qu'un appareil supporte le procédé de démarrage générique stystemd, NixOS devrait fonctionner parfaitement. Cependant, certains appareils spécifiques avec des bootloaders propriétaires peuvent avoir des problèmes pour faire tourner NixOS.
As long as a device supports the generic systemd boot process, NixOS should run out of the box. However, specific devices with proprietary bootloaders may have issues running it.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="MIPS_architectures"></span>
==== MIPS architectures ====
==== Architectures MIPS ====
</div>


{{Main|NixOS on MIPS}}
{{Main|NixOS on MIPS}}
<div lang="en" dir="ltr" class="mw-content-ltr">
Par le passé, il y avait un support limité pour les architectures MIPS dans NixOS, et les restes de ce support peuvent peut-être être trouvées dans Nixpkgs. Cependant, il n'y a pas de support officiel.
There used to be limited support for MIPS architectures in NixOS, and remnants of this support may still be found in Nixpkgs. However, there is no official support.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="RISC-V_architectures"></span>
==== RISC-V architectures ====
==== Architectures RISC-V ====
</div>


{{Main|RISC-V}}
{{Main|RISC-V}}


<div lang="en" dir="ltr" class="mw-content-ltr">
NixOS ne fournit pas de support officiel pour les appareils RISC-V. Cependant, plusieurs appareils peuvent bénéficier du support de la communauté.
NixOS does not provide official support for RISC-V devices. However, several devices may benefit from community support.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
== Usage ==
== Usage ==
</div>


<span id="declarative-configuration"></span>
<span id="declarative-configuration"></span>
<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Declarative_Configuration"></span>
=== Declarative Configuration ===
=== Configuration Déclarative ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Un des piliers de NixOS est son modèle de configuration déclarative ; où l'ensemble de l'état du système &mdash; y compris les paquets installés, les services système et les paramètres &mdash; est décrit dans des fichiers de configuration. Le fichier de départ est généralement situé ici : /etc/nixos/configuration.nix.
One of NixOS's defining features is its declarative configuration model, where the entire system state — including installed packages, system services, and settings — is described in configuration files. The primary file is typically located at <code>/etc/nixos/configuration.nix</code>.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Les changements de configuration sont appliqués atomiquement en utilisant <code>nixos-rebuild switch</code>, assurant la reproductibilité et permettant de revenir en arrière à un état précédant (rollback). La plupart des utilisateurs suivent leurs fichiers de configurations à l'aide d'un logiciel gestionnaire de versions, permettant des configurations cohérentes et portables. Ces lacunes sont souvent rectifiées après tir par des solutions de gestion de configuration comme Puppet, Ansible ou encore Chef. Ces outils essayent de rapprocher la configuration système de la description de l'état attendu. Néanmoins, ces outils ne sont pas intégrés dans la conception du système d'exploitation et sont simplement présents "au dessus", et la configuration du système d'exploitation pourrait toujours varier si un aspect de la configuration système n'a pas été spécifié dans la description de l'état attendu.  
Changes to the configuration are applied atomically using <code>nixos-rebuild switch</code>, ensuring reproducibility and the ability to roll back to previous states. Most users track their configuration files in a version control system, enabling consistent and portable system setups. These shortcomings are often rectified after-the-fact if at all by configuration management solutions such as Puppet, Ansible or Chef. These tools reconcile system configuration with a description of the expected state. However, these tools are not integrated into the operating system design and are simply layered on top, and OS configuration may still vary where an aspect of OS configuration has not been specified in the description of expected state.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Contrairement à des distributions plus conventionnelles, où la configuration système est souvent éclatés dans de nombreux fichiers édités manuellement, NixOS intègre la gestion de la configuration directement dans le système d'exploitation. Cela élimine toute dérive de la configuration et permet de rendre NixOS particulièrement adapté pour des déploiements automatisés et reproductibles.
Unlike conventional distributions, where system configuration is often scattered across manually edited files, NixOS integrates configuration management directly into the operating system. This eliminates configuration drift and makes NixOS particularly well-suited for automated, reproducible deployments.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Pour plus de détails et d'exemples sur les configurations NixOS, voir [[Special:MyLanguage/NixOS system configuration|configurations système NixOS]].
For more details and examples on NixOS configurations, see [[Special:MyLanguage/NixOS system configuration|NixOS system configuration]].
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Imperative_Operations"></span>
=== Imperative Operations ===
=== Opérations Impératives ===
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Même si NixOS est configurée autant que possible de manière déclarative, il y a quelques domaines où les opérations impératives sont toujours nécessaires ; cela inclut la gestion de l'environnement utilisateur et la gestion des canaux.
While NixOS is typically configured declaratively as much as possible, these are a few domains where imperative operations are still necessary; these include user environment management and channel management.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="User_Environments"></span>
==== User Environments ====
==== Environnements Utilisateur ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
En plus de la configuration déclarative du système, les utilisateurs de NixOS peuvent utiliser la commande impérative Nix nommée  <code>nix-env</code> pour installer des paquets locaux (seulement pour l'utilisateur en question), sans changer l'état du système. Voir la [[Special:MyLanguage/Nix#User Environments| section de l'article Nix sur les environnements utilisateur]] pour plus d'information.
In addition to declarative system configuration, NixOS users can utilize Nix's imperative <code>nix-env</code> command to install packages at the user level, without changing the system state. See the [[Special:MyLanguage/Nix#User Environments| user environments section of the Nix article]] for more information.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<span id="Channels"></span>
==== Channels ====
==== Canaux ====
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Dans l'[[Special:MyLanguage/Nix ecosystem|écosystème Nix]], les [[Special:MyLanguage/Channel branches|canaux]] (channels en anglais) sont un mécanisme pour distribuer un ensemble de [[Special:MyLanguage/Nixpkgs|paquets Nix]] et de définitions de modules [[Special:MyLanguage/NixOS|NixOS]]. Un canal représente un ensemble de définitions de paquets et de configurations système, organisé et versionné. Généralement cela correspond à une version particulière ou le dernier état de développement.
In the [[Special:MyLanguage/Nix ecosystem|Nix ecosystem]], [[Special:MyLanguage/Channel branches|channels]] are a mechanism for distributing collections of [[Special:MyLanguage/Nixpkgs|Nix packages]] and [[Special:MyLanguage/NixOS|NixOS]] module definitions. A channel represents a curated, versioned set of package definitions and system configurations, typically corresponding to a particular release or the latest available development state.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Lorsque les canaux sont utilisés, votre système ou l'[[Special:MyLanguage/ User Environment|environnement utilisateur]] récupère les définitions des paquets et les options depuis une URL qui pointe vers une image de l'ensemble des paquets Nix (Nixpkgs) et les modules NixOS associés.
When using channels, your system or [[Special:MyLanguage/User Environment|user environment]] pulls package definitions and options from a URL pointing to a specific snapshot of the Nix Packages collection (Nixpkgs) and associated NixOS modules.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
Pour plus d'information sur l'utilisation et la mise en place des canaux, merci de vous référer aux [[Special:MyLanguage/channel branches| branches]].
For more information on using and configuring nix channels, refer to [[Special:MyLanguage/channel branches|channel branches]].
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">

Latest revision as of 01:15, 22 November 2025

Introduction to Nix

Tools and applications

☶︎
This article or section needs to be expanded. Il faut que cette page soit une introduction accessible parce que c'est un des premiers articles que les nouveaux utilisateurs lisent ici. C'est pourquoi les sujets plus compliqués devraient être bougés dans d'autres articles. Further information may be found in the related discussion page. Please consult the pedia article metapage for guidelines on contributing.

NixOS est une distribution Linux basée sur Nix un gestionnaire de paquets et un système de construction. À l'échelle du système, il supporte la programmation déclarative au travers d'une gestion de configuration ainsi que les mises à jour atomiques et les "retours en arrière" (rollbacks), bien qu'il puisse aussi supporter des paquets impératifs ainsi que la gestion des utilisateurs. Dans NixOS, tous les composants de la distribution — y compris le noyau Linux, les paquets installés et les fichiers de configuration système — sont construits par Nix depuis des fonctions pures appelées expressions Nix.

Depuis que Nix met des exécutables en cache, cela permet d'avoir un compromis unique entre une approche orientée autour de l'exécutable présente dans des distributions comme Debian et une approche orientée autour du code source utilisée dans des distributions comme Gentoo. Les binaires peuvent être utilisés comme des composants standard, tandis que les paquets sur-mesure et les modules peuvent être utilisés automatiquement quand un binaire pré-compilé n'est pas disponible.

Stable NixOS releases are delivered twice a year (around the end of May and the end of November). NixOS was created by Eelco Dolstra and Armijn Hemel, and initially released in 2003. It is community developed and maintained under the stewardship of the NixOS Foundation.

Installation

Pour un guide d'installation complet, voir le chapitre "Installation" du guide de NixOS. Ce wiki inclut aussi des alternatives ou des guides supplémentaires, comme : Utiliser NixOS comme système de bureau.

La plupart des utilisateurs vont installer NixOS via une des images ISO. Les variantes "graphique" et "minimale" de l'ISO sont disponibles pour chaque architecture supportée ; les images "graphiques" sont adaptées pour les utilisateurs souhaitant installer un environnement de bureau, et les images "minimales" sont conçues pour les utilisateurs souhaitant installer NixOS comme serveur, ou désirant des images ISO de taille réduite. Les images ISO sont des images hybrides qui peuvent être gravées sur des supports optiques ou copiées sur une clé USB et utilisées telles quelles. Voir le guide d'installation pour plus de détails.

En supplément des images ISO, la page de téléchargement apporte un certain nombre de méthodes alternatives pour installer NixOS. Cela inclut :

  • Des machines virtuelles au format OVA (compatible avec VirtualBox),
  • Amazon EC2 AMIs,

Additionally, many existing Linux installations can be converted into NixOS installations using nixos-infect or nixos-in-place; this is particularly useful for installing NixOS on hosting providers which do not natively support NixOS.

Architectures système

NixOS fournit de manière native le support pour la plupart des appareils x86_64, ainsi que les appareils ARM64 génériques.

Architectures 32-bit x86

Le support des architectures 32-bit x86 (par exemple i686) est en déclin. Même si la plupart des paquets devraient toujours compiler et s'exécuter, la disponibilité de leur cache est significativement réduite [1]. L'ISO 32-bit x86 n'est dorénavant plus proposée en tant qu'image prête à l'emploi, mais peut toujours être compilée manuellement.

Architectures 64-bit x86

La plupart des appareils x86_64 devraient faire fonctionner NixOS sans problème.

Architectures 32-bit ARM

Main article: NixOS on ARM

NixOS n'est pas officiellement supportée sur les appareils ARM32 (tels que armv6 et armv7l), cependant, pour certains de ces appareils, il pourrait y avoir un support de la communauté.

Architectures 64-bit ARM

Main article: NixOS on ARM

Tant qu'un appareil supporte le procédé de démarrage générique stystemd, NixOS devrait fonctionner parfaitement. Cependant, certains appareils spécifiques avec des bootloaders propriétaires peuvent avoir des problèmes pour faire tourner NixOS.

Architectures MIPS

Main article: NixOS on MIPS

Par le passé, il y avait un support limité pour les architectures MIPS dans NixOS, et les restes de ce support peuvent peut-être être trouvées dans Nixpkgs. Cependant, il n'y a pas de support officiel.

Architectures RISC-V

Main article: RISC-V

NixOS ne fournit pas de support officiel pour les appareils RISC-V. Cependant, plusieurs appareils peuvent bénéficier du support de la communauté.

Usage

Configuration Déclarative

Un des piliers de NixOS est son modèle de configuration déclarative ; où l'ensemble de l'état du système — y compris les paquets installés, les services système et les paramètres — est décrit dans des fichiers de configuration. Le fichier de départ est généralement situé ici : /etc/nixos/configuration.nix.

Les changements de configuration sont appliqués atomiquement en utilisant nixos-rebuild switch, assurant la reproductibilité et permettant de revenir en arrière à un état précédant (rollback). La plupart des utilisateurs suivent leurs fichiers de configurations à l'aide d'un logiciel gestionnaire de versions, permettant des configurations cohérentes et portables. Ces lacunes sont souvent rectifiées après tir par des solutions de gestion de configuration comme Puppet, Ansible ou encore Chef. Ces outils essayent de rapprocher la configuration système de la description de l'état attendu. Néanmoins, ces outils ne sont pas intégrés dans la conception du système d'exploitation et sont simplement présents "au dessus", et la configuration du système d'exploitation pourrait toujours varier si un aspect de la configuration système n'a pas été spécifié dans la description de l'état attendu.

Contrairement à des distributions plus conventionnelles, où la configuration système est souvent éclatés dans de nombreux fichiers édités manuellement, NixOS intègre la gestion de la configuration directement dans le système d'exploitation. Cela élimine toute dérive de la configuration et permet de rendre NixOS particulièrement adapté pour des déploiements automatisés et reproductibles.

Pour plus de détails et d'exemples sur les configurations NixOS, voir configurations système NixOS.

Opérations Impératives

Même si NixOS est configurée autant que possible de manière déclarative, il y a quelques domaines où les opérations impératives sont toujours nécessaires ; cela inclut la gestion de l'environnement utilisateur et la gestion des canaux.

Environnements Utilisateur

En plus de la configuration déclarative du système, les utilisateurs de NixOS peuvent utiliser la commande impérative Nix nommée nix-env pour installer des paquets locaux (seulement pour l'utilisateur en question), sans changer l'état du système. Voir la section de l'article Nix sur les environnements utilisateur pour plus d'information.

Canaux

Dans l'écosystème Nix, les canaux (channels en anglais) sont un mécanisme pour distribuer un ensemble de paquets Nix et de définitions de modules NixOS. Un canal représente un ensemble de définitions de paquets et de configurations système, organisé et versionné. Généralement cela correspond à une version particulière ou le dernier état de développement.

Lorsque les canaux sont utilisés, votre système ou l'environnement utilisateur récupère les définitions des paquets et les options depuis une URL qui pointe vers une image de l'ensemble des paquets Nix (Nixpkgs) et les modules NixOS associés.

Pour plus d'information sur l'utilisation et la mise en place des canaux, merci de vous référer aux branches.

Internals

Comparison with traditional Linux Distributions

The main difference between NixOS and other Linux distributions is that NixOS does not follow the Linux Standard Base file system structure. On LSB-compliant systems software is stored under /{,usr}/{bin,lib,share} and configuration is generally stored in /etc. Software binaries are available in the user environment if they are placed in one of the LSB's /bin directories. When a program references dynamic libraries it will search for the required libraries in the LSB folders (/lib, /usr/lib).

In NixOS however /lib and /usr/lib do not exist. Instead all system libraries, binaries, kernels, firmware and configuration files are placed in the Nix store. The files and directories in /nix/store are named by hashes of the information describing the built data. All of the files and directories placed in the Nix store are immutable. /bin and /usr/bin are almost absent: they contain only /bin/sh and /usr/bin/env respectively, to provide minimal compatibility with existing scripts using shebang lines. User-level environments are implemented using a large number of symbolic links to all required packages and auxiliary files. These environments are called profiles and are stored in /nix/var/nix/profiles, each user having their own profiles. Structuring the system in this way is how NixOS obtains its key advantages over conventional Linux distributions, such as atomicity and rollback support.

Usage of the Nix store

A lot of confusion for newcomers arises from the fact that configuration is stored in the read-only /nix/store tree along with all the installed packages. This fact makes it impossible to manually edit system configuration; all configuration changes must be performed by editing the /etc/nixos/configuration.nix file and executing nixos-rebuild switch. NixOS provides the module system for editing all required configurations. Users should first use the option search tool to check if the option they need exists before attempting to manually add files or configuration via low-level NixOS features like activation scripts.

The system purity makes it possible to keep system configuration in a central place, without the need to edit multiple files. This configuration can be distributed or version controlled as desired. It also provides for determinism; if you provide the same inputs, the same version of Nixpkgs and the same /etc/nixos/configuration.nix you will get the exact same system state.

Modules

The NixOS module system as defined in Nixpkgs provides the means necessary to customize the configuration of the OS. It is used to enable and customize services such as nginx, enable firmware and customize the kernel.

All module configuration is generally performed by adding options to /etc/nixos/configuration.nix. Most of the examples in the wiki show how this file can be used to configure the OS.

The NixOS module system implements a typing system which allows typechecking of option settings. It also enables options defined in multiple places to be merged automatically. This allows you to spread your configuration over multiple files, and the options you set across all of those files will be merged together:

❄︎ /etc/nixos/configuration.nix
{
  imports = [
    ./basic-webserver.nix
    ./blog.nix
  ];
}
❄︎ /etc/nixos/basic-webserver.nix
{
  services.nginx.enable = true;
  services.nginx.virtualHosts."example.com" = {
    root = "/var/www/example.com";
  };
}
❄︎ /etc/nixos/blog.nix
{
  services.nginx.virtualHosts."blog.example.com" = {
    root = "/var/www/blog.example.com";
  };
}

See the Modules section of the NixOS Manual for more details.

Generations

Every time the system state is rebuilt using nixos-rebuild switch, a new generation is created. You can revert to the previous generation at any time, which is useful if a configuration change (or system update) turns out to be detrimental.

You can roll back via:

$ nix-env --rollback               # roll back a user environment
$ nixos-rebuild switch --rollback  # roll back a system environment

NixOS also places entries for previous generations in the bootloader menu, so as a last resort you can always revert to a previous configuration by rebooting. To set the currently booted generation as the default run

$ /run/current-system/bin/switch-to-configuration boot

Because NixOS keeps previous generations of system state available in case rollback is desired, old package versions aren't deleted from your system immediately after an update. You can delete old generations manually:

# delete generations older than 30 days
$ nix-collect-garbage --delete-older-than 30d
</div>

<div lang="en" dir="ltr" class="mw-content-ltr">
# delete ALL previous generations - you can no longer rollback after running this
$ nix-collect-garbage -d

List generations:

# as root
$ nix-env --list-generations --profile /nix/var/nix/profiles/system

Switch generations:

# as root switch to generation 204
$ nix-env --profile /nix/var/nix/profiles/system --switch-generation 204

delete broken generation(s):

# as root delete broken generations 205 and 206 
$ nix-env --profile /nix/var/nix/profiles/system --delete-generations 205 206

You can configure automatic garbage collection by setting the nix.gc options in /etc/nixos/configuration.nix. This is recommended, as it keeps the size of the Nix store down.

See also