My dotfiles repo can be found on Github here.
I've since switched to a mostly Mac development environment, but still use what's laid out here as a baseline.


I really like making things my own. There's just a sense of pride that comes with taking what you have and making it something better, something that is unique to you. Linux is good for this, as you have a blank page to fill as you wish. With my machine I went for two things, efficiency and coherence. That was the goal, and here is the first iteration.

It's nowhere near perfect, but it is a lot better than a typical desktop, at least for me. The programs featured in the screenshot above are vim, vifm, fish (my shell), and i3status. Tiled workflows can be very difficult to get the hang of, because they are so dissimilar to the standard windowed window managers you are used to with Windows and OSX. However, once you get the hang of the keyboard shortcuts, it really is a more efficient way of managing your workstation, and I have come to thoroughly enjoy tiled WMs.

Version 2.0:

A while back I switched a couple of programs. For the most part, I focused on swapping things out with their more customizable counterparts. This meant switching to bspwm with sxhkd as my keybinding manager, switching to bar-aint-recursive with the default bspwm panel, and switching to lighthouse for my launcher. The result is as follows:

This version is really nice, I especially like lighthouse as it allows for super customizable search and program launching. Lighthouse by itself is essentially a basic text box, and you can program any behavior that you want into it. The other upgrades are good as well, and I'm fairly happy with the direction that I'm heading.

Version 3.1:

The latest iteration of the setup came after building a computer. I had been using a combination of a Thinkpad laptop with Arch and my gaming laptop (a Lenovo Y400) for a while, and mainly got sick of overall mediocre performance and the tendency for my gaming laptop to have issues with Linux. I decided to save up and put together a computer that would be fully Linux compatible (which involved making compromises like Nvidia over the cheaper AMD, etc.). Once that was done and the parts were in, I started working on my Linux installation. The end result is quite similar to the ones above, but with a few "Quality of Life" improvements, like improved transparency on the terminals, XFT font support on lemonbar, and a more complete and consistent color pallet. The end result can be found below:


My current setup includes the following:

  • bspwm (window manager)
    • Tiled, uses a vim-like control scheme
    • Uses sxhkd for control, mapped the same as my old i3 conf
  • lighthouse
    • Simple, scriptable app launcher
    • I am using a modification of the skel script
  • Fish
    • Shell, uses simple guessing to help with auto-completion
    • Good for easy-to-forget syntaxes like ln
    • Pretty basic prompt
  • lemonbar
    • Using the XFT fork for more font support
    • Using a custom built bar that was built on the back of a few examples, namely Z3bra's and the BSPWM example BAR
  • Vim
    • Main editor
    • Custom color scheme (taken from the Sublime Brogrammer theme, one of my main inspirations for this whole project)
  • Compton
    • Used for a few rendering effects

For the font I use Fira Mono, which is a slick font that was developed for Firefox. I really like the style of it, it's a mono font without a mono feel. I'm still working on getting it working across everything (using terminus for lighthouse/b.a.r.), as there are some resizing issues.

Most of the learning experience of this project came from the simple fact that I have to manage my own Linux installation from start to finish. Although this is a personal machine, all of the same concepts of security, driver management, etc. still come into play. This means that I got better overall at debugging systems of all kinds. Plus, I can try out experimental software for myself before suggesting it on a larger scale. Overall, setting up my own Linux system taught me the limits of my own patience and technical skill.