* What is libetc ? On my system I had way too much dotfiles: % ls -d ~/.* | wc -l 421 For easier maintenance I wrote libetc. It is a LD_PRELOAD-able shared library that intercepts file operations: if a program tries to open a dotfile in $HOME, it is redirected to $XDG_CONFIG_HOME (as defined by freedesktop: http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html). You can then store all your config files in $XDG_CONFIG_HOME instead of using zillions dotfiles in $HOME. If $XDG_CONFIG_HOME is not defined the dotfiles are stored in $HOME/.config/ (for historical reasons you can also use $HOME/$ETC instead of $XDG_CONFIG_HOME) * Install: To use libetc you just need to do: % make % make install On my computer I added the following lines to .xsession and .zshrc: export XDG_CONFIG_HOME=/home/luc/config export LD_PRELOAD=libetc.so.0 export LIBETC_BLACKLIST=/bin/ls:/bin/mv:/bin/cp:/bin/ln:/usr/bin/find:/bin/rm And for xorg I use a small hack, I build libetc this way: % CFLAGS=-DXAUTH_HACK make It just adds some code which does this: % ln -s $HOME/.Xauthority $XDG_CONFIG_HOME/Xauthority You can also use /etc/ld.so.preload to use libetc with each user on your system but it is a little bit dangerous (if you misstype the path to the library, or if the library is buggy, you will need to use your rescue disk to restore /etc/ld.so.preload) Nb: if you misstype the path, you may just get the following warning: ERROR: ld.so: object 'libetc.so.0' from LD_PRELOAD cannot be preloaded: ignored. If you want to use a setuid binary (gnupg for example), you should read ld.so(8): "For setuid/setgid ELF binaries, only libraries in the standard search directories that are also setgid will be loaded." I found that setgid is not enough, it works when the library is setuid. I read on the net that the library has to be setuid+setguid to be loaded, so the "make install" target does it. And now I just have 8 dotfiles : % ls -l ~/.* -rw------- 1 luc luc 4065 2006-12-03 23:09 /home/luc/.fetchmailrc lrwxrwxrwx 1 luc luc 17 2008-01-12 22:48 /home/luc/.procmailrc -> config/procmailrc lrwxrwxrwx 1 luc luc 19 2008-01-12 22:45 /home/luc/.spamassassin -> config/spamassassin -rw------- 1 luc luc 215 2008-01-26 11:14 /home/luc/.Xauthority lrwxrwxrwx 1 luc luc 17 2008-01-23 19:46 /home/luc/.Xresources -> config/Xresources lrwxrwxrwx 1 luc luc 15 2008-01-12 22:48 /home/luc/.xsession -> config/xsession -rw------- 1 luc luc 85632 2008-01-27 21:10 /home/luc/.xsession-errors lrwxrwxrwx 1 luc luc 12 2008-01-12 22:46 /home/luc/.zshrc -> config/zshrc I start fetchmail (and procmail & spamassassin) from cron, so I need a .fetchmailrc file (and fetchmail doesn't like symlinks). .Xauthority and .xsession-errors are created by xorg (I use xdm) .xsession and .Xauthority are needed by xorg. .zshrc is needed by zsh (when I login on a console or by ssh). On a Debian system some progams started from /etc/X11/Xsession.d might need some dotfiles. * License: GNU GPLv3 ! see the COPYING file. * libetc should work with: - openoffice - kde - gnome - firefox - mutt - vim - thunderbird - sylpheed - gimp ... * Known bugs: - libetc will do nothing on static programs (some non-free software for example) A kernel module could work... but it's too much work for something not useful - Some applications may have strange behaviors or crash when readding dotfiles in your home directory - clusterssh (debian package : 3.19.1-4) with xterm still creates ~/.ssh/known_hosts (xterm is setguid utmp). Everything works fine with latest rxvt instead of xterm. * TODO: - Bugfixes ! Luc Dufresne