Closed kachick closed 1 year ago
bash --norc
で、 bashrc を一時的に読み込まず起動するのが一番良さげに感じている。これなら親から渡ってきた nix で通った path は維持されたまま、nix が用意する bash 上で、補完やプロンプトだけ飛ばした bash 環境で動作させられる。
スクリプトでの挙動にもかなり近くなるはずでは
bash --noprofile --norc
で profile を飛ばす必要性はまだ感じてない
env -i bash --norc --noprofile
と env から始めると、そもそも nix が通した bash ではなくシステムの bash が立ち上がる。ここには他の Nix 関係の PATH も通ってないので、使いたいシーンはあんまなさそうな。
しかし面倒ではあるので、 bashrc 内で Nix devshell 上かを判別して読み込ませる読み込ませないを分ければどうか?
そもそも Nix 環境かどうかを判別する手法が微妙に無さげだったけど、 starship がうまいこと表示してくれてるのでそっち追っかけて合わせれば良い気がする。適当に NIX_ なんたらで通る ENV で判別してそうな気はするけど
IN_NIX_SHELL
で判別してた。direnv が展開する中になさそうなんだが・・・?
https://github.com/NixOS/nix/issues/3862 で議論されてたときにも上がってたENV名だけど、結局これは採用されずに close されてた気が・・・
https://github.com/starship/starship/pull/4724 starship で入ったのはこれかー
https://github.com/NixOS/nix/issues/3862#issuecomment-1611837272 マジカルな何かが書いてありきになる
要は nix で path 展開された shell 上から更に nix が提供する bash を立ち上げた時限定の話という理解をしたので、 https://github.com/kachick/dotfiles/pull/181 こんな感じにしておいた。
不便といえば不便だけれど、そもそも bash は便利にするというよりある程度安定して動くよう諸々は突っ込まないほうが良いのかもしれない・・・(それが dash だったんちゃうんかとは思いつつ)
相変わらず何もわかってないことがわかったけれど、nixpkgs で bash と現在名付けられている pkg は、一般的に僕らが触れる様な GNU Readline を含めない状態の配布物らしい。なのでシェルスクリプトの類は動くが、もろもろ interactive な機能がおかしくなると
ということで、bash という名前が readline 込みの物をポイントするようにすれば問題なくなり、その名前は bashInteractive
らしい。
https://github.com/NixOS/nix/issues/730#issuecomment-162323824 => https://github.com/kachick/anylang-template/commit/92ad474bb92dfedbe31e53e9190c10ce1cda4325
これでゴリゴリ回避するような変なコードは捨てられたけれど、しかし各リポジトリにこれ明記する必要あるの面倒では。自分のだったらまだ良いけど、人のとこ行った時面倒だな・・・と思って home-manager 側でも入れてしまったが、結局 dev shell あげる時に nix が 専用 bash を押し付けてくるし、それが優先されるので解消せんかった。
過去にも幾つも issue 上がってるので、そのうちなんかオフィシャルに方向性が示されるかもしれないし、特にそういう必要性無しという結論になるのかもしれない。
最新と思しき問題提起は https://github.com/NixOS/nix/issues/8764
覚えれば覚えるほどあれもこれも便利な Nix 環境だけど、使ってくうち必ず何かしらに躓く。しかしメリットの方が大きいのでやめる気には全くならない 今はこれ https://github.com/NixOS/nix/issues/6091 に引っかかっている。 https://github.com/NixOS/nix/pull/7010 で直ったはずと閉じられているが・・・?
https://github.com/direnv/direnv/issues/443 も関係しているのかよくわからない
結局今は bash を普段遣いにはしていない のだけれど、シェルスクリプト書く時とか bash での挙動を確認したい事は多く、その時に使えないと困る。 基本使わないと考えて complete 系を .bashrc でごそっとコメントアウトしたらエラーは止まったけど、表示がバグる