A little more manageable dev workflow


This is the source for my dotfiles: org files that generate configuration through tangle (or evaluate buffers) with Emacs.


Since I first discovered org-mode (and Emacs for that matter), I knew that I’d been doing dotfiles all wrong. One of the most important aspects of writing software or programming to me is the ability to articulate what I’m doing first then to write the code. My dotfiles (as most other dotfiles) were a garbled, cobbled together mess.

Sure, my dotfiles could be easily reproduced by me on a new machine, but if someone wanted to use my dotfiles for learning or reason about what it was doing, well…good luck.

So I decided to give this literate programming thing a whirl, knowing that I could generate files for all of my dotfiles from *.org files, the worst case scenario is I’d end up right back where I started.

If you’re unfamiliar with literate programming, you can read Donald Knuth’s paper on literate programming here.

This entire dotfiles repository is now written with literate programming, with the only dependency being Emacs version 25. Armed with only an editor that’s been around since the 70’s I can describe my entire system state through documentation (org file content) and the actual code (org file source blocks). Everything you’ll find here is an org-mode file that is either evaluated by Emacs at runtime (such as my =emacs.org=) or tangled with babel source code blocks (such as my shell.org.

With that, everything starts in bootstrap.org. If you’re still interested in groking my dotfiles, that’s the best place to start. Enjoy your journey!





Let it be known:

I stand on the shoulders of giants.

My Dotfiles weren’t a sole, Herculean task, but rather a composiion of what I’ve learned from others. You can find an exhaustive list of the people I’m grateful for at acknowledgements.org as well as a list of links to the blog posts, dotfiles and Emacs configurations I used to get my Dotfiles to where they are.


add a function that takes an *.org file path and evaluates the source code blocks the same way that init.el does for emacs-lisp.