모든 도트 파일을 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
'

대화식 쉘의 경우 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내용은 ${XDG_DATA_HOME}모두 lib디렉토리를 가지고 있기 때문에에 직접 저장해야합니다 . 가능하다면 그 방법에 대한 문서를 찾지 못했습니다.

Mozilla 제품은 적절한 환경 변수를 지원하지 않습니다. Mozilla 제품은 사용자 정의 사용자 구성 디렉토리Freedesktop.org XDG 기본 디렉토리 사양 지원 을 사용할 수 없습니다를 참조하십시오 .

다른 유용한 소스


1
bash를 대화 형 비 로그인 셸 (정상 터미널 사용)로 사용할 때 / etc / profile을 전혀 읽지 않아야합니까? 그때 우리의 정의가 설정되지 않습니까?
Hashken

1
내 시스템의 맨 페이지에 따르면, 당신 말이 맞습니다. 이제는 시스템 기본 구성에 따라 달라질 수 있으므로 간단하게 테스트하는 것이 좋습니다. 피드백을 보내주세요. 감사합니다.
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 위키 페이지 XDG 기본 디렉토리 지원 을 참조하십시오 .

GIT

난 그냥 내 이동 .gitconfig에를 XDG_CONFIG_HOMEOSX에. 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존재하는 경우 우선권을 갖습니다.

정력

나는 Tom Vincent의 2011 기사 Vim respect XDG를 사용 했으며 작동하는 것 같습니다. 위의 답변에 대해 잘 모르겠습니다. VIMDOTDIR일이 아닌 것 같습니다.


참고 : nixos.org 를 사용하여 모든 구성을 우아한 방식으로 완벽하게 제어 할 수 있습니다.
Ben Creasy

1

Zsh는 bash보다 약간 더 나은 작업을 수행하여 $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 도트 파일이 필요하지 않도록 할 수 있습니다 . 여기에서, 다른 모든 zsh을의 dotfiles가로 이동할 수 있습니다 ~/.config/zsh처럼 .zshrc. 또한 zsh 기록을 $XDG_DATA_HOME위치에 추가하는 것이 좋습니다 HISTFILE=$XDG_DATA_HOME/zsh/zsh_history.

일부 앱은 기본적으로 XDG 위치를 찾고 $ HOME 디렉토리에 레거시 도트 파일이 있기 때문에이를 인식하지 못할 수도 있습니다. 힘내이의 좋은 예입니다 - 당신이있는 경우 ~/.gitconfig,로 이동하십시오 ~/.config/git/config. 개인적으로 좋아하는 Fish Shell 은 기본적으로 ~ / .config도 사용합니다.

또한 다른 앱에서 자체 버전의 re- $ HOME-ing 변수를 확인하십시오. 많은 사람들이 변수를 통해 XDG를 지원합니다.

  • 원자: export ATOM_HOME=$XDG_CONFIG_HOME/atom
  • lpass : export LPASS_HOME=$XDG_CONFIG_HOME/lpass
  • rupa / z에는 하나가 있습니다 : export _Z_DATA=$XDG_DATA_HOME/z/z.txt

그러나 여전히 매우 광범위한 수치심의 XDG 벽이 있습니다. Tmux는 $ HOME의 혼란을 막는 데 적극적으로 참여했습니다 . pylint와 동일합니다 . 그리고 줄리아 . 그리고 목록은 계속됩니다. Arch는 XDG 지원의 훌륭한 실행 목록을 유지합니다 .

솔직히, 나는 그것을지지하는 것에 대한 저항을 이해할 수 없다. 사용자는 앱이 $ HOME에 대해 과도하게 실행되지 않아야한다는 명확한 메시지를 명확하게 보내야합니다. 더 이상 괜찮지 않아 현대의 시스템은 20 년 전과 같이 수십 개의 앱이 아니라 $ HOME을 오염시키는 수백 개의 앱을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.