ขั้นตอนในการย้ายไฟล์ dotfiles ทั้งหมดไปยังไดเรกทอรี XDG คืออะไร?


18

ข้อมูลจำเพาะไดเรกทอรี XDG ฐานให้ชุดหนึ่งไดเรกทอรีอาจใช้ในการจัดเก็บข้อมูลที่ใช้ไปในการที่เรียกว่าไฟล์ dot / ไดเรกทอรีในโฟลเดอร์ผู้ใช้ โพสต์นี้มีวัตถุประสงค์เพื่อช่วยเหลือผู้ใช้ที่ต้องการใช้ไดเรกทอรีนี้ให้มากที่สุด

คำตอบ:


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
'

หากคุณใช้เชลล์หลายตัวตัวอย่างเช่น zsh สำหรับเชลล์เชิงโต้ตอบ แต่อีกอันสำหรับการสร้างสคริปต์คุณอาจต้องการ$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จะเป็นตัวแปรที่บันทึกไว้ภายใต้ Fedora 21 คุณจะพบกับการสร้าง~/.gnupgไดเรกทอรีใหม่เมื่อคุณเปิดเซสชันใหม่

แม้ว่าICEauthorityจะเป็นตัวแปรที่บันทึกไว้ภายใต้ Fedora 21 คุณจะจบลงด้วยการสร้างคุกกี้ใหม่เมื่อคุณเปิดเซสชันใหม่

~/.swtเนื้อหาdotfile อาจถูกจัดเก็บโดยตรง${XDG_DATA_HOME}เนื่องจากทั้งคู่มีlibไดเรกทอรี ไม่พบเอกสารเกี่ยวกับวิธีการหากเป็นไปได้

Mozillaผลิตภัณฑ์ไม่สนับสนุนตัวแปรสภาพแวดล้อมที่เหมาะสมให้ดูผลิตภัณฑ์ Mozilla ไม่อนุญาตให้ใช้สมุดการตั้งค่าผู้ใช้ที่กำหนดเองและการสนับสนุนสำหรับ Freedesktop.org XDG ฐานสารบบข้อมูลจำเพาะ

แหล่งข้อมูลที่มีประโยชน์อื่น ๆ


1
เมื่อใช้ bash เป็นเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบโต้ตอบ (การใช้เทอร์มินัลปกติ) ไม่ควร / etc / profile ไม่อ่านเลย? คำจำกัดความของเราจะไม่ถูกตั้งค่าแล้ว?
Hashken

1
ตาม manpage ในระบบของฉันคุณพูดถูก ตอนนี้สิ่งที่ฉันอยากจะแนะนำให้คุณทดสอบก็คืออาจขึ้นอยู่กับการกำหนดค่าเริ่มต้นของระบบ โปรดให้ข้อมูลย้อนกลับขอบคุณ
Psychoslave

1
ฉันสามารถยืนยันได้ว่า / etc / profile ไม่ได้อ่านสำหรับเชลล์ที่ไม่ใช่การเข้าสู่ระบบ แต่ถ้าคุณเปิด tmux / etc / profile ของคุณจะถูกอ่าน นี่เป็นเพราะ tmux เปิดเชลล์ทั้งหมดเป็นเชลล์ล็อกอิน
Hashken

1
สิ่งต่างๆเช่นไฟล์ประวัติควรจัดเก็บไว้ใต้$XDG_CACHE_HOME

1) เพิ่ม: export XAUTHORITY="$XDG_CACHE_HOME/Xauthority"2) กรุณาพูดตัวแปรของคุณ! (ดู (1) สำหรับตัวอย่าง) 3) สำหรับฉันbashฉันต้อง:export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:="$HOME/.config"}
Tom Hale

6

ฉันแนะนำให้ปรึกษากับหน้า Arch Linux wiki XDG Base Directory ที่รองรับซึ่งมีการปรับปรุงอย่างต่อเนื่อง

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 โปรดทราบว่าคุณจะต้องสร้างไฟล์XDG_CONFIG_HOME/git/configด้วยตัวเองและหาก~/.gitconfigมีอยู่จะมีความสำคัญกว่า

เสียงเรียกเข้า

ฉันใช้บทความ 2011 ของ Tom Vincent Vim ให้ความเคารพ XDGและดูเหมือนว่าจะใช้งานได้ ฉันไม่แน่ใจเกี่ยวกับคำตอบข้างต้น VIMDOTDIRดูเหมือนจะไม่เป็นอะไร


หมายเหตุ: ฉันกำลังจะไปใช้nixos.orgซึ่งทำให้สามารถควบคุมการกำหนดค่าทั้งหมดได้อย่างสมบูรณ์แบบ
Ben Creasy

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และหลีกเลี่ยงความต้องการ zsh dotfiles ใด ๆ ใน $ HOME ของคุณ จากที่นี่ทุก dotfiles zsh อื่น ๆ ของคุณสามารถย้ายไปเช่น~/.config/zsh .zshrcฉันยังแนะนำให้เพิ่มประวัติ zsh ของคุณไปยังสถานที่:$XDG_DATA_HOMEHISTFILE=$XDG_DATA_HOME/zsh/zsh_history

บางแอพจะค้นหาตำแหน่ง XDG ตามค่าเริ่มต้นและคุณอาจไม่ทราบด้วยซ้ำเพราะคุณยังมี dotfile ดั้งเดิมในไดเรกทอรี $ HOME ของคุณ Git เป็นตัวอย่างที่ดีของเรื่องนี้ - ถ้าคุณมีให้ลองย้ายไปยัง~/.gitconfig Fish Shell~/.config/git/configรายการโปรดส่วนตัวของฉันใช้ ~ / .config ตามค่าเริ่มต้นด้วย

นอกจากนี้ให้ตรวจสอบแอพอื่น ๆ ของคุณเพื่อดูตัวแปรรับ - โฮม หลายคนสนับสนุน 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 ของคุณ เช่นเดียวกันกับ pylint และจูเลีย และรายการจะดำเนินต่อไป Arch ยังคงให้การสนับสนุน XDG อย่างต่อเนื่อง

สุจริตฉันไม่สามารถเข้าใจความต้านทานต่อการสนับสนุน ผู้ใช้จำเป็นต้องส่งข้อความที่ชัดเจนว่าแอพไม่ควรใช้คำหยาบกับ $ HOME ไม่เป็นไรอีกต่อไป ระบบที่ทันสมัยใช้แอพนับร้อยที่สร้างมลพิษให้กับ $ HOME ไม่ใช่เป็นสิบเท่าเมื่อ 20 ปีก่อน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.