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، ما عليك سوى استنساخ الريبو وتشغيل 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 قواعد بيانات تم إنشاؤها مسبقًا إذا كنت لا ترغب في إنشاء قاعدة بيانات محليًا. كما يأتي أيضًا مع وحدات nixos/home-manager لاستخدام قواعد البيانات هذه.
يوفر Nix-index برنامجًا نصيًا "لم يتم العثور على أمر" يمكنه طباعة مسار السمة للأوامر غير الموجودة في الصدفة الخاصة بك. يمكنك إما الحصول على ${pkgs.nix-index}/etc/command-not-found.sh
في ملفات Shell 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
باستخدام هذا البرنامج النصي.
إذا وجدت أي ميزات مفقودة ترغب في تنفيذها، فأنا سعيد جدًا بشأن أي علاقات عامة! يمكنك أيضًا إنشاء مشكلة أولاً إذا كانت الميزة أكثر تعقيدًا حتى نتمكن من مناقشة عمليات التنفيذ المحتملة.
فيما يلي وصف سريع لجميع الملفات ذات الصلة:
bin/{nix-index, nix-locate}.rs
: تنفيذ أدوات سطر الأوامر nix-index / nix-locatesrc/database.rs
: وظائف عالية المستوى للعمل مع تنسيق قاعدة البياناتsrc/files.rs
: أنواع البيانات للتعامل مع قوائم الملفاتsrc/frcode.rs
: تطبيق منخفض المستوى لبرنامج التشفير لتخزين العديد من مسارات الملفات بكفاءة (راجع التعليقات في الملف لمزيد من التفاصيل). المستخدمة من قبل database.rs
.rs .src/hydra.rs
: يتعامل مع كل ما يتعلق بالتنزيل من ذاكرة التخزين المؤقت الثنائية (جلب قوائم الملفات والمراجع)src/nixpkgs.rs
: تنفيذ عملية تجميع الحزم (مسارات وسمات المتجر) باستخدام nix-env
src/package.rs
: أنواع البيانات عالية المستوى لتمثيل مسارات المتجر (يشار إليها أحيانًا باسم الحزمة)src/workset.rs
: قائمة انتظار يستخدمها nix-index
لتنفيذ الجلب العودي (جلب مراجع كل شيء)