L'un des premiers types d'expression Nix que l'on rencontre en apprenant à utiliser le gestionnaire de packages Nix est default.nix
; sur le merveilleux NixOS IRC channel j'ai appris l'existence de Shell.nix
et release.nix
ainsi que.
J'ai l'impression que - à peu près -default.nix
doit être utilisé avec nix-build
pour simplement construire le package, Shell.nix
est utilisé avec nix-Shell
pour créer un environnement interactif avec le package et release.nix
est utilisé avec nixops
dans le déploiement du package.
Comme cela est probablement incomplet et partiellement incorrect, et comme cela ne semble pas être clairement documenté, je voudrais une explication claire et précise de ces sortes de "fichiers standard"; en particulier, pour chacun de ces types de fichiers (ainsi que tout autre fichier standard qui me manque), je voudrais savoir:
Comme question supplémentaire, je veux savoir quels fichiers, le cas échéant, devraient être utilisés lors de l'installation d'un package dans un module NixOS? Comment cela se ferait-il?
Comme l'a dit @danbst uniquement default.nix
et Shell.nix
ont des significations spéciales pour l'outillage nix, en dehors de cela il n'y a pas de véritable standard et tout le monde est libre d'utiliser ce qui correspond le mieux à ses besoins.
Cela dit, cela ne signifie pas que vous ne pouvez pas définir votre propre ensemble de règles, personnellement pour un seul projet de dérivation, j'aime organiser les fichiers nix de la manière suivante:
default.nix
: Utilisez callpackage
pour importer derivation.nix
.derivation.nix
: fichier de dérivation de style nixpkgs.Shell.nix
: fichier nix-Shell.module.nix
: Fichier de module NixOS, importation default.nix
.test.nix
: Fichier de test NixOS.release.nix
: Déclaration Hydra jobset.Nous avons eu une discussion sur ce sujet lors du Meetup Tokyo NixOS, un exemple d'une telle organisation de code peut être trouvé ici .
Tout d'abord, default.nix
et Shell.nix
ont des significations spéciales dans l'outil Nix, mais release.nix
est pratique.
Suivant, default.nix
est utilisé comme fichier par défaut lors de l'exécution de nix-build
, et Shell.nix
est utilisé comme fichier par défaut lors de l'exécution de nix-Shell
. Comme tu l'as dit.
Suivant, default.nix
n'est pas utilisé uniquement pour nix-build
. Par exemple, <nixpkgs/lib/default.nix>
est utilisé comme agrégateur pour les fonctions et ne contient pas de dérivations. Donc pas tous les default.nix
est censé être "construit" (mais si default.nix
est un ensemble d'attributs de dérivations, il sera constructible et nix-build
les construira tous).
Suivant, nix-Shell
utilisera default.nix
sinon Shell.nix
est trouvé.
Suivant, default.nix
est utilisé comme fichier par défaut lors de l'importation du répertoire. Donc, si vous écrivez x = import ./some/directory;
, puis ./some/directory/default.nix
sera importé. Cela devrait en fait expliquer pourquoi "nix-build ."
les usages default.nix
.
Et enfin, il existe deux formats communs pour les dérivations dans default.nix
: dérivation et callPackage
dérivation. Vous ne pouvez pas nix-build
le dernier. Presque tous les packages de nixpkgs sont écrits dans ce style, voir hello
. Mais tu peux nix-build -E 'with import <nixpkgs> { }; callPackage ./path/to/default.nix { }'
comme solution de contournement. nix-Shell
prend également en charge ce -E
argument.