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):
or the Doom fire effect, which looks like this:
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.
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!
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:
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.
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)
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
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.
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.

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.
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
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)
Instead of doing it this way, you can enable a systemctl service
paccache.timer
That's good to know, thank you!
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.
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:
BTW, in your script for clean packages you could use
yay -Sccc
To clear all cache of Packman and yay.
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.
It's just a bit of sarcasm 😄
Why not run that script using a cronjob instead of doing it manually each month?
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.