Dotfiles

Posted on 2019-01-28

Some time ago, I moved my publicly available dotfiles1 to a private gitolite installation. I don’t remember exactly why I pulled it from GitHub, and recently I thought there might be some value to share my setup with others. Besides, I haven’t had a reason to track any sensitive or personal data in my configuration files themselves. Last week I decided that I might as well just push it to GitHub again, so here it is: my dotfiles repository.

I consider my configuration files some of the most valuable assets I have on a system. I try to constantly improve my configurations to suit my everyday needs. One blog post which really struck home with me, was John Cook’s Automate to save mental energy, not time. I don’t necessarily save heaps of time polishing my configuration setup, but I know I spare myself for future headaches fixing itches and pain-points today.

Mostly this is related to tools and technologies I use as a professional software developer. This post highlights some of the more notable parts of the repository.

Overview

From README.org in the repository:

For the time being, I’m using git to track my configurations across multiple hosts using branches. These branches has a set of host-specific patches which are continuously rebased on top of the master branch. This provides a sensible backup across hosts, while having tailored configuration for each host.

Most configurations are applied by symlinking dotfiles into $HOME using GNU stow.

The configuration section with most frequent changes are, perhaps not surprisingly, related to my editor: Emacs. Then comes my current window manager i3wm and zsh shell setup.

Emacs

I’ve already written about my usage of Doom Emacs, and I still continues to use it. I’ve found no other, better alternative, and quite frankly I think it’s pretty amazing. The project is evolving constantly, which can be both a good thing, and a bad thing. There still are things which aren’t entirely optimal using it, but all-in-all I’m quite satisfied with my editor setup these days.

i3wm

I’ve been switching between using MacOS and Linux on my laptop the last 10 years or so. Currently I’m on Linux. On the desktop computers I’ve used at work I’ve exclusively used Linux. This means I’m pretty much on a Linux-only setup these days. One of my favorite pieces of software on systems with a graphical user interface has to be tiling window managers. I’ve tried quite a few, but I’m currently using i3wm. This isn’t a post about tiling window managers, but you should definitely consider trying one out I you haven’t already.

Rofi

I used Synapse to launch applications in i3 for quite a while, before switching over to rofi. Rofi is pretty great. I mostly just use it as an application launcher, but it can also switch between i3 workspaces, and application windows, as well as be programmed to do basically whatever.

Git

Not really much exiting here. I absolute love git, and it’s up there as one of the pieces of software I use the most. However, I try to keep my configuration quite simple, and not bother too much with customized behavior. One thing to note though, are a few convenient aliases for showing the log.

A thing to note about my git configuration is that I purposely don’t fill in my email by default in $HOME/.gitconfig. It’s too easy to mess up committing as either my personal persona in a work context, or vice versa. I’ve done this on several occasions, so now git prompts me to set my email in every new and cloned repository that I set up, using:

$ git config user.email <email>

Zsh (with prezto)

The command line interface never gets old. Not a day goes by where there’s something I have to do which involves the command line. Before the terminal used to be my main entry point to the command line, although this has tilted the scale more towards my editor after switching to Emacs. Still though, it’s the same shell which powers it all though: zsh.

These days I’m no longer sure why I use zsh. I’m no power-user though, nor do I think I use features which wouldn’t be available through e.g. bash. Who knows, one of these days I might switch back just to make default setup easier, not having to install a new shell on new systems.

In any case, I currently use prezto to drive most of the zsh configuration. I’m too old to write all this shit myself…

Tmux

Tmux is awesome. I started using the GNU Screen terminal multiplexer a long time ago, but quickly switched over to tmux when first learning about it and its advantages over screen. I use it less frequently now that more of my workflow evolve around Emacs, but it remains an important tool in my toolbox.

Fzf

I mostly use fzf as a fuzzy finder for my shell command line history in zsh, but it does a whole lot more like fuzzy finding files to send to command line applications.

Vim

I do still have my old vim configuration lying around, although I don’t change it much. I expect it to be quite rotten by now. I can’t really recall the last time I fired it up, but I do have to from time to time. It uses a plugin manager to install a few plugins, and nothing much more fancy than that.

The rest

There are configurations for a bunch of other applications and software which I don’t bother mentioning here. I expect my configuration files and tools of choice to continue to evolve, as well as accumulating new tricks and picking up new snippets which all make everyday programming life easier.

Hopefully publishing my dotfiles could prove directly useful to others, or inspire others to improve their own setup in ways which could be interesting to me in return. Publicly available dotfiles from other users is one of my main source of inspiration for my own setup, so if you haven’t checked out mine yet, please knock yourself out!

Footnotes


  1. Hidden file and hidden directory↩︎