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}
'';
私はパスをハードコードするのが好きではありませんが、作業は完了です。