Как мне создать локальный репозиторий для 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 основан на полном языке, я думаю, что вы можете сделать это бесконечно.

olejorgenb
источник
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

telent
источник
4
Для тех, кто читает это примерно с 2017 года, этот репо в настоящее время не поддерживается, и я настоятельно рекомендую вам ознакомиться с «оверлеями», намного более чистым способом сделать то, что раньше делал
packageOverrides