Distributions Linux

NixOS : Installer NixOS facilement depuis l'image minimale

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

nixos-logo



Introduction



Dans l'article NixOS : Guide sur cette distribution déclarativeNixOS : Guide sur cette distribution déclarative, on a vu ce qu'était NixOS, et son concept.

Dans cet article, nous allons voir comment installer le système en partant de l'installation minimale.

Récupérer l'image et démarrer sur le live



Récupérer l'image d'installation minimale sur le site de NixOS (https://nixos.org/download).

Préparer une clé USB comme habituellement, ou meiire l'ISO sur une clé de type "Ventoy".

On boote dessus et on s'assure d'avoir du réseau.

Partitionnement depuis le live



Partitionnement classique



Voici un exemple de partitionnement "classique" sur le disque /dev/sda, avec une partition EFI et le reste en ext4.
NixOS dans sa documentation, place tout le /boot sur une partition FAT32 dans le cadre d'un amorçage via l'UEFI.

Initialisation du disque et création des partitions :
Code BASH :
parted /dev/sda -- mklabel gpt
parted /dev/sda -- mkpart ESP fat32 1MB 1GB
parted /dev/sda -- set 1 esp on
parted /dev/sda -- mkpart root ext4 1GB 100%


Formatage des partitions :
Code BASH :
mkfs.fat -F 32 -n boot /dev/sda1 
mkfs.ext4 -L nixos /dev/sda2 


On montra ensuite la partition root dans /mnt directement :
Code BASH :
mount /dev/sda2 /mnt


On créé ensuite le point de montage /boot :
Code BASH :
mkdir -p /mnt/boot


Et on monte cette partiton avec les droits spécifiques :
Code BASH :
mount -o umask=077 /dev/sda1 /mnt/boot



Génération de la configuration



Le fichier central de configuration de NixOS est /etc/nixos/configuration.nix.
Pour le générer automatiquement, ainsi que le fichier de configuration spécifique à la machine (hardware.nix), on utilisera :
Code BASH :
nixos-generate-config --root /mnt


Une information indique que les fichiers sont créés :
Code :
writing /mnt/etc/nixos/hardware-configuration.nix...
writing /mnt/etc/nixos/configuration.nix...


Modification de la configuration



Avant de lancer l'installation, on pourra modifier la configuration :
Code BASH :
nano /mnt/etc/nixos/configuration.nix


Certaines lignes de configurations sont présentes, il suffira de les modifier. D'autres sont commentées, on pourra les décommenter et les modifier.

Le bootloader par défaut est systemd-boot, il est activé grâce à :
Code BASH :
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;


Si on veut utiliser GRUB à la place (la dernière ligne permet d'activer le support pour les autres systèmes installés) :
Code BASH :
boot.loader.systemd-boot.enable = false;
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.grub.enable = true;
boot.loader.grub.device = "nodev"; 
boot.loader.grub.efiSupport = true;
boot.loader.grub.useOSProber = true;


On pourra modifier le nom d'hôte de la machine via :
Code BASH :
networking.hostName = "nixoslinuxtricks";


On pourra définir le fuseau horaire :
Code BASH :
time.timeZone = "Europe/Paris";


Le réseau est par défaut configuré automatiquement via un serveur DHCP.
Si on souhaite utiliser une IP Fixe, on ajoutera un bloc de ce type :
Code BASH :
{
  networking.interfaces.eth0.ipv4.addresses = [ {
    address = "192.168.21.33";
    prefixLength = 24;
  } ];
  networking.defaultGateway = "192.168.21.254";
  networking.nameservers = [ "192.168.21.251" ];
}


On configurera la locale du système en Français :
Code BASH :
i18n.defaultLocale = "fr_FR.UTF-8";


Pour créer un utilisateur (ici adrien), on indiquera le bloc suivant (wheel permettra l'accès à la commande sudo) :
Code BASH :
   users.users.adrien = {
     isNormalUser = true;
     extraGroups = [ "wheel" ];
   };


On pourra autoriser l'accès en SSH :
Code BASH :
services.openssh.enable = true;


Si on veut plus tard installer des logiciels non libre :
Code BASH :
nixpkgs.config.allowUnfree = true;


Une fois terminé, on lance l'installation :
Code BASH :
nixos-install


Lorsque le processus est presque terminé, on est invité à saisir le mot de passe du super utilisateur root :
Code :
setting root password...
New password: 
Retype new password: 
passwd: password updated successfully
installation finished!


Ce qui clos l'installation.

Si on a définit un utilisateur (c'est mon cas avec adrien), on pensera à initialiser le mot de passe de cet utilisateur via :
Code BASH :
nixos-enter --root /mnt -c 'passwd adrien'


On reboot et on est accueilli sur notre NixOS !


Paramétrage du système minimal



Toutes les étapes indiquées dans ce capitre concernent le fichier principal /etc/nixos/configuration.nix

Installation de la pile graphique



Pour installer le serveur graphique :
Code BASH :
services.xserver.enable = true;


On n'oubliera pas la disposition du clavier :
Code BASH :
services.xserver.xkb.layout = "fr";
services.xserver.xkb.variant = "oss";


Si on souhaite un gestionnaire de conexion, Lightdm sera installé et activé avec un environnement de bureau. On peut expliciter l'information :
Code BASH :
services.xserver.displayManager.lightdm.enable = true;


Si on prévois d'installer KDE Plasma, on pourra utiliser SDDM via :
Code BASH :
services.displayManager.sddm.enable = true;


Et si on veut utiliser GNOME, on préfèrera GDM via :
Code BASH :
services.xserver.displayManager.gdm.enable = true;


Installer un environnement de bureau



Suivant l'environnement de vureau, une ligne sera à ajouter.
Comme vous allez le voir, y en a un paquet.

Les principaux :
GNOME :
Code BASH :
services.xserver.desktopManager.gnome.enable = true;

Infos supplémentaires : https://nixos.wiki/wiki/GNOME

KDE Plasma 5:
Code BASH :
services.xserver.desktopManager.plasma5.enable = true;

Infos supplémentaires : https://nixos.wiki/wiki/KDE

KDE Plasma 6:
Code BASH :
services.xserver.desktopManager.plasma6.enable = true;

Infos supplémentaires : https://nixos.wiki/wiki/KDE

Xfce :
Code BASH :
services.xserver.desktopManager.xfce.enable = true;

Infos supplémentaires : https://nixos.wiki/wiki/Xfce

Cinnamon :
Code BASH :
services.xserver.desktopManager.cinnamon.enable = true;



Les autres environnements :
Budgie :
Code BASH :
services.xserver.desktopManager.budgie.enable = true;


CDE :
Code BASH :
services.xserver.desktopManager.cde.enable = true;


Deepin :
Code BASH :
services.xserver.desktopManager.deepin.enable = true;


Lumina :
Code BASH :
services.xserver.desktopManager.lumina.enable = true;


LxQt :
Code BASH :
services.xserver.desktopManager.lxqt.enable = true;


MATE :
Code BASH :
services.xserver.desktopManager.mate.enable = true;


Pantheon :
Code BASH :
services.xserver.desktopManager.pantheon.enable = true;


Phosh :
Code BASH :
services.xserver.desktopManager.phosh.enable = true;



Sans oublier les gestionnaires de fenêtre !!
Il y en a tellement que je vous en mets que quelques uns que je connais de nom :

Awesome :
Code BASH :
services.xserver.windowManager.awesome.enable = true;


BSPWM :
Code BASH :
services.xserver.windowManager.bspwm.enable = true;


Fluxbox :
Code BASH :
services.xserver.windowManager.fluxbox.enable = true;


i3 :
Code BASH :
services.xserver.windowManager.i3.enable = true;


IceWM :
Code BASH :
services.xserver.windowManager.icewm.enable = true;


JWM :
Code BASH :
services.xserver.windowManager.jwm.enable = true;


Openbox :
Code BASH :
services.xserver.windowManager.openbox.enable = true;


Qtile :
Code BASH :
services.xserver.windowManager.qtile.enable = true;


xmonad :
Code BASH :
services.xserver.windowManager.xmonad.enable = true;



Installer la pile son



Pour configurer le son avec pipewire :
Code BASH :
    services.pipewire = {
    enable = true;
    alsa.enable = true;
    alsa.support32Bit = true;
    pulse.enable = true;
  };



Configurer le réseau avec NetworkManager



Pour vénéficier du support VPN, Wi-Fi plus facilement, on peut mettre en place NetworkManager :
Code BASH :
 networking.networkmanager.enable = true;


On n'oubliera pas de mettre notre utilisateur dans le groupe NetworkManager :
Code BASH :
   users.users.adrien = {
     isNormalUser = true;
     extraGroups = [ "wheel" "networkmanager" ]; # Enable ‘sudo’ for the user.
   };