On reconnecting with my inner nerd, learning stuff, and shaving numerous yaks.
Let’s get the impetus for this article out of the way fast: I’m a longtime Mac user (first Mac was a PowerPC Mac Mini back in 2004), and while I’ve been using a wide variety of computers ever since, macOS is still the operating system I know like the back of my hand. However, I’m increasingly discouraged by the decisions made by Apple over the past few years, and in particular by some of the qualities its latest range of machines have. I currently own a 2012 15” Retina Macbook Pro, and it’s becoming more and more obvious that this may be the last Mac I ever own. Keyboardcrumbgate, dated screens, ideological changes to the operating system, and increasing system instability are all factors in my feeling that, for me, the Apple Tax is no longer worth paying.
To that end, I’ve been using a 2017 Dell XPS 13 at home recently. For a while, I stuck with the OS / desktop environment I’m most comfortable with - Kubuntu with the KDE Plasma 5 Desktop Environment - but more recently I decided to experiment a little more. TL;DR: I’m really happy I did, as I’m rediscovering something about what made computers fun for me in the first place.
Arch Linux (well, Antergos)
The first part of my experimentation came with ditching Kubuntu in favour of Arch Linux. My reasons for this were twofold; firstly, I was having issues with Ubuntu’s DNSMasq implementation, secondly I wanted to fit in with the cool kids and use Arch Linux.
No, being serious, the second reason was for the customisability. I’ve been told I “use macOS like most people use Arch Linux” - I practically breathe the command line, I run a tiling window manager, I map Caps Lock to Hyper and use it as a global application switcher. These optimisations are something I really enjoy, and I do feel far more productive with them, so I wanted to go all in.
When using Ubuntu, I found a bunch of programs I’d like to use that I’d have had to compile myself. The Arch User Repository (AUR) obviates this, and I wanted in on that. Being too lazy to go through Arch’s notorious installation (or even read the guide), I did some digging and found Antergos, an Arch-based distro that has a nice graphical installer, plus built-in support for AUR. Jackpot!
Antergos’ installer presents a variety of DEs to install; due to my familiarity with it I selected KDE, but was tempted to try them all! KDE Plasma allows for a grid of 6 virtual desktops (like the good old days before Mac OS X 10.7 “Line”), but as above, I find myself most productive with a tiling WM.
However, I had no experience with tiling WMs in Linux distributions, and my Linux knowledge isn’t as back-of-my-hand as OS X. Being able to get comfortable with KDE before going all-in on a tiling WM allowed me to ease myself into things - and have an escape hatch if I needed to.
Shortly after setup, though, I installed AwesomeWM, and rarely booted into KDE again. I’d had previous forays into i3WM, but I found Awesome to have saner defaults. This let me get right into the most fun part: “Ricing”!
Ricing is all about taking control of your computer. It’s about the heavy customisation, both in terms of form and function, of your working environment. It can verge on pure yak shaving, but it’s so much fun!
Tiling WMs by nature tend to have far more customisation options than their traditional counterparts, and AwesomeWM is no exception. Customisation of Awesome is done via Lua scripts - which is powerful but not exactly intuitive. And for some reason, arrays start at 1. Let us never speak of this again.
My ricing, then, as with all good ricing, involved me finding a decent base to steal and customise accordingly to my needs. I changed a bunch of the keyboard shortcuts to ones my muscle memory already knows from macOS, added some config to show battery status and for wifi / bluetooth management, and made some aesthetic tweaks. It’s all a learning experience though, and I’m sure I’ll continually tweak the config and make it my own over the months to come.
It’s not all plain sailing though, of course. There’s a lot of extra work to do and things to learn when not using a full DE. I’m used to macOS or KDE Plasma holding my hand, with built in GUI apps for everything; here I’m having to learn a lot about how my system works (and perpetually Google for the smallest stuff).
For example, I’ve had to learn to connect to my Bluetooth mouse and keyboard with
bluetoothctl and manage wireless networks with
nmtui. Hotkeys for volume and brightness control didn’t “just work” under AwesomeWM like they would under a DE, so that was something else to figure out. Additional apps are necessary for the simplest things, such as locking the screen (I went for i3lock-color), and even that requires configuring to automatically lock the screen on timeout with something like xautolock. In short, there’s a lot of work to do - but you learn so much about how your system works, which I’m finding fascinating.
A real frustration, though, is that there’s a few high-quality apps for the Mac that I’ve just not yet been able to find acceptable replacements for on Linux. Shout out to three of my favourite apps that I’m having a hard time doing without: 2do (for following the GTD methodology), Sketch (for vector graphics design), and Deckset (for presentations). While replacements exist on Linux for these, it’s a testament to their incredible quality that nothing else out there feels… right yet.
Overall I’m having a blast using Arch and Awesome, and I frequently reach for this laptop for day to day work and for side projects. The way I’ve set this up has been really handy, in that I can hop back into Plasma if I don’t know how to do something and don’t have time to search for how. Using Plasma, though, and using macOS too, have become an exercise in frustration. By keeping things simple, AwesomeWM also keeps “weird stuff” from happening: graphical bugs, crashes, and the like are far more frequent on the heavier DEs.
My main concern about this build is that it’s going to be incredibly hard to replicate next time. Of course I have backups (you do too, right?), but the time will come to set this up from scratch again. For then, I’m hoping to build some automation, using Ansible or the like, so that next time I set up I’ll know that everything is installed and all the config files are in the right place.
For now though, I’m going to keep playing, keep ricing, keep having fun, and make this setup my own. After all, that’s what got me into computers in the first place!