direnv

準備

direnvが適切に機能するためには、シェルにフックする必要があります。 それぞれのシェルには、独自の拡張の仕組みがあります。

フックが構成されたら、シェルを再起動するとdirenvが活性化します。

BASH

以下の行を~/.bashrcファイルの末尾に加えてください。

eval "$(direnv hook bash)"

必ず、rvm、git-promptやその他のプロンプトを操作するシェルの拡張より後にくるようにしてください。

ZSH

以下の行を~/.zshrcファイルの末尾に加えてください。

eval "$(direnv hook zsh)"

Oh my zsh

Oh my zshにはdirenvの中核プラグインの対応が備わっています。

zshrcファイルでdirenvをプラグインの配列を加えてください。

plugins=(... direnv)

FISH

以下の行を~/.config/fish/config.fishファイルの末尾に加えてください。

direnv hook fish | source

Fishは3つのモードに対応しており、大域環境変数direnv_fish_modeで設定できます。

set -g direnv_fish_mode eval_on_arrow    # プロンプト、及び矢印ベースのディレクトリの変更でdirenvを開始(既定)
set -g direnv_fish_mode eval_after_arrow # プロンプト、及び実行コマンド前の矢印ベースのディレクトリの変更でのみdirenvを開始
set -g direnv_fish_mode disable_arrow    # プロンプトでのみdirenvを開始。元々の動作と似た機能性です

TCSH

以下の行を~/.cshrcファイルの末尾に加えてください。

eval `direnv hook tcsh`

Elvish (0.12+)

以下を実行してください。

~> mkdir -p ~/.config/elvish/lib
~> direnv hook elvish > ~/.config/elvish/lib/direnv.elv

そして、以下の行を~/.config/elvish/rc.elvファイルに加えてください。

use direnv

Nushell

config.nuで以下のフックを$env.config.hooks.env_change.PWDリストを加えてください。

{ ||
    if (which direnv | is-empty) {
        return
    }

    direnv export json | from json | default {} | load-env
}

補足 Nushellのnu_scriptsに従うことで、上記のフックを常に最新のバージョンで使えます。

PowerShell

以下の行を$PROFILEに加えてください。

Invoke-Expression "$(direnv hook pwsh)"

Murex

以下の行を~/.murex_profileに加えてください。

direnv hook murex -> source