グローバル設定ファイルを別の場所に置きたい

【mise】mise use --globalで全体的に使うツールのバージョンを設定する で紹介したグローバル設定ファイルは、既定で~/.config/mise/config.tomlに置かれる。dotfilesリポジトリの中で設定ファイルを一括管理したい、複数のマシンで共有したいディレクトリに置きたいなど、既定のパス以外を使いたい場合がある。環境変数MISE_GLOBAL_CONFIG_FILEを設定すると、グローバル設定ファイルとして読み書きするパスそのものを変更できる。

MISE_GLOBAL_CONFIG_FILEの基本

MISE_GLOBAL_CONFIG_FILEにパスを指定してから、mise use --globalを実行する。

$ export MISE_GLOBAL_CONFIG_FILE="$HOME/dotfiles/mise/config.toml"
$ mise use --global jq@1.7
mise jq@1.7          [1/2] install
mise jq@1.7          [1/2] download jq-macos-arm64
mise jq@1.7          [2/2] checksum jq-macos-arm64
mise jq@1.7          [2/2] extract jq-macos-arm64
mise jq@1.7        ✓ installed
mise ~/dotfiles/mise/config.toml tools: jq@1.7

~/.config/mise/config.tomlではなく、指定したパスにグローバル設定ファイルが作成される。mise config lsでも、指定したパスがグローバル設定ファイルとして表示される。

$ mise config ls
~/dotfiles/mise/config.toml  jq

既にグローバル設定ファイルがある場合でも指定したパスが優先される

設定ファイル名を変更する環境変数として、【mise】MISE_DEFAULT_CONFIG_FILENAMEで作成される設定ファイル名を変更する も紹介した。

MISE_DEFAULT_CONFIG_FILENAMEは設定ファイルの新規作成時にしか効かず、既存の設定ファイルがあればそちらが優先された。一方MISE_GLOBAL_CONFIG_FILEは挙動が異なる。~/.config/mise/config.tomlに既にグローバル設定ファイルがあるかどうかに関わらず、常に指定したパスがグローバル設定ファイルとして扱われる。

$ mise config ls
~/.config/mise/config.toml  aws, terraform

$ export MISE_GLOBAL_CONFIG_FILE="$HOME/dotfiles/mise/config.toml"
$ mise config ls
(何も表示されない)

~/.config/mise/config.tomlに既存の設定があっても読み込まれず、~/dotfiles/mise/config.tomlが存在しなければ空として扱われる。既存のグローバル設定を引き継ぎたい場合は、~/.config/mise/config.tomlの中身を指定したパスへ移動しておく必要がある。

プロジェクトローカルのmise.tomlとの優先順位は変わらない

MISE_GLOBAL_CONFIG_FILEでパスを変えても、プロジェクトのmise.tomlとの優先順位は変わらない。【mise】mise use --globalで全体的に使うツールのバージョンを設定する で説明したとおり、両方の設定がマージされ、ローカルのmise.tomlの指定が優先される。

シェルの設定に登録する

MISE_GLOBAL_CONFIG_FILEはシェルの起動ファイル(.bashrc.zshrcなど)にエクスポートしておくと、常に指定したパスがグローバル設定ファイルとして使われる。

export MISE_GLOBAL_CONFIG_FILE="$HOME/dotfiles/mise/config.toml"

dotfilesリポジトリでシンボリックリンクを作らずに、リポジトリ内のファイルをそのままグローバル設定として使いたい場合に使える。