Aller au contenu

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>.

Trois emplacements existent pour un paquet qui sort de l’ordinaire, avec trois intentions différentes.

EmplacementPour quoiDuré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.nixCe dont la machinerie du framework a besoin (dnf-generator, colmena).Permanente.
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érivation

Un 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.

  1. Créer dnf/pkgs/<nom>/package.nix, sous forme callPackage classique, avec un meta complet (description, homepage, license, mainProgram, platforms). Épingler la version stable, pas une branche.

  2. git add le dossier : les flakes ignorent les fichiers non suivis.

  3. Construire une première fois pour figer les empreintes, que Nix affiche dans son message d’erreur :

    Fenêtre de terminal
    nix build .#<nom>
  4. just clean puis commiter.

Rien d’autre à câbler. Le paquet est alors utilisable dans n’importe quel module NixOS ou Home Manager, comme un paquet nixpkgs :

dnf/home/modules/advanced.nix
(lib.mkIf cfg.enableEssentials rename-simple)

À lancer dans dnf/ ou à la racine d’un projet de co-développement : un dnf/ lié au store Nix est en lecture seule.

Fenêtre de terminal
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.

L’objectif, à terme, pour tout paquet d’intérêt général :

  1. Déplacer le dossier dans un clone de nixpkgs, sous le shard à deux lettres du nom (pkgs/by-name/re/rename-simple/).
  2. Ajouter l’entrée maintainers, ouvrir la pull request.
  3. Une fois la PR fusionnée et remontée dans nixos-unstable, supprimer le dossier de dnf/pkgs/.

pkgs.<nom> continue de résoudre, depuis nixpkgs cette fois : aucun module à modifier.