2020-05-18

5/18

clenvは2つのプロジェクトに分割した方がいいかもしれない

https://github.com/progrhyme/clenv

拙作のシェル環境管理ツールだが、やりたいことと実現方法がマッチしてないかも? OR やりたいことが曖昧かも? という気がしてきた。

主なユースケース:

  1. 実行ファイルをPATHの通ったところに置きたい
  2. シェルスクリプトモジュールを管理したい。任意のスクリプトから好きなときに呼び出して使ったり、自分のシェル環境で読み込んで使いたい

備考:

  • 1 はシェルスクリプトだけでなく、バイナリ形式で配布されているものも取得できた方が便利。参考: https://github.com/Songmu/ghg
    • シェルスクリプトの中には単独で完結してなくて、リポジトリに同梱しているシェルスクリプトに依存しているものもあるので、そういうのは上手くやらないといけない。これはclenvで既に達成している(はず)

現状の(構想の)問題点:

  • 1 をやるにしろ、2 をやるにしろ、モジュールのバージョン管理はtoo muchである
  • 環境を分けて管理する機能も要らない。自分でも default しか使ってないし

参考:

新プロジェクト構想

①実行ファイル取って来る君

仮称「binpack」とする。

  • ghgとclamの機能を混ぜる
  • clenvみたいに複数環境は要らなくて、最低限、実行ファイルを所定のパスに展開できればいい
  • シェルスクリプトで書く必要なし。配布が面倒なのは嫌なので1バイナリにできて書きやすいGoかRustで、GitHubのライブラリがあるといいな

Issues:

  • 実行ファイル名が衝突したらどうするか?

②シェルスクリプトのモジュール管理

仮称「shellter」とする。

  • clenvみたいに lib/ にsymlink貼る必要なし。 modules/$module とかに展開したら、所定のルールで読み込めればいい
  • cllibみたいに動的にロードするシェル関数もあるといい
  • load $module とやったら、 $module で所定のパスにあるスクリプトが読めればいいだろう

既にやられていたかも

RustのGitHubライブラリ探してたら、丁度作ろうとしていたものを見つけたかも?

これでいいんじゃないか?

……うーん、実行ファイルを含むパッケージの場合、各ディレクトリごとにPATHに入れることはできるようだが、まとめて $SHLDON_ROOT/bin/ とかに入れれるかわからん。
どっちかというと、シェルプラグイン管理に重きを置かれている印象。
少し拡張すればできそうだけど。

追記: COMPLETION対応

実行ファイルとセットでcompletionファイルをロードするようにしたいこともある。
そういう場合はやっぱりclenvやbasherみたいにセットで管理できた方が便利かな。

clenvはbasherで完全に置き換えられそう

https://github.com/basherpm/basher

ライブラリのロードが include user/repo lib/file.sh みたいにして行けるので、一昨日作った gcloud-prompt だったら、 include progrhyme/gcloud-prompt gcloud-prompt.sh で行ける。簡単。

どうもパッケージの bin/ 以下に置いたものが自動でデフォルトだと $HOME/.basher/celler/bin/ に展開されるっぽい。symlinkかもしれんが。