HN 日本語サマリー

← 一覧へ戻る
オープンソース

Show HN: Whetuu – Zigで書かれたゼロコンフィグのクロスシェルプロンプト

Show HN: Whetuu – a zero-config cross-shell prompt written in Zig (yamafaktory.github.io)

34 pointsby yamafaktory18 コメント

要約

WhetuuはZigで書かれた、設定不要で高速なクロスシェルプロンプトです。インストールはcurlコマンド1つで完了し、シェルの設定ファイルに自動的に追加されます。SSH接続時やroot権限時のみユーザー名とホスト名を表示し、現在のディレクトリ、Gitブランチとステータス、言語ツールチェーンのバージョン、コマンド実行時間などを表示します。特に、アップキーで呼び出せる履歴ピッカーは、入力に応じてフィルタリングし、色付けされたコマンド履歴を表示します。ディスクアクセスは並列化されており、Gitのハングアップ時でも250ms以内に応答を返すように設計されています。また、ネットワーク通信やテレメトリは一切行わず、セキュリティとプライバシーに配慮しています。

全文翻訳

~/install ワンコマンド 1. 実行する。 インストーラーはプラットフォームを検出し、ダウンロードを公開されているSHA256SUMSと比較し、バイナリを~/.whetuu/binに配置し、実際に使用しているシェルの設定に2行を追加します。2回実行しても何も変わりません。 $ curl --proto '=https' --tlsv1.2 -fsSL https://yamafaktory.github.io/whetuu/install.sh | sh コピー macOSとLinux スクリプトを読む tarballsとチェックサム 2. 新しいシェルを開く。 これでインストールは完了です。 ドットファイルを自分で編集したいですか? WHETUU_NO_MODIFY=1 を付けて実行すると、書き込む代わりに2行が出力されます。 whetuu init <shell> も同様に、それが属するファイルと共にそれらを出力します。 アンインストールは rm -rf ~/.whetuu に加えてそれらの行を削除することです。 Nerd Fontが必要です。 プロンプトは、gitブランチ、言語ロゴ、プロンプト文字にNerd Fontグリフを使用します。それがないと、それらは空のボックスとして表示されます。 ~/demo 実際のシェルで見る プロンプトはブランチ、gitステータス、ツールチェーンのバージョンを追跡します。アップキーを押すと履歴ピッカーが開きます。これは入力中にフィルタリングし、選択したものを実行します。 demo ~/modules 表示されるもの 左から右へ、各セグメントは関連がある場合にのみ表示されます。 user_host ユーザー@ホストを太字の緑で表示しますが、SSH接続時またはrootの場合のみ、警告として太字の赤で表示します。 directory 現在のディレクトリ。 $HOME は ~ に折りたたまれます。アンカーと、幅に収まるだけの末尾のディレクトリを保持します。 git branch ブランチのグリフと現在のブランチ、または(detached)をマゼンタで表示します。 git state 進行中の操作を黄色で表示します:(rebasing 2/7)、(merging)、(cherry-picking)。追加のサブプロセスなしで、.gitから直接読み取ります。 git status 競合、スタッシュ、ステージング済み、変更済み、追跡されていない、ahead、behindを1つの括弧で囲まれたグループで表示します。 language 39の言語とツールのブランドカラーで、ロゴとツールチェーンのバージョンを表示します。プロジェクトのマニフェスト、ソースファイルの拡張子、またはインフラマーカーから検出されます。 cmd_duration 最後のコマンドが2秒以上実行された場合、タイマーのグリフと経過時間を表示します。 character デフォルトでは紫、または言語のブランドカラーの星。失敗したコマンドの後、赤色に変わります。 ~/picker アップキーでの履歴ピッカー コマンドは、終了したときに記録され、正常に終了した場合にのみ記録されます。そのため、タイプミスがリストを散らかすことはありません。各コマンドは実行されたディレクトリと共に保存されます。ピッカーは現在のディレクトリにスコープされて開かれ、履歴がない場合はすべての履歴にフォールバックします。 whetuu history 2d git commit -m "Cache toolchain versions" 1d cd ~/cf/platform && git push -u origin HEAD 17h docker exec -i PGPASSWORD=x db psql 14m nvim ~/.config/fish/config.fish 11m npm ci 󰦥 行はシンタックスハイライトされます。コマンド名、フラグ、パス、変数、引用符で囲まれた文字列、演算子は、ターミナルテーマの色から色付けされるため、ピッカーは既に実行しているパレットに一致します。ウィンドウに収まらない幅の広いコマンドは、その末尾ではなく中央を...で省略するため、長いプレフィックスを共有するコマンドの実行を区別できます。 type フィルタリング。すべての単語は、大文字小文字を区別せずに一致する必要があります。 ↑ / ↓ 選択を移動します。上はさらに過去に遡ります。 Ctrl+G このディレクトリの履歴とすべての履歴を切り替えます。 Tab 選択を検索フィールドにコピーして編集または拡張します。 Enter 実行します。何も一致しなくなった場合は、入力されたテキストを実行します。 Esc キャンセルし、コマンドラインにあったものをそのまま残します。 ~/performance 約2ミリ秒でレンダリング プロンプトは各コマンドの前に実行されるため、シェルで高速である必要がある唯一のものです。ディスクを読み取るすべてのモジュールは、std.Ioを介して同時に実行されるため、レンダリングには、それらの合計ではなく、最も遅いプローブにかかる時間がかかります。 DirectoryRender 比較のため リポジトリなし、ツールチェーンなし 2.3 ms Zigリポジトリ、35ファイル 3.0 ms zig versionのみ:3.1 ms モノレポ、8259ファイル 20.2 ms git statusのみ:19.3 ms hyperfine --warmup 40 --runs 400 を 13世代 i9-13900H、ReleaseFast、パフォーマンスコアにピン留めし、それ以外はアイドル状態のマシンで測定しました。モノレポでは、プロンプト全体がgit status単独と同じくらいの時間がかかります。遅いリポジトリでもシェルをハングさせることはできません。 両方のサブプロセスは制限されています。Gitは250ミリ秒、ツールチェーンプローブは200ミリ秒かかり、それらは同時に実行されるため、最悪の場合は大きい方の時間になります。Gitが30秒ハングした場合でも、プロンプトは257ミリ秒で返されます。Gitセグメントは単にドロップされます。 ~/security 何もマシンから出ない プロンプトは実行するすべてのコマンドを表示し、ピッカーはそれらを保持します。これは小さなツールに渡すには多すぎる情報なので、whetuuが何を行い、何を行わないかを正確に示します。 ネットワークなし ソケット、HTTPクライアント、同期はバイナリ内に一切ありません。テレメトリもアップデートチェックもありません。アカウントもオプトアウトするサーバーもありません。 2つのファイル 実行中、whetuuは正確に2つのファイルを書き込みます。履歴ストアは、モード600で作成され、書き込みごとにリセットされるため、古いバージョンで読み取り可能になったものが自己修正されます。そして、~/.cache/whetuu/versionsにあるツールチェーンバージョン文字列のキャッシュがあり、それ以外は何も保持せず、いつでも削除できます。 外部のデータ 両方のファイルはXDGベースディレクトリ仕様に従っているため、どちらもインストールディレクトリにはありません。whetuuを rm -rf ~/.whetuu で削除しても、履歴は一緒に削除されません。whetuu paths は両方の場所を表示します。 1つのインストール編集 インストーラーは、使用しているシェルの設定に2行を追加するだけで、それ以外は何も行いません。使用していないシェルの設定は決して追加しませんし、二度追加することもありません。WHETUU_NO_MODIFY=1 は、それらを書き込む代わりに表示させます。すべて~/.whetuuに配置されるため、削除するのは1つのディレクトリです。 コマンドをスキップする コマンドをスペースで開始すると、決して記録されません。トークンを含むコマンドに使用してください。成功したコマンドのみが記録されます。 シェルは決して使用しない whetuuは2つのサブプロセスを実行します:gitとツールチェーンバージョンプローブ。どちらもコマンドラインではなく、固定された引数のリストを受け取るため、入力したものはコマンドとして解釈されることはありません。リベース中のような状態は、サブプロセスなしで.gitから直接読み取られます。 エスケープ処理 コマンド、ブランチ名、ディレクトリ内のすべての制御バイトは、ターミナルに到達する前に?になります。クローンしたばかりのリポジトリは、whetuuを通じて画面を再描画したり、カーソルを移動したりすることはできません。 設定不要 設定ファイルがないため、設定パーサー、テーマフォーマット、起動時に実行されるユーザーの設定はありません。攻撃対象領域はバイナリと上記の2つのコマンドです。 1つの注意点 言語モジュールは、現在のディレクトリのファイルからプローブするツールチェーンを選択するため、信頼できないリポジトリに入ると、whetuuがnode --versionのようなものを実行する可能性があります。PATHが解決するものを実行するのであり、リポジトリ内のバイナリを実行することはありません。 チェック可能なダウンロード Linuxビルドは静的muslでランタイム依存関係はありません。各リリースにはSHA256SUMSファイルが付属しています。ソースはGitHubにあり、ビルドは1コマンドで実行できます。