Каков шаг, чтобы переместить все ваши точечные файлы в каталоги XDG?
Базовая спецификация каталога XDG предоставляет набор каталогов, который можно использовать для хранения данных, которые раньше использовались в так называемых точечных файлах / каталогах, в папке пользователя. Этот пост призван помочь пользователям, которые хотят использовать эти каталоги как можно больше.
4 ответа
Действительно, текущий короткий ответ на этот вопрос - вы не можете, так как некоторые приложения жестко задают путь. Тем не менее, многие приложения, которые специально не поддерживают каталоги XDG, позволяют устанавливать другие каталоги через переменные среды. Некоторое время вам нужно изменить общесистемную конфигурацию, например, с помощью оболочки, но большую часть времени вы сможете выполнять этот шаг как непривилегированный пользователь.
Установка вашей оболочки
# Setting bash to use $XDG_CONFIG_HOME/bash
### Moving existing files
mkdir -p $XDG_CONFIG_HOME/bash
for file in ~/.bash*;do
dest=${XDG_CONFIG_HOME}/bash/$(basename $file|cut -d\. -f2)
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
if [ -d "\$XDG_CONFIG_HOME/bash" ] && [ "\$0" = "bash" ]
then
. "\${XDG_CONFIG_HOME}/bash/bash_profile"
. "\${XDG_CONFIG_HOME}/bash/bashrc"
HISTFILE="\${XDG_CONFIG_HOME}/bash/bash_history"
fi
CONF
'
sudo sh -c 'cat >>/etc/bash.bash_logout <<CONF
if [ -s "\${XDG_CONFIG_HOME}/bash/bash_logout" ]
then
. "\${XDG_CONFIG_HOME}/bash/bash_logout"
fi
CONF
'
# Setting zsh
## System wide configuration (using xdg directories)
sudo sh -c 'cat >>/etc/zshenv <<CONF
if [[ -z "\$XDG_CONFIG_HOME" ]]
then
export XDG_CONFIG_HOME="\$HOME/.config"
fi
if [[ -d "\$XDG_CONFIG_HOME/zsh" ]]
then
export ZDOTDIR="\$XDG_CONFIG_HOME/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
контент, вероятно, должен храниться непосредственно в ${XDG_DATA_HOME}
, как у обоих lib
каталоги. Никакой документации не найдено, как это сделать, если это возможно.
ПродуктыMozilla не поддерживают соответствующую переменную среды, см. Продукты Mozilla не позволяют использовать каталог пользовательской конфигурации пользователя и Поддержка спецификации базового каталога XDG Freedesktop.org.
Другие полезные источники
- Переместите ваши файлы конфигурации в $ XDG_CONFIG_HOME
- https://github.com/woegjiub/.config/blob/master/bash/xdg.sh
- http://www.reddit.com/r/linux/comments/2v8rv2/move_your_config_files_to_xdg_config_home/ (переместите файлы конфигурации в
$XDG_CONFIG_HOME
) - https://github.com/grawity/dotfiles/blob/master/.dotfiles.notes
Я рекомендую обратиться к вики-странице Arch Linux : поддержка XDG Base Directory, которая постоянно обновляется.
GIT
Я только что перенес мой .gitconfig
в XDG_CONFIG_HOME
на OSX. Согласно документации 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.
Я установил переменную среды, используя инструкции в разделе Установка общесистемной переменной среды PATH в Mavericks. Обратите внимание, что вам нужно будет создать файл XDG_CONFIG_HOME/git/config
себя и если ~/.gitconfig
существует, это будет иметь приоритет.
VIM
Я использовал статью Тома Винсента 2011 года о уважении XDG, и это, похоже, работает. Я не уверен в ответе выше; VIMDOTDIR
кажется, не вещь.
Zsh работает немного лучше, чем bash, позволяя избавиться от вашего дома, используя $ZDOTDIR
переменная. Чтобы убрать zsh с дороги, вам нужно добавить следующее ~/.zshenv
файл:
# ~/.zshenv contents
# this is the bare bones setup to move everything to XDG dir
ZDOTDIR=$HOME/.config/zsh
Если у вас есть привилегии пользователя root, вы можете добавить это вместо /etc/zsh/zshenv
и избегайте необходимости в любых файлах zsh в вашем $HOME. Отсюда все ваши другие zsh-файлы могут быть перемещены в ~/.config/zsh
, лайк .zshrc
, Я также рекомендую добавить вашу историю Zsh в $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
- lpass:
export LPASS_HOME=$XDG_CONFIG_HOME/lpass
- rupa / z имеет один:
export _Z_DATA=$XDG_DATA_HOME/z/z.txt
Но есть еще довольно обширная стена позора XDG. Tmux активно враждебно относится к поддержке устранения загромождения вашего $HOME. То же самое с Пилинтом. И Юля. И список продолжается. Arch хранит хороший список поддержки XDG здесь.
Честно говоря, я не могу понять сопротивление этому. Пользователи должны четко отправлять четкое сообщение о том, что приложения не должны работать в неровном состоянии через их $HOME. Это больше не нормально. Современная система использует сотни приложений, которые загрязняют $HOME, а не десятки, как это было 20 лет назад.
Самый полный ресурс для очистки моего домашнего каталога, который я нашел, — это xdg-ninja. Это инструмент, который проверяет точечные файлы и каталоги в вашем домашнем каталоге и распечатывает список решений по настройке каждого отдельного программного обеспечения, которое загромождает домашний каталог. Конечно, он не знает каждое программное обеспечение (и для некоторых нет решения ! 1 ), но это, безусловно, наиболее полный индивидуальный список, и инструмент принимает запросы на включение для пока еще отсутствующих инструментов.
1 Если не считать неподдерживаемого взлома через
LD_PRELOAD
.