Wie erstelle ich ein lokales Repository für NixOS / nixpkgs?

17

Alle Anweisungen, die ich zum Erstellen eines lokalen Repositorys von Nix-Paketen finde, umfassen das Erstellen eines lokalen Klons des Haupt- nixpkgsRepositorys und das Hinzufügen dazu.

Gibt es eine Möglichkeit, ein kleines Repository zu erstellen, das nur meine lokalen Add-On-Pakete enthält?

Michael Ekstrand
quelle

Antworten:

6

Ja, erstelle einfach einen Ausdruck für das einzelne Paket. Sie können Abhängigkeiten von nixpkgs von erhalten pkgs = import <nixpkgs> {};.

Vladimír Čunát
quelle
5

Dieser Blog-Beitrag enthält einige Details: http://sandervanderburg.blogspot.no/2014/07/managing-private-nix-packages-outside.html

Für mehr Details von Grund auf gibt es die nix-pill-Serie: http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it- try.html

Ich denke jedoch, dass der grundlegende Ansatz darin besteht, eine eigene Version von zu erstellen ~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix, mypkgs.nixindem beispielsweise durch Importieren Abhängigkeiten aus dem Standard-Repository hinzugefügt werden <nixpkgs>.

Installieren Sie Pakete, indem Sie tun nix-env -f mypkgs.nix -i DERIVATION_NAME

Aber da nix auf einer vollständigen Sprache basiert, gibt es unendlich viele Möglichkeiten, dies zu tun.

Olejorgenb
quelle
1

Ich bin auf keinen Fall ein Nix-Experte, daher weiß ich nicht, ob dies der beste Weg ist, aber es ist, was ich tue. Ich habe einen lokalen Repo für Pakete in $HOME/nix-local, die eine Reihe von Paketdateien enthalten vault/default.nix, blackbox/default.nixetc und eine config.nixDatei , die definiert , packageOverridessie zu nennen. Also so etwas wie:

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

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

Das vollständige Repo finden Sie unter https://github.com/telent/nix-local

telent
quelle
4
Für alle, die dies seit etwa 2017 lesen, wird dieses Repo derzeit nicht mehr gepflegt. Ich empfehle dringend, dass Sie sich über "Overlays" informieren, eine viel sauberere Methode, um das zu tun, was packageOverrides früher getan hat
telent