XDG Base Directory

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

この記事では2003年に導入された XDG Base Directory Specification を使用しているソフトウェアを整理しています。ここでは一般的に使われているドットファイルと対応状態を並べて仕様がどれだけ使われているか示します。Base Directory Specification に対応していないソフトウェアについては、擬似的に対応させる方法を説明します。

ただし環境変数やコンパイルオプションに保存されているコードを実行したり、ソースにパッチを適用したりする方法は除外します。設定はあくまでシステム間で相互運用できるべきでありコンパイルオプションを使ってしまうと使用が制限されるためです。

XDG Base Directory Specification

フルスペック を読んでください。このセクションでは概要だけを抽出しています。

デフォルトでは pam_systemd によって XDG_RUNTIME_DIR だけが設定されます。既存のディレクトリの絶対パスを使って明示的に他の変数を定義するかどうかはユーザー次第です。

ユーザーディレクトリ

  • XDG_CONFIG_HOME
    • ユーザー個別の設定が書き込まれるディレクトリ (/etc と類似)。
    • デフォルトは $HOME/.config です。
  • XDG_CACHE_HOME
    • ユーザー個別の重要でない (キャッシュ) データが書き込まれるディレクトリ (/var/cache と類似)。
    • デフォルトは $HOME/.cache です。
  • XDG_DATA_HOME
    • ユーザー個別のデータファイルが書き込まれるディレクトリ (/usr/share と類似)。
    • デフォルトは $HOME/.local/share です。
  • XDG_RUNTIME_DIR
    • ソケットや名前付きパイプなどのような必須でないユーザー個別のデータファイルに使われます。
    • デフォルト値は必ずしも設定する必要はありません。設定されていない場合は警告が表示されます。
    • ディレクトリの所有者がユーザーでアクセスモードが 0700 である必要があります。
    • OS の標準機能だけで動作するファイルシステムを使用します。
    • ローカルファイルシステム上に存在する必要があります。
    • 定期的にファイルが消去される可能性があります。
    • 永続的に保持したい場合は6時間毎に変更を加えるかスティッキービットを設定します。
    • ユーザーがログインしている値だけ存在します。
    • tmpfs でマウントされることもあるので巨大なファイルは保存できません。

システムディレクトリ

  • XDG_DATA_DIRS
    • : でディレクトリを区切ります (PATH と類似)。
    • デフォルトは /usr/local/share:/usr/share です。
  • XDG_CONFIG_DIRS
    • : でディレクトリを区切ります (PATH と類似)。
    • デフォルトは /etc/xdg です。

貢献

ソフトウェアを追加するときは適切なセクションを使ってください。

コードの評価 (vimVIMINIT など)、パッチやコンパイルオプションが必要な方法、あるいはハードコードと考えられる方法は載せるべきではありません。また、Haskell の cabalEclipse など難しい方法もハードコードとして扱います。

  • 1番目のカラムはプロジェクト名です。できればコマンド名にしてください。ソフトウェアのウェブサイトか適切な wiki の記事にリンクさせます。
  • 2番目のカラムはプロジェクトが使用するレガシーなファイルやディレクトリです。もはや読み込まれない場合でも確認できるように記述してください。
  • 3番目のカラムは XDG Base Directory に切り替わったプロジェクトのコミットあるいはバージョンです。4番目のカラムにはその議論がある場合にリンクを載せてください。
  • 最後のカラムにはサポートしていないプロジェクトのための適切な対処方法を記載します。簡潔に書いてください。曖昧な部分がある場合は自由に追記してください。

サポートしているソフトウェア

アプリケーション 旧パス 対応開始 議論 ノート
aerc
antimicro ~/.antimicro edba864 [1]
aria2 ~/.aria2 8bc1d37 [2]
Asunder

~/.asunder
~/.asunder_album_artist
~/.asunder_album_genre
~/.asunder_album_title

2.9.0 [3] ~/.asunderXDG_CONFIG_HOME/asunder/asunder を、他の3つのファイルは XDG_CACHE_HOME/asunder/asunder_album_... を使います。移行後も古いパスは削除されないため、手動で削除する必要があります。
binwalk ~/.binwalk 2051757 [4] $XDG_CONFIG_HOME/binwalk
bash-completion ~/.bash_completion 2.11版 以前の方法: $ export BASH_COMPLETION_USER_FILE="$XDG_CONFIG_HOME"/bash-completion/bash_completion
Blender ~/.blender 4293f473 [5]
burp f2388e9
calcurse ~/.calcurse 04162d [6] [7] XDG_CONFIG_HOME/calcurse

XDG_DATA_HOME/calcurse

レガシーパス ~/.calcurse が存在する場合は、それが優先されます。

calibre ~/Calibre Library
citra ~/.citra-emu f7c3193fec [8]
composer ~/.composer 1.0.0-beta1 [9]
cower 8b70805
d-feet ~/.d-feet 7f6104b
dconf
dolphin-emu ~/.dolphin-emu a498c68 [10]
dr14-meter 7e777ca64 [11] XDG_CONFIG_HOME/dr14tmeter/
dunst 78b6e2b1 [12]
dwb
fish
fontconfig

~/.fontconfig
~/.fonts

8c255fb1, [13] フォントの保存には "$XDG_DATA_HOME"/fonts を使ってください。
fontforge

~/.FontForge
~/.PfaEdit

e4c2cc7432

[14] [15]

freerdp ~/.freerdp edf6e7258d
Emacs ~/.emacs
~/.emacs.d/init.el
[16]

27.1

XDG_CONFIG_HOME/emacs/init.el

レガシーパスは XDG パスよりも優先されます。 その場合、Emacsは XDG_CONFIG_HOME/emacs/ を作成しません。 26.3 以降での回避策は{HOMEを設定することは可能ですが、予期せぬ副作用があります。 他の Emacs 環境変数を修正してロードパスを変更して手動で init ファイルをロードする site ファイルを作成するのが確実ですが、ロードプロセスが大幅に変わってしまいます。

Gajim ~/.gajim 3e777ea [17]
gconf ~/.gconf fc28caa7 [18]
GIMP

~/.gimp-x.y
~/.thumbnails

60e0cfe 483505f

[19] [20]

git ~/.gitconfig 0d94427e
gops 71c4255
gstreamer ~/.gstreamer-0.10 4e36f93924cf [21]
gtk3
htop ~/.htoprc 93233a67
i3 ~/.i3 7c130fb54
i3status ~/.i3status.conf c3f7fc4994
imagemagick
inkscape ~/.inkscape 0.47 [22]
iwd / iwctl ~/.iwctl_history d3e00d7f
intellij-idea-community-edition ~/.IntelliJIdea* 2020.1 [23]
josm ~/.josm 11162 [24]
Kakoune
latexmk ~/.latexmkrc
lftp ~/.lftp 21dc400 [25]
lgogdownloader ~/.gogdownloader d430af63d000 [26]
LibreOffice

a6f56f70 25bd2eec

[27]
NSS ~/.pki 3.42 [28]
livestreamer ~/.livestreamerrc ea805917 [29]
llpp 3ab86f0cb 現在 llpp はディレクトリを作成せず XDG_CONFIG_HOME の直下に設定を保存します。
mc ~/.mc 1b9957058 0b7115647 ce401d797 [30]
Mercurial ~/.hgrc

354020079723 4.2

XDG_CONFIG_HOME/hg/hgrc
msmtp ~/.msmtprc

af2f409 v1.6.7+

XDG_CONFIG_HOME/msmtp/config.
mesa 87ab26b2ab XDG_CACHE_HOME/mesa
milkytracker ~/.milkytracker_config eb487c55 [31]
mintty ~/.minttyrc cff1bd8f v2.3.7 [32]
mpd ~/.mpdconf 87b73284
mpv ~/.mpv cb250d490 [33]
mutt ~/.mutt 42fee7585f [34]
mypaint ~/.mypaint cf723b74cd
nano

~/.nano/
~/.nanorc

036fc403 [35]
ncmpcpp ~/.ncmpcpp

38d9f811 27cd86e0

[36] [37]

ncmpcpp_directory を設定しないと error.log ファイルが ~/.ncmpcpp に保存されます。
neovim

~/.nvim
~/.nvimlog
~/.nviminfo

1ca5646bb

[38] [39]

newsbeuter ~/.newsbeuter 3c57824c5 [40] "$XDG_DATA_HOME"/newsbeuter"$XDG_CONFIG_HOME"/newsbeuter を作成する必要があります [41]
node-gyp ~/.node-gyp 2b5ce52a [42]
np2kai-gitAUR

~/.config/np2kai
~/.config/xnp2kai

56a1cc2 [43]
nteract-binAUR 4593e72 [44] [45] does not recognize workarounds for ipython/jupyter
OfflineIMAP ~/.offlineimaprc 5150de5 [46]
opentyrian ~/.opentyrian 8d45ff2 [47]
pandoc ~/.pandoc/ 0bed0ab [48]
pcsx2 ~/.pcsx2

87f1e8f77 a9020c606 3b22f0fb0 0a012aec2

[49] [50]
Pry ~/.pryrc
~/.pry_history

a0be0cc7 15e1fc92 e9d1be0e

[51]
pip ~/.pip 6.0 [52]
powershellAUR 6.0
ppsspp ~/.ppsspp 132fe47c7d [53]
procps-ng ~/.toprc af53e170b9

[54] [55]

orbment
pacman ~/.makepkg.conf 80eca94c8 [56]
Panda3D ~/.panda3d 2b537d2
poezioAUR
PulseAudio

~/.pulse
~/.pulse-cookie

59a8618dcd9 87ae8307057 9ab510a6921 4c195bcc9d5

[57]
pyroom
quodlibet ~/.quodlibet 3.10.0 [58]
qutebrowser
qtile

fd8686e 66d704b 51cff01

[59] 仕様と異なるファイルやディレクトリを作成するバーウィジェットも存在しますが、大抵の場合は設定で変更できます。
rclone ~/.rclone.conf 9d362589 [60]
retroarch
rr ~/.rr 02e7d41e [61]
RSpec ~/.rspec 5e395e2 [62]
rTorrent ~/.rtorrent.rc 6a8d332b
RuboCop ~/.rubocop.yml 6fe5956 [63]
sdcv

~/.stardict/
~/.sdcv_history

958ec35 [64]
Skype ~/.Skype 8.0
Snes9x ~/.snes9x 19864677 [65] デフォルトの設定は空です。ROM を起動する前にユーザーが GUI や手動で設定するようになっています。
spectrwm ~/.spectrwm a30bbb [66]
sublime-text-devAUR キャッシュは $XDG_CACHE_HOME/sublime-text-3 ではなく $XDG_CONFIG_HOME/sublime-text-3/Cache に保存されます。
surfraw

~/.surfraw.conf
~/.surfraw.bookmarks

3e4591d8 bd8c427d f57fc718

sway ~/.sway/config 614393c09 [67]
systemd
teeworlds ~/.teeworlds [68]
termite
tig ~/.tigrc, ~/.tig_history 2.2 [69] ~/.local/share/tigディレクトリが存在しなければならず、そうでなければ ~/.tig_historyに書き込まれます。
tmux ~/.tmux.conf 3.1 [70]
tmuxp ~/.tmuxp 1.5.0 [71] Fixed in 1.5.2
tmuxinator ~/.tmuxinator 2636923 [72]
transmission ~/.transmission 5517 [73]
util-linux 570b32100
uzbl c6fd63a [74]
vimb
VirtualBox ~/.VirtualBox 4.3 [75]
vis ~/.vis

68a25c75 d138908c

[76]
VLC media player ~/.vlcrc 16f32e15 [77]
warsow ~/.warsow-2.x 98ece3f [78]
wireshark ~/.wireshark b0b53fa5
xsettingsd ~/.xsettingsd 4ecd7be
xmonad ~/.xmonad 40fc10b6

[79] [80]

XMONAD_CONFIG_HOME, XMONAD_DATA_HOME, XMONAD_CACHE_HOME 環境変数が使えます。
xsel ~/.xsel.log ee7b4811 [81]
yarn

~/.yarnrc
~/.yarn/
~/.yarncache/
~/.yarn-config/

2d454b5

[82] [83]

部分的にサポートしているソフトウェア

アプリケーション 旧パス 対応開始 議論 ノート
abook ~/.abook $ abook --config "$XDG_CONFIG_HOME"/abook/abookrc --datafile "$XDG_CACHE_HOME"/abook/addressbook
ack ~/.ackrc [84] $ export ACKRC="$XDG_CONFIG_HOME/ack/ackrc"
Anki

~/Anki
~/Documents/Anki

[85] [86] $ anki -b "$XDG_DATA_HOME"/Anki
aspell ~/.aspell.conf $ export ASPELL_CONF="per-conf $XDG_CONFIG_HOME/aspell/aspell.conf; personal $XDG_CONFIG_HOME/aspell/en.pws; repl $XDG_CONFIG_HOME/aspell/en.prepl"
Atom ~/.atom [87] $ export ATOM_HOME="$XDG_DATA_HOME"/atom
aws-cli ~/.aws 1.7.45 [88]

$ export AWS_SHARED_CREDENTIALS_FILE="$XDG_CONFIG_HOME"/aws/credentials
$ export AWS_CONFIG_FILE="$XDG_CONFIG_HOME"/aws/config

bazaar

~/.bazaar
~/.bzr.log

2.3.0 [89] 上流のバグレポートでは bazaar が ~/.config/bazaar を使うようにする議論があります。ただしログファイルは ~/.bzr.log に書き込まれます。
buchhaltung-gitAUR

~/.buchhaltung

[90] $ export BUCHHALTUNG="$XDG_CONFIG_HOME"/buchhaltung
Bundler ~/.bundle [91] [92] $ export BUNDLE_USER_CONFIG="$XDG_CONFIG_HOME"/bundle BUNDLE_USER_CACHE="$XDG_CACHE_HOME"/bundle BUNDLE_USER_PLUGIN="$XDG_DATA_HOME"/bundle
cargo ~/.cargo [93] [94] [95] [96] $ export CARGO_HOME="$XDG_DATA_HOME"/cargo
ccache ~/.ccache $ export CCACHE_CONFIGPATH="$XDG_CONFIG_HOME"/ccache.config

$ export CCACHE_DIR="$XDG_CACHE_HOME"/ccache

ChezScheme ~/.chezscheme_history $ petite --eehistory "$XDG_DATA_HOME"/chezscheme/history
Chromium ~/.chromium

~/.pki

23057

[97] [98] [99]

conky ~/.conkyrc 00481ee [100] $ conky --config="$XDG_CONFIG_HOME"/conky/conkyrc
claws-mail ~/.claws-mail [101] $ claws-mail --alternate-config-dir "$XDG_DATA_HOME"/claws-mail
coreutils ~/.dircolors $ source "$(dircolors "$XDG_CONFIG_HOME"/dircolors)"
crawl ~/.crawl 末尾の '/' は必須です: $ export CRAWL_DIR="$XDG_DATA_HOME"/crawl/
clusterssh ~/.clusterssh/ $ alias cssh="cssh --config-file '$XDG_CONFIG_HOME/clusterssh/config'"
$XDG_CONFIG_HOME/clusterssh/config
extra_cluster_file=$HOME/.config/clusterssh/clusters
extra_tag_file=$HOME/.config/clusterssh/tags

Despite this, clusterssh will still create ~/.clusterssh/.

CUDA ~/.nv $ export CUDA_CACHE_PATH="$XDG_CACHE_HOME"/nv
dict ~/.dictrc $ dict -c "$XDG_CONFIG_HOME"/dict/dictrc
Docker ~/.docker

[102] [103]

$ export DOCKER_CONFIG="$XDG_CONFIG_HOME"/docker
docker-machine ~/.docker/machine $ export MACHINE_STORAGE_PATH="$XDG_DATA_HOME"/docker-machine
DOSBox ~/.dosbox/dosbox-0.74-2.conf [104] $ dosbox -conf "$XDG_CONFIG_HOME"/dosbox/dosbox.conf
Electrum Bitcoin Wallet ~/.electrum c121230 $ export ELECTRUMDIR="$XDG_DATA_HOME/electrum"
ELinks ~/.elinks $ export ELINKS_CONFDIR="$XDG_CONFIG_HOME"/elinks
elixir ~/.mix afaf889 [105] [106] ElixirはXDGの仕様に完全には準拠しておらず、環境変数が存在する場合にのみXDGを使用し、そうでない場合はデフォルトでレガシーパスを使用します。
emscripten

~/.emscripten
~/.emscripten_sanity
~/.emscripten_ports
~/.emscripten_cache__last_clear

[107]

$ export EM_CONFIG="$XDG_CONFIG_HOME"/emscripten/config
$ export EM_CACHE="$XDG_CACHE_HOME"/emscripten/cache
$ export EM_PORTS="$XDG_DATA_HOME"/emscripten/cache
$ emcc --em-config "$XDG_CONFIG_HOME"/emscripten/config --em-cache "$XDG_CACHE_HOME"/emscripten/cache

freecad ~/.FreeCAD [108] $ freecad -u "$XDG_CONFIG_HOME"/FreeCAD/user.cfg -s "$XDG_CONFIG_HOME"/FreeCAD/system.cfg

Despite these options, freecadAUR will still create the file .FreeCAD/cookie as the web module has it hard coded

gdb ~/.gdbinit $ gdb -nh -x "$XDG_CONFIG_HOME"/gdb/init
get_iplayer ~/.get_iplayer $ export GETIPLAYERUSERPREFS="$XDG_DATA_HOME"/get_iplayer
getmail ~/.getmail/getmailrc $ getmail --rcfile="$XDG_CONFIG_HOME/getmail/getmailrc" --getmaildir="$XDG_DATA_HOME/getmail"
gliv ~/.glivrc $ gliv --glivrc="$XDG_CONFIG_HOME"/gliv/glivrc
GNURadio ~/.gnuradio [109]
gpg ~/.gnupg [110] [111]

$ export GNUPGHOME="$XDG_DATA_HOME"/gnupg
$ gpg2 --homedir "$XDG_DATA_HOME"/gnupg

Note that this currently does not work out-of-the-box using systemd user units and socket-based activation, since the socket directory changes based on the hash of $GNUPGHOME. You can get the new socket directory using gpgconf --dry-run --create-socketdir, and have to modify the systemd user units to listen on the correct sockets accordingly.

Go ~/go [112]

$ export GOPATH="$XDG_DATA_HOME"/go

Google Earth ~/.googleearth ~/.config/Google/GoogleEarthPlus.confKMLPathCachePath オプションで一部のパスは変更できます。
gopass ~/.password-store Override settings in ~/.config/gopass/config.yml:
~/.config/gopass/config.yml
root:
path: gpgcli-gitcli-fs+file:///home/<userid>/.config/password-store
GQ LDAP クライアント

~/.gq
~/.gq-state

1.51

$ export GQRC="$XDG_CONFIG_HOME"/gqrc
$ export GQSTATE="$XDG_DATA_HOME"/gq/gq-state
$ mkdir -p "$(dirname "$GQSTATE")"

gradle ~/.gradle [113] $ export GRADLE_USER_HOME="$XDG_DATA_HOME"/gradle
gtk ~/.gtkrc $ export GTK_RC_FILES="$XDG_CONFIG_HOME"/gtk-1.0/gtkrc
gtk2 ~/.gtkrc-2.0 $ export GTK2_RC_FILES="$XDG_CONFIG_HOME"/gtk-2.0/gtkrc
hledger ~/.hledger.journal [114] $ export LEDGER_FILE="$XDG_DATA_HOME"/hledger.journal
imapfilterAUR ~/.imapfilter $ export IMAPFILTER_HOME="$XDG_CONFIG_HOME/imapfilter"
httpie ~/.httpie [115] $ export HTTPIE_CONFIG_DIR="$XDG_CONFIG_HOME"/httpie
ipython/jupyter ~/.ipython won't fix,won't fix

$ export IPYTHONDIR="$XDG_CONFIG_HOME"/jupyter
$ export JUPYTER_CONFIG_DIR="$XDG_CONFIG_HOME"/jupyter

irb ~/.irbrc
~/.profile
$ export IRBRC="$XDG_CONFIG_HOME"/irb/irbrc
"$XDG_CONFIG_HOME"/irb/irbrc
IRB.conf[:SAVE_HISTORY] ||= 1000
IRB.conf[:HISTORY_FILE] ||= File.join(ENV["XDG_DATA_HOME"], "irb", "history")
irssi ~/.irssi [116] $ irssi --config="$XDG_CONFIG_HOME"/irssi/config --home="$XDG_DATA_HOME"/irssi
isync ~/.mbsyncrc $ mbsync -c "$XDG_CONFIG_HOME"/isync/mbsyncrc
Java (OpenJDK) ~/.java/.userPrefs [117] $ export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java
KDE ~/.kde [118] $ export KDEHOME="$XDG_CONFIG_HOME"/kde
ledger ~/.ledgerrc, ~/.pricedb [119] $ ledger --init-file "$XDG_CONFIG_HOME"/ledgerrc
less ~/.lesshst

mkdir -p "$XDG_CACHE_HOME"/less
$ export LESSKEY="$XDG_CONFIG_HOME"/less/lesskey
$ export LESSHISTFILE="$XDG_CACHE_HOME"/less/history

$ export LESSHISTFILE=- を使うことで機能を無効化できます。

libdvdcss ~/.dvdcss [120] $ export DVDCSS_CACHE="$XDG_DATA_HOME"/dvdcss
libice ~/.ICEauthority [121] $ export ICEAUTHORITY="$XDG_RUNTIME_DIR"/ICEauthority

パーミッションには注意してください。例えば gdm からユーザーの ICEauthority ファイルにアクセスする必要があります。

libx11

~/.XCompose
~/.compose-cache

$ export XCOMPOSEFILE="$XDG_CONFIG_HOME"/X11/xcompose
$ export XCOMPOSECACHE="$XDG_CACHE_HOME"/X11/xcompose

ltrace ~/.ltrace.conf $ ltrace -F "$XDG_CONFIG_HOME"/ltrace/ltrace.conf
maven ~/.m2 $ mvn -gs "$XDG_CONFIG_HOME"/maven/settings.xml
settings.xml
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      https://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...
  <localRepository>${env.XDG_CACHE_HOME}/maven/repository</localRepository>
  ...
</settings>
Mathematica ~/.Mathematica $ export MATHEMATICA_USERBASE="$XDG_CONFIG_HOME"/mathematica
mednafen ~/.mednafen $ export MEDNAFEN_HOME="$XDG_CONFIG_HOME"/mednafen
mitmproxy ~/.mitmproxy

$ alias mitmproxy="mitmproxy --set confdir=$XDG_CONFIG_HOME/mitmproxy"
$ alias mitmweb="mitmweb --set confdir=$XDG_CONFIG_HOME/mitmproxy"

moc ~/.moc

$ mocp -M "$XDG_CONFIG_HOME"/moc
$ mocp -O MOCDir="$XDG_CONFIG_HOME"/moc

monero ~/.bitmonero $ monerod --data-dir "$XDG_DATA_HOME"/bitmonero
most ~/.mostrc $ export MOST_INITFILE="$XDG_CONFIG_HOME"/mostrc
MPlayer ~/.mplayer $ export MPLAYER_HOME="$XDG_CONFIG_HOME"/mplayer
MySQL ~/.mysql_history $ export MYSQL_HISTFILE="$XDG_DATA_HOME"/mysql_history
ncurses ~/.terminfo $ export TERMINFO="$XDG_DATA_HOME"/terminfo # Precludes system path searching.

$ export TERMINFO_DIRS="$XDG_DATA_HOME"/terminfo:/usr/share/terminfo

ncmpc ~/.ncmpc ncmpc -f "$XDG_CONFIG_HOME"/ncmpc/config
Netbeans ~/.netbeans [122] $ netbeans --userdir "${XDG_CONFIG_HOME}"/netbeans
Node.js ~/.node_repl_history $ export NODE_REPL_HISTORY="$XDG_DATA_HOME"/node_repl_history [123]
notmuch ~/.notmuch-config [124]

$ export NOTMUCH_CONFIG="$XDG_CONFIG_HOME"/notmuch/notmuchrc
$ export NMBGIT="$XDG_DATA_HOME"/notmuch/nmbug

npm

~/.npm
~/.npmrc

[125] $ export NPM_CONFIG_USERCONFIG=$XDG_CONFIG_HOME/npm/npmrc
npmrc
prefix=${XDG_DATA_HOME}/npm
cache=${XDG_CACHE_HOME}/npm
tmp=${XDG_RUNTIME_DIR}/npm
init-module=${XDG_CONFIG_HOME}/npm/config/npm-init.js

Node.js を nvmAUR でインストールした場合 prefix は必要ありません (サポートされません)。

nuget ~/.nuget/packages [126] $ export NUGET_PACKAGES="$XDG_CACHE_HOME"/NuGetPackages
NVIDIA ~/.nv 設定されている場合はXDG_CACHE_HOMEを使用し、設定されていない場合は~/.cacheの代わりに~/.nvにフォールバックします。
nvidia-settings ~/.nvidia-settings-rc $ nvidia-settings --config="$XDG_CONFIG_HOME"/nvidia/settings
nvmAUR ~/.nvm $ export NVM_DIR="$XDG_DATA_HOME"/nvm
Octave

~/octave
~/.octave_packages
~/.octave_hist

$ export OCTAVE_HISTFILE="$XDG_CACHE_HOME/octave-hsts"
$ export OCTAVE_SITE_INITFILE="$XDG_CONFIG_HOME/octave/octaverc"

$XDG_CONFIG_HOME/octave/octaverc
source /usr/share/octave/site/m/startup/octaverc;
pkg prefix ~/.local/share/octave/packages ~/.local/share/octave/packages;
pkg local_list /home/<your username>/.local/share/octave/octave_packages;

local_list オプションは絶対パスで指定する必要があります。

openscad ~/.OpenSCAD 7c3077b0f [127] XDG Base Directory Specification に完全には準拠していません。[128] を参照。

現在 ~/.local/shareハードコード されています。

OpenSSL ~/.rnd .rnd ファイルの場所は RANDFILE 環境変数で設定できます。FAQ を参照。
parallel ~/.parallel 20170422 $ export PARALLEL_HOME="$XDG_CONFIG_HOME"/parallel
pass ~/.password-store $ export PASSWORD_STORE_DIR="$XDG_DATA_HOME"/pass
pidgin ~/.purple [129] $ pidgin --config="$XDG_DATA_HOME"/purple
postgresql

~/.psqlrc
~/.psql_history
~/.pgpass
~/.pg_service.conf

9.2 [130] [131]

$ export PSQLRC="$XDG_CONFIG_HOME/pg/psqlrc"
$ export PSQL_HISTORY="$XDG_CACHE_HOME/pg/psql_history"
$ export PGPASSFILE="$XDG_CONFIG_HOME/pg/pgpass"
$ export PGSERVICEFILE="$XDG_CONFIG_HOME/pg/pg_service.conf"

ディレクトリを作成する必要があります: $ mkdir "$XDG_CONFIG_HOME/pg" && mkdir "$XDG_CACHE_HOME/pg"

PulseAudio ~/.esd_auth module-esound-protocol-unix.so モジュールによって生成されます。別の場所を使用するように設定することもできますが /etc/pulse/default.pa"$XDG_CONFIG_HOME"/pulse/default.pa でモジュールをコメントアウトしてしまう方が簡単です。
python-azure-cliAUR ~/.azure $ export AZURE_CONFIG_DIR=$XDG_DATA_HOME/azure
python-gripAUR ~/.grip $ export GRIPHOME="$XDG_CONFIG_HOME/grip"
python-setuptools ~/.python-eggs $ export PYTHON_EGG_CACHE="$XDG_CACHE_HOME"/python-eggs
pylint ~/.pylint.d won't fix $ export PYLINTHOME="$XDG_CACHE_HOME"/pylint
python-setuptools ~/.python-eggs $ export PYTHON_EGG_CACHE="$XDG_CACHE_HOME"/python-eggs
racket ~/.racketrc

~/.racket

[132] $ export PLTUSERHOME="$XDG_DATA_HOME"/racket
readline ~/.inputrc $ export INPUTRC="$XDG_CONFIG_HOME"/readline/inputrc
rlwrap ~/.*_history [133] $ export RLWRAP_HOME="$XDG_DATA_HOME"/rlwrap
RubyGems ~/.gem

$ export GEM_HOME="$XDG_DATA_HOME"/gem
$ export GEM_SPEC_CACHE="$XDG_CACHE_HOME"/gem

rustup ~/.rustup [134] $ export RUSTUP_HOME="$XDG_DATA_HOME"/rustup
sbt ~/.sbt

~/.ivy2

[135] $ sbt -ivy "$XDG_DATA_HOME"/ivy2 -sbt-dir "$XDG_DATA_HOME"/sbt ([136])
screen ~/.screenrc $ export SCREENRC="$XDG_CONFIG_HOME"/screen/screenrc
spacemacs

~/.spacemacs
~/.spacemacs.d

[137] [138] Move the ~/.spacemacs file.

$ export SPACEMACSDIR="$XDG_CONFIG_HOME"/spacemacs
$ mv ~/.spacemacs "$SPACEMACSDIR"/init.el

Other files need to be configured like Emacs.

stack ~/.stack [139] $ export STACK_ROOT="$XDG_DATA_HOME"/stack
subversion ~/.subversion [140][141][142] $ svn --config-dir "$XDG_CONFIG_HOME"/subversion
task

~/.task
~/.taskrc

$ export TASKDATA="$XDG_DATA_HOME"/task
$ export TASKRC="$XDG_CONFIG_HOME"/task/taskrc

tiptop ~/.tiptoprc .tiptoprc ファイルを必要とします: $ tiptop -W "$XDG_CONFIG_HOME"/tiptop
TeX Live ~/.texliveYYYY (YYYY は年度) $ export TEXMFCNF="${XDG_CONFIG_HOME}/texmf/web2c:$(kpsewhich --var-value='TEXMFCNF')"

{{hc|$XDG_CONFIG_HOME/texmf/web2c/texmf.cnf| TEXMFHOME=$XDG_DATA_HOME/texmf TEXMFCONFIG=$XDG_CONFIG_HOME/texmf

uncrustify ~/.uncrustify.cfg $ export UNCRUSTIFY_CONFIG="$XDG_CONFIG_HOME"/uncrustify/uncrustify.cfg
Unison ~/.unison $ export UNISON="$XDG_DATA_HOME"/unison
urxvtd ~/.urxvt/urxvtd-hostname $ export RXVT_SOCKET="$XDG_RUNTIME_DIR"/urxvtd
Vagrant

~/.vagrant.d
~/.vagrant.d/aliases

[143]

$ export VAGRANT_HOME="$XDG_DATA_HOME"/vagrant
$ export VAGRANT_ALIAS_FILE="$XDG_DATA_HOME"/vagrant/aliases

Visual Studio Code ~/.vscode-oss/argv.json [144] You can use $ export VSCODE_PORTABLE="$XDG_DATA_HOME"/vscode, which is not documented and might break unexpectedly
WakaTime

~/.wakatime.cfg
~/.wakatime.data
~/.wakatime.db
~/.wakatime.log

$ export WAKATIME_HOME="$XDG_CONFIG_HOME/wakatime"

以下のディレクトリは手動で作成する必要があります。:
$ mkdir "$XDG_CONFIG_HOME/wakatime"

WeeChat ~/.weechat [145] [146]

$ export WEECHAT_HOME="$XDG_CONFIG_HOME"/weechat
$ weechat -d "$XDG_CONFIG_HOME"/weechat

wget

~/.wgetrc ~/.wget-hsts

$ export WGETRC="$XDG_CONFIG_HOME/wgetrc"
$ wget --hsts-file="$XDG_CACHE_HOME/wget-hsts"

wine ~/.wine [147] WinetricksWINEPREFIX の管理に XDG のような場所を使用します:

$ mkdir -p "$XDG_DATA_HOME"/wineprefixes
$ export WINEPREFIX="$XDG_DATA_HOME"/wineprefixes/default

xbindkeys ~/.xbindkeysrc $ xbindkeys -f "$XDG_CONFIG_HOME"/xbindkeys/config
xorg-xauth ~/.Xauthority $ export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
xinit

~/.xinitrc
~/.xserverrc

$ export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc
$ export XSERVERRC="$XDG_CONFIG_HOME"/X11/xserverrc

上記の変数は xinit には反映されますが、startx には反映されません。starx では引数としてファイル名を指定してください:

$ startx "$XDG_CONFIG_HOME/X11/xinitrc" -- vt1

xorg-xrdb

~/.Xresources
~/.Xdefaults

xrdb -load ~/.config/X11/xresources のようにパスを指定して xrdb でリソースがロードされるように Xresources使用 することができます。
z

~/.z

[148] $ export _Z_DATA="$XDG_DATA_HOME/z"

ハードコードされているソフトウェア

アプリケーション 旧パス 議論 ノート
adb ~/.android [149]

$ export ANDROID_SDK_HOME="$XDG_CONFIG_HOME"/android
$ export ANDROID_AVD_HOME="$XDG_DATA_HOME"/android/
$ export ANDROID_EMULATOR_HOME="$XDG_DATA_HOME"/android/
$ export ADB_VENDOR_KEY="$XDG_CONFIG_HOME"/android

Ansible ~/.ansible [150]
AMule ~/.aMule
Android Studio

~/.AndroidStudio2.3
~/.android
~/.java

anthy ~/.anthy [151]
Apache Directory Studio ~/.ApacheDirectoryStudio
ARandR ~/.screenlayout
Arduino

~/.arduino15
~/.jssc

won't fix [152]
Audacity ~/.audacity-data [153]
Avidemux ~/.avidemux6
bash

~/.bashrc
~/.bash_history
~/.bash_profile
~/.bash_login
~/.bash_logout

[154]
  • 指定された bashrc/etc/bashrc から読み込まれます。
  • export HISTFILE="$XDG_DATA_HOME"/bash/history
  • インタラクティブシェルでは ~/.bashrc の代わりに --init-file <file> で指定。
cabal ~/.cabal [155] 対処方法は議論を見てください。簡単な方法ではありませんが Base Directory 準拠をエミュレートできます。
chattyAUR ~/.chatty/ [156]
cmake ~/.cmake/ Used for the user package registry ~/.cmake/packages/<package>, detailed in cmake-packages(7) and the Package registry wiki page. Looks like it's hardcoded, for example in cmFindPackageCommand.cxx.
Cinnamon ~/.cinnamon/ [157]
cryptomatorAUR ~/.Cryptomator [158]
CUPS ~/.cups [159]
darcs ~/.darcs [160]
dbus ~/.dbus [161] kdbus を使うことで回避できます。
Dia ~/.dia
devede ~/.devedeng Hardcoded here
Dia ~/.dia/
dotnet-sdk ~/.dotnet/ [162]
eclipse ~/.eclipse [163] -Dosgi.configuration.area=@user.home/.config/.. オプションで上書きできますがコマンドラインで指定するのではなく "$ECLIPSE_HOME"/eclipse.ini" に追加する必要があり $ECLIPSE_HOME の書き込み権限が要ります (Arch Linux では $ECLIPSE_HOME/usr/bin/eclipse に決め打ちされています)。
Fetchmail ~/.fetchmailrc
firefox ~/.mozilla [164]
Flatpak ~/.var/ [165] [166] won't fix
fltk ~/.fltk/ [167]
gftp ~/.gftp/
GHC ~/.ghc [168]
ghidra [169]
GoldenDict ~/.goldendict/ [170]
gramps ~/.gramps/ [171]
grsync ~/.grsync/ [172]
gtk-recordMyDesktop ~/.gtk-recordmydesktop
kiteAUR ~/.kite/ [173]
hplip ~/.hplip/ [174]
idris ~/.idris [175]
Java OpenJDK ~/.java/fonts [176] (RedHat) $ export _JAVA_OPTIONS=-Djava.util.prefs.userRoot="$XDG_CONFIG_HOME"/java
Java OpenJFX ~/.java/webview
julia

~/.juliarc.jl
~/.julia_history

[177] [178]
Linux PAM ~/.pam_environment [179] ハードコード: modules/pam_env/pam_env.c
lldb

~/.lldb
~/.lldbinit

mathomatic

~/.mathomaticrc
~/.matho_history

rlwrap mathomatic -r を使って RLWRAP_HOME 変数を適切に設定することで履歴を移動できます。
Minecraft ~/.minecraft/ [180]
Minetest ~/.minetest/ won't fix [181]
minicom ~/.minirc.dfl アップストリームでは、~/.config/minicom以下の設定ファイルをサポートするためのTODOエントリがあります。[182]
mongodb

~/.mongorc.js
~/.dbshell

[183] Stack Overflow のスレッド ではコマンドラインスイッチの --norc を使うことを提案しています。
Nestopia UE ~/.nestopia/ won't fix
~/.netrc ~/.ssh などの多数のプログラムが使っています。curl (CURLOPT_NETRC_FILE), ftp (NETRC), s-nail (NETRC) なども使用しています。別の場所を設定できるプログラムも存在しますが w3m, wget, lftp など大抵のプログラムは設定が不可能です。
Networkmanager-openvpn ~/.cert/nm-openvpn [184]
NSS ~/.pki [185]
OpenSSH ~/.ssh [186] DropBear や OpenSSH など多数の ssh デーモンやクライアントが使用します。
palemoon ~/.moonchild productions [187]
parsec-binAUR ~/.parsec
PCManFM ~/.thumbnails [188]
pcsxrAUR ~/.pcsxr A -cfg flag exists, but can only be set relative to ~/.pcsxr.
perf ~/.debug tools/perf/util/config.c:29 でハードコードされています。
~/.profile 様々なシェルディスプレイマネージャが使用しています。
python ~/.python_history バージョン 3.4 からインタラクティブセッションの履歴は全てデフォルトで ~/.python_history に保存されますが、古いバージョンと同じ方法でカスタムパスを設定できます ([189] を参照)。
python-poetry ~/.poetry [190] POETRY_HOME can be used but it does not separate data and config.
Qt Designer ~/.designer
RedNotebook ~/.rednotebook
Remarkable ~/.remarkable
renderdocAUR ~/.renderdoc won't fix
Ren'Py ~/.renpy [191]
SANE ~/.sane/ scanimage によって .cal ファイルが作成されます。
sbcl ~/.sbclrc
/etc/sbclrc
(require :asdf)
(setf sb-ext:*userinit-pathname-function*
      (lambda () (uiop:xdg-config-home #P"sbcl/sbclrc")))

これにはroot権限が必要であり、すべてのユーザに対して~/.sbclrcの場所が変更されることに注意してください。これは、{lambdaフォーム内に既存の~/.sbclrcがあるかどうかをチェックすることで緩和できます。

Scribus ~/.scribus
SeaMonkey ~/.mozilla [192]
simplescreenrecorder ~/.ssr/ [193] 既に作成されている場合に限り$XDG_CONFIG_HOME/simplescreenrecorder/を使用します。[194] (まだリリースされていません)
Solfege

~/.solfege
~/.solfegerc
~/lessonfiles

[195]
SpamAssassin ~/.spamassassin
SQLite

~/.sqlite_history
~/.sqliterc

[196][197]

$ export SQLITE_HISTORY=$XDG_DATA_HOME/sqlite_history
$ sqlite3 -init "$XDG_CONFIG_HOME"/sqlite3/sqliterc

Steam

~/.steam
~/.steampath
~/.steampid

[198] 大抵のゲームエンジン (Unity 3D, Unreal) は仕様に準拠していますが、一部のゲームパブリッシャはパスを Steam Auto-Cloud にハードコードしているため、ゲームのセーブデータが間違ったディレクトリで同期されることがあります。
TeamSpeak ~/.ts3client $ export TS3_CONFIG_DIR="$XDG_CONFIG_HOME/ts3client"
texinfo ~/.infokey $ info --init-file "$XDG_CONFIG_HOME/infokey"
TeXmacs ~/.TeXmacs
Thunderbird ~/.thunderbird [199]
tllocalmgr ~/.texlive
valeAUR ~/.vale.ini won't fix $ vale --config "$XDG_CONFIG_HOME/vale/config.ini"
vim

~/.vim
~/.vimrc
~/.viminfo

7.3.1178 から vim は ~/.vimrc が存在しない場合に ~/.vim/vimrc を検索します。
"$XDG_CONFIG_HOME"/vim/vimrc
set undodir=$XDG_DATA_HOME/vim/undo
set directory=$XDG_DATA_HOME/vim/swap
set backupdir=$XDG_DATA_HOME/vim/backup
set viewdir=$XDG_DATA_HOME/vim/view
set viminfo+='1000,n$XDG_DATA_HOME/vim/viminfo
set runtimepath=$XDG_CONFIG_HOME/vim,$VIMRUNTIME,$XDG_CONFIG_HOME/vim/after
~/.profile
export VIMINIT=":source $XDG_CONFIG_HOME"/vim/vimrc

https://tlvince.com/vim-respect-xdg も参照。

vimperator ~/.vimperatorrc [200]

$ export VIMPERATOR_INIT=":source $XDG_CONFIG_HOME/vimperator/vimperatorrc"
$ export VIMPERATOR_RUNTIME="$XDG_CONFIG_HOME"/vimperator

w3m ~/.w3m [201]
wpa_cli ~/.wpa_cli_history
xdg-utils ~/.gnome [202] 何らかの理由で xdg-desktop-menu スクリプトは gnome_user_dir="$HOME/.gnome/apps" をハードコードしており、chromium などによって使われています。
xombrero ~/.xombrero [203]
xournalpp ~/.xournalpp [204]
xpdf ~/.xpdfrc
YARD ~/.yard [205] 誰か実装したい人がいれば、プルリクエストを受け付けます。
zenmap (nmap) ~/.zenmap [206] [207]
zoomAUR ~/.zoom
zoteroAUR ~/.zotero ~/Zotero [208]
zsh

~/.zshrc
~/.zprofile
~/.zshenv
~/.zlogin
~/.zlogout
~/.histfile
~/.zcompdump

[209] ~/.zshenvZDOTDIR=$HOME/.config/zsh を export してください (ブートストラップ問題のためにハードコードされています)。/etc/zsh/zshenv にも追加することで HOME にドットファイルが必要なくなります。ただし root 権限が必要で設定はシステム全体に適用されます。

$ export HISTFILE="$XDG_DATA_HOME"/zsh/history

ライブラリと言語のサポート

C
C99: Cloudef のシンプルな実装
C++
xdg-utils-cxx
Go
go-appdir
JVM (Java, Kotlin, Clojure, Scala)
directories-jvm
Haskell
1.2.3.0 から directory で公式に対応 ab9d0810ce
xdg-basedir
Perl
File-BaseDir
perl-file-xdg
Python
pyxdg
Ruby
rubyworks/xdg
Rust
directories-rs
Vala
GLib.Environment によるサポート。
get_user_cache_dir, get_user_data_dir, get_user_config_dir などを参照。

参照