Tüm nokta dosyalarınızı XDG dizinlerine taşıma adımı nedir?


18

XDG Base Directory Şartname dizin birinin bir dizi kullanıcı klasöründe sözde nokta dosyalarını / dizini gitmek için kullanılan verileri saklamak için kullanılan olabilir sağlarlar. Bu yazı, bu dizinleri mümkün olduğunca kullanmak isteyen kullanıcılara yardımcı olmayı amaçlamaktadır.

Yanıtlar:


17

Aslında, soruya şu anki kısa cevap , bazı uygulamaların yolu kodlaması nedeniyle yapamazsınız . Bununla birlikte, özellikle XDG dizinlerini desteklemeyen birçok uygulama, ortam değişkenleri aracılığıyla diğer dizinleri ayarlamayı sağlar. Bir zamanlar, örneğin kabuk ile sistem çapında yapılandırmayı değiştirebilmeniz gerekir, ancak çoğu zaman adımı ayrıcalıklı bir kullanıcı olarak gerçekleştirebilmelisiniz.

Kabuğunuzu ayarlama

# 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
'

Etkileşimli kabuk için zsh, ancak komut dosyası oluşturmak için başka bir kabuk kullanıyorsanız, $XDG_CONFIG_HOME/profileilgili kabuk başlatma komut dosyasında kaynak yapacağınızı dosyalamak isteyebilirsiniz .

Ortam değişkenlerini ayarlama

# 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"

Geçici çözüm

SSH

SSH, istemci yapılandırma dosyasını değiştirmek için bir yol sağlar, ancak - bulduğum kadarıyla - yalnızca komut satırı aracılığıyla. Bu nedenle, istemcileri her zaman varsayılan bir yerleştirme olmadan çağırmak için bir çözüm olabilir:

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"

Ve sizin ${XDG_CONFIG_HOME}/ssh/configgibi bir şey içermelidir:

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

Henüz çalışmayan

GNUPGHOMEBelgelendirilmiş bir değişken olmasına rağmen , Fedora 21 altında ~/.gnupgyeni bir oturum başlattığınızda yeni bir dizin oluşturacaksınız.

ICEauthorityBelgelendirilmiş bir değişken olmasına rağmen , Fedora 21 altında yeni bir oturum başlattığınızda yeni bir çerez oluşturursunuz.

Her ikisinin de dizinleri olduğundan , dotfile ~/.swtiçeriği muhtemelen doğrudan içine kaydedilmelidir . Mümkünse bunun nasıl yapılacağı hakkında hiçbir belge bulunamadı.${XDG_DATA_HOME}lib

Mozilla ürünleri, uygun bir ortam değişkenini desteklemelidir görmez özel kullanıcı yapılandırma dizini kullanmasına izin vermez Mozilla ürünlerini ve Freedesktop.org XDG Base Directory Şartname Destek .

Diğer faydalı kaynaklar


1
Bash'ı etkileşimli oturum açma dışı kabuk (normal terminal kullanımı) olarak kullanırken, / etc / profile hiç okunmamalı mı? O zaman tanımlarımız belirlenmeyecek mi?
Hashken

1
Sistemimdeki el kitabına göre haklısın. Şimdi size önereceğim şey, sistem varsayılan yapılandırmanıza bağlı olabileceğinden, basitçe test etmektir. Lütfen geri bildirimde bulunun, teşekkürler.
psikoslave

1
/ Etc / profile giriş bilgisi olmayan mermiler için okunmaz. Ancak, tmux'u açarsanız / etc / profiliniz okunur. Çünkü tmux tüm mermilerini giriş mermisi olarak açar.
Hashken

1
geçmiş dosyaları gibi şeyler altında saklanmalıdır$XDG_CACHE_HOME

1) Ekle: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2) Lütfen değişkenlerinizi belirtin! (bir örnek için bakınız (1)) 3) Benim bashiçin:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Tom Hale

6

Sürekli güncellenen Arch Linux wiki sayfası XDG Base Directory desteğine başvurmanızı öneririm .

GYTE

Sadece taşındı .gitconfigTo XDG_CONFIG_HOMEOSX'te. Git-config belgelerine göre (itibar nedeniyle bağlantı atlandı).

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.

Ortam değişkenini Mavericks'te sistem çapında PATH ortam değişkenini ayarlama bölümündeki talimatları kullanarak ayarladım . Dosyayı XDG_CONFIG_HOME/git/configkendiniz oluşturmanız gerekeceğini ve varsa dosyanın ~/.gitconfigöncelikli olacağını unutmayın.

VIM

Tom Vincent'ın 2011 Vim XDG'ye saygı makalesini kullandım ve işe yarıyor gibi görünüyor. Yukarıdaki cevaptan emin değilim; VIMDOTDIRbir şey gibi görünmüyor.


Not: Tüm yapılandırmayı zarif bir şekilde tamamen kontrol etmeyi mümkün kılan nixos.org'u kullanıyorum
Ben Creasy

1

Zsh, bash'den biraz daha iyi bir iş çıkarır ve $ZDOTDIRdeğişkeni kullanarak evinizin dağınıklığını ortadan kaldırır . Zsh'yi yoldan çıkarmak için, ~/.zshenvdosyanıza aşağıdakileri eklemeniz gerekir :

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

Kök ayrıcalıklarınız varsa, bunu bunun yerine ekleyebilir /etc/zsh/zshenvve $ HOME'unuzdaki herhangi bir zsh dotfile gereksiniminden kaçınabilirsiniz. Buradan tüm diğer zsh dotfiles taşınabilir ~/.config/zshgibi .zshrc. Ben de hiç zsh geçmişinizi eklemenizi öneririz $XDG_DATA_HOMEkonuma: HISTFILE=$XDG_DATA_HOME/zsh/zsh_history.

Bazı uygulamalar varsayılan olarak XDG konumlarını arayacaktır ve $ HOME dizininizde hala eski bir nokta dosyanız olduğu için bunu fark etmeyebilirsiniz. Git buna iyi bir örnektir - eğer varsa ~/.gitconfig, taşımaya çalışın ~/.config/git/config. Benim kişisel favorim Fish Shell de varsayılan olarak ~ / .config kullanıyor.

Ayrıca, diğer uygulamalarınızı yeniden HOME-ing değişkeninin kendi sürümleri için kontrol edin. Birçoğu XDG'yi bir değişken aracılığıyla destekliyor:

  • Atom: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z'de bir tane var: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

Ama hala oldukça kapsamlı bir XDG utanç duvarı var. Tmux, $ HOME'unuzun dağınıklığını gidermeye aktif olarak düşmanca davranmıştır . Pylint ile aynı . Ve Julia . Ve liste uzayıp gidiyor. Arch, burada XDG desteğinin güzel bir listesini tutar .

Dürüst olmak gerekirse, onu destekleme direncini anlayamıyorum. Kullanıcıların, uygulamaların $ HOME'ları üzerinden kabaca çalıştırılmaması gerektiği konusunda net bir mesaj göndermeleri gerekir. Artık sorun değil. Modern bir sistem, 20 yıl önceki gibi onlarca değil, $ HOME'u kirleten yüzlerce uygulama kullanıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.