Literate Dotfiles
The Irreal blog has recently published a post about Managing dotfiles with Org. The idea is simple: Put your configuration files and other scripts in a central (version controlled) place and use Emacs to create the "real files" based on the content of your org file.
Here's a short example:
* Git #+BEGIN_SRC conf :tangle "~/.gitconfig" :padline no [user] email = max@mustermann.com name = Max Mustermann [status] showUntrackedFiles = all [alias] lg = log --color --graph --oneline --decorate --abbrev-commit #+END_SRC #+BEGIN_SRC fundamental :tangle "~/.gitmessage" :padline no # * Why was this change necessary? # * How does it address the problem? # * Are there any side effects? # * What other options did you consider? #+END_SRC * Bash #+BEGIN_SRC sh :tangle "~/bin/my-hello" :shebang "#!/bin/bash -eu" :mkdirp yes echo hello #+END_SRC
Executing the Emacs function (org-babel-tangle)
will create three files:
~/.gitconfig
~/.gitmessage
~/bin/my-hello
- Note: The tangling function will (based on the shebang property) make
this script executable. So there's no need to call
chmod +x
.
- Note: The tangling function will (based on the shebang property) make
this script executable. So there's no need to call
Oh and yes, I can use the same solution on Windows and on Linux. Dealing with configuration or code in org-mode is also delightful: I can narrow the buffer to only show a specific file and I'll even get real syntax highlighting.
One last trick, just for fun: (org-babel-tangle)
can be called via the command
line:
emacs --batch -l org --eval '(org-babel-tangle-file "foo.org")'