XDG Base Directory Specification

Довольно давно меня подзадолбала мусорка в домашней директории, постепенно получилось заставить почти весь софт гадить в строго определенное место, а именно в .config, .cache и .local, как и завещано в XDG Base Directory Specification.

Для особо одаренных (Skype, Dropbox) пришлось слегка поизвращаться, если для Skype достаточно было изменить параметр запуска на

skype --dbpath=$HOME/.local/share/skype

, то для Dropbox уже пришлось городить костыль в виде

HOME=$HOME/.local/share/dropbox /usr/bin/dropbox start -i 2>&1

Остальной софт относительно разумен, где через alias, где через export, удалось обяснить, куда складировать свое добро. Ниже листинг .bashrc и .profile, авось кому пригодится.

.bashrc

...
HISTFILESIZE=2000
HISTSIZE=10000
HISTFILE=~/.cache/bash_history

alias mcabber="mcabber -f $HOME/.config/mcabber/mcabberrc"
alias irssi="irssi --config=$HOME/.config/irssi/config --home=$HOME/.config/irssi"
alias vim="vim -u $HOME/.local/share/vim/vimrc"
alias vimdiff="vimfiff -u $HOME/.local/share/vim/vimrc"
...

.profile

...
# COMMON
export PAGER=most
export EDITOR=vim
export TERM=xterm-256color

# RC
export COMPOSER_HOME=$HOME/.cache/composer
export GNUPGHOME=$HOME/.config/gnupg
export GEMRC=$HOME/.local/lib/ruby/gem/gemrc
export GEM_HOME=$HOME/.local/lib/ruby/gem
export GEM_SPEC_CACHE=$GEM_HOME/specs
export MYSQL_HISTFILE=$HOME/.cache/mysql_history
export MYSQL_HOME=$HOME/.config/mysql
export GTK_RC_FILES=$GTK_RC_FILES:$HOME/.config/gtk/gtkrc
export GTK2_RC_FILES=$GTK2_RC_FILES:$HOME/.config/gtk-2.0/gtkrc

# LOCAL PATHS
export PATH=$PATH:$HOME/.local/bin

# APPS
export MPLAYER_HOME=$HOME/.config/mplayer
export GIMP2_DIRECTORY=$HOME/.local/share/gimp-2.8

# BASH
export PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w\[\033[01;33m\]$(__git_ps1)\[\033[01;34m\] \$\[\033[00m\] » '
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export GIT_PS1_SHOWUPSTREAM=1
export GIT_PS1_SHOWUNTRACKEDFILES=1

# KDE
export KDEHOME=$HOME/.config/kde
export KWIN_TRIPLE_BUFFER=1

# NVIDIA
export __GL_SHADER_DISK_CACHE_PATH=$HOME/.cache
export __GL_YIELD="USLEEP"
...

Тут не присутствуют правила для софта, который, хоть по умолчанию и ищет конфиги в корне хомяка, но, тем не менее, умеет искать и в правильных местах, например git, для него достаточно содать файл $HOME/.config/git/config, и он его радостно скушает. Директории fonts, icons и themes уже довольно давно можно спокойно складировать в $HOME/.local/share. Ну и с помощью $HOME/.config/user-dirs.dirs можно поубирать куда-нибудь с глаз лишние директории, которые любят создавать DE:

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="/opt/media/Music"
XDG_PICTURES_DIR="/opt/media/Pictures"
XDG_VIDEOS_DIR="/opt/media/Videos"
XDG_TEMPLATES_DIR="$HOME/Documents/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Documents/Public"

Так как в данный момент пользуюсь KDE/KDM, то там тоже произвел ряд настроек, что бы в корне домашней директории не создавались такие файлы как .xsession-errors, .Xauthority, .dmrc, переместил их в /tmp

/etc/kde4/kdm/kdmrc

[General]
...
DmrcDir=/tmp
...

[X-*-Core]
...
ForceUserAuthDir=true
UserAuthDir=/tmp
...

[X-:0-Core]
...
ClientLogFile=/tmp/xsession-errors

/etc/kde4/kdm/Xsession

Добавил . $HOME/.profile в секции для bash|zsh

XDG Base Directory Specification

XDG Base Directory Specification: 4 комментария

    1. gwinn:

      When an application tries to acces $HOME/.foobar, the call is redirected to XDG_CONFIG_HOME/foobar

      А как с XDG_CACHE_HOME и XDG_DATA_HOME, их эта либа тоже обрабатывает?
      Просто есть такие поганцы, котрые конфиг как раз в XDG_CONFIG_HOME держат, а остальное в корне хомяка складируют.

      1. Там вроде просто всё что в хлмяке с точкое перекидывается. Но за почти пять лет как я libetc не видел могло чего и помннятся в этом поведении…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *