Como crio um repositório local para o NixOS / nixpkgs?


17

Todas as instruções que encontro para criar um repositório local de pacotes Nix envolvem a criação de um clone local do nixpkgsrepositório principal e a adição disso.

Existe uma maneira de criar um pequeno repositório contendo apenas meus pacotes de complemento locais?

Respostas:


6

Sim, basta criar uma expressão para o pacote único. Você pode obter dependências do nixpkgs por pkgs = import <nixpkgs> {};.


5

Esta postagem do blog tem alguns detalhes: http://sandervanderburg.blogspot.no/2014/07/managing-private-nix-packages-outside.html

Para mais detalhes detalhados e de baixo nível, há a série nix-pill: http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it- try.html

Mas acho que a abordagem básica é criar sua própria versão do ~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix, digamos, mypkgs.nixadicionar dependências do "repo" padrão importando <nixpkgs>.

Instale pacotes executando nix-env -f mypkgs.nix -i DERIVATION_NAME

Mas como o nix é baseado em uma linguagem completa, existem infinitas maneiras de fazer isso, eu acho.


1

Eu não sou especialista em Nix, então não sei se essa é a melhor maneira, mas é o que faço. Eu tenho um repositório local para pacotes em $HOME/nix-local, que contém vários arquivos de pacotes vault/default.nix, blackbox/default.nixetc. e um config.nixarquivo que define packageOverridescomo chamá-los. Então, 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    

Você pode ver o repo completo em https://github.com/telent/nix-local


4
Para qualquer pessoa que esteja lendo isso desde 2017, este repositório não é mantido no momento e eu sugiro fortemente que você leia sobreposições, uma maneira muito mais limpa de fazer o que o packageOverrides costumava fazer
telent
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.