Les paquets hors nixpkgs
Quelques programmes installés par le framework n’existent pas dans
nixpkgs 🡕. Leurs recettes de construction
vivent dans dnf/pkgs/, et sont exposées à tous les hôtes comme n’importe quel
paquet, sous pkgs.<nom>.
Où mettre quoi
Section intitulée « Où mettre quoi »Trois emplacements existent pour un paquet qui sort de l’ordinaire, avec trois intentions différentes.
| Emplacement | Pour quoi | Durée de vie |
|---|---|---|
dnf/pkgs/ | Absent de nixpkgs, installé par les hôtes ou les utilisateurs. | Jusqu’à publication dans nixpkgs. |
dnf/lib/overlays/ | Correctif sur un paquet nixpkgs existant (build cassé, PR en attente). | Temporaire, retiré dès le correctif amont. |
inputs de dnf/flake.nix | Ce dont la machinerie du framework a besoin (dnf-generator, colmena). | Permanente. |
Arborescence
Section intitulée « Arborescence »dnf/pkgs/├── default.nix <-- jeu de paquets, découvert depuis les dossiers├── overlay.nix <-- le même jeu en overlay -> pkgs.<nom>└── <nom>/package.nix <-- la dérivationUn dossier = un paquet. default.nix scanne les dossiers, il n’y a donc aucun
registre à tenir à jour. L’overlay, lui, est appliqué une fois pour toutes par
dnf/lib/mk-configuration.nix, sur tous les hôtes.
Ajouter un paquet
Section intitulée « Ajouter un paquet »-
Créer
dnf/pkgs/<nom>/package.nix, sous formecallPackageclassique, avec unmetacomplet (description,homepage,license,mainProgram,platforms). Épingler la version stable, pas une branche. -
git addle dossier : les flakes ignorent les fichiers non suivis. -
Construire une première fois pour figer les empreintes, que Nix affiche dans son message d’erreur :
Fenêtre de terminal nix build .#<nom> -
just cleanpuis commiter.
Rien d’autre à câbler. Le paquet est alors utilisable dans n’importe quel module NixOS ou Home Manager, comme un paquet nixpkgs :
(lib.mkIf cfg.enableEssentials rename-simple)Mettre à jour un paquet
Section intitulée « Mettre à jour un paquet »À lancer dans dnf/ ou à la racine d’un projet de co-développement : un
dnf/ lié au store Nix est en lecture seule.
just pkg-update <nom>nix-update 🡕 cherche la dernière version
publiée en amont, puis réécrit la version et les empreintes dans package.nix.
Vérifier ensuite le changelog amont, reconstruire, et commiter.
Publier dans nixpkgs
Section intitulée « Publier dans nixpkgs »L’objectif, à terme, pour tout paquet d’intérêt général :
- Déplacer le dossier dans un clone de nixpkgs, sous le shard à deux lettres du
nom (
pkgs/by-name/re/rename-simple/). - Ajouter l’entrée
maintainers, ouvrir la pull request. - Une fois la PR fusionnée et remontée dans
nixos-unstable, supprimer le dossier dednf/pkgs/.
pkgs.<nom> continue de résoudre, depuis nixpkgs cette fois : aucun module à
modifier.