Як створити локальний сховище для NixOS / nixpkgs?


17

Всі інструкції, які я знаходжу для створення локального сховища пакетів Nix, включають створення локального клону основного nixpkgsсховища та додавання до нього.

Чи є спосіб я створити невеликий сховище, що містить лише мої локальні додаткові пакети?

Відповіді:


6

Так, просто створіть вираз для одного пакету. Ви можете отримати залежності від nixpkgs за допомогою pkgs = import <nixpkgs> {};.


5

У цьому дописі у блозі є деякі деталі: http://sandervanderburg.blogspot.no/2014/07/managing-private-nix-packages-outside.html

Для отримання більш детальних деталей із "заземлення" є серія nix-pill: http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it- try.html

Але я думаю, що основним підходом є створення власної версії ~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix, скажімо, mypkgs.nixдодавання залежностей від "репо" за замовчуванням шляхом імпорту <nixpkgs>.

Встановіть пакети, виконуючи nix-env -f mypkgs.nix -i DERIVATION_NAME

Але так як nix заснований на повномасштабній мові, то, мабуть, можна зробити це нескінченно.


1

Я аж ніяк не експерт Nix, тому я не знаю, чи це найкращий спосіб, але я це роблю. У мене є локальний репозиторій для пакетів в $HOME/nix-local, який містить ряд пакунків vault/default.nix, і blackbox/default.nixт.д. , і config.nixфайл , який визначає packageOverridesїх називати. Тож щось на кшталт:

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

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

Повне репо можна побачити на https://github.com/telent/nix-local


4
Для тих, хто читає це приблизно з 2017 року, цей репо не наразі підтримується, і я б настійно пропонував би вам прочитати про "накладки", набагато більш чіткий спосіб зробити те, що раніше використовували
пакетOverrides
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.