De fato, a resposta curta e atual para a pergunta é que você não pode , pois algum aplicativo codifica o caminho. No entanto, muitos aplicativos que não suportam diretórios XDG especificamente permitem definir outros diretórios por meio de variáveis de ambiente. Algum tempo você precisa ser capaz de alterar a configuração de todo o sistema, por exemplo, com shell, mas na maioria das vezes, deve ser capaz de executar a etapa como um usuário sem privilégios.
Configurando seu 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
'
Se você usar vários shell, por exemplo, zsh para shell interativo, mas outro para scripts, convém $XDG_CONFIG_HOME/profile
arquivar, que você fornecerá no script de inicialização do shell relevante.
Configurando variáveis de ambiente
# 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"
Gambiarra
SSH
O SSH fornece uma maneira de alterar o arquivo de configuração do cliente, mas - até onde eu descobri - apenas através da linha de comando. Portanto, uma solução para sempre chamar os clientes com nenhum posicionamento padrão pode ser:
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"
E você ${XDG_CONFIG_HOME}/ssh/config
deve conter algo como:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
O que ainda não funciona
Embora GNUPGHOME
seja uma variável documentada, no Fedora 21 você terminará com a criação de um novo ~/.gnupg
diretório ao iniciar uma nova sessão.
Embora ICEauthority
seja uma variável documentada, no Fedora 21 você terminará com a criação de um novo cookie quando iniciar uma nova sessão.
O ~/.swt
conteúdo do dotfile provavelmente deve ser armazenado diretamente ${XDG_DATA_HOME}
, pois ambos têm lib
diretórios. Nenhuma documentação foi encontrada sobre como fazer isso, se possível.
Os produtos Mozilla não suportam uma variável de ambiente apropriada; consulte Produtos Mozilla não permitem o uso de um diretório de configuração de usuário personalizado e Suporte para a especificação de diretório base do Freedesktop.org XDG .
Outras fontes úteis
$XDG_CACHE_HOME
export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"
2) Por favor, indique suas variáveis! (veja (1) para um exemplo) 3) Para o meubash
, eu precisava:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Eu recomendo consultar a página wiki do Arch Linux, suporte ao XDG Base Directory, que é atualizado continuamente.
GIT
Acabei de me mudar
.gitconfig
para oXDG_CONFIG_HOME
OSX. De acordo com a documentação do git-config (link omitido devido à reputação).Defino a variável de ambiente usando as instruções em Configurando a variável de ambiente PATH em todo o sistema no Mavericks . Observe que você precisará criar o arquivo
XDG_CONFIG_HOME/git/config
e, se~/.gitconfig
existir, terá precedência.VIM
Eu usei o artigo de Tom Vincent de 2011, Vim, respeite o XDG e parece funcionar. Não tenho certeza sobre a resposta acima;
VIMDOTDIR
não parece ser uma coisa.fonte
O Zsh faz um trabalho um pouco melhor do que o bash, permitindo que você desorganize sua casa usando a
$ZDOTDIR
variável Para mover o zsh para fora do caminho, você precisa adicionar o seguinte ao seu~/.zshenv
arquivo:Se você tiver privilégios de root, poderá adicioná-lo
/etc/zsh/zshenv
e evitar a necessidade de arquivos de ponto zsh no seu $ HOME. A partir daqui, todos os seus outros zsh dotfiles podem ser movidos para~/.config/zsh
, como.zshrc
. Eu também recomendo adicionando sua história zsh ao$XDG_DATA_HOME
local:HISTFILE=$XDG_DATA_HOME/zsh/zsh_history
.Alguns aplicativos procurarão os locais XDG por padrão e você nem perceberá porque ainda possui um arquivo de pontos herdado no diretório $ HOME. Git é um bom exemplo disso - se você tiver um
~/.gitconfig
, tente movê-lo para~/.config/git/config
. Meu favorito pessoal, Fish Shell , também usa ~ / .config por padrão.Além disso, verifique seus outros aplicativos para ver sua própria versão de uma variável correspondente a $ HOME. Muitos o suportam XDG através de uma variável:
export ATOM_HOME=$XDG_CONFIG_HOME/atom
export LPASS_HOME=$XDG_CONFIG_HOME/lpass
export _Z_DATA=$XDG_DATA_HOME/z/z.txt
Mas ainda há uma parede de vergonha XDG bastante extensa. O Tmux tem sido ativamente hostil em apoiar a desorganização do seu $ HOME. Mesmo com pylint . E Julia . E a lista continua. O Arch mantém uma boa lista de suporte do XDG aqui .
Honestamente, não consigo entender a resistência de apoiá-lo. Os usuários precisam enviar claramente uma mensagem clara de que os aplicativos não devem estar rodando em excesso sobre o $ HOME. Não está mais bem. Um sistema moderno usa centenas de aplicativos que poluem o $ HOME, e não dezenas como costumava ser há 20 anos.
fonte