awscli
명령완성 관련 기능을 추가하고 싶습니다 .
내 특별한 경우에는 에서 스크립트를 가져와야 합니다 /nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106/share/zsh/site-functions/aws_zsh_completer.sh
.
/nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106
package()()의 저장 경로를 얻는 방법은 무엇입니까 awscli
? 왜냐하면 나는 이 참조를 하드코딩하는 것이 이상적이라고 생각하지 않기 때문입니다.
답변1
이를 사용하여 얻으려는 파일을 가리키는 configuration.nix
심볼릭 링크를 만들 수 있습니다 . /etc
그러면 방금 말한 심볼릭 링크를 받게됩니다. 예를 들면 이런 것...
구성.nix
environment.etc."zsh/zshrc".source = "${pkgs.awscli}/share/zsh/site-functions/aws_zsh_completer.sh";
/etc/zsh/zshrc
...다음을 가리키는 심볼릭 링크를 생성합니다./nix/store/hvx7xqvjz7r08nsb9kssh1d9s302v3sp-awscli-1.16.106/share/zsh/site-functions/aws_zsh_completer.sh
이는 를 통해 수행되므로 configuration.nix
시스템이 구축될 때마다 심볼릭 링크가 올바른 경로로 업데이트됩니다.
그런 다음 /etc/zsh/zshrc
이를 ~.zshrc
.
답변2
이를 설치 한 nix-locate
후 다음 명령을 사용하여 데이터베이스를 업데이트합니다 nix-index
.
nix-locate "PATTERN"
답변3
nix eval --raw
패키지의 저장 경로를 인쇄하는 데 사용할 수 있습니다 . 귀하의 예를 들어:
ls $(nix eval --raw nixpkgs.awscli)/share/zsh/site-functions/aws_zsh_completer.sh
이 파일은 패키지가 이미 로컬 nix 스토어에 있는 경우에만 존재합니다.
⚠️2022년 6월에 nix 2.8.0으로 업데이트되었습니다.
명령이 더 이상 있는 그대로 작동하지 않습니다. 나는 그것을 업데이트하려고 시도했고 이것을 생각해 냈습니다.
ls $(nix --extra-experimental-features nix-command --extra-experimental-features flakes eval -f '<nixpkgs>' --raw 'awscli')/share/zsh/site-functions/aws_zsh_completer.sh
어쨌든, nix 패키지를 참조하기 위해 쉘 초기화를 설정하려는 경우 현재 사용하고 있는 해결 방법은 다음과 같습니다.
export NIX_PROFILE_ROOT=${NIX_PROFILES[(w)2]}
maybesource () {
[[ -r $1 ]] && . $1
}
그런 다음 nix 구성 파일을 통해 패키지를 참조하십시오.
maybesource $NIX_PROFILE_ROOT/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
답변4
다른 문제에 부딪혔지만 이것이 DDG 결과에서 1위를 차지했으므로 nix store reference
여기에 남겨두겠습니다. 내 문제는 패키지 내 다른 패키지의 특정 파일을 참조해야 한다는 것이 아닙니다. 내 패키지 buildInputs
를 내 프로필에 설치할 수 있도록 특정 저장소 경로에 rundep()이 있어야 하지만 그들은 그렇게 하지 않습니다. GC 처리. (사용하면서 계속 경로를 다시 다운로드 받는 것도 지겹고 nix-shell
, nix-env -iA nixpkgs.stdenv
작업할 때는 nix-env -iA nixpkgs.bash
분명히 다른 복사본이 나오네요.)
저장 경로를 텍스트 파일에 넣는 것만으로는 작동하지 않으며 $out
먼저 전달해야 합니다.builtins.storePath
writeTextDir "share/nix-shell-nogc" (builtins.concatStringsSep "\n" (builtins.map builtins.storePath [
"/nix/store/2r4gr92p49kpx48s0hxxxv04cqbx4d6c-bash-interactive-5.1-p16-dev"
"/nix/store/76yin93c7c0jv29kq2hr39d5rzd0v6dg-bash-interactive-5.1-p16-doc"
"/nix/store/d2m4s6bm6gxpwd22pv20cbhl3ikbhhpb-bash-interactive-5.1-p16-man"
"/nix/store/p5fqinp9r82fr92rncwxmhd8nsk3igjy-bash-interactive-5.1-p16-info"
]))
또는 경로 리터럴을 사용하십시오(경로가 존재하지 않으면 빌드되지 않지만 위의 방법은 필요한 경우 빌드 중에 다운로드됩니다).
writeTextDir "share/nix-shell-nogc" ''
${/nix/store/2r4gr92p49kpx48s0hxxxv04cqbx4d6c-bash-interactive-5.1-p16-dev}
${/nix/store/76yin93c7c0jv29kq2hr39d5rzd0v6dg-bash-interactive-5.1-p16-doc}
${/nix/store/d2m4s6bm6gxpwd22pv20cbhl3ikbhhpb-bash-interactive-5.1-p16-man}
${/nix/store/p5fqinp9r82fr92rncwxmhd8nsk3igjy-bash-interactive-5.1-p16-info}
'';
나는 경로를 하드코딩하는 것을 좋아하지 않지만 작업은 완료됩니다.