Linuxを日常的に使う実験ブログ

Zshの設定フレームワークZimを使ってZshを管理する

 2024-01-24

 2024-02-03

 Linux

今回はZshの設定フレームワークであるZimの導入について記事を書きました。

Zimとは

Zimはプラグインマネージャプロンプトテーマモジュール群を包括的に備えたzshの設定フレームワークです。スピードを重視していて他のzsh設定フレームワークに比べて迅速に動作すると主張しています。(*1)。zshの設定は.zshrcファイルに設定を書きますが、煩雑になるため、近年は便利な設定ツールが増えています。Zimと同様のツールとしてはoh-my-zshprezotなどがあります。

筆者は現在Zimを利用してzshのプラグイン管理を行っています。ネット上では前述のPrezotが人気のようで記事がたくさん出てくるのですが、Zimもとても使いやすいので記事を書いてみました。

(*1): 公式Githb参照

インストール前の準備

  1. gitの導入
  2. zshをデフォルトのシェルに設定

1については必須ではありませんが、今回はgitは導入済みである前提で進めます。もしgitがない環境化でZimを使用する場合には以下を~/.zshrcに追記します。

zstyle ':zim:zmodule' use 'degit'

2については大前提なのですが、もしデフォルトのシェルがzshではない場合はchshコマンドで変更しておいてください。

Zimfwの自動インストール

Zimfwを自動で簡単に導入するためのすクリプトが用意されているので、特にこだわりがなければこのスクリプトを実行すれば良いです。多くの場合はこの自動インストールがベストな選択となると思います。

自動インストールのコマンド

curl -fsSL https://raw.githubusercontent.com/zimfw/install/master/install.zsh | zsh

自動インストールのすクリプト実行によって.zshrcにZim用の設定が追加され、新たに.zimrcファイルが生成されました。ではターミナルを再起動してZimの初期化を行いましょう。これでZimが有効になるはずです。

自動インストールするとデフォルトでいくつかのモジュールが自動でインストールされ、.zshファイルに各モジュールの設定が書き込まれます。これらの挙動が好みでなく、手動でインストールしたいという方は後述の手動インストールをして下さい。

自動インストール時に.zimrcファイルに書き込まれるモジュールのリストは以下です。  

  • zmodule environment
  • zmodule git
  • zmodule input
  • zmodule termtitle
  • zmodule utility
  • zmodule duration-info
  • zmodule git-info
  • zmodule asciiship
  • zmodule zsh-users/zsh-completions —fpath src
  • zmodule completion
  • zmodule zsh-users/zsh-syntax-highlighting
  • zmodule zsh-users/zsh-history-substring-search
  • zmodule zsh-users/zsh-autosuggestions

Zimfwの手動インストール

手動インストールは自動インストールに比べて面倒ですが、.zshrcを自動で書き込まれることなくユーザーが自己の責任において管理できます。また、初期でインストールするモジュールもユーザーが必要なもののみを選択することができるメリットがあります。

(注意): 自動インストールを行った場合は以下の操作は不要です。

~/.zshrcファイルへの設定

~/.zshrcファイルにZim用の以下の設定を追記します。ZIM_HOMEに関してはユーザーが書き込み可能な場所であれば任意の場所に設定できます。今回は~/以下に設定します。

~/.zshrc設定例

# ZIM_HOMEはユーザーが書き込み可能な任意の場所が可
ZIM_HOME=${ZDOTDIR:-${HOME}}/.zim

# プラグインマネージャーがない場合は自動でダウンロードする設定
# この設定はオプションだが、書かない場合は手動でZIM_HOME/以下にzimfw.zshを導入する
if [[ ! -e ${ZIM_HOME}/zimfw.zsh ]]; then
  if (( ${+commands[curl]} )); then
    curl -fsSL --create-dirs -o ${ZIM_HOME}/zimfw.zsh \
        https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
  else
    mkdir -p ${ZIM_HOME} && wget -nv -O ${ZIM_HOME}/zimfw.zsh \
        https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh
  fi
fi

# 未導入モジュールのインストールとinit.zshの更新
# この設定はオプションだが書かない場合は確実に.zimrcを更新後に ~/.zim/zimfw.zsh install を実行する
# Install missing modules, and update ${ZIM_HOME}/init.zsh if missing or outdated.
if [[ ! ${ZIM_HOME}/init.zsh -nt ${ZDOTDIR:-${HOME}}/.zimrc ]]; then
  source ${ZIM_HOME}/zimfw.zsh init -q
fi

# 各モジュールの初期化
source ${ZIM_HOME}/init.zsh

今回はZIM_HOME=~/.zimとして話を進めます。

zimfw.zshの導入

もし、上記で~/.zshrcにプラグインマネージャーの自動ダウンロード処理を書かなかった場合は以下のコマンドでインストールして下さい。

mkdir ~/.zim
cd ~/.zim
wget https://github.com/zimfw/zimfw/releases/latest/download/zimfw.zsh

.zimrcファイルの準備

以下の内容の.zimrcファイルを用意します。ここには導入したいモジュールをzmoduleに続いて書きます。基本的な書き方は以下のようにzmoduleに続けてURLやモジュール名を書きます。多くの場合、各モジュールの公式サイトにZim用の書き方があるので、それらを参考にして追記します。

以下に代表的なzmoduleの書き方の例を示しますが、多くのケースがあるため、完全なzmoduleの書き方はgithub:zimfwの使い方を参照下さい。

  • @zimfw作成のモジュール : zmodule asciiship
  • 他のgithub上のモジュール : zmodule StackExchange/blackbox
  • 任意のURL:zmodule https://gitlab.com/Spriithy/basher.git
  • ローカル内の絶対パス:zmodule /usr/local/share/zsh-autosuggestions
  • カスタム初期ファイルが複数ある場合:zmodule sindresorhus/pure --source async.zsh --source pure.zsh
  • 初期コマンドが必要な場合:zmodule skywind3000/z.lua --cmd 'eval "$(lua {}/z.lua --init zsh enhanced once)"'
  • 巨大なgitの場合:zmodule romkatv/powerlevel10k --use degit

今回はプロンプトテーマ、補完機能、及び必要最低限のモジュールを導入してみます。

~/.zimrc

# プロンプトテーマ
zmodule bira

# 補完
zmodule zsh-users/zsh-completions --fpath src
zmodule completion

# 最低限必要なモジュール
zmodule zsh-users/zsh-syntax-highlighting
zmodule zsh-users/zsh-autosuggestions

zimfwの初期化

もし~/.zim/zimfw.zshを手動で導入済みの場合は以下のコマンドを実行します。

source ~/.zim/zimfw.zsh install
source ~/.zim/init.zsh

もし、zimfw.zshを自動インストールすることを選択肢た場合はターミナルを閉じて再起動した際に自動でモジュールのインストールと初期化が行われます。プラグインマネージャ(zimfw.zsh)が自動でインストールされて初期化処理が自動で始まります。

Zimにおけるモジュールの管理

モジュールのインストール

基本的には.zimrcファイルにzmoduleを使用してモジュール名を追加して以下コマンドを実行します。

zimfw install

その後追加したモジュールに関する設定を~/.zshrcに加筆します。

モジュールの削除

モジュールが不要になった場合は.zimrcからモジュールを削除して以下コマンドを実行します。

zimfw uninstall

その後削除したモジュールに関する設定を~/.zshrcから削除します。

Zimのアンインストール

もしZimが不要になり他の設定フレームワークに移行したくなった場合にもきれいに消せるので安心してください。以下の手順で消すことができます。

  1. .zshrcからzimfwの設定箇所を削除
  2. ~/.zimディレクトリを削除
  3. ~/.zimrcファイルを削除

まとめ

今回はZshの設定フレームワークであるZimの紹介と導入方法を見てきました。Zimは多くの便利なモジュール群とプラグインマネージャーで構成された迅速に動作する魅力があります。この記事をみて少しでも興味を持ってくださる方がいれば幸いです。