De fato, a atual resposta curta para a pergunta é você não pode , pois alguns aplicativos codificam o caminho. Nem o menor, muitos aplicativos que não suportam especificamente diretórios XDG permitem definir outros diretórios através de variáveis de ambiente. Algum tempo você precisa ser capaz de alterar a configuração do sistema, por exemplo, com o shell, mas na maioria das vezes, você deve poder executar o passo como um usuário sem privilégios.
Definindo seu shell
# 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" ] && [ "\# 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"
" = "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
'
Se você usa vários shell, por exemplo, zsh para shell interativo, mas outro para scripts, você pode querer $XDG_CONFIG_HOME/profile
file, que você irá utilizar no script de inicialização de shell.
Configurando variáveis de ambiente
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"
contornar
SSH
O SSH fornece uma maneira de alterar o arquivo de configuração do cliente, mas - até onde eu encontrei - somente através da linha de comando. Portanto, uma solução para invocar sempre os clientes com nenhuma colocação padrão pode ser:
Host *
IdentityFile /home/user/.config/ssh/id_dsa
E seu ${XDG_CONFIG_HOME}/ssh/config
deve conter algo como:
# 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" ] && [ "\# 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"
" = "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
'
O que não funciona ainda
Embora GNUPGHOME
seja uma variável documentada, sob o Fedora 21 você terminará com a criação de um novo diretório ~/.gnupg
quando você iniciar uma nova sessão.
Embora ICEauthority
seja uma variável documentada, sob o Fedora 21 você terminará com a criação de um novo cookie quando você iniciar uma nova sessão.
O arquivo dotfile ~/.swt
provavelmente deve ser armazenado diretamente em ${XDG_DATA_HOME}
, pois ambos têm lib
diretórios. Nenhuma documentação foi encontrada sobre como fazer isso, se for possível.
Mozilla não suportam uma variável de ambiente apropriada, consulte produtos Mozilla doesn ' • permitir o uso de um diretório de configuração de usuário personalizado e Suporte para a Especificação de Diretório Base do XDG do Freedesktop.org .