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 »nix search interroge un flake dont vous devez donner le nom en premier
argument, ici nixpkgs. C'est ce qui la distingue de apt search : la commande
ne cherche pas dans « les paquets disponibles » en général, mais dans la
collection que vous désignez. Le nom exact retourné, par exemple
legacyPackages.x86_64-linux.htop, est celui que les autres commandes Nix
attendront ensuite.
Recherche par mot-clé
Section intitulée « Recherche par mot-clé »Le terme est cherché dans le nom et la description des paquets, ce qui explique le nombre de résultats sur un mot courant.
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 »Ces deux commandes téléchargent le paquet dans le store et le rendent exécutable immédiatement, sans jamais toucher au profil ni au système. C'est l'usage qui remplace le classique « j'installe pour essayer, je désinstallerai plus tard » : rien n'est à désinstaller puisque rien n'a été installé. Le paquet occupe malgré tout de l'espace disque jusqu'au prochain garbage collection.
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 »Chaque paquet supplémentaire s'ajoute comme un argument distinct, préfixé de son flake : il n'y a pas de séparateur ni de liste à quoter.
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 »Les quatre formes ci-dessous se distinguent sur deux points : est-ce qu'un
shell est ouvert, et est-ce que plusieurs paquets sont accessibles.
Retenez que nix run ne lance que le binaire principal déclaré par le paquet,
ce qui exclut les outils annexes qu'il installe par ailleurs ; dans ce cas, il
faut passer par nix shell.
| 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 »Le profil est l'ensemble des paquets rendus disponibles en permanence pour
votre compte, sans droits root et sans conflit avec ceux de la distribution.
Chaque opération y crée une génération numérotée, ce qui rend l'installation
et la désinstallation réversibles. Les sous-commandes suivent la même logique
que n'importe quel gestionnaire de paquets : add, list, remove, upgrade.
Ajouter un paquet
Section intitulée « Ajouter un paquet »Aucun sudo n'est nécessaire : le paquet est ajouté au profil de l'utilisateur
courant, pas au système.
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 »La sortie donne pour chaque entrée le chemin dans le store, seule façon de connaître la version réellement installée, le nom du paquet ne la contenant pas.
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 »La suppression se fait par nom de paquet, pas par la référence flake complète utilisée à l'installation.
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 »nix build produit un paquet dans le store sans l'ajouter au profil, donc sans
le rendre disponible dans le $PATH. En pratique la construction est souvent
instantanée : Nix vérifie d'abord si le résultat existe déjà dans le cache
binaire public et se contente alors de le télécharger. La compilation locale
n'a lieu que si aucune version pré-construite ne correspond exactement.
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 »Sans lien result, il n'y a plus de racine GC : le paquet construit devient
éligible à la suppression au prochain garbage collection.
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 »Ces trois commandes répondent aux questions qui se posent avant d'embarquer un paquet dans une image de conteneur ou une VM : combien pèse-t-il une fois ses dépendances comptées, pourquoi tire-t-il telle bibliothèque, et comment est-il construit. Aucune ne modifie le profil ni le système.
nix path-info, chemin et taille dans le store
Section intitulée « nix path-info, chemin et taille dans le store »Sans option, la commande n'affiche que le chemin ; il faut -s pour la taille
propre, -S pour la closure et -h pour des unités lisibles.
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 »La sortie est un JSON volumineux, d'où le head -5 de l'exemple ; la
redirection 2>&1 récupère au passage les messages d'évaluation émis sur la
sortie d'erreur.
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 »La colonne de droite est la plus utile au quotidien : elle sépare les commandes
qui laissent le système inchangé de celles qui créent une nouvelle
génération de profil. Les premières sont sans conséquence et peuvent être
essayées librement ; les secondes se défont avec nix profile rollback.
| 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 |
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Vérifiez que l'essentiel de ce guide est acquis. Les questions portent uniquement sur ce qui vient d'être expliqué ici.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
À 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é.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Le langage Nix : Écrivez vos premières expressions pour personnaliser vos environnements.
- Environnements de développement : Créez des shells reproductibles par projet avec nix develop.