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éthode | Portée | Persistance | Usage |
|---|---|---|---|
| configuration.nix | Système | Permanente | Paquets essentiels |
| nix-env | Utilisateur | Permanente | Paquets personnels |
| nix-shell | Shell | Temporaire | Tests, dev |
| nix run | Commande | Aucune | Exécution ponctuelle |