ls -a
すると表示されるリストの8割以上がドットファイルとか、もう許して下さいな感じです。% ls -a . .aliases~ .dbus .hgignore .profile .xinitrc .zshrc~ __pycache__ .. .bash_history .dir_colors .hgignore~ .python_history .xprofile Desktop bin .ICEauthority .bash_logout .dmrc .hgrc .ssh .xsession-errors Documents build .Xauthority .bash_profile .esd_auth .hgrc~ .texlive .xsession-errors.old Downloads work .Xclients .bashrc .gem .lesshst .thumbnails .zcompdump Music .Xmodmap .cache .gkrellm2 .local .thunderbird .zsh Pictures .Xmodmap.orig .chrome-remote-desktop-session .gnupg .mozc .vim .zshenv Public .Xmodmap~ .chrome-remote-desktop-session~ .gvimrc .mozilla .vimrc .zshenv~ Templates .aliases .config .hg .pki .wget-hsts .zshrc Videos
編集した結果バックアップファイルやらコピーを残してるのやらありますが、まあざっとこんな感じ。もうちょっと整理して数を減らしたいところです。
このときに頼りになるのが XDG Base Directory Specification。それを規格から実装に照らして説明してくれているのがこちら。
なので一つ一つやっていきます。環境は Manjaro Linux XFCE 版なので、他のディストロは適当に読み替えてください。
システム
システム側であらかじめ設定されているのは以下の環境変数です。XDG_SESSION_ID=c5 XDG_RUNTIME_DIR=/run/user/1000 XDG_SESSION_TYPE=tty XDG_SESSION_CLASS=userまた、ユーザ側で設定しておきたいのは以下の環境変数です。
XDG_CONFIG_HOME=$HOME/.config XDG_CACHE_HOME=$HOME/.cache XDG_DATA_HOME=$HOME/.local/shareXDG_RUNTIME_DIR はユーザごとに設定される /var/run みたいなものです。デフォルトではユーザIDが振られています。必要なら設定すればよいでしょう。
それとは別に、
/etc/xdg
に設定ファイルがいくつか置かれています。ただしこれらは ssh ログイン時などには読み込まれないようなので、ここでは置いておきます。ここでは、お仕着せでシステムワイドに設定する方向で進めていきます。
bash
まずは標準の shell の bash。Manjaro の場合には、次の順序で読み込まれるようです。bash -l -v
で確認しました。つまりログインシェルの場合。- /etc/profile
- /etc/profile.d/*.sh
/etc/profile から呼ばれる。アルファベット順に読み込まれる。アプリケーションごとに必要な設定はここ。ロケールもここ。 - /etc/bash.bashrc
/etc/profile から呼ばれる。システムワイドの bash 設定を行う。プロンプトや $TERM の設定はここ。 - /usr/share/bash-completion/bash_completion
もしあれば読み込まれる。Manjaro にはない。 - $HOME/.bash_profile
$HOME/.bashrc を source しているだけ。 - $HOME/.bashrc
ユーザの環境変数とか alias とかいろいろと設定する。 - プロンプトが表示されて bash 起動完了。
- $HOME/.bash_logout
ログアウト時に読み込まれる。何もしていない。 - /etc/bash.bash_logout
ログアウト時に読み込まれる。何もしていない。
.config/bash
に移動することは(現状では)できません。ただ、他のアプリケーションのための設定は必要なので、ここでは /etc/profile.d/xdgenv.sh あたりで XDG ユーザ変数を設定するようにすればよいでしょう。そうすることで他の shell からも source することができます。/etc/profile.d/xdgenv.sh:
# Set user variables based on XDG Base Directory Specification. # export XDG_CONFIG_HOME=$HOME/.config export XDG_CACHE_HOME=$HOME/.cache export XDG_DATA_HOME=$HOME/.local/share
zsh
zsh では環境変数 ZDOTDIR が設定されているとそこを見に行きます。- /etc/zsh/zshenv
本来は /etc/zshenv を読みにいく(manページの説明)ようだが、Manjaro では /etc/zsh/zshenv を読みにいく。 - $ZDOTDIR/.zshenv
環境変数 ZDOTDIR が指定されていれば $ZDOTDIR/.zshenv を、指定されていなければ $HOME/.zshenv を読む。 - /etc/zsh/zprofile
Manjaro では /etc/zsh/zprofile の中身はemulate sh -c 'source /etc/profile'
となっていて、/etc/profile を読み込む。/etc/profile の読み込むものは bash と同じ。 - $ZDOTDIR/.zprofile
ZDOTDIR が指定されていなければ $HOME/.zprofile を読み込む。 - /etc/zsh/zshrc
- $ZDOTDIR/.zshrc
- /etc/zsh/zlogin
ログインシェルの場合に読み込まれる。 - $ZDOTDIR/.zlogin
ログインシェルの場合に読み込まれる。 - プロンプトが表示されて bash 起動完了。
- $ZDOTDIR/.zlogout
ログアウト時に読み込まれる。何もしていない。 - /etc/zsh/zlogout
ログアウト時に読み込まれる。何もしていない。
ZDOTDIR=$XDG_CONFIG_HOME/zsh
とする必要があるため、二重に読み込むことになりますが以下のようにします。# /etc/zsh/zshenv # set ZDOTDIR respecting XDG Base Directory Specification # emulate sh -c 'source /etc/profile' export ZDOTDIR=$XDG_CONFIG_HOME/zshまた、標準ではコマンドヒストリは $HOME/.zsh/histfile に保存されますが、これを $XDG_CACHE_HOME/zsh/history に変更します。コマンドヒストリはユーザ設定なので、これは $XDG_CONFIG_HOME/zsh/.zshrc で設定し直します。
$XDG_CONFIG_HOME/zsh/.zshrc:
HISTFILE=$XDG_CACHE_HOME/zsh/hisotry zstyle :compinstall filename '$ZDOTDIR/.zshrc'これで $HOME から zsh 関連のドットファイルは削除できます。
git
0d94427eから XDG_CONFIG_HOME に対応しているので、$XDG_CONFIG_HOME/git/config を使います。Neovim
Neovim は最初から XDG Base Directory Specification に沿うように作られているので、$XDG_CONFIG_HOME/nvim を利用すれば問題ありません。ここで、vim からも同じ設定を使えるように init.vim などを記述しておくと、nvim でも vim でも同じように使えます。
vim
vimはちょっとややこしいです。前述の ArchLinux の Wiki に書いてあるように、.vimrc などは基本的にハードコードされています。が、別途VIMINIT=":source $XDG_CONFIG_HOME"/vim/vimrc
を shell の設定時に行っておけば、vim の起動時に $VIMINIT を参照してくれます。なので $ZDOTDIR/.zshenv に設定しておきます。ここでは vim と nvim の設定を共通にすることを考えているので、あえて $XDG_CONFIG_HOME/nvim/vimrc にします。ただし、undodir などが一緒になると問題があるかもしれないので、そこは別にしておきます。Manjaro の場合には vim は標準ではインストールされていなくて、ex および vi が標準なので、あえて vim をインストールせずに
alias vim=nvim
するのもアリかもしれません。# .zshenv PATH1=$HOME/bin export PATH=$PATH:$PATH1 export QT_SELECT=5 export GTK_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx export QT_IM_MODULE=fcitx # better yaourt colors export YAOURT_COLORS="nb=1:pkg=1:ver=1;32:lver=1;45:installed=1;42:grp=1;34:od=1;41; 5:votes=1;44:dsc=0:other=1;35" # env for locate updatedb for local files. export PRUNEPATHS="`echo $HOME/.cache/[a-ce-z]*`" export PRUNEPATHS="`find $HOME -name \".hg\" -printf \"%p \"` $PRUNEPATHS" export PRUNEPATHS="$HOME/.mozilla $HOME/.dbus $HOME/.thumbnails $HOME/.thunderbird $ PRUNEPATHS" export LOCATE_PATH=$XDG_CACHE_HOME/mlocate.db export VIMINIT=":source $XDG_CONFIG_HOME"/nvim/vimrcまた、vimrc は以下の内容にします。
" vim:set et ts=2 sts=2 sw=2 tw=0 fenc=utf-8: " _vimrc : initialization file for Vim. " just source init.vim for commonnization. " " Modified: 9 Apr 2018 " source $XDG_CONFIG_HOME/nvim/init.vim " mswin.vim maps those keys when gui=yes. " this is terrible and should be unmapped. if has('gui') unmap <C-f> iunmap <C-f> cunmap <C-f> unmap <C-h> iunmap <C-h> cunmap <C-h> endif
mercurial
$HOME/.hgrc は $XDG_CONFIG_HOME/hg/hgrc に移動することができます。が、.hgignore はそのディレクトリ以下の ignore ファイルを指定しているため、移動できません。また .hg ディレクトリはリポジトリのため、移動できません。その他
.ICEauthority
libice が作成するファイルですが、Use XDG base directory instead of $HOME for .ICEauthorityで議論され、パッチがあげられ、2019年3月25日に push されているので、いずれマージされるでしょう。それまでは触らないでおくか、
export ICEAUTHORITY="$XDG_RUNTIME_DIR"/ICEauthority
を /etc/zsh/zshenv あたりに入れておけばよいでしょう。ただ、環境変数がやたら増えるのも困りものですから、ここでは放置しておきます。.Xauthority
同上です。export XAUTHORITY="$XDG_RUNTIME_DIR"/Xauthority
.Xmodmap
対応策はなさそうです。.dircolors
source "$(dircolors "$XDG_CONFIG_HOME"/dircolors)"
を $ZDOTDIR/.zshenv あたりに入れておきます。bash のほうは $HOME/.bashrc のdircolors に関する部分の変更が必要です。.mozc
移動できません。ソースを見ましたが、XDG_CONFIG_HOME を参照している部分はありませんでした。.mozilla(firefox)
$XDG_CONFIG_HOME/mozilla と $XDG_CACHE_HOME/mozilla と $XDG_DATA_HOME/mozilla がある場合にはそちらを使うようです。なので、以下のようにします。
$ mkdir .config/mozilla $ mkdir .cache/mozilla $ mkdir .local/share/mozilla $ chmod 700 .config/mozilla .cache/mozilla .local/share/mozilla
.python_history
Python がインタラクティブモードで起動されると readlline が作成するようです。今のところ移動できません。.texlive
ハードコードされているようで変更できません。.thumbnails
$XDG_CACHE_HOME/thumbnails/ があればそちらを使うようです。.thunderbird
ハードコードされているようで変更できません。.xinitrc
基本的には DesktopManager(lightdmやgdmなど)を使っていれば xinit を呼ぶことはないので不要なはずですが、export XINITRC="$XDG_CONFIG_HOME"/X11/xinitrc
を指定することで xinit は参照してくれます。.gnupg
export GNUPGHOME="$XDG_CONFIG_HOME"/gnupg
することで参照してくれます。
0 件のコメント:
コメントを投稿