Les commandes Nix modernes (nix search, nix shell, nix run, nix build,
nix profile) remplacent les anciens outils (nix-env, nix-build,
nix-shell) avec une interface unifiée et des sorties plus lisibles. Ce guide
couvre le flux de travail quotidien : chercher un paquet, le tester sans
l’installer, l’ajouter au profil, le construire localement, et
inspecter ses métadonnées. Chaque commande est illustrée avec des exemples
testés sur une Debian 12 avec Nix 2.34.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Chercher un paquet dans nixpkgs avec
nix search - Lancer un binaire temporaire avec
nix shelletnix run - Gérer les paquets installés avec
nix profile(ajout, suppression, mise à jour) - Construire un paquet localement avec
nix build - Inspecter les métadonnées et dépendances d’un paquet
- Connaître les commandes utilitaires (
nix eval,nix path-info,nix why-depends)
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Les commandes modernes sont activées par l’option experimental-features = nix-command flakes
dans /etc/nix/nix.conf. Elles couvrent l’essentiel des besoins quotidiens :
- tester un outil rapidement sans polluer le système (démonstration, debug, comparaison de versions),
- installer des outils utilisateur sans droits root et sans conflits de dépendances,
- construire un projet de manière reproductible avant de le déployer,
- inspecter les dépendances d’un paquet avant de l’embarquer dans un conteneur ou une VM.
Chercher un paquet : nix search
Section intitulée « Chercher un paquet : nix search »Recherche par mot-clé
Section intitulée « Recherche par mot-clé »nix search nixpkgs htop* legacyPackages.x86_64-linux.htop (3.4.1)* legacyPackages.x86_64-linux.htop-vim (3.4.1)* legacyPackages.x86_64-linux.neohtop (1.2.0)La première évaluation de nixpkgs prend 30 à 60 secondes (évaluation de l’arbre complet). Les recherches suivantes utilisent un cache local et sont quasi instantanées.
Recherche avec expression régulière
Section intitulée « Recherche avec expression régulière »nix search accepte des expressions régulières pour affiner :
nix search nixpkgs "^python3$"Cette commande retourne uniquement le paquet dont le nom correspond exactement
à python3, sans les variantes (python3Packages.*, python3Full…).
Afficher les métadonnées
Section intitulée « Afficher les métadonnées »Pour obtenir la description d’un paquet :
nix eval nixpkgs#hello.meta.description"Program that produces a familiar, friendly greeting"Tester sans installer : nix shell et nix run
Section intitulée « Tester sans installer : nix shell et nix run »nix shell — un shell temporaire avec des paquets
Section intitulée « nix shell — un shell temporaire avec des paquets »nix shell ouvre un nouveau shell avec les paquets demandés dans le $PATH.
Rien n’est installé dans le profil :
nix shell nixpkgs#cowsay -c cowsay "Nix shell temporaire" ______________________< Nix shell temporaire > ---------------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||Après exécution, cowsay n’est plus disponible :
which cowsay# cowsay not foundL’option -c exécute une commande unique et quitte. Sans -c, un shell
interactif s’ouvre avec les paquets dans le $PATH.
Combiner plusieurs paquets
Section intitulée « Combiner plusieurs paquets »nix shell nixpkgs#jq nixpkgs#curl -c sh -c 'curl -s https://api.github.com/repos/NixOS/nix | jq .stargazers_count'Les deux paquets sont disponibles dans le même shell temporaire.
nix run — exécuter un binaire directement
Section intitulée « nix run — exécuter un binaire directement »nix run télécharge le paquet et exécute son binaire principal sans ouvrir
de shell :
nix run nixpkgs#bat -- --versionbat 0.26.1Le -- sépare les arguments de nix run de ceux passés au binaire.
Différence entre nix shell et nix run
Section intitulée « Différence entre nix shell et nix run »| Commande | Comportement | Cas d’usage |
|---|---|---|
nix shell nixpkgs#outil | Ouvre un shell avec outil dans le $PATH | Explorer, lancer plusieurs commandes |
nix shell nixpkgs#outil -c cmd | Exécute cmd dans un shell temporaire | Script, pipeline |
nix run nixpkgs#outil | Exécute le binaire principal directement | Test rapide, one-shot |
nix run nixpkgs#outil -- args | Exécute avec des arguments | Vérifier une version, lancer un serveur |
Gérer les paquets installés : nix profile
Section intitulée « Gérer les paquets installés : nix profile »Ajouter un paquet
Section intitulée « Ajouter un paquet »nix profile add nixpkgs#fdfd est maintenant disponible de manière permanente dans votre $PATH :
fd --versionfd 10.4.2Lister les paquets installés
Section intitulée « Lister les paquets installés »nix profile listName: fdFlake attribute: legacyPackages.x86_64-linux.fdStore paths: /nix/store/836lndidk1144z81npf27c7dcgmczid3-fd-10.4.2
Name: jqFlake attribute: legacyPackages.x86_64-linux.jqStore paths: /nix/store/fc13hvlj7541i1xmwdka7f61qicdzr5a-jq-1.8.1-bin
Name: ripgrepFlake attribute: legacyPackages.x86_64-linux.ripgrepStore paths: /nix/store/922crn2k3v8yaqk7anps80hba919lnds-ripgrep-15.1.0Supprimer un paquet
Section intitulée « Supprimer un paquet »nix profile remove fdremoving 'flake:nixpkgs#legacyPackages.x86_64-linux.fd'removed 1 packages, kept 2 packagesLe binaire fd disparaît du $PATH immédiatement. Le paquet reste dans le
store jusqu’au garbage collection.
Mettre à jour les paquets
Section intitulée « Mettre à jour les paquets »Pour mettre à jour un paquet spécifique :
nix profile upgrade ripgrepPour mettre à jour tous les paquets du profil :
nix profile upgrade '.*'Historique et rollback
Section intitulée « Historique et rollback »Chaque opération sur le profil crée une génération. Consultez l’historique et revenez en arrière si nécessaire :
nix profile historynix profile rollback # revient à la génération précédentenix profile rollback --to 2 # bascule vers une génération spécifiqueConstruire localement : nix build
Section intitulée « Construire localement : nix build »Construire et inspecter le résultat
Section intitulée « Construire et inspecter le résultat »nix build construit (ou télécharge depuis le cache) un paquet et crée un
lien symbolique result dans le répertoire courant :
nix build nixpkgs#hellols -la resultresult -> /nix/store/10s5j3mfdg22k1597x580qrhprnzcjwb-hello-2.12.3./result/bin/helloHello, world!Le lien result agit comme une racine GC : tant qu’il existe, le paquet
ne sera pas supprimé par le garbage collector.
Construire sans lien symbolique
Section intitulée « Construire sans lien symbolique »nix build nixpkgs#hello --no-linkLe paquet est construit dans le store mais aucun lien result n’est créé.
Utile pour pré-remplir le cache sans encombrer le répertoire courant.
Inspecter les paquets : commandes utilitaires
Section intitulée « Inspecter les paquets : commandes utilitaires »nix path-info — chemin et taille dans le store
Section intitulée « nix path-info — chemin et taille dans le store »nix path-info nixpkgs#ripgrep/nix/store/922crn2k3v8yaqk7anps80hba919lnds-ripgrep-15.1.0Avec les tailles (propre et closure) :
nix path-info -sSh nixpkgs#ripgrep/nix/store/922crn2k3v8yaqk7anps80hba919lnds-ripgrep-15.1.0 6.4 MiB 54.3 MiBLa première colonne est la taille propre du paquet, la seconde sa taille de closure (toutes dépendances incluses).
nix why-depends — tracer une dépendance
Section intitulée « nix why-depends — tracer une dépendance »Pour comprendre pourquoi un paquet dépend d’un autre :
nix why-depends nixpkgs#ripgrep nixpkgs#pcre2Cette commande affiche la chaîne de dépendances qui relie ripgrep à pcre2.
nix derivation show — recette de construction
Section intitulée « nix derivation show — recette de construction »nix derivation show nixpkgs#hello 2>&1 | head -5{"derivations":{"7mdg60drrnh0wq1j8hmmbhll47czm107-hello-2.12.3.drv":{ "args":["-e","...source-stdenv.sh","...default-builder.sh"], "builder":"/nix/store/v8sa6r6q037ihghxfbwzjj4p59v2x0pv-bash-5.3p9/bin/bash", ...Une dérivation est la recette complète pour construire un paquet : sources, dépendances, builder, variables d’environnement. C’est l’élément fondamental qui garantit la reproductibilité.
Récapitulatif des commandes
Section intitulée « Récapitulatif des commandes »| Commande | Usage | Modifie le profil ? |
|---|---|---|
nix search nixpkgs <terme> | Chercher un paquet | Non |
nix shell nixpkgs#pkg | Shell temporaire avec le paquet | Non |
nix run nixpkgs#pkg | Exécuter le binaire principal | Non |
nix build nixpkgs#pkg | Construire et créer ./result | Non |
nix profile add nixpkgs#pkg | Installer dans le profil | Oui |
nix profile remove pkg | Désinstaller du profil | Oui |
nix profile upgrade pkg | Mettre à jour | Oui |
nix profile list | Lister les paquets installés | Non |
nix profile history | Historique des générations | Non |
nix profile rollback | Revenir à la génération précédente | Oui |
nix eval nixpkgs#pkg.attr | Évaluer une expression | Non |
nix path-info nixpkgs#pkg | Chemin et taille dans le store | Non |
nix why-depends A B | Tracer une dépendance | Non |
nix derivation show nixpkgs#pkg | Afficher la recette (.drv) | Non |
À retenir
Section intitulée « À retenir »nix searchexplore les 100 000+ paquets de nixpkgs — la première évaluation est lente, les suivantes sont instantanées.nix shelletnix runpermettent de tester un outil sans l’installer — idéal pour le débogage ou la comparaison de versions.nix profilegère les paquets installés de manière permanente avec un historique complet et un rollback atomique.nix buildconstruit un paquet et crée un lienresult— utile pour inspecter ou déployer le résultat.- Les commandes utilitaires (
eval,path-info,why-depends,derivation show) aident à comprendre la composition d’un paquet. - Toutes ces commandes utilisent la syntaxe
nixpkgs#paquetpour désigner un paquet — c’est une référence flake qui sera détaillée dans le guide dédié.