Comment créer un référentiel local pour NixOS / nixpkgs?

17

Toutes les instructions que je trouve pour créer un référentiel local de packages Nix impliquent de créer un clone local du nixpkgsréférentiel principal et d'y ajouter.

Existe-t-il un moyen de créer un petit référentiel contenant uniquement mes packages de modules complémentaires locaux?

Michael Ekstrand
la source

Réponses:

6

Oui, créez simplement une expression pour le package unique. Vous pouvez obtenir les dépendances de nixpkgs par pkgs = import <nixpkgs> {};.

Vladimír Čunát
la source
5

Cet article de blog contient quelques détails: http://sandervanderburg.blogspot.no/2014/07/managing-private-nix-packages-outside.html

Pour plus de détails de bas niveau, il y a la série nix-pill: http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it- try.html

Mais je pense que l'approche de base consiste à créer votre propre version de ~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix, disons en mypkgs.nixajoutant des dépendances à partir du "repo" par défaut en l'important <nixpkgs>.

Installer des packages en faisant nix-env -f mypkgs.nix -i DERIVATION_NAME

Mais comme nix est basé sur un langage complet, il y a infiniment de façons de le faire, je suppose.

olejorgenb
la source
1

Je ne suis en aucun cas un expert Nix, donc je ne sais pas si c'est la meilleure façon, mais c'est ce que je fais. J'ai un dépôt local pour les packages dans $HOME/nix-local, qui contient un certain nombre de fichiers de packages vault/default.nix, blackbox/default.nixetc. et un config.nixfichier qui définit packageOverridespour les appeler. Donc quelque chose comme:

$ cat nix-local/config.nix
{
  packageOverrides = pkgs: rec {
    vault = pkgs.callPackage ./vault {};
    blackbox = pkgs.callPackage ./blackbox {};
    # ...
}

$ export NIXPKGS_CONFIG=$HOME/nix-local/config.nix    

Vous pouvez voir le repo complet sur https://github.com/telent/nix-local

telent
la source
4
Pour tous ceux qui lisent ceci depuis environ 2017, ce dépôt n'est pas actuellement maintenu et je vous suggère fortement de lire sur les "superpositions", une manière beaucoup plus propre de faire ce que les overwides de package faisaient
telent