Bagaimana cara membuat repositori lokal untuk NixOS / nixpkgs?

17

Semua instruksi yang saya temukan untuk membuat repositori lokal dari paket Nix melibatkan pembuatan klon lokal dari nixpkgsrepositori utama dan menambahkannya.

Apakah ada cara saya bisa membuat repositori kecil hanya berisi paket add-on lokal saya?

Michael Ekstrand
sumber

Jawaban:

6

Ya, cukup buat ekspresi untuk paket tunggal. Anda bisa mendapatkan dependensi dari nixpkgs dengan pkgs = import <nixpkgs> {};.

Vladimír Čunát
sumber
5

Posting blog ini memiliki beberapa detail: http://sandervanderburg.blogspot.no/2014/07/manajemen-private-nix-packages-outside.html

Untuk detail level rendah dari bawah ke atas, ada seri nix-pill: http://lethalman.blogspot.no/2014/07/nix-pill-1-why-you-should-give-it- coba.html

Tapi saya pikir pendekatan dasarnya adalah membuat versi Anda sendiri ~/.nix-defexpr/channels_root/nixos/pkgs/top-level/all-packages.nix, misalnya mypkgs.nixmenambahkan dependensi dari "repo" default dengan mengimpor <nixpkgs>.

Instal paket dengan melakukan nix-env -f mypkgs.nix -i DERIVATION_NAME

Tapi karena nix didasarkan pada bahasa yang lengkap, ada banyak cara tak terbatas yang bisa Anda lakukan, saya kira.

olejorgenb
sumber
1

Saya bukan ahli Nix jadi saya tidak tahu apakah ini cara terbaik, tapi itulah yang saya lakukan. Saya memiliki repo lokal untuk paket di $HOME/nix-local, yang berisi sejumlah file paket vault/default.nix, blackbox/default.nixdll dan config.nixfile yang mendefinisikan packageOverridesuntuk memanggil mereka. Jadi sesuatu seperti:

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

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

Anda dapat melihat repo lengkap di https://github.com/telent/nix-local

telent
sumber
4
Untuk siapa pun yang membaca ini sejak sekitar tahun 2017, repo ini saat ini tidak dipelihara dan saya akan sangat menyarankan Anda membaca tentang "overlay", yang jauh cara yang bersih untuk melakukan apa packageOverrides digunakan untuk melakukan
telent