理系学生日記

おまえはいつまで学生気分なのか

最近目にする$HOME/.configというディレクトリ

最近、$HOME/.config に設定ファイルを配置するツールが多くて、これは一体どういうことなんだということを思っていました。git とか peco とかですかね。

たぶん、ls -al ~ とかするとファイル数おおくて収拾つかなくなることに対する問題意識からそういう風になっているんだと思うんですが、ひょんなことから、これはどうも XDG Base Directory という仕様によって決められているということを知りました。

仕様自体はここにあります。

この仕様上、設定ファイルの格納ディレクトリは、$XDG_CONFIG_HOME という環境変数に定義することになっていて、これが空か未定義の場合に $HOME/.config が使われることになっています。 たとえば peco の場合はこのあたりで実現されてる。

設定ファイルについては、これ以外にも XDG_CONFIG_DIRS という環境変数が規定されていて、これは設定ファイルが格納されているかもしれない複数のディレクトリを、以下のようなかんじで指定できることになっています。もちろん、先頭に定義されているディレクトリの方が優先されます。

export XDG_DATA_DIRS=$HOME/.devconfig:$HOME/.commonconfig

設定ファイルだけでなく、データの配置場所(XDG_DATA_DIR)とか、キャッシュの配置場所(XDG_CACHE_DIR) とか、ソケットやパイプの配置場所(XDG_RUNTIME_DIR。生存期間の規定まである) とかが定義されているので、ご興味あればご参照ください。