Skip to main content

Gestion des paquets sur NixOS

Gestion des paquets sur NixOS

NixOS propose plusieurs façons d’installer des paquets, chacune avec ses avantages.

Méthode 1 : Dans configuration.nix (recommandée)

C’est la méthode déclarative, recommandée pour les paquets permanents.

{
  environment.systemPackages = with pkgs; [
    git
    vim
    htop
    curl
    docker
    nginx
  ];
}

Puis appliquer :

sudo nixos-rebuild switch

Avantages :

  • Reproductible
  • Versionné (si configuration.nix est dans Git)
  • Appliqué à tous les utilisateurs

Méthode 2 : nix-env (par utilisateur)

Installation impérative, par utilisateur :

nix-env -iA nixos.htop

Lister les paquets installés :

nix-env -q

Supprimer un paquet :

nix-env -e htop

Mettre à jour tous les paquets utilisateur :

nix-env -u

Méthode 3 : nix-shell (temporaire)

Lancer un shell avec des paquets disponibles temporairement :

nix-shell -p python3 nodejs

Les paquets sont disponibles uniquement dans ce shell. Utile pour tester ou pour des besoins ponctuels.

Méthode 4 : nix run (exécution directe)

Exécuter un programme sans l’installer :

nix run nixpkgs#cowsay -- "Hello NixOS"

Rechercher des paquets

En ligne : https://search.nixos.org/packages

En ligne de commande :

nix search nixpkgs htop

Ou avec l’ancienne commande :

nix-env -qaP '.*htop.*'

Canaux (channels)

Les canaux définissent la version des paquets disponibles.

Lister les canaux :

sudo nix-channel --list

Résultat typique :

nixos https://nixos.org/channels/nixos-24.05

Mettre à jour les canaux :

sudo nix-channel --update

Changer de canal (ex: passer en unstable) :

sudo nix-channel --add https://nixos.org/channels/nixos-unstable nixos
sudo nix-channel --update
sudo nixos-rebuild switch

Paquets unfree

Certains paquets ont des licences non-libres (Chrome, VSCode, etc.). Pour les autoriser :

{
  nixpkgs.config.allowUnfree = true;

  environment.systemPackages = with pkgs; [
    google-chrome
    vscode
  ];
}

Overlays : modifier des paquets

Les overlays permettent de personnaliser ou remplacer des paquets :

{
  nixpkgs.overlays = [
    (final: prev: {
      htop = prev.htop.overrideAttrs (old: {
        # Modifications ici
      });
    })
  ];
}

Résumé des méthodes

MéthodePortéePersistanceUsage
configuration.nixSystèmePermanentePaquets essentiels
nix-envUtilisateurPermanentePaquets personnels
nix-shellShellTemporaireTests, dev
nix runCommandeAucuneExécution ponctuelle