Quais são as etapas para mover todos os seus arquivos de ponto para diretórios XDG?


18

A Especificação de diretório base do XDG fornece um conjunto de diretórios que um pode ser usado para armazenar dados que costumavam ir nos chamados arquivos / diretório de ponto na pasta do usuário. Esta publicação tem como objetivo ajudar os usuários que desejam usar esses diretórios o máximo possível.

Respostas:


17

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/profilearquivar, 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/configdeve conter algo como:

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

O que ainda não funciona

Embora GNUPGHOMEseja uma variável documentada, no Fedora 21 você terminará com a criação de um novo ~/.gnupgdiretório ao iniciar uma nova sessão.

Embora ICEauthorityseja uma variável documentada, no Fedora 21 você terminará com a criação de um novo cookie quando iniciar uma nova sessão.

O ~/.swtconteúdo do dotfile provavelmente deve ser armazenado diretamente ${XDG_DATA_HOME}, pois ambos têm libdiretó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


1
Ao usar o bash como shell interativo sem logon (uso normal do terminal), o / etc / profile não deve ser lido de maneira alguma? Nossas definições não serão definidas então?
Hashken

1
De acordo com a página de manual no meu sistema, você está certo. Agora, o que eu sugeriria é simplesmente testar, pois pode depender da configuração padrão do seu sistema. Dê feedback, obrigado.
Psychoslave

1
Posso confirmar que / etc / profile não é lido para shells que não são de login. Mas, se você abrir o tmux, seu / etc / profile será lido. Isso ocorre porque o tmux abre todos os seus shells como shells de login.
Hashken

1
coisas como arquivos de histórico devem ser armazenadas em #$XDG_CACHE_HOME

1) Adicione: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2) Por favor, indique suas variáveis! (veja (1) para um exemplo) 3) Para o meu bash, eu precisava:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Tom Hale

6

Eu recomendo consultar a página wiki do Arch Linux, suporte ao XDG Base Directory, que é atualizado continuamente.

GIT

Acabei de me mudar .gitconfigpara o XDG_CONFIG_HOMEOSX. De acordo com a documentação do git-config (link omitido devido à 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.

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/confige, se ~/.gitconfigexistir, 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; VIMDOTDIRnão parece ser uma coisa.


Nota: Eu estou indo para usar nixos.org que torna possível controlar completamente toda a configuração de uma forma elegante
Ben Creasy

1

O Zsh faz um trabalho um pouco melhor do que o bash, permitindo que você desorganize sua casa usando a $ZDOTDIRvariável Para mover o zsh para fora do caminho, você precisa adicionar o seguinte ao seu~/.zshenv arquivo:

# ~/.zshenv contents
# this is the bare bones setup to move everything to XDG dir
ZDOTDIR=$HOME/.config/zsh

Se você tiver privilégios de root, poderá adicioná-lo /etc/zsh/zshenve 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_HOMElocal: 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:

  • Átomo: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z tem um: 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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.