nix-shell
globalを汚さずに一時的なshell環境をパパっと作れる
ほぼすべての言語の開発環境をnixのみで構成できる
repositoryにshell.nixを含めておけばチーム全員が同じ環境をsetupできる Usecases
Libraryの一時使用をしてみる
例えば、ripgrepというコマンドをちょっと触ってみたい、良さそうなら入れたい、というケース
$ nix-shell -p ripgrepとすればripgrepだけが入った環境ができてポチポチ試せる
$ exitすれば環境はresetされ、globalは何も汚れない
例えば、Gitのrepositoryごとに「JSの環境構築」と「その際に必要なnpm packageのinstall」を行う
options
引数無しで$ nix-shellを実行すると、
かいてる
--pure
読み込んだ設定fileに書いてあるpackageにのみアクセスできるようにする
globalにinstalしているpackageを使用の禁止を強制できる
e.g. $ nix-shell --pure shell.nix
もしglobalでもnixを使ってて、その環境も引き継ぎたいなら--pureを付けずに実行
-p
e.g. $ nix-shell -p ripgrep
--run
コマンドを指定して起動して、一発実行して、終了する #?? e.g. $ nix-shell -p ripgrep --run "rg foo"
--attr
zshの環境を引き継ぐ
これでnix-shellしても同じpromptで、補完なども効く
普通の状態
https://gyazo.com/755c1e89d536b7f2ef9b47b57e07fc61
cargoはglobalに入っていないので、カニの右側に数値は表示されていない
これ入れる前のnix-shell状態
https://gyazo.com/3a2fb9a00e582e7d72d78cc2912764fd
入れた後のnix-shell状態
https://gyazo.com/0c3729f611e0f13b2c1e8b91ed54d147
cargoが入っているのでversionが出ている
pureしていないのでimpureの表示がある
自動で読み込む
version指定どうする?
ruby v3が使いたい、とき
git hashのやつのpinどめ必要になる?
参考
tutorial的な記事
最初に読むと良いかも
最初に一般的な例、次にPython, Rust, NodeJS固有の例、などなど