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-database는 로컬에서 데이터베이스를 생성하지 않으려는 경우 사전 생성된 데이터베이스를 제공합니다. 또한 해당 데이터베이스를 사용하기 위한 nixos/home-manager 모듈도 함께 제공됩니다.
Nix-index는 쉘에서 발견되지 않은 명령의 속성 경로를 인쇄할 수 있는 "command-not-found" 스크립트를 제공합니다. ${pkgs.nix-index}/etc/command-not-found.sh
자체 쉘 초기화 파일(우리가 아는 한 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
'' ;
zsh
사용하는 경우 bash
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 ...
이제 이 스크립트를 사용하여 nix-index
bash
, zsh
및 fish
와 통합하는 home-manager
모듈을 사용할 수 있습니다.
구현하고 싶은 누락된 기능을 찾으면 모든 PR에 대해 매우 기쁘게 생각합니다! 기능이 더 복잡한 경우 먼저 문제를 생성하여 가능한 구현에 대해 논의할 수도 있습니다.
다음은 모든 관련 파일에 대한 간단한 설명입니다.
bin/{nix-index, nix-locate}.rs
: nix-index / nix-locate 명령줄 도구 구현src/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
에서 사용하는 대기열입니다.