A Newcomer's Experience with ArchLinux

Abstract

Over the past couple of weeks, I have taken up the task of setting up a pleasant, clean and productive Linux Desktop environment. In this article, with the many options at hand, I shall go over why I opted to use ArchLinux and how my experience has been thus far.


I think the first thing most people would want to know, is that the setup looks like. The goal here is a single-screen setup (think, laptop) with three main tabs:

The Main tab, meant to be clean of most clients. Just using conky to monitor the system (along with htop).

Main

The Firefox tab which is generally either a single browser instance, or a mix of browser & editor (emacs) when multi-tasking.

Firefox

And lastly, the Dev tab, which funnily enough I'm not using much for the time being. Keep in mind, that is actually GUI emacs running.

Dev

You might notice the Misc. tab, which is just then for random things, mostly empty.

Motivation

Now that the eye-candy is out of the way, I can dive deeper as to what guided me to this direction. To give some background, I've been doing software development (professionally) for under 2 years, with many more years outside of my career. Most of this time was spent developing python backend services on my Windows rig which was fine for just that.

As time went by, I started picking up a few other technologies along the way, especially stuff closer to the metal such as rust and started noticing some very annoying issues:

Keybindings

Moving from IDE (PyCharm) to IDE (VSCode (?)) to editor (Sublime), I would spend far too much time and thought power into what my key-bindings were for each client. I personally like navigating in words-over-characters by default for example, which is the opposite of what all editors do. Maintaining these keybindings across multiple environments is simply counter-productive and a pain to get used to.

System Usage

PyCharm, although great, is simply too much of a memory hog for my small laptop. Despite that, my laptop has 4GB(!) of RAM and decent clock speed, which is my view of a computer, should be far more than enough, to write plaintext to a screen and compile it.

Screen Estate

Simply put, I want more focus and less distraction. I do not need fancy icons, on-screen notifications and whatnot. I just need a client and a browser, for the most part. I need to use as much of my 13-inch screen as possible on what really matters.

There are a few other nitpicks but I feel listing the key points is more important (80:20 rule and all).

Dependencies

On Windows, compiling and using certain libraries is simply too much of a pain (glfw comes to mind). This is not usually the case on a *nix system.

Choosing a Distro

Oddly enough, ArchLinux was not on my initial list of distros to try out. I kept on reading about some alternatives which initially narrowed down to:

  • Ubuntu: The easy way out in my eyes. Window manager and UI overall feels very clunky. Nothing compared to what I'm looking for.

  • Mint: Feelings similar to Ubuntu, however a bit leaner in terms of UI which made it compelling.

  • Fedora: Very compelling choice, especially given their awesome (!) documentation. However something just didn't push me to that direction much.

I still was not satisfied at the end however, and looked for a distro that struck a smaller niche, which is where I found ArchLinux. This hit essentially all the "must-haves":

  • Minimalistic setup with very little bloat
  • Nice package manager which is not bloated with packages (not considering AUR). Also has a cool name, pacman, for package manager. :-)
  • Great documentation for all packages, even for stuff like rust which I did not expect.

Another decision that must be made on top of ArchLinux, is the Window Manager that you wish to use. To avoid going into too much detail (because quite frankly, I forgot most of the detail), the main choice for me here was between i3 and awesome window managers. Both support tiling which is what you see in the screenshots above.
I ended up going for AwesomeWM which is not as popular as i3 but once I got a hang of it, I loved it. You do have to get used to reading the API docs however if you want to get far.

Configuration

The decisions are only have the trip. The configuration is where I started to dig my teeth to learn more about the ArchLinux space and still feel like an utter newbie. As a result, I thought I would accumulate a few configuration settings that I found useful over time and present them below, in hopes that I'll laugh at them in the future.

Startup clients

Running certain clients such as Firefox, Conky, Emacs on startup is a must. There are many ways to go about this, and the method I chose I feel is easiest but has its shortcomings (I'll get to that later). In rc.lua, which in my case is found under ~/.config/awesome/rc.lua I have a section at the bottom dedicated to startup clients:

-- {{{ Autostart
--     The following block will autostart certain
--     key programs in specified tags.

awful.spawn("firefox-developer-edition", {
    tag		= screen.tags[2],
})

awful.spawn("conky", {
    tag		= screen.tags[1],
})

awful.spawn("emacs", {
    tag		= screen.tags[3],
})

-- }}}

This spawns a client, and moves it to a specific tag number. The issue with this, is that if you restart your Xserver (Mod+Control-R), the above will respawn another batch of clients even if they already exist (essentially, duplicating the windows). The full config can be found here.

Conky

On my Main tab, I wanted to keep things very minimal. I wanted it to be a space where I mostly monitor the system for whatever reason. I used conky which would look like:

conky

The network stats aren't currently being picked up, but it's a start :-). The config can be found here.

Emacs

Might feel a bit off-topic but it ties with one of my initial points regarding key-bindings. Instead of having a language-specific IDE, I want a robust editor that will allow me to maintain all configuration from a single file and give me the flexibility I need for any language. As a result, I wrote my .emacs from scratch to know exactly what I'm setting. To give the minimalistic look seen in the above screenshot(s), I set the following:

;; Remove GUI fluff allover the page
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)

;; Set global line number for _all_ buffers
(global-linum-mode 1)

The full configuration can also be found here. One last thing I'd like to mention regarding emacs, if you're playing around with Rust, I would highly recommend rust-mode, it just makes the overall experience more pleasant.

Conclusions

This is a very brief look into what look and feel ArchLinux has to offer. As time goes by, I will keep on adapting the setup and eventually moving it as my primarily workstation for all (most) things development. If there are any tips you would like to provide, or have any questions, you are more than welcome to do so below.

Juxhin Dyrmishi Brigjaj

Read more posts by this author.