개요


XDG = “X Desktop Group”, freedesktop.org의 옛 이름. 이들이 정한 XDG Base Directory Specification = 앱이 설정/캐시/데이터를 홈(~)에 아무렇게나 흩뿌리지 말고 정해진 위치에 넣자는 표준.

  • 옛날 방식: 앱마다 ~/.vimrc, ~/.gitconfig … 처럼 홈에 dotfile을 직접 둬서 홈(~)이 지저분해지고 관리가 어려워짐.
  • XDG 방식: ~/.config/, ~/.cache/ 등으로 용도별로 분리.

표준 디렉터리 변수


각 변수는 위치를 가리키는 환경변수이고, 미설정 시 아래 기본값이 쓰인다.

변수용도기본값
XDG_CONFIG_HOME설정 파일~/.config
XDG_CACHE_HOME캐시(지워도 되는 것)~/.cache
XDG_DATA_HOME앱 데이터~/.local/share
XDG_STATE_HOME상태(로그, 히스토리 등)~/.local/state
  • XDG_CONFIG_HOME 이 가장 자주 쓰인다. 앱은 그 하위에 자기 폴더를 둔다: ~/.config/nvim, ~/.config/zsh, ~/.config/ghostty.
  • 시스템 전역용도 있다: XDG_CONFIG_DIRS(기본 /etc/xdg), XDG_DATA_DIRS.

동작


  • 변수가 설정돼 있으면 그 경로를, 없으면 기본값을 쓴다. 그래서 스크립트에서 안전하게 쓰려면 기본값으로 채워두는 관용이 있다.
if [[ -z "$XDG_CONFIG_HOME" ]]; then
  export XDG_CONFIG_HOME="$HOME/.config"
fi
  • -z 로 “아직 없으면”을 검사해 기존 값을 덮지 않는다. (조건문 문법은 01. Bash 기초 참고)

주의점


  • 모든 앱이 XDG를 따르지는 않는다. 오래된 도구는 여전히 ~/.앱rc를 고집한다. XDG를 지원하는 앱만 ~/.config 하위로 모을 수 있다.
  • 지원 여부, 경로는 앱 문서로 확인한다. 억지로 옮기면 설정을 못 찾는다.

Zsh 와의 연결


Zsh는 ZDOTDIR 로 시작 파일 위치를 옮길 수 있는데, 관용적으로 $XDG_CONFIG_HOME/zsh(= ~/.config/zsh) 를 쓴다. 홈에는 부트스트랩용 ~/.zshenv 하나만 남기고 나머지를 여기로 모은다. 자세한 건 11. Zsh 설정 파일 구조 참고.

References