In my experience, describing your Linux daily driver setup is akin to a “coming of age” for a personal tech-oriented blog. In addition, I have a few posts I would like to get through which benefit from some more context. In drafting this, I have reflected on my journey to Linux and my workflow changes thereof. It is enlightening to take a step back from the day to day grind to see the wider picture.

To begin, I am currently running Debian Stable. I once suffered a terrible affliction called “distro-hopping”. I had difficulty staying on the same install for more than a few months, seeing a better fitting distribution around every corner. While this afforded me a widespread understanding of different environments, I needed something more consistent. From a high-level view (excluding short-lived installs) I began with Ubuntu, wanting a more minimal install transitioned to Arch, and after too many stability issues fell into Debian and have been happily using it for the past few years. In particular Debian Stable satisfies the following requirements:

  • Stability: The Stable branch is released around every 2 years. This locks software versions and only provides security updates. Consequently, as the release ages the software becomes more and more outdated. I have found the Backports branch and manually install binaries are sufficient enough to combat where necessary and the beauty of stability just cannot be beat.
  • Customization: The project offers a minimal install where just the base system is included. This makes it trivial to build the install how you want it, rather than including a bloated collection of default applications.
  • Minimalism: At the OS level, Debian is a base-level distribution, meaning it is not dependent on any other projects.

UI Components

I admit to being a keyboard cowboy, trying to do as much as possible from the terminal. It takes some time to get comfortable with the myriad hotkey combinations, but now I find a traditional environment unapologetically slow and unmanueverable. As such, my interface components are minimal, providing behind the scenes power rather in in your face graphics.

bspwm & sxhkd: My window manager is bspwm. It is easily configured, has native support for window gaps, and uses a sexy binary tree window partition scheme; where the window layout is designed hierarchically. The architecture aims to do on things and do it well, a design principle I entirely endorse. Therefore, a separate program, namely sxhkd, is developed in tandem to provide hotkey captures. I find the configuration simplistic and elegant. The configuration files for my bspwm and sxhkd setup are provided here and here respectively.

conky: I think notification bars take up too much real-estate while simultaneously not being large enough to contain useful information. Conky is an application providing free-form text in a configurable desktop tray. My configuration glues the try to the desktop, meaning all opened windows are overlayed. If I need to view it I switch to an empty workspace (bspwm defaults to 10 of them). My conky tray includes common information like time, battery charge, screen brightness, and volume. It also displays resource utilization like CPU (all cores), disk, RAM, and network I/O which allow me to quickly profile multi-threaded applications at a glance. My configuration is located here.

nitrogen: This application is a simple solution to displaying a desktop background. I put a command in my .xinit to set the wallpaper on the start of X. One feature I use is randomly choosing a picture from a directory of images. I have a collection of fantastic (un-biased opinion) nature pictures from various trips. I use nitrogen to randomly use a new one on each boot to help remind me that outside does exist.

Must-Have Applications

Within every workflow a few applications are critical, the cornerstones of productivity. Similar to the rest of my environment, I favor stability and simplicity here.

alacrity: A solid terminal emulator is paramount. This project is written in rust, of which I admit a measure of fanboy-ness. It requires a simple, single configuration file which encompasses a large variety of options, including the color scheme. Finally, alacritty allows GPU acceleration for better performance. My alacritty configuration is stored here.

dmenu: Driven by my choice of UI components my setup requires an application launcher. Dmenu is a component in the suckless-tools suite which provides a minimal test matching interface where you begin typing the application and select from a list of matches. There are many other options in the space, notably rofi is one I have used in the past. However, I notice the large feature-base is something that just is not useful for me. The lightweight nature of dmenu is a perfect fit.

dunst: In truth, this is something I would rather leave out. Dunst provides a simple text-based desktop notification system, allowing screen pop-ups. My current position is heavily invested in slack and therefore desktop notifications are very useful. I find that dunst provides adequate notification without being overly distracting. Of course, the choice of color scheme has a strong impact here. The configuration for my dunst setup is stored here.

6 day(s) offloaded in the 100DaysToOffload challenge.