web-dev-qa-db-ja.com

すべてのドットファイルをXDGディレクトリに移動する手順は何ですか?

XDG Base Directory Specification は、いわゆるドットファイル/ディレクトリに移動するために使用されていたデータをユーザーフォルダに格納するために使用できるディレクトリのセットを提供します。この投稿は、このディレクトリをできるだけ使用したいユーザーを支援することを目的としています。

18
psychoslave

実際、一部のアプリケーションはパスをハードコーディングしているため、質問に対する現在の短い答えはできないです。それでも、特にXDGディレクトリをサポートしていない多くのアプリケーションでは、環境変数を使用して他のディレクトリを設定できます。場合によっては、システム全体の構成を変更できるようにする必要があります(たとえば、Shellなど)。ただし、ほとんどの場合、特権のないユーザーとしてこの手順を実行できるはずです。

シェルの設定

# Setting bash to use $XDG_CONFIG_HOME/bash, defaults to ~/.config/bash
confdir=${XDG_CONFIG_HOME:-$HOME/.config}/bash

### Moving existing files
mkdir -p -- "$confdir"
for file in "$HOME"/.bash*; do
    dest=$confdir/$(basename "${file:1}") 
    mv -i -- "$file" "$dest" # don't overwrite without permission
done

### Sourcing and setting variables
Sudo sh -c 'cat >>/etc/profile.d/bash_in_xdg_config_home.sh <<CONF
# Make bash follow the XDG_CONFIG_HOME convention
_confdir=\${XDG_CONFIG_HOME:-\$HOME/.config}/bash
if [ -d "$_confdir" ] &&  [ "\$0" = "bash" ]
then
    . "\$_confdir"/bash_profile
    . "\$_confdir"/bashrc
    HISTFILE=\$_confdir/bash_history
fi
unset _confdir
CONF
'

Sudo sh -c 'cat >>/etc/bash.bash_logout <<CONF
if [ -s "\${XDG_CONFIG_HOME:-\$HOME/.config}/bash/bash_logout" ]
then
    . "\${XDG_CONFIG_HOME:-\$HOME/.config}/bash/bash_logout"
fi
CONF
'

# Setting zsh
## System wide configuration (using xdg directories)
Sudo sh -c 'cat >>/etc/zshenv <<CONF
if [[ -d "\${XDG_CONFIG_HOME:-\$HOME/.config}"/zsh ]]
then
        export ZDOTDIR=\${XDG_CONFIG_HOME:-\$HOME/.config}/zsh
fi
CONF
'

複数のシェル(インタラクティブシェルにはzsh、スクリプトには他のものなど)を使用する場合は、関連するシェル初期化スクリプトでソースとなる$XDG_CONFIG_HOME/profileファイルを使用できます。

環境変数の設定

# Bazaar
export BZRPATH=$XDG_CONFIG_HOME/Bazaar
export BZR_PLUGIN_PATH=$XDG_DATA_HOME/Bazaar
export BZR_HOME=$XDG_CACHE_HOME/Bazaar

# gnupg
export GNUPGHOME=${XDG_CONFIG_HOME}/gnupg

# ICEauthority
export ICEAUTHORITY=${XDG_CACHE_HOME}/ICEauthority

#  less
export LESSHISTFILE="${XDG_CONFIG_HOME}/less/history"
export LESSKEY="${XDG_CONFIG_HOME}/less/keys"



# mplayer
export MPLAYER_HOME=$XDG_CONFIG_HOME/mplayer

# Subversion
export Subversion_HOME=$XDG_CONFIG_HOME/Subversion


# vim
export VIMINIT='let $MYVIMRC="$XDG_CONFIG_HOME/vim/vimrc" | source $MYVIMRC'
export VIMDOTDIR="$XDG_CONFIG_HOME/vim"

回避する

SSH

SSHはクライアント構成ファイルを変更する方法を提供しますが、私が見つけた限りでは、コマンドラインからのみです。したがって、デフォルトの配置がないクライアントを常に呼び出す1つの解決策は次のとおりです。

if [ -s "${XDG_CONFIG_HOME}/ssh/config" ]
then
    SSH_CONFIG="-F ${XDG_CONFIG_HOME}/ssh/config"
fi
if [ -s "${XDG_CONFIG_HOME}/ssh/id_dsa" ]
then
    SSH_ID="-i ${XDG_CONFIG_HOME}/ssh/id_dsa"
fi

alias ssh="ssh $SSH_CONFIG $SSH_ID "
alias ssh-copy-id="ssh-copy-id $SSH_ID"

そして、あなたの${XDG_CONFIG_HOME}/ssh/configは次のようなものを含むべきです:

Host *
    IdentityFile /home/user/.config/ssh/id_dsa

まだ機能しないもの

GNUPGHOMEはドキュメント化された変数ですが、Fedora 21では、新しいセッションを起動すると、新しい~/.gnupgディレクトリが作成されます。

ICEauthorityは文書化された変数ですが、Fedora 21では、新しいセッションを起動すると新しいCookieが作成されることになります。

Dotfile ~/.swtのコンテンツは、両方ともlibディレクトリを持っているため、おそらく${XDG_DATA_HOME}に直接保存する必要があります。可能であれば、その方法についてのドキュメントは見つかりませんでした。

Mozilla製品は適切な環境変数をサポートしていません。参照 Mozilla製品はカスタムユーザー設定ディレクトリの使用を許可していません および Freedesktop.org XDGベースディレクトリ仕様のサポート

その他の役立つ情報源

17
psychoslave

Arch Linux wikiページ XDG Base Directory support を参照することをお勧めします。これは継続的に更新されます。

[〜#〜] git [〜#〜]

OSXで.gitconfigXDG_CONFIG_HOMEに移動しました。 git-configのドキュメント(評判のためリンクは省略)による。

Second user-specific configuration file. If $XDG_CONFIG_HOME is not set or
empty, $HOME/.config/git/config will be used. Any single-valued variable 
set in this file will be overwritten by whatever is in ~/.gitconfig. It is
a good idea not to create this file if you sometimes use older versions of
Git, as support for this file was added fairly recently.

Mavericksでシステム全体のPATH環境変数を設定する の指示に従って環境変数を設定します。ファイルXDG_CONFIG_HOME/git/configは自分で作成する必要があり、~/.gitconfigが存在する場合は優先されます。

[〜#〜] vim [〜#〜]

Tom Vincentの2011年の記事 VimはXDGを尊重 を使用しましたが、動作するようです。上記の答えについてはわかりません。 VIMDOTDIRは物ではないようです。

6
Ben Creasy

Zshは、$ZDOTDIR変数を使用して家を整理するbashよりも少し優れています。 zshを邪魔にならないように移動するには、~/.zshenvファイルに以下を追加する必要があります。

# ~/.zshenv contents
# this is the bare bones setup to move everything to XDG dir
ZDOTDIR=$HOME/.config/zsh

ルート権限がある場合は、代わりにこれを/etc/zsh/zshenvに追加して、$ HOMEにzshドットファイルが不要になるようにすることができます。ここから、他のすべてのzshドットファイルを~/.config/zshのように.zshrcに移動できます。 zsh履歴を$XDG_DATA_HOMEの場所に追加することもお勧めします:HISTFILE=$XDG_DATA_HOME/zsh/zsh_history

一部のアプリはデフォルトでXDGの場所を探しますが、$ HOMEディレクトリにレガシードットファイルが残っているため、XDGの場所を認識できない場合もあります。 Gitはこの良い例です。~/.gitconfigがある場合は、~/.config/git/configに移動してみてください。私の個人的なお気に入り Fish Shell も、デフォルトで〜/ .configを使用します。

また、他のアプリでre- $ HOME-ing変数の独自のバージョンを確認してください。多くは変数を介してXDGをサポートしています。

  • アトム:export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass:export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa/zには1つあります:export _Z_DATA=$XDG_DATA_HOME/z/z.txt

しかし、XDGの恥の壁はまだかなりあります。 Tmuxは積極的に敵対的です $ HOMEの整理をサポートします。 pylintと同じそしてジュリア 。そしてリストは続く。 ArchはXDGサポートのニースランニングリストをここに保持します

正直なところ、それを支持することへの抵抗は理解できません。ユーザーは、アプリが$ HOMEで大まかに実行されるべきではないという明確なメッセージを明確に送信する必要があります。それはもう大丈夫ではありません。現代のシステムは、$ HOMEを汚染する数百のアプリを使用しています。

1
mattmc3