Managing Dots

Published Fri Jan 26 2024

I love tools. More specifically I love great tools and my tools. Having a habit of sharpening your tools often is valuable, but with software tools you can get lost in complexity fast. An example of this is the notorious dotfile manager. Many have been created (often for a single user), and most are over the top for general needs.

When I first began programming I didn’t manage my “dots.” Primarily because I didn’t really have any. Once I started accumulating dotfiles I had no initial need for backing them up. This all changed when I wanted my cozy setup available on machines dedicated to work.


Out the gate I quickly realize there are a ton of dotfile manager programs. Most of them are hobby projects created by a developer to bootstrap their own configurations. Since many roll their own, most don’t have a lot of users either. This made me eager to create a new and improved dotfile manager myself. Luckily I was able to control myself and choose an existing tool for this common problem.


Chezmoi was one of the most starred projects I came across for managing dotfiles. It has a bunch of awesome features for managing files, and is git-based so using it is somewhat familiar. Chezmoi looked great, but I knew my needs were not complex enough to warrant using this yet.


YADM (Yet Another Dotfiles Manager) is a mostly a wrapper around git. This is great because I use YADM commands the same way I am used to using git, except with yadm instead of git.

Example: yadm status or git status.

The resulting behavior is very similar to Chezmoi, but with an identical interface to git. I installed it, yadm add‘d my dots and was done! Now pulling in my config is as easy as brew install yadm && yadm clone

Throwing it out the window

YADM has served me well, but my wants and needs continue to evolve. While these tools give me easy access to my configuration files, they do not take care of managing dependencies for me. I have begun to experiment with other more complicated tools such as Nix to provide a configured environment rather than just my configuration files.