⚡️

zigenvつくりました

2023/03/03に公開

what

いわゆる *env (rbenvとかpyenvとかnodenvとか) のZiglang版をつくりました。

https://github.com/kazto/zigenv

How to use

ほかの*envと同じです。

$ git clone https://github.com/kazto/zigenv.git ~/.zigenv
$ echo 'export PATH=${HOME}/.zigenv/bin:$PATH' >> .bashrc
$ echo 'eval "$(zigenv init -)"' >> .bashrc
$ exec bash --login -i

anyenv をお使いの方は、~/.anyenv/envs/zigenv にクローンしてください。anyenv install への対応はまだ行っていません。

How to create

今回、nodenvをほぼほぼそのまま使用しました。

以下のスクリプトを作成しました。

https://github.com/kazto/zigenv/blob/main/script/nodenv2zigenv.sh

これを、以下のように実行します。

$ git clone https://github.com/nodenv/nodenv.git
$ git clone https://github.com/kazto/zigenv.git
$ cd zigenv && git switch -c bare-replaced origin/bare-replaced && cd ..
$ bash zigenv/script/nodenv2zigenv.sh
$ cd zigenv && git switch main && git rebase bare-replaced 
$ git push origin HEAD

素のnodenv置き換えだけではうまくshimsを作れなかったりしたので、多少モンキーパッチをしています。

とくにzigのパッケージはパッケージルートに実行バイナリがあり、一方nodenvは/bin/ディレクトリの中しか実行バイナリを探しにいかないので、それをうまく見つけてあげるように変更しています。

また、zigenv-installスクリプトは、https://github.com/d2verb/zigenv/blob/master/execs/zigenv-install をもとに、やはりモンキーパッチをあてました。
https://ziglang.org/download/ をパースするところで、おそらくスクリプトが古いため現在のページをうまくパースできていませんでした。

こういうのって、ちゃんと謝辞とかREADMEに入れるべきでしょうかね。。。
README自体もnodenvのものを置き換えただけのものですので。。。

roundup

よければ使ってやってください。ちゃんとREADMEとかzigenv独自のものにする必要はあると思っています。

Discussion