nix-index adalah alat untuk menemukan dengan cepat paket yang menyediakan file tertentu di nixpkgs
. Ini mengindeks derivasi yang dibangun yang ditemukan dalam cache biner.
$ nix-locate 'bin/hello'
hello.out 29,488 x /nix/store/bdjyhh70npndlq3rzmggh4f2dzdsj4xy-hello-2.10/bin/hello
linuxPackages_4_4.dpdk.examples 2,022,224 x /nix/store/jlnk3d38zsk0bp02rp9skpqk4vjfijnn-dpdk-16.07.2-4.4.52-examples/bin/helloworld
linuxPackages.dpdk.examples 2,022,224 x /nix/store/rzx4k0pb58gd1dr9kzwam3vk9r8bfyv1-dpdk-16.07.2-4.9.13-examples/bin/helloworld
linuxPackages_4_10.dpdk.examples 2,022,224 x /nix/store/wya1b0910qidfc9v3i6r9rnbnc9ykkwq-dpdk-16.07.2-4.10.1-examples/bin/helloworld
linuxPackages_grsec_nixos.dpdk.examples 2,022,224 x /nix/store/2wqv94290pa38aclld7sc548a7hnz35k-dpdk-16.07.2-4.9.13-examples/bin/helloworld
camlistore.out 7,938,952 x /nix/store/xn5ivjdyslxldhm5cb4x0lfz48zf21rl-camlistore-0.9/bin/hello
membuat basis data:
$ nix run github:nix-community/nix-index#nix-index
permintaan untuk file:
$ nix run github:nix-community/nix-index#nix-locate -- bin/hello
Untuk menginstal nix-index versi pengembangan terbaru, cukup clone repo dan jalankan nix-env -if.
:
$ git clone https://github.com/nix-community/nix-index
$ cd nix-index
$ nix-env -if.
Untuk versi stabil, Anda dapat memeriksa tag terbaru (lihat daftar di sini) atau menggunakan 'repositori' Nixpkgs dan menginstalnya dengan:
$ nix-env -iA nixos.nix-index
Pertama, Anda perlu membuat indeks dengan menjalankan nix-index
(dibutuhkan sekitar 5 menit) . Kemudian, Anda dapat menggunakan nix-locate pattern
. Untuk informasi selengkapnya, lihat nix-locate --help
dan nix-index --help
.
nix-index-database menyediakan database yang telah dibuat sebelumnya jika Anda tidak ingin membuat database secara lokal. Itu juga dilengkapi dengan modul nixos/home-manager untuk menggunakan database tersebut.
Nix-index menyediakan skrip "perintah-tidak-ditemukan" yang dapat mencetak untuk Anda jalur atribut dari perintah tidak berdasar di shell Anda. Anda dapat mengambil sumber ${pkgs.nix-index}/etc/command-not-found.sh
di file init shell Anda sendiri (berfungsi untuk ZSH dan Bash sejauh yang kami tahu) atau Anda dapat menggunakan yang berikut ini di rumah- manajer / /etc/nixos/configuration.nix
:
programs . command-not-found . enable = false ;
# for home-manager, use programs.bash.initExtra instead
programs . bash . interactiveShellInit = ''
source ${ pkgs . nix-index } /etc/profile.d/command-not-found.sh
'' ;
Ganti bash
dengan zsh
jika Anda menggunakan zsh
.
Contoh keluaran:
$ blender
The program 'blender' is currently not installed. You can install it
by typing:
nix-env -iA nixpkgs.blender.out
Or run it once with:
nix-shell -p blender.out --run ...
Modul home-manager
sekarang tersedia untuk mengintegrasikan nix-index
dengan bash
, zsh
, dan fish
menggunakan skrip ini.
Jika Anda menemukan fitur hilang yang ingin Anda terapkan, saya sangat senang dengan PR apa pun! Anda juga dapat membuat masalah terlebih dahulu jika fiturnya lebih kompleks sehingga kita dapat mendiskusikan kemungkinan penerapannya.
Berikut adalah deskripsi singkat dari semua file yang relevan:
bin/{nix-index, nix-locate}.rs
: Implementasi alat baris perintah nix-index / nix-locsrc/database.rs
: Fungsi tingkat tinggi untuk bekerja dengan format databasesrc/files.rs
: Tipe data untuk bekerja dengan daftar filesrc/frcode.rs
: Implementasi encoder tingkat rendah untuk menyimpan banyak jalur file secara efisien (lihat komentar di file untuk detail lebih lanjut). Digunakan oleh database.rs
.src/hydra.rs
: Berurusan dengan segala sesuatu yang berkaitan dengan pengunduhan dari cache biner (mengambil daftar file dan referensi)src/nixpkgs.rs
: Mengimplementasikan pengumpulan paket (jalur penyimpanan dan atribut) menggunakan nix-env
src/package.rs
: Tipe data tingkat tinggi untuk mewakili jalur penyimpanan (terkadang juga disebut sebagai paket)src/workset.rs
: Antrian yang digunakan oleh nix-index
untuk mengimplementasikan pengambilan rekursif (mengambil referensi semuanya)