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


18

XDGベースディレクトリ仕様は、ディレクトリ1のセットは、ユーザーフォルダ内にいわゆるドットファイル/ディレクトリに行くために使用されるデータを格納するために使用されています。この投稿は、このディレクトリを可能な限り使用したいユーザーを支援することを目的としています。

回答:


17

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

シェルを設定する

# 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を使用し、スクリプトにはもう1つ使用するなど、複数のシェルを使用する場合は$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の下には、新しいクッキーの作成になってしまいます。

どちらにもディレクトリがあるため、ドットファイルの~/.swt内容はおそらくに直接保存する必要${XDG_DATA_HOME}がありlibます。可能な場合、その方法に関するドキュメントは見つかりませんでした。

Mozilla製品は適切な環境変数をサポートしていません。Mozilla製品がカスタムユーザー構成ディレクトリの使用を許可していない、およびFreedesktop.org XDG Base Directory Specificationのサポートを参照してください。

その他の有用なソース


1
bashを対話型の非ログインシェルとして使用する場合(通常の端末の使用法)、/ etc / profileをまったく読み取ってはいけませんか?その場合、定義は設定されませんか?
ハッシュケン

1
私のシステムのマンページによると、あなたは正しいです。システムのデフォルト設定に依存する可能性があるため、ここで簡単にテストすることをお勧めします。フィードバックをお願いします、ありがとう。
精神奴隷

1
非ログインシェルの場合、/ etc / profileが読み取られないことを確認できます。ただし、tmuxを開くと、/ etc / profileが読み取られます。これは、tmuxがすべてのシェルをログインシェルとして開くためです。
ハッシュケン

1
履歴ファイルなどを以下に保存する必要があります$XDG_CACHE_HOME

1)追加:export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2)変数を引用してください!私のために)3を(たとえば)(1を参照)bash、私は必要に:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
トム・ヘイル

6

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

ギット

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物事ではないようです。


注:私は使用して移動していnixos.org完全にエレガントな方法で、すべての設定を制御することを可能にする
ベンCreasyを

1

Zshは、bashを使用して、$ZDOTDIR変数を使用して家を整理するよりも、わずかに良い仕事をします。邪魔にならないように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。また、次の$XDG_DATA_HOME場所にzsh履歴を追加することをお勧めしますHISTFILE=$XDG_DATA_HOME/zsh/zsh_history

一部のアプリはデフォルトでXDGの場所を検索しますが、$ HOMEディレクトリにレガシードットファイルが残っているため、気付かないこともあります。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を汚染する何百ものアプリを使用していますが、20年前に使用されていた数十のアプリではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.