DEV Community

Cover image for An Actually Productive Arch Linux Setup
Oscar
Oscar

Posted on

An Actually Productive Arch Linux Setup

Psst! Hey you! If you'd like to watch a video instead, check this out:

I really like Linux.

I love customizing my stuff, having full control over everything I use, using open source software, and of course, the moral superiority that comes with using Linux, but I didn’t start using it for any of those reasons

You see, I started using Ubuntu a year or two ago because I despised having to work on Windows. Constant distractions, lack of customization, and… kinda slow sometimes. I also much prefer the Linux terminal/file system. I know that WSL exists, but it’s just not enough for me.

Anyways, after a few months of using Ubuntu, I realized how much more productive I was. And so I decided to push that productivity to the max. I started messing around with KDE, which eventually led me to try i3. i3 led me to try a few other tools, and down the rabbit hole I went. A few months later, I swapped to Arch Linux and started using it 90% of the time, and dual booting to Windows only when necessary (which was really just for gaming).

A few things to note before we begin

  • Firstly, if productivity is truly your only goal, then you should simply get a Mac, buy into everything in the Mac ecosystem, and use what your corporate overlords tell you to use. However, if you want to do things for a helluva lot cheaper (well, free – almost all of the software I use is open source -- so say thank you to maintainers), then the few days that you’ll spend setting up Arch will be well worth it.

  • Secondly, not everything has to be specifically about productivity. The best way to be productive is to enjoy your work, and there’s nothing wrong with having some fun configuring your tooling. A lot of the software that I mention in this article is more related to customization than it is productivity, and that’s fully intentional. I as a person am much happier using software that helps me be productive and that looks good.

  • And finally, as usual, this is not a tutorial. I’ll show you everything I use and why I use it, but I’m not gonna walk you through the setup of every single tool. But if you’d like me to, please leave a comment and let me know.

The really important stuff

Firstly, a display manager. This is kinda just your lock screen, in a way. Because we’re going for maximum productivity, we’re going with an incredibly minimalistic, speedy, and vim-binding-supporting (is that a word?) display manager called ly. It does literally nothing but log you in, which is perfect for our usecase. As mentioned, it supports vim bindings, and you can also optionally use one of two effects: Matrix text, which looks like this (yes, the following pictures are taken IRL. It would be a pain to screenshot a TTY):

IRL Picture of Matrix text effect

or the Doom fire effect, which looks like this:

IRL Picture of doom fire effect

However, I don’t personally use these because my brain literally cannot handle this happening on three different monitors.

A window manager

There are a lot of equally valid options for this, but I went with i3. It’s simple, it does exactly what it needs to do and nothing more, and it runs on X11. That might be a downside for some, but I generally prefer older tooling that works with almost any program you throw at it. That is, compared to Wayland, which, the last time I tried it, struggled to let me screenshare with Discord.

i3 logo

Compositor

I spent a lot of time thinking about whether or not to include a compositor in this article, as it’s really not necessary for “pure productivity”. However, as I previously mentioned, not everything has to be specifically about productivity, and this is certainly a case where that idea applies. Now, there aren’t that many options for X11, but if you did choose to go the Wayland route, there are a LOT of options (like 20 or more, according to the Arch Linux wiki). With that being said, we’re going with picom. Picom is… awesome. It has very nice documentation, and most of the time, it… just works. It also supports all of the fancy things that you might want from a compositor: transparency, shadows, fading, opacity, and most importantly, animations (which were recently released in the V12 update).

Compression is due to Dev.to/AWS S3, nothing I can do about the blurriness here. Sorry!
Screenshot of desktop running i3 and picom
Check out a non blurry screenshot here

Notification Daemon

You might ask why I’m putting this in the “important stuff” section, and there’s one very good reason for that. Electron, a cross platform JavaScript framework that a lot of your favorite applications are built on (Discord, Spotify, VSCode, Figma, and more), implodes when it doesn’t have something to send notifications to. So, in other words, Electron based apps, like the ones that I just mentioned, instantly crash the moment a notification is sent if there’s no notification daemon installed. And don’t think that it won’t – I promise you, Electron will find a way to send some irrelevant notification. With all that being said, we’re going with dunst for our notification manager. It’s extremely customizable, and very easy to set up, which is why it deserves a spot in this article.

Here's what dunst looks like for me. I'm using the Dracula theme with a few tweaks:

Dunst notification example

The less important stuff

This is the section for stuff that I would recommend, but is totally not necessary.

A simple terminal emulator

First up is a terminal emulator. We’ll go with Kitty here – it’s extremely fast, allows for rendering of images in the terminal which is really cool, multiple tabs, sessions, and a bunch of other customizable features that are generally effective at making you more productive.

kitty

The fast, feature-rich, GPU based terminal emulator Fast Uses GPU and SIMD vector CPU instructions for best in class, Uses threaded rendering for absolutely minimal latency, Performance tradeoffs c...

favicon sw.kovidgoyal.net

Screenshots

A screenshot tool would be really useful for a number of reasons. As is the common trend in this article, there are a lot of different options here. However, I chose to go with a tool called Flameshot for 2 specific reasons. Firstly, it’s simple, yet it allows you to do a lot with your screenshots. And secondly, using Flameshot means that I don’t have to use anything from Gnome. But again, there are a lot of different options.

More efficient file browsing

I briefly mentioned this in my previous article about my note taking setup with Neovim, but I’ll cover it again here. I primarily use N^3 as my file browser because it’s super fast, supports Vim motions, and is super lightweight (no, really, it’s like 3 megabytes in total). However, I use the Thunar file browser from XFCE any time I need a GUI, like when I’m editing videos. N^3 sadly doesn’t allow you to drag and drop files.

(This is not my video)

nnn terminal filebrowser demo - GIF on Imgur

Discover the magic of the internet at Imgur, a community powered entertainment destination. Lift your spirits with funny jokes, trending memes, entertaining gifs, inspiring stories, viral videos, and so much more from users like luukvbaal.

favicon imgur.com

Blue light filtering

The past few pieces of software that I’ve mentioned may be a little bit off topic, as in not directly related to productivity, but a blue light filter will usually help you sleep better, which directly impacts your productivity. It means you don’t have to be flashbanged (CSGO reference) every time you open up a tab that isn’t in dark mode at 10 o’clock at night. For instance, I’m writing this in Google Docs at the moment, and I’m only being mildly flashbanged because of my blue light filter. Anyways, on a Linux machine running X11, the best option for a blue light filter is a program called Redshift. As with most other things in this article, it’s very customizable, which is, y’know, awesome.

Your browser

This is bit obvious, but I felt like it’s worth noting. A simple and effective web browser is really important to productivity, and that’s why I’d like to introduce Opera GX – no, I’m joking. In all seriousness, just use Firefox (or Firefox Developer Edition if you’re feeling fancy). It’s simple, and it works. I should note that I have run into one problem with it in the past: videos in AP Classroom won’t play correctly on Firefox. The only browser that works is Chrome. Thanks to the “non-profit” CollegeBoard for making a super accessible website!

Is this related to tech? No, not at all. But I really don't like Collegeboard, and I felt like mentioning it

College board profits

Coding

And finally, if you’re gonna be coding, you should probably decide on your editor of choice. I’d of course vouch for Neovim, but it’s really up to you. VSCode, Vim, Emacs, Sublime Text, Visual Studio, IntelliJ, and the list goes on.

Customization.

I should warn you that this section may be a little bit less focused on productivity, and it might turn into a yap session about how I customize my system.

Fonts

Nevertheless, let's start with fonts. This may be surprising to you, but I’ve found that using the right font helps me focus and write faster – whether I’m writing code, a blog post, or the script for my next video. I use the Hack font for my terminal, and JetBrains Mono for the rest of my system. Also, when I’m not forced to write in Times New Roman, I use the font Proxima Nova at 11pt, normal weight.

An example of Proxima Nova

Wallpapers

Next up, wallpapers. As I said, we’re getting off topic here. There are a bunch of wallpapers in my dotfiles, but there’s also a bunch of other places to find wallpapers online. You could check out the Arch Linux Discord server, or somewhere like r/unix-you-know-what. And don’t forget to use Google Image Search to search by images.

kureal's dotfiles

This is heavily inspired by (or should I say 30% copied from) this rice.

Screenshot of rice

Requirements

  • NerdFonts
  • FiraCode Nerd Fonts
  • JetBrains Mono (font)
  • i3
  • kitty (terminal)
  • dunst
  • feh
  • lxappearance
  • flameshot
  • rose-pine-gtk
  • picom
  • nnn (not that, the file manager)
  • redshift

There are likely more requirements that I'm forgetting about.

General info

  • Using pipewire and pavucontrol for audio management
  • Using nmtui for network control



An unnecessary wallpaper switcher/image viewer

One thing that would actually kinda help (ok, I'm stretching it a bit here) in terms of productivity is being able to switch and view all of your wallpapers without having to use a silly GUI. For this, we’re going to use feh. It’s dead simple – just type feh –bg-scale name. You can even add this to your i3 config if you like.

feh example

Theme manager

And one more thing to mention in the name of customization: a simple GTK theme manager. There’s a lot of software that uses GTK, so being able to easily swap themes is, y’know, nice. I just use lxappearance – again, it’s simple, and it does exactly what it needs to do.

How do I maintain all of this?

You may have heard of the phrase “system maintenance”, and if you’re running a distro like Arch, you definitely should’ve heard this phrase. All it really means is take care of your stuff.

For this, I use a script that I stole from this guy. Again, to be completely clear, this is not my code. I just put in a script, and accredited the guy who actually wrote it. I run this once every month, then restart my system to make sure everything is still running properly. You can find this script in my dotfiles.

# Please don't run this if you don't understand what it does!

echo "Updating system"
yay -Syu

echo "Clearing pacman cache"
pacman_cache_space_used="$(du -sh /var/cache/pacman/pkg/)"
paccache -r 
echo "Space saved: $pacman_cache_space_used" 

echo "Removing orphan packages"
yay -Qdtq | yay -Rns -

echo "Clearing ~/.cache"
home_cache_used="$(du -sh ~/.cache)"
rm -rf ~/.cache/
echo "Spaced saved: $home_cache_used"

echo "Clearing system logs"
journalctl --vacuum-time=7d
Enter fullscreen mode Exit fullscreen mode

That being said, this is definitely the bare minimum. Consider thinking about what else might need to be maintained. And if you have a bunch of configs that need to be maintained and struggle with a tiny bit of configuration addiction, start a maintenance schedule.

For instance, I spend three months thinking about changes that I want to make to my system and to my Neovim config, and then I make all of those changes in one day. That way, I don’t constantly spend a bunch of time obsessing over perfection.

Also, again, as with any script that you run, please read through it and make sure you understand what it’s doing before you run it.

I'd like to leave you on this note

Perhaps, in the pursuit of maximum productivity, we’ve lost touch with what it means to be truly productive. Perhaps all of this configuration is a waste of time, and perhaps it is better to accept the fact that some software simply isn’t perfect, and perhaps we should all just cope a little bit.

So with that being said, I’ll be completely uninstalling Arch Linux tomorrow and purchasing a Mac instead. May my corporate overlords have mercy on me.

Top comments (8)

Collapse
 
shricodev profile image
Shrijal Acharya

echo "Clearing pacman cache"
pacman_cache_space_used="$(du -sh /var/cache/pacman/pkg/)"
paccache -r
echo "Space saved: $pacman_cache_space_used"

Instead of doing it this way, you can enable a systemctl service paccache.timer

sudo systemctl enable --now paccache.timer
Enter fullscreen mode Exit fullscreen mode
Collapse
 
kurealnum profile image
Oscar

That's good to know, thank you!

Collapse
 
aldrian_fdb9dc326681c1ce9 profile image
aldrian

I just star using arch for a few months.
The reason I choose it because it only install required things to run os in my machine and the only things I install manually are firefox, code oss, a requirement for garbage bin, thing about sound and thing about reading an USB/external hardisk.
The only thing I customize are hide all the menu in terminal and context menus as much possible.

Collapse
 
abdel_bolaos_022aa0c4623 profile image
Abdel Bolaños

I think when is mentioned "productivity", is better focus on how setup Arch to just "work" and not how to customize "login screen".
I am able to get a lot of "productivity" in Arch, and one of the biggest advice I can give is:

  1. Install only what is necessary and keep Arch as lean as you can.
  2. Keep it updated once per week.
  3. Choose a desktop environment that works for you and not you work (customize) to it.

BTW, in your script for clean packages you could use
yay -Sccc
To clear all cache of Packman and yay.

Collapse
 
jase_whipp_4ab29bfe32bd5c profile image
Jase Whipp

Your article starts with you love Linux the goes on a journey of building a desktop environment from scratch and ends with your giving up for a Mac. You also mention early on that if someone just wants productivity, they should buy a Mac. This article is super flawed because you as an author immediately kill your article before it begins. Then you proceeded to suggest Arch Linux to what I can only assume would be a target audience of Mac users. No, one does not need to subscribe to Apple to be productive, that might be the most asinine dev article premise I've read this whole year. There are numerous distros that are better suited to this purpose than Arch.

Collapse
 
kurealnum profile image
Oscar

It's just a bit of sarcasm 😄

Collapse
 
larastewart_engdev profile image
Lara Stewart - DevOps Cloud Engineer

Why not run that script using a cronjob instead of doing it manually each month?

Collapse
 
kurealnum profile image
Oscar

I want to make sure everything works after an update. Nvidia drivers have a habit of being a little bit self-destructive every now and then.