Quais são os passos para mover todos os seus dotfiles para diretórios XDG?

13

A Especificação de Diretório Base do XDG fornece um conjunto de diretórios que podem ser usados para armazenar dados que costumavam ir nos chamados arquivos de ponto / diretório na pasta do usuário. Este post visa ajudar os usuários que desejam usar esses diretórios, tanto quanto possível.

    
por psychoslave 07.02.2015 / 12:52

2 respostas

12

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.

Os produtos

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 .

Outras fontes úteis

  • Mova seus arquivos de configuração para $ XDG_CONFIG_HOME
  • link
  • link (mova seus arquivos de configuração para $XDG_CONFIG_HOME )
  • link
por 07.02.2015 / 13:50
5

Eu recomendo consultar a página wiki do Arch Linux Suporte ao Diretório Base do XDG , que é continuamente atualizado.

GIT

Acabei de mover meu .gitconfig para XDG_CONFIG_HOME no OSX. Pela documentação do git-config (link omitido devido a reputação).

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.

Eu configurei a variável de ambiente usando as instruções em Definindo a variável de ambiente PATH para todo o sistema no Mavericks . Note que você precisará criar o arquivo XDG_CONFIG_HOME/git/config e se ~/.gitconfig existir, terá precedência.

VIM

Eu usei o artigo de 2011 de Tom Vincent Vim respeita o XDG e parece funcionar. Não tenho certeza sobre a resposta acima; VIMDOTDIR não parece ser uma coisa.

    
por 23.06.2015 / 01:09

Tags