A year ago I’d just started college and a bunch of things were changing for me, one of which was my laptop. After a pretty awful experience running linux in a VM because a robotics project required it, I took the plunge and dual booted Ubuntu. Up until that point my only linux experience was the bare minimum I needed to configure Raspberry Pis, so I was worried that it would be a jarring experience. However to my surprise Ubuntu was as user friendly as it gets; I don’t remember having any problems getting started. I think my favorite part was getting a proper package manager; having a homogeneous and reliable process for installing and updating software is a bigger deal than I’d realized.
I was so happy with linux that I shrunk my Windows partition as much as possible (we used LabView for one of my courses and it wasn’t available for linux, so I couldn’t completely eradicate it). I also left Windows on my desktop because I use it for gaming, and being incompatible with games is one of the most common complaints I heard about Linux (the most common being driver support). I should mention that my roommate Vivek was going through pretty much the same process as me, a few steps ahead due to his prior experience with OSX. I got fairly comfortable with Ubuntu and moved on to other endeavors like learning Vim. Vivek was more interested in tinkering with his OS and soon he switched to Arch Linux.
All I knew about Arch at that point was that it was a much more bare-bones distribution and it had a very involved user-base. I had all sorts of fun jeering Vivek as he struggled to make basic things work like controlling the GPU or making the laptop go to sleep, but as time went on he talked less about the ridiculous problems he had and more about the cool features and tools he was learning to use. Over the summer one of my coworkers (who coincidentally used to work at Canonical, the company behind Ubuntu) taught me more about the Linux ecosystem and introduced me to some other distros and OS’s. That was the tipping point for me, and when this semester started I decided I’d try something new. I narrowed the choices down to Arch and NixOS, but the latter isn’t as popular/well supported and Vivek wouldn’t be able to help me with it. So a few days ago (when I should have been studying) I opened up the Arch wiki and with Vivek holding my hand I managed to get up and running on a spare SSD in a single night. I used my desktop this time because I’ve been convinced that almost every game I play will run just fine on linux, and I didn’t want to interrupt my Ubuntu environment so I could still do my homework if things went south.
Right off the bat the difference from Ubuntu was apparent. Instead of just running a GUI installer off a flash drive, I had to manually create and format partitions on the hard drive. Then I booted Arch from a flash drive and after setting up the filesystem on the SSD I jumped into it (honestly I still have no idea how this part worked, I typed
chroot and voila now I’m running out of the other drive). I started setting up essential stuff like the bootloader and network configuration. I was surprised by how piecemeal the process seemed, at every step I could choose several programs to do a task with their own benefits and drawbacks. It was quite overwhelming to be presented with 15 packages that do the same basic function, with different levels of configurability, stability, performance, and elegance.
Getting over the initial usability hump to get a shell, editor, and web browser running, took much longer than with Ubuntu, but I kind of enjoyed the process. The “batteries not included” nature of Arch means that instead of having huge swaths of software installed by default, you have to build up your system piece by piece to get the functionality you want. This obviously takes more work, but means that you better understand your setup once you’ve got it working. That understanding has already helped me a few times when debugging. On Windows if an OS feature didn’t do what I wanted, I was powerless to change it. On Ubuntu there was a 50/50 chance that someone had posted a script or modification to a config file on stack overflow and an even lower chance that it actually worked for me. In Arch, through a combination of the amazing documentation the community puts together and my enhanced understanding of my own system, I feel like I can actually fix things! Seriously, the Arch wiki is an amazing resource not just for Arch but Linux as a whole. It’s invaluable especially when using new tools where the
-h option is too terse, and the
man page is too verbose.
Yesterday when I noticed that the time in my status bar was wrong I consulted the wiki and was able to figure out the problem (incorrectly configured NTP client) with minimal frustration. In addition to the great documentation, I’m sure it helped that I had set up both the status bar and the underlying
timedatectl config myself. In addition to debugging, adding features is also a breeze compared to my previous setups. I wanted to set up screenshots and clips, so I checked the arch wiki for screen capture software (there are literally 19 listed packages not counting ones that do video) and picked a straightforward one called
maim. When ran it just captures the screen and either spits the png out over
STDOUT or saves it to a file if you give it a path. I wanted to both save the picture and copy it to my clipboard so I piped it to
tee ~/screenshots/$(date +%s).png and piped that to
xclip to put it in my clipboard. Finally I ran
xev to find the id of my
PrnSc key, and added a binding in my window manager that ran the whole command when I pressed it. At this point I felt like a sorcerer and ate a piece of pumpkin bread to celebrate. The thing to note is that I didn’t just copy a one-liner off a forum and forget about it, I used separate programs (
bindsym) and composed them together to do my bidding. I’d always heard people touting that composability as Unix’s greatest feature, but I’m still so new to it that I don’t appreciate that all the time.
Of course you could look at it another way: I just spent an hour replicating a feature that works out of the box in any respectable OS. That’s a fair point, but first of all it was fun , and I also think knowing how it works has real benefits. After I got it working, it was easy to add a binding for “Shift+PrtSc” that let me select a region instead of capturing the whole screen. I distinctly remember in windows having to launch the snip tool, and in Ubuntu launching the screenshot tool and then picking the option for “select region”. I’m sure there are ways to do what I want in both cases, but when you’re provided with tools that mostly work, it takes a lot more motivation to modify them.
At the end of the day, configurability is my favorite “feature” of Arch (well that and the AUR). I’m the kind of person who loves endlessly tweaking settings and the control that Arch gives me to do that is amazing. I’ve spent a dozen hours since installing it just picking and choosing different components to use for things like window management, notifications, status bar, program launching, etc. and there are still a few big kinks I need to iron out. After that there’s the never ending minutia of optimizing my workflow and making stuff look pretty. I’ll do another write up with the details of my configuration once it’s stable. Then maybe I can get back to you know… actually using my computer.