We have built a suite of tools for managing your rc files.
The rcm suite of tools is for managing dotfiles
directories. This is a directory containing all the
.*rc files in
your home directory (
.vimrc, and so on). These files have
gone by many names in history, such as “rc files” because they typically
end in rc or “dotfiles” because they begin with a period. Creative, I
It’s a unification of the existing shell scripts, make targets, rake tasks, GNU Bash constructions, and Python hacks that people copy and paste into their dotfiles repo, with a classical unix flair.
Here’s a very quick example:
% lsrc /home/mike/.zshrc:/home/mike/.dotfiles/zshrc % rcup linking /home/mike/.zshrc
This blog post demonstrates the features, but you may want to install rcm and run through the tutorial too.
Build on it
Once unified, we extended the suite with support for sharing rc files via host-specific files, tags, multiple dotfile directories, and hooks.
A little something for the sysadmins out there, host-specific
files automate the configuration you need to do on each host.
Maybe the computer
jupiter needs a
.gitconfig but the computer
mars needs a
.mailrc. You’d put the
host-jupiter/gitconfig, and the
our suite takes care of the rest.
The next step up from host-specific is tagging: tag the
tag-git/gitconfig), and install and uninstall the tags as needed:
% rcup -t mailx % rcdn -t mailx
Tagging is great for teams sharing the same dotfiles repo, but we can do better. While some of us come to computers with a blank slate, others come with well over a decade of fine-tuned rc files. Let them combine dotfiles repos, preferring theirs:
% rcup -d personal-dotfiles -d thoughtbot-dotfiles
While automating things we noticed that some things require setup. For
example, after linking the
.vimrc you need to run
This is why we added hooks, such as the one in the thoughtbot dotfiles
#!/bin/sh if [ ! -e $HOME/.vim/bundle/vundle ]; then git clone https://github.com/gmarik/vundle.git $HOME/.vim/bundle/vundle fi vim -u $HOME/.vimrc.bundles +BundleInstall +qa
We make it easier to add something to your dotfiles, too. This is great
for getting started, but it’s also great for experimentation. For
example, add your
.cshrc to the
% mkrc -t openbsd .cshrc
Or get fancy by adding a host-specific file to the dotfiles repo you share with your brunch friends:
% mkrc -o -d the-brunch-dotfiles .rcrc
Given the power, we had to make an rc file for our rc files. Enter
The simplest things to configure are your tags and source directories:
TAGS="openbsd mailx gnupg" DOTFILES_DIRS="~/.dotfiles /usr/local/share/global-dotfiles"
Some files should never be symlinks:
And some files should be excluded:
This means a normal
rcup will do the right thing, without thinking
hard about what you have configured, which machine you’re on, or what
has changed in your shared repos.
.rcrc file is perfect as a host-specific file in your personal
mkrc -o .rcrc
Read about it
Since this is a unix tool, we treat it like a unix tool. Read the full
tutorial in the
rcm(7) manpage, read about each individual
tool (with examples) in the respective
and the full configuration file is in the
whatis command will jog your memory:
% whatis rcm rcup (1) - update and install dotfiles rcdn (1) - remove dotfiles lsrc (1) - show configuration files mkrc (1) - bless files into a dotfile rcrc (5) - configuration for rcm rcm (7) - dotfile management
The rcm suite is written in POSIX sh, available out of the box on BSD, GNU, OS X, and many other systems. We do our best to keep it portable.
The source package can be installed using GNU autotools, as is typical for many projects:
% configure % gmake % gmake install
But it gets easier on Arch and Debian, which are supported by their native package managers. Check our installation instructions for the details on those.
We also support OS X using Homebrew from our new thoughtbot tap:
% brew tap thoughtbot/formulae % brew install rcm
Watch that tap for other tools for command line champions.
Get started quickly
Instead of inventing something new, we decided to codify existing practices. If you have a dotfiles repo much like ours—one where all the normal files should be symlinked as dotted files in your home directory—you can get started immediately:
% lsrc -d ~/dotfiles % rcup -v -d ~/dotfiles
If you have no dotfiles repo yet, you can get started instantly:
% mkrc .zshrc .vimrc
We also cover special cases in our tutorial.
Let’s build this
Please share your feedback on GitHub. Together we can build the greatest rc file management suite.
- Install rcm using our instructions.
- Use or fork our dotfiles.