LINUX.ORG.RU

XDG Base Directory Specification, даже когда софт не хочет.

 


37

5

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

Для особо одаренных (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 и dmrc перенаправил в /tmp путем правки /etc/kde4/kdm/kdmrc и /etc/kde4/kdm/Xsession.

>>> Просмотр (749x517, 36 Kb)

★★★★

Проверено: JB ()

Неслабо... мне тоже пора почистить ~.

DeadEye ★★★★★ ()

Сколько кактусов сразу ты ешь... И да, пустой скриншот.

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

А что ты тут по теме еще собирался увидеть?

gwinn ★★★★ ()
Ответ на: комментарий от gwinn

Просто галерея, скриншот хотел увидеть. Борьба с проприетарными кактусами зачетна, но непонятно, что она забыла в галерее.

t184256 ★★★★★ ()

зачет! никогда не доходили руки подобным заняться

actionless ★★★★★ ()

надо идти еще дальше.

XDG_CONFIG_HOME=$HOME/.xdg/config
XDG_DATA_HOME=$HOME/.xdg/share
XDG_CACHE_HOME=$HOME/.xdg/cache
ananas ★★★★★ ()
Последнее исправление: ananas (всего исправлений: 1)

Я так подумал, а не проще ли оставить ~ для мусора, а свои данные хранить в ~/realhome?

domu ()
Ответ на: комментарий от domu

А если комп используется несколькими людьми? В /home свалка начнется.

gwinn ★★★★ ()

Самое время создать принципиально новый дистрибутив.

garik_keghen ★★★★★ ()
Ответ на: комментарий от garik_keghen

Достаточно будет принципиально новой переменной для portage.

Valdor ★★ ()

А еще поменяй bash на fish, чтобы .bashrc, .bash_history и .bash_profile не было.

Deleted ()
Ответ на: комментарий от Deleted

у меня только .bashrc, еще какой-то профит от такой замены будет?

gwinn ★★★★ ()
Ответ на: комментарий от gwinn

Автодополнение по истории и манах например.

Deleted ()
Ответ на: комментарий от Deleted

Глянул бегло документацию, если правильно понял, он менее совместим с bash, чем тот же zsh, не умеет export, у него своя приблуда set, читать всю доку лениво, но есть опасения, что не все sh-скрипты, будут работать под ним, и наоборот, при переносе скрипта, например, на сервер, не факт, что взлетит. А так вроде симпотишная штукенция.

gwinn ★★★★ ()
Ответ на: комментарий от gwinn

Не так же. home/user - мусорка, а home/user/somefolder - папка где все по полочкам.

domu ()
Ответ на: комментарий от domu

Да что у вас за софт такой поганый.

У меня разве-что gimp (ждем 3.0), wine(всё очень плохо) и tuxguitar(java) не туда по умолчанию пишут. Обхожусь симлинками пока что.

Deleted ()

Давно пора бы дистрибутивам начать жёстче контролировать дефолт, а пользователям озаботиться багрепортами софту, продолжающему гадить в ~ игнорируя спецификации.

Axon ★★★★★ ()

А мой коллега для этого rewritefs использует, вроде ничего так, работает.

Dantix ★★ ()

Xauthority-то чего не перенёс.

d_a ★★★★★ ()

Полезно. Надо взять на заметку.

tlx ★★★★★ ()
Ответ на: комментарий от gwinn

Ещё Ctrl-R работает не так, отсутствуют && и ||. Синтаксис не то, что не совместимый, он другой, многое надо будет переписывать. И он там только для плагинов что ли, так-то bash лучше будет. В общем, больше чем на несколько дней меня не хватило, хотя некоторые довольно неплохие идеи в fish есть.

xaizek ★★★★★ ()

Мне кажется, что лучше было это делать скриптам-обёртками (хотя муторнее). Ведь некоторые приложения могут вызывать другие напрямую, а не через bash и тогда ваши изменения не будут применены.

KivApple ★★★★★ ()
Последнее исправление: KivApple (всего исправлений: 1)

XDG_MUSIC_DIR=«/opt/media/Music»
XDG_PICTURES_DIR=«/opt/media/Pictures»
XDG_VIDEOS_DIR=«/opt/media/Videos»

/opt для сторонних программ, которые идут в бинарниках.

с уважением, полиция FHS.

last_man_standing ()
Ответ на: комментарий от last_man_standing

Они на отдельном винте, котрый в /opt монтируется

gwinn ★★★★ ()
Ответ на: комментарий от theNamelessOne

Смотрел, но так и не понял, оно только XDG_CONFIG_HOME трогает, или c .cache и .local тоже будет работать, кагбе по уму софт свой хлам по всем трем директориям может размазывать.

gwinn ★★★★ ()

А у меня де-юре хоум лежит в /home/np/.dotfiles, а де-факто в /home/np:

drwxr-xr-x 34 np np    4096 Sep 29 14:16 .dotfiles
drwxr-xr-x  8 np np    4096 Sep 19 15:54 org
drwxr-xr-x  5 np np    4096 Sep 11 21:16 org-html
lrwxrwxrwx  1 np np      28 Aug 27 00:31 documents -> ../../srv/users/np/documents
lrwxrwxrwx  1 np np      28 Aug 27 00:31 downloads -> ../../srv/users/np/downloads
lrwxrwxrwx  1 np np      25 Aug 27 00:31 mmedia -> ../../srv/users/np/mmedia
lrwxrwxrwx  1 np np      27 Aug 27 00:32 pdfindex -> ../../srv/users/np/pdfindex
lrwxrwxrwx  1 np np      25 Aug 27 00:32 source -> ../../srv/users/np/source
Puzan ★★★★ ()
Ответ на: комментарий от xaizek

многое надо будет переписывать

ничего не мешает запускать скрипты в окружении с bash/sh/etc, ваще ничего. А вот руками пользовать fish очень даже удобно

fang90 ★★★★★ ()
Ответ на: комментарий от gwinn

отдельный винт, который всегда живет в машине, монитруется в /mnt/[что-нибудь]

отдельный винт, который ты иногда вынимаешь, монтируется в /media/[что-нибудь]

last_man_standing ()
Ответ на: комментарий от last_man_standing

Это я и сам знаю, в данном случае мне нужно было его в /opt смонтировать, медиафайлы там валяются в силу большой емкости этого винта.

gwinn ★★★★ ()
Ответ на: комментарий от gwinn

~/.Xauthority создает startx, если не нужны пляски с xauth, можно запускать иксы напрямую через xinit -- /usr/bin/X.

~/.dbus создают приложения, цепляющиеся к dbus через dbus-launch --autolaunch, если правильно выставить $DBUS_SESSION_BUS_ADDRESS в xinitrc (через eval `dbus-launch --sh-syntax`), то директория не должна создаваться. Еще можно пересобрать dbus без поддержки X (в gentoo).

mtk ()
Последнее исправление: mtk (всего исправлений: 1)
Ответ на: комментарий от gwinn

не все sh-скрипты, будут работать под ним

sh-скрипты запустят bash по she-bang.</КО>
P.S: fish рулез.

Lincor ()
Ответ на: комментарий от fang90

ничего не мешает запускать скрипты в окружении с bash/sh/etc, ваще ничего.

Я знаю, но ТС к чему-то писал, что он будет их на fish писать и потом куда-то копировать.

А вот руками пользовать очень даже удобно

Ну это субъективно, кому удобно, а кому нет. Те же однострочники фиг попишешь с их другим синтаксисом. Меня убило, что элементарное make && ./program не работает, а разработчик утверждает, что их способ реализации с помощью отдельных команд кошернее. Я в fish изначально Vim-like управление реализовать хотел, но после использования в течении нескольких дней передумал...

xaizek ★★★★★ ()

Если интересно, могу подсказать, как переместить все оставшиеся, кроме .netrc (нет способа, этот файл - плод древнего соглашения) и .irbrc (не знаю, что это).

Для vim я использовал более необычный, но вроде как и более универсальный способ в виде export VIMINIT=":source $XDG_CONFIG_HOME/vim/vimrc"

Gotf ★★★ ()
Ответ на: комментарий от mtk

если правильно выставить $DBUS_SESSION_BUS_ADDRESS в xinitrc (через eval `dbus-launch --sh-syntax`), то директория не должна создаваться.

Хм, интересно, почему-то в своё время я этого не раскопал. Возьму на заметку, вдруг снова захочу навести порядок.

Gotf ★★★ ()
Ответ на: комментарий от Gotf

Только что пересобрал dbus с --with-x, директория создается всегда (не смог определить, каким именно приложением). Получается, единственный способ выпилить вот этот код - собрать dbus без поддержки иксов.

mtk ()
Ответ на: комментарий от mtk

собрать dbus без поддержки иксов

Фиговая идея, многим программам нужен dbus-x11.

Gotf ★★★ ()
Ответ на: комментарий от Gotf

УМВР - повторюсь, если установить DBUS_SESSION_BUS_ADDRESS через xinitrc, то все приложения находят адрес шины. Раньше (с autolaunch) иногда все слетало, приходилось перезапускать иксы.

mtk ()
Ответ на: комментарий от mtk

И когда уже kdbus задопилят... Достало это костылестроение с eval-ом и кучей слабосвязанных шинных демонов (привет, автолонч).

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от gwinn

.Xauthority и .dbus - эти штуки пока не победились

Может быть, XAUTHORITY? man X:

The file from which Xlib extracts authorization data can be specified with the environment variable XAUTHORITY, and defaults to the file .Xauthority in the home directory. Xdm uses $HOME/.Xauthority and will create it or merge in authorization records if it already exists when a user logs in.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)

Спасибо огромное, это реально круто!

Hoodoo ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.