nix-index เป็นเครื่องมือในการค้นหาแพ็คเกจที่ให้ไฟล์บางไฟล์ใน nixpkgs
อย่างรวดเร็ว มันสร้างดัชนีอนุพันธ์ที่สร้างขึ้นที่พบในแคชไบนารี
$ 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
สร้างฐานข้อมูล:
$ nix run github:nix-community/nix-index#nix-index
สอบถามไฟล์:
$ nix run github:nix-community/nix-index#nix-locate -- bin/hello
หากต้องการติดตั้ง nix-index เวอร์ชันพัฒนาล่าสุด เพียงโคลน repo และรัน nix-env -if.
-
$ git clone https://github.com/nix-community/nix-index
$ cd nix-index
$ nix-env -if.
สำหรับเวอร์ชันเสถียร คุณสามารถชำระเงินแท็กล่าสุด (ดูรายการที่นี่) หรือใช้ที่เก็บของ Nixpkgs และติดตั้งด้วย:
$ nix-env -iA nixos.nix-index
ขั้นแรก คุณต้องสร้างดัชนีโดยการรัน nix-index
(ใช้เวลาประมาณ 5 นาที) จากนั้นคุณสามารถใช้ nix-locate pattern
สำหรับข้อมูลเพิ่มเติม โปรดดู nix-locate --help
และ nix-index --help
nix-index-database จัดเตรียมฐานข้อมูลที่สร้างไว้ล่วงหน้า หากคุณไม่ต้องการสร้างฐานข้อมูลในเครื่อง นอกจากนี้ยังมาพร้อมกับโมดูล nixos/home-manager เพื่อใช้ฐานข้อมูลเหล่านั้น
Nix-index จัดเตรียมสคริปต์ "command-not-found" ที่สามารถพิมพ์เส้นทางแอตทริบิวต์ของคำสั่งที่ไม่พบในเชลล์ของคุณ คุณสามารถแหล่งที่มา ${pkgs.nix-index}/etc/command-not-found.sh
ในไฟล์ init เชลล์ของคุณเอง (ใช้ได้กับ ZSH และ Bash เท่าที่เรารู้) หรือคุณสามารถใช้สิ่งต่อไปนี้ในบ้าน ผู้จัดการ / /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
'' ;
แทนที่ bash
ด้วย zsh
หากคุณใช้ zsh
ตัวอย่างผลลัพธ์:
$ 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 ...
ขณะนี้โมดูล home-manager
พร้อมใช้งานแล้วเพื่อรวม nix-index
กับ bash
, zsh
และ fish
โดยใช้สคริปต์นี้
หากคุณพบคุณสมบัติที่ขาดหายไปที่คุณต้องการนำไปใช้ ฉันยินดีเป็นอย่างยิ่งกับ PR ใดๆ! คุณยังสร้างปัญหาก่อนได้หากฟีเจอร์นั้นซับซ้อนกว่า เพื่อให้เราหารือเกี่ยวกับการใช้งานที่เป็นไปได้
ต่อไปนี้เป็นคำอธิบายโดยย่อของไฟล์ที่เกี่ยวข้องทั้งหมด:
bin/{nix-index, nix-locate}.rs
: การใช้งานเครื่องมือบรรทัดคำสั่ง nix-index / nix-locatesrc/database.rs
: ฟังก์ชันระดับสูงสำหรับการทำงานกับรูปแบบฐานข้อมูลsrc/files.rs
: ประเภทข้อมูลสำหรับการทำงานกับรายการไฟล์src/frcode.rs
: การใช้งานตัวเข้ารหัสในระดับต่ำเพื่อจัดเก็บเส้นทางไฟล์จำนวนมากอย่างมีประสิทธิภาพ (ดูความคิดเห็นในไฟล์สำหรับรายละเอียดเพิ่มเติม) ใช้โดย database.rs
src/hydra.rs
: จัดการกับทุกสิ่งที่เกี่ยวข้องกับการดาวน์โหลดจากไบนารีแคช (ดึงรายชื่อไฟล์และข้อมูลอ้างอิง)src/nixpkgs.rs
: ดำเนินการรวบรวมแพ็คเกจ (เส้นทางร้านค้าและคุณสมบัติ) โดยใช้ nix-env
src/package.rs
: ชนิดข้อมูลระดับสูงสำหรับแสดงเส้นทางร้านค้า (บางครั้งก็เรียกว่าแพ็คเกจ)src/workset.rs
: คิวที่ใช้โดย nix-index
เพื่อดำเนินการดึงข้อมูลแบบเรียกซ้ำ (ดึงข้อมูลการอ้างอิงของทุกสิ่ง)