¿Cómo creo un repositorio local para NixOS / nixpkgs?

17

Todas las instrucciones que encuentro para crear un repositorio local de paquetes de Nix implican crear un clon local del nixpkgsrepositorio principal y agregar a eso.

¿Hay alguna manera de crear un pequeño repositorio que solo contenga mis paquetes de complementos locales?

Michael Ekstrand
fuente

Respuestas:

6

Sí, solo cree una expresión para el paquete único. Puede obtener dependencias de nixpkgs por pkgs = import <nixpkgs> {};.

Vladimír Čunát
fuente
5

Esta publicación de blog tiene algunos detalles: http://sandervanderburg.blogspot.no/2014/07/managing-private-nix-packages-outside.html

Para obtener más bajo nivel desde el terreno plano de los detalles están las series nix píldoras: http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it- try.html

Pero creo que el enfoque básico es crear su propia versión de ~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix, por ejemplo mypkgs.nixañadiendo dependencias del "repo" por defecto mediante la importación <nixpkgs>.

Instalar paquetes haciendo nix-env -f mypkgs.nix -i DERIVATION_NAME

Pero dado que nix se basa en un lenguaje completo, supongo que hay infinitas formas de hacerlo.

olejorgenb
fuente
1

De ninguna manera soy un experto en Nix, así que no sé si esta es la mejor manera, pero es lo que hago. Tengo un repositorio local para paquetes $HOME/nix-local, que contiene varios archivos de paquete vault/default.nix, blackbox/default.nixetc. y un config.nixarchivo que define packageOverridesllamarlos. Entonces algo como:

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

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

Puede ver el repositorio completo en https://github.com/telent/nix-local

telent
fuente
44
Para cualquiera que lea esto desde alrededor de 2017, esta cesión temporal no es mantenido actualmente y sugeriría encarecidamente que lea sobre "superposiciones", una forma más limpia mucho que ver lo que solían hacer packageOverrides
telent