in the *nix world programs are configured in two different ways, via arguments in the terminal or text based configuration files. programs which have many options like your shell, window managers, or even text editors are configured on a per-user basis with files in your home directory ~. in unix like operating systems any file or directory that starts with a period or full stop character is considered hidden, and in a default view will not be displayed. thus the name dotfiles. it's been said of every console user:
you are your dotfiles
since they dictate how your system will look and function. to many users (see ricers and beaners) these files are very important, and need to be backed up and shared. people who create custom themes have the added challenge of managing multiple versions of them. i have tried many organization techniques. and just take my word for it when i say, keeping a git repo in the root of your home directory is a bad idea. i've written custom shell scripts for moving or symlinking files into place. there are even a few dotfile managers, but they all seem to have lots of dependencies. i knew there had to be a simple tool to help me.
i now manage my dotfiles with gnu stow, a free, portable, lightweight symlink farm manager. it allows me to keep a versioned directory of all my config files that are virtually linked into place via a single command. this makes sharing these files among multiple users (mine, root, xmbx, etc) and computers (desktop, laptop, webserver, htpc) super simple. and does not clutter your home directory with version control files.
stow is available for all gnu/linux and most other unix like distributions via your package manager.
- sudo pacman -S stow
- sudo apt-get install stow
- brew install stow
- or clone it from source and build it yourself.
i keep a git repo at http://code.xero.nu/dotfiles and a mirror on github http://git.io/.files, just in case. as of writing my dotfiles contain configs for awesomewm, compton, figlet, git, herbstluftwm, midnight commander, ncmpcpp, pacman, sublime text, vim, urxvt, zsh and more.
how it works
by default the stow command will create symlinks for files in the parent directory of where you execute the command. so my dotfiles setup assumes this repo is located in the root of your home directory ~/dotfiles. and all stow commands should be executed in that directory. otherwise you'll need to use the -d flag with the repo directory location.
to install most of my configs you execute the stow command with the folder name as the only argument.
to install my herbstluftwm theme use the command:
this will symlink files to ~/.config/herbstluftwm and various other places. if you clone or browse my dotfiles repo and look in the herbstluftwm folder, you'll find a .config/herbstluftwm directory structure identical to what the stow command just symlinked into your home directory. if you edit the autostart file in the dotfiles herbstluftwm folder it will automatically be updated in the file symlinked in your home directory.
this command effected your home directory because that's where the repo is located, but you can override the default behavior and symlink files to another location with the -t (target) argument flag.
to install the ryu-login you need to execute the command:
stow -t / ryu-login
this will symlink the file to /etc/issue. if your user does not have access to edit /etc simple execute the command again with sudo.
** note: **
stow can only create a symlink if a config file does not already exist. if a default file was created upon program installation you must delete it first before you can install a new one with stow. this does not apply to directories, only files.
navigate to your home directory
clone the repo:
git clone http://git.xero.nu/dotfiles.git
enter the dotfiles directory
install the zsh settings
install the root zsh settings
sudo stow zsh-root -t /root
install awesomewm theme
uninstall awesome theme
stow -D awesome