nix-index es una herramienta para localizar rápidamente el paquete que proporciona un determinado archivo en nixpkgs
. Indexa derivaciones construidas que se encuentran en cachés binarios.
$ 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
crear la base de datos:
$ nix run github:nix-community/nix-index#nix-index
consulta de un archivo:
$ nix run github:nix-community/nix-index#nix-locate -- bin/hello
Para instalar la última versión de desarrollo de nix-index, simplemente clone el repositorio y ejecute nix-env -if.
:
$ git clone https://github.com/nix-community/nix-index
$ cd nix-index
$ nix-env -if.
Para la versión estable, puede consultar la etiqueta más reciente (consulte la lista aquí) o usar los repositorios de Nixpkgs e instalarla con:
$ nix-env -iA nixos.nix-index
Primero, debe generar un índice ejecutando nix-index
(tarda alrededor de 5 minutos). Luego, puedes usar nix-locate pattern
. Para obtener más información, consulte nix-locate --help
y nix-index --help
.
nix-index-database proporciona bases de datos pregeneradas si no desea generar una base de datos localmente. También viene con módulos nixos/home-manager para usar esas bases de datos.
Nix-index proporciona un script de "comando no encontrado" que puede imprimir la ruta de atributo de los comandos no encontrados en su shell. Puede obtener ${pkgs.nix-index}/etc/command-not-found.sh
en sus propios archivos de inicio de shell (funciona para ZSH y Bash hasta donde sabemos) o puede usar lo siguiente en casa: administrador / /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
'' ;
Reemplace bash
con zsh
si usa zsh
.
Salida de ejemplo:
$ 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 ...
Ahora está disponible un módulo home-manager
para integrar nix-index
con bash
, zsh
y fish
usando este script.
Si encuentra alguna característica faltante que le gustaría implementar, ¡estoy muy contento con las relaciones públicas! También puede crear un problema primero si la función es más compleja para que podamos discutir posibles implementaciones.
Aquí hay una descripción rápida de todos los archivos relevantes:
bin/{nix-index, nix-locate}.rs
: Implementación de las herramientas de línea de comandos nix-index/nix-locatesrc/database.rs
: funciones de alto nivel para trabajar con el formato de base de datossrc/files.rs
: los tipos de datos para trabajar con listados de archivossrc/frcode.rs
: Implementación de bajo nivel de un codificador para almacenar de manera eficiente muchas rutas de archivos (consulte los comentarios en el archivo para obtener más detalles). Utilizado por database.rs
.src/hydra.rs
: Se ocupa de todo lo que tiene que ver con la descarga desde el caché binario (obtener listados de archivos y referencias)src/nixpkgs.rs
: implementa la recopilación de paquetes (rutas de almacenamiento y atributos) utilizando nix-env
src/package.rs
: tipos de datos de alto nivel para representar rutas de tienda (a veces también denominado paquete)src/workset.rs
: una cola utilizada por nix-index
para implementar la búsqueda recursiva (obteniendo referencias de todo)