Каков шаг, чтобы переместить все ваши точечные файлы в каталоги XDG?

4717
psychoslave

Спецификация Справочник База XDG предоставляет набор каталог один может использоваться для хранения данных, используемых для перехода в так называемых точечных файлов / директории в папке пользователя. Этот пост призван помочь пользователям, которые желают использовать эти каталоги как можно больше.

14

3 ответа на вопрос

12
psychoslave

Действительно, текущий краткий ответ на этот вопрос - вы не можете, так как некоторые приложения жестко задают путь. Тем не менее, многие приложения, которые специально не поддерживают каталоги XDG, позволяют устанавливать другие каталоги через переменные среды. Некоторое время вам нужно иметь возможность изменять общесистемную конфигурацию, например, с помощью оболочки, но большую часть времени вы сможете выполнять этот шаг как непривилегированный пользователь.

Установка вашей оболочки

# Setting bash to use $XDG_CONFIG_HOME/bash   ### Moving existing files mkdir -p $XDG_CONFIG_HOME/bash for file in ~/.bash*;do  dest=$/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 . "\$/bash/bash_profile" . "\$/bash/bashrc" HISTFILE="\$/bash/bash_history" fi CONF '  sudo sh -c 'cat >>/etc/bash.bash_logout <<CONF if [ -s "\$/bash/bash_logout" ] then . "\$/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=$/gnupg  # ICEauthority export ICEAUTHORITY=$/ICEauthority  # less export LESSHISTFILE="$/less/history" export LESSKEY="$/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 "$/ssh/config" ] then SSH_CONFIG="-F $/ssh/config" fi if [ -s "$/ssh/id_dsa" ] then SSH_ID="-i $/ssh/id_dsa" fi  alias ssh="ssh $SSH_CONFIG $SSH_ID " alias ssh-copy-id="ssh-copy-id $SSH_ID" 

И ваш $/ssh/configдолжен содержать что-то вроде:

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

Что еще не работает

Хотя GNUPGHOMEэто задокументированная переменная, в Fedora 21 вы создадите новый ~/.gnupgкаталог при запуске нового сеанса.

Хотя ICEauthorityэто задокументированная переменная, в Fedora 21 вы в конечном итоге создадите новый файл cookie при запуске нового сеанса.

~/.swtСодержимое dotfile, вероятно, должно храниться непосредственно в $обоих libкаталогах. Никакой документации не найдено, как это сделать, если это возможно.

Продукты Mozilla не поддерживают соответствующую переменную среды, см. Продукты Mozilla не позволяют использовать пользовательский каталог конфигурации пользователя и Поддержка спецификации базового каталога XDG Freedesktop.org .

Другие полезные источники

При использовании bash в качестве интерактивной оболочки без входа в систему (обычное использование терминала), не должен ли / etc / profile вообще не читаться? Разве наши определения не будут установлены тогда? Hashken 8 лет назад 1
Согласно man-странице моей системы, вы правы. Теперь я предлагаю вам просто протестировать, так как это может зависеть от конфигурации вашей системы по умолчанию. Пожалуйста, дайте обратную связь, спасибо. psychoslave 8 лет назад 1
Я могу подтвердить, что / etc / profile не читается для не входящих в систему оболочек. Но если вы откроете tmux, ваш / etc / profile будет прочитан. Это потому, что tmux открывает все свои оболочки как оболочки входа в систему. Hashken 8 лет назад 1
такие вещи, как файлы истории, должны храниться в `$ XDG_CACHE_HOME` 8 лет назад 1
1) Add: `export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"` 2) Please quote your variables! (see (1) for an example) 3) For my `bash`, I needed to: `export XDG_CONFIG_HOME=$` Tom Hale 7 лет назад 0
5
Ben Creasy

Я рекомендую обратиться к вики-странице Arch Linux : поддержка XDG Base Directory, которая постоянно обновляется.

GIT

Я просто переехал мой .gitconfigTo 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кажется, не вещь.

Примечание: я перехожу к использованию https://nixos.org/, который позволяет полностью элегантно контролировать всю конфигурацию Ben Creasy 5 лет назад 0
0
mattmc3

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и избежать необходимости в любых файлах 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
  • lpass: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z имеет один: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

Но все еще есть довольно обширная стена позора. Tmux активно враждебно поддерживает снятие загромождения вашего $ HOME. То же самое с Пилинтом . И Юля . И список продолжается. Arch хранит хороший список поддержки XDG здесь .

Честно говоря, я не могу понять сопротивление этому. Пользователи должны четко отправлять четкое сообщение о том, что приложения не должны работать в неровном режиме над их $ HOME. Это больше не нормально. Современная система использует сотни приложений, которые загрязняют $ HOME, а не десятки, как это было 20 лет назад.

Похожие вопросы