개요
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 설정 파일 구조 참고.