अपने सभी dotfiles को XDG निर्देशिका में स्थानांतरित करने के लिए कदम क्या हैं?


18

XDG बेस निर्देशिका विशिष्टता निर्देशिका एक का एक सेट की दुकान डेटा है कि उपयोगकर्ता फ़ोल्डर में तथाकथित डॉट फ़ाइलें / निर्देशिका में जाया करते थे करने के लिए इस्तेमाल कर सकते हैं प्रदान करते हैं। इस पोस्ट का उद्देश्य उन उपयोगकर्ताओं की सहायता करना है जो इस निर्देशिका का यथासंभव उपयोग करना चाहते हैं।

जवाबों:


17

वास्तव में, इस सवाल का वर्तमान संक्षिप्त जवाब आप नहीं कर सकते हैं , क्योंकि कुछ एप्लिकेशन मार्ग को हार्डकोड करते हैं। फिर भी, कई अनुप्रयोग जो विशेष रूप से XDG निर्देशिकाओं का समर्थन नहीं करते हैं, पर्यावरण चर के माध्यम से अन्य निर्देशिकाओं को सेट करने में सक्षम होते हैं। कुछ समय के लिए आपको सिस्टम वाइड कॉन्फ़िगरेशन को बदलने में सक्षम होने की आवश्यकता है, उदाहरण के लिए शेल के साथ, लेकिन अधिकांश समय, आपको एक अनप्रोविले हुए उपयोगकर्ता के रूप में कदम का प्रदर्शन करने में सक्षम होना चाहिए।

आपको खोलकर सेट करना

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

यदि आप कई शेल का उपयोग करते हैं, उदाहरण के लिए इंटरेक्टिव शेल के लिए, लेकिन स्क्रिप्टिंग के लिए एक अन्य, तो आप $XDG_CONFIG_HOME/profileफाइल करना चाह सकते हैं , जिसे आप प्रासंगिक शेल आरंभीकरण स्क्रिप्ट में स्रोत करेंगे।

पर्यावरण चर सेट करना

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

चारों ओर काम करना

SSH

SSH क्लाइंट कॉन्फ़िगरेशन फ़ाइल को बदलने का एक तरीका प्रदान करता है, लेकिन - जहाँ तक मैंने पाया - केवल कमांड लाइन के माध्यम से। तो एक समाधान हमेशा एक डिफ़ॉल्ट डिफ़ॉल्ट के साथ ग्राहकों को आह्वान किया जा सकता है:

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"

और आपके पास ${XDG_CONFIG_HOME}/ssh/configकुछ ऐसा होना चाहिए:

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

क्या अभी तक काम नहीं करता है

हालाँकि GNUPGHOMEएक प्रलेखित चर है, फेडोरा 21 के तहत ~/.gnupgजब आप एक नया सत्र शुरू करते हैं तो आप एक नई निर्देशिका के निर्माण के साथ समाप्त होंगे ।

हालांकि ICEauthorityएक दस्तावेज चर है, फेडोरा 21 के तहत जब आप एक नया सत्र शुरू करते हैं तो आप एक नई कुकी के निर्माण के साथ समाप्त होंगे।

डॉटफ़ाइल ~/.swtसामग्री को संभवतः सीधे स्टोर किया जाना चाहिए ${XDG_DATA_HOME}, क्योंकि दोनों में libनिर्देशिकाएं हैं। यदि संभव हो तो कैसे किया जाए, इस पर कोई दस्तावेज नहीं मिला।

मोज़िला उत्पाद एक उपयुक्त पर्यावरण चर का समर्थन नहीं करते हैं, देखें कि मोज़िला उत्पादों को कस्टम उपयोगकर्ता कॉन्फ़िगरेशन निर्देशिका और फ़्रीडेस्कटॉप.org XDG बेस डायरेक्टरी विनिर्देशन के लिए समर्थन का उपयोग करने की अनुमति नहीं है

अन्य उपयोगी स्रोत


1
इंटरैक्टिव गैर-लॉगिन शेल (सामान्य टर्मिनल उपयोग) के रूप में बैश का उपयोग करते समय, क्या / आदि / प्रोफाइल को बिल्कुल नहीं पढ़ा जाना चाहिए? क्या हमारी परिभाषा तब निर्धारित नहीं होगी?
हशकेन

1
मेरे सिस्टम पर मैनपेज के अनुसार, आप सही हैं। अब मैं आपको सुझाव दूंगा कि आपको बस परीक्षण करना है, क्योंकि यह आपके सिस्टम डिफ़ॉल्ट कॉन्फ़िगरेशन पर निर्भर करता है। कृपया फीड बैक दें, धन्यवाद।
साइकोस्लाव

1
मैं पुष्टि कर सकता हूं कि गैर-लॉगिन गोले के लिए / etc / प्रोफ़ाइल को नहीं पढ़ा गया है। लेकिन, यदि आप tmux खोलते हैं तो आपका / etc / प्रोफाइल पढ़ा जाता है। ऐसा इसलिए है क्योंकि tmux लॉगिन शेल के रूप में अपने सभी शेल खोल देता है।
हैशकेन

1
इतिहास फ़ाइलों की तरह चीजों को संग्रहीत किया जाना चाहिए$XDG_CACHE_HOME

1) जोड़ें: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2) कृपया अपने चर का उद्धरण करें! (देखें (1) एक उदाहरण के लिए) 3) मेरे लिए bash, मुझे जरूरत थी:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
टॉम हेल

6

मैं आर्क लिनक्स विकी पेज XDG बेस डायरेक्टरी सपोर्ट से परामर्श करने की सलाह देता हूं जो लगातार अपडेट किया जाता है।

GIT

मैं बस अपना ले जाया .gitconfigकरने के लिए XDG_CONFIG_HOMEपर OSX। Git-config डॉक्यूमेंट के अनुसार (प्रतिष्ठा के कारण लिंक छोड़ा गया)।

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.

मैंने Mavericks में सिस्टम-वाइड PATH परिवेश चर सेट करने में निर्देशों का उपयोग करके पर्यावरण चर सेट किया । ध्यान दें कि आपको फ़ाइल XDG_CONFIG_HOME/git/configस्वयं बनाने की आवश्यकता होगी और यदि ~/.gitconfigमौजूद है तो यह पूर्ववर्तीता लेगा।

विम

मैंने टॉम विंसेंट के 2011 के लेख Vim सम्मान XDG का उपयोग किया और यह काम करने लगता है। मैं उपरोक्त उत्तर के बारे में निश्चित नहीं हूँ; VIMDOTDIRएक बात नहीं लगती है।


नोट: मैं nixos.org का उपयोग करने के लिए आगे बढ़ रहा हूं, जो सभी विन्यास को पूरी तरह से एक सुरुचिपूर्ण तरीके से नियंत्रित करना संभव बनाता है
बेन क्रीसी

1

Zsh आपको $ZDOTDIRचर का उपयोग करके अपने घर को डी-क्लटर करने देता है। Zsh को रास्ते से हटाने के लिए, आपको अपनी ~/.zshenvफ़ाइल में निम्न जोड़ना होगा :

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

यदि आपके पास रूट निजीकृत हैं, तो आप इसके बजाय इसे जोड़ सकते हैं /etc/zsh/zshenvऔर अपने $ HOME में किसी भी zsh dotfiles की आवश्यकता से बच सकते हैं । यहाँ से, आपके अन्य सभी zsh डॉटफाइल्स को ~/.config/zsh, जैसे, ले जाया जा सकता है .zshrc। मैं आपके zsh इतिहास को $XDG_DATA_HOMEस्थान में जोड़ने की भी सलाह देता हूं HISTFILE=$XDG_DATA_HOME/zsh/zsh_history:।

कुछ ऐप्स डिफ़ॉल्ट रूप से XDG स्थानों की तलाश करेंगे और आपको इसका एहसास भी नहीं हो सकता है क्योंकि आपके पास अभी भी अपने $ HOME निर्देशिका में एक विरासत डॉटफ़ाइल है। जीआईटी इसका एक अच्छा उदाहरण है - यदि आपके पास ए है ~/.gitconfig, तो इसे स्थानांतरित करने का प्रयास करें ~/.config/git/config। मेरा व्यक्तिगत पसंदीदा, फिश शेल , डिफ़ॉल्ट रूप से ~ / .config का उपयोग करता है।

इसके अलावा, अपने स्वयं के संस्करण के लिए अपने दूसरे संस्करणों को फिर से जाँचें- $ HOME-ing चर। कई इसे चर के माध्यम से XDG का समर्थन करते हैं:

  • एटम: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass: export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • रु / z में एक है: export _Z_DATA=$XDG_DATA_HOME/z/z.txt

लेकिन शर्म की एक व्यापक XDG दीवार अभी भी है। Tmux सक्रिय रूप से आपके $ HOME को डी-क्लटर करने के लिए सक्रिय रूप से शत्रुतापूर्ण है। पाइलिंट के साथ भीऔर जूलिया । और सूची खत्म ही नहीं होती। आर्क यहां XDG सपोर्ट की एक अच्छी रनिंग लिस्ट रखता है

ईमानदारी से, मैं इसका समर्थन करने के प्रतिरोध को नहीं समझ सकता। उपयोगकर्ताओं को स्पष्ट रूप से एक स्पष्ट संदेश भेजने की आवश्यकता है कि ऐप को अपने घर पर $ roughshod नहीं चलना चाहिए। यह अब ठीक नहीं है। एक आधुनिक प्रणाली सैकड़ों ऐप्स का उपयोग करती है जो $ HOME को प्रदूषित करते हैं, दसियों को नहीं जैसे कि 20 साल पहले हुआ करते थे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.