Apa langkah untuk memindahkan semua dotfile Anda ke direktori XDG?


18

The XDG Basis Direktori Keterangan menyediakan satu set satu direktori dapat digunakan untuk menyimpan data yang digunakan untuk pergi dalam apa yang disebut dot file / direktori di folder pengguna. Posting ini bertujuan untuk membantu pengguna yang ingin menggunakan direktori ini sebanyak mungkin.

Jawaban:


17

Memang, jawaban singkat saat ini untuk pertanyaan itu adalah Anda tidak bisa , karena beberapa aplikasi membuat hardcode path. Namun demikian, banyak aplikasi yang tidak secara khusus mendukung direktori XDG memungkinkan untuk mengatur direktori lain melalui variabel lingkungan. Beberapa saat Anda harus dapat mengubah konfigurasi sistem yang luas, misalnya dengan shell, tetapi sebagian besar waktu, Anda harus dapat melakukan langkah sebagai pengguna yang tidak memiliki hak.

Pengaturan Anda 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
'

Jika Anda menggunakan beberapa shell, misalnya zsh untuk shell interaktif, tetapi yang lain untuk scripting, Anda mungkin ingin $XDG_CONFIG_HOME/profilemengajukan, bahwa Anda akan sumber dalam skrip inisialisasi shell yang relevan.

Mengatur variabel lingkungan

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

Bekerja di sekitar

SSH

SSH memang menyediakan cara untuk mengubah file konfigurasi klien, tetapi - sejauh yang saya temukan - hanya melalui baris perintah. Jadi satu solusi untuk selalu memohon klien dengan tidak ada penempatan default mungkin:

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"

Dan Anda ${XDG_CONFIG_HOME}/ssh/configharus mengandung sesuatu seperti:

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

Apa yang belum berhasil

Meskipun GNUPGHOMEmerupakan variabel yang terdokumentasi, di bawah Fedora 21 Anda akan berakhir dengan pembuatan ~/.gnupgdirektori baru ketika Anda meluncurkan sesi baru.

Meskipun ICEauthoritymerupakan variabel yang terdokumentasi, di bawah Fedora 21 Anda akan berakhir dengan pembuatan cookie baru saat meluncurkan sesi baru.

~/.swtKonten dotfile mungkin harus disimpan langsung ke dalam ${XDG_DATA_HOME}, karena keduanya memiliki libdirektori. Tidak ada dokumentasi yang ditemukan tentang bagaimana melakukannya jika memungkinkan.

Produk Mozilla tidak mendukung variabel lingkungan yang sesuai, lihat Produk Mozilla tidak mengizinkan untuk menggunakan direktori konfigurasi pengguna khusus dan Dukungan untuk Spesifikasi Direktori Dasar XDG Freedesktop.org .

Sumber bermanfaat lainnya


1
Saat menggunakan bash sebagai shell non-login interaktif (penggunaan terminal normal), bukankah seharusnya / etc / profile tidak dibaca sama sekali? Bukankah definisi kita tidak akan ditetapkan?
Hashken

1
Menurut halaman di sistem saya, Anda benar. Sekarang apa yang saya sarankan kepada Anda adalah hanya menguji, karena mungkin tergantung pada konfigurasi default sistem Anda. Tolong beri umpan balik, terima kasih.
psychoslave

1
Saya dapat mengonfirmasi bahwa / etc / profile tidak dibaca untuk shell yang non-login. Tetapi, jika Anda membuka tmux Anda / etc / profile dibaca. Ini karena tmux membuka semua shellnya sebagai shell login.
Hashken

1
hal-hal seperti file riwayat harus disimpan di bawah$XDG_CACHE_HOME

1) Tambahkan: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2) Silakan kutip variabel Anda! (lihat (1) sebagai contoh) 3) Untuk saya bash, saya perlu:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Tom Hale

6

Saya merekomendasikan untuk berkonsultasi dengan halaman wiki Arch Linux, dukungan Direktori Dasar XDG yang terus diperbarui.

GIT

Saya baru saja pindah .gitconfigke XDG_CONFIG_HOMEOSX. Per dokumentasi git-config (tautan dihilangkan karena reputasi).

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.

Saya mengatur variabel lingkungan menggunakan instruksi dalam Mengatur variabel lingkungan PATH sistem-lebar di Mavericks . Perhatikan bahwa Anda harus membuat file XDG_CONFIG_HOME/git/configsendiri dan jika ~/.gitconfigada akan diutamakan.

VIM

Saya menggunakan artikel Tom Vincent 2011 Vim menghormati XDG dan tampaknya berhasil. Saya tidak yakin dengan jawaban di atas; VIMDOTDIRsepertinya tidak menjadi apa-apa.


Catatan: Saya pindah ke menggunakan nixos.org yang memungkinkan untuk sepenuhnya mengontrol semua konfigurasi dengan cara yang elegan
Ben Creasy

1

Zsh melakukan pekerjaan yang sedikit lebih baik daripada bash membiarkan Anda mengacaukan rumah Anda menggunakan $ZDOTDIRvariabel. Untuk memindahkan zsh, Anda perlu menambahkan yang berikut ke ~/.zshenvfile Anda :

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

Jika Anda memiliki hak akses root, Anda bisa menambahkan ini ke /etc/zsh/zshenvdan menghindari perlunya dotfile zsh di $ HOME Anda. Dari sini, semua dotfiles zsh Anda yang lain dapat dipindahkan ke ~/.config/zsh, seperti .zshrc. Saya juga merekomendasikan menambahkan sejarah zsh Anda ke $XDG_DATA_HOMElokasi: HISTFILE=$XDG_DATA_HOME/zsh/zsh_history.

Beberapa aplikasi akan mencari lokasi XDG secara default dan Anda mungkin tidak menyadarinya karena Anda masih memiliki dotfile lawas di direktori $ HOME Anda. Git adalah contoh yang bagus untuk ini - jika Anda punya ~/.gitconfig, coba pindahkan ke ~/.config/git/config. Favorit pribadi saya, Fish Shell , menggunakan ~ / .config secara default juga.

Selain itu, periksa aplikasi Anda yang lain untuk versi mereka sendiri dari variabel pengembalian RUMAH. Banyak yang mendukungnya XDG melalui variabel:

  • Atom: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z memiliki satu: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

Tapi masih ada tembok rasa malu XDG yang cukup luas. Tmux telah secara aktif memusuhi mendukung de-cluttering $ HOME Anda. Sama dengan pylint . Dan Julia . Dan daftarnya berlanjut. Arch menyimpan daftar dukungan XDG yang bagus di sini .

Jujur, saya tidak bisa memahami perlawanan untuk mendukungnya. Pengguna perlu mengirim pesan yang jelas bahwa aplikasi tidak boleh berjalan kasar di atas $ HOME. Itu tidak baik lagi. Sebuah sistem modern menggunakan ratusan aplikasi yang mencemari $ HOME, bukan puluhan seperti dulu 20 tahun yang lalu.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.