Действительно, текущий краткий ответ на этот вопрос - вы не можете , так как некоторые приложения жестко задают путь. Тем не менее, многие приложения, которые специально не поддерживают каталоги 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 для интерактивной оболочки, а другую - для сценариев, вам может потребоваться $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 предоставляет способ изменить файл конфигурации клиента, но - насколько я обнаружил - только через командную строку. Таким образом, одно решение всегда вызывать клиентов с отсутствием по умолчанию:
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 при запуске нового сеанса.
~/.swt
Содержимое dotfile, вероятно, должно храниться непосредственно в ${XDG_DATA_HOME}
обоих lib
каталогах. Не было найдено никаких документов о том, как это сделать, если это возможно.
Продукты Mozilla не поддерживают соответствующую переменную среды, см. Продукты Mozilla не позволяют использовать пользовательский каталог конфигурации пользователя и Поддержка спецификации базового каталога XDG Freedesktop.org .
Другие полезные источники
$XDG_CACHE_HOME
export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"
2) Пожалуйста, укажите ваши переменные! (см. (1) для примера) 3) Для моегоbash
, мне нужно было:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Я рекомендую обратиться к вики-странице Arch Linux : поддержка XDG Base Directory, которая постоянно обновляется.
GIT
Я просто переехал мой
.gitconfig
ToXDG_CONFIG_HOME
на OSX. Согласно документации git-config (ссылка пропущена из-за репутации).Я установил переменную среды, используя инструкции в разделе Установка общесистемной переменной среды PATH в Mavericks . Обратите внимание, что вам нужно будет создать файл
XDG_CONFIG_HOME/git/config
самостоятельно, и если~/.gitconfig
он существует, он будет иметь приоритет.VIM
Я использовал статью Тома Винсента 2011 года о уважении XDG, и это, похоже, работает. Я не уверен в ответе выше;
VIMDOTDIR
кажется, не вещь.источник
Zsh работает немного лучше, чем bash, позволяя вам разгромить свой дом с помощью
$ZDOTDIR
переменной. Чтобы убрать zsh с дороги, вам нужно добавить в ваш~/.zshenv
файл следующее:Если у вас есть привилегии суперпользователя, вы можете добавить это вместо этого
/etc/zsh/zshenv
и избежать необходимости в любых файлах zsh в вашем $ HOME. Отсюда, все ваши другие ЗШ точечных файлы могут быть перемещены~/.config/zsh
, как.zshrc
. Я также рекомендую добавить свою историю ЗШ в$XDG_DATA_HOME
месте:HISTFILE=$XDG_DATA_HOME/zsh/zsh_history
.Некоторые приложения будут искать местоположения XDG по умолчанию, и вы можете даже не осознавать этого, потому что у вас все еще есть устаревший точечный файл в вашем каталоге $ HOME. Git является хорошим примером этого - если у вас есть
~/.gitconfig
, попробуйте переместить его в~/.config/git/config
. Мой личный фаворит, Fish Shell , по умолчанию тоже использует ~ / .config.Кроме того, проверьте ваши другие приложения для их собственной версии переменной $ HOME-ing. Многие поддерживают его XDG через переменную:
export ATOM_HOME=$XDG_CONFIG_HOME/atom
export LPASS_HOME=$XDG_CONFIG_HOME/lpass
export _Z_DATA=$XDG_DATA_HOME/z/z.txt
Но все еще есть довольно обширная стена позора XDG. Tmux активно враждебно относится к поддержке устранения загромождения вашего $ HOME. То же самое с Пилинтом . И Юля . И список продолжается. Arch хранит хороший список поддержки XDG здесь .
Честно говоря, я не могу понять сопротивление этому. Пользователи должны четко отправлять четкое сообщение о том, что приложения не должны работать в неровном состоянии через их $ HOME. Это больше не нормально. Современная система использует сотни приложений, которые загрязняют $ HOME, а не десятки, как это было 20 лет назад.
источник