My Desktop System Tools

In this post, I will go over how I setup my desktop system for programming and general media usage. Please note that this setup is heavily keyboard driven since I rarely use the touchpad or the mouse except maybe for web browsing or graphics software.


My main machine is a 2017 Thinkpad X1 Carbon. I like it for it’s small size, light weight, and Linux support. It is mainly a programming machine for me. It doesn’t contain a dedicated graphics card so it has low power consumption and zero issues with Linux in that regard (no fan noises). Although, I may have some issues with the quality control of the machine.

Operating System

My operating system for years has been exclusively GNU/Linux (to the point that now I get confused if I tried to use a Windows 10 machine). I have used and tried many many distributions of Linux be it Debian based, SUSE based, Red Hat based, and finally Arch Linux based systems. I have had my fair share of distro hopping along the years. However, Arch Linux has been on my machine for the longest time without a reinstall compared to other systems. Although known as a rolling release system, Arch Linux has been very stable on my machine with almost zero issues even though I don’t do system updates on a regular basis (I update the system whenever I remember or when I can afford to restart my machine). The benefit of using Arch Linux is that it is bare bones so I can customize it however I want. Also, the benefit of always having the most updated software is a great feature.

I wrote a comprehensive guide for installing Arch Linux on GitHub.

Desktop Environment

The Linux world and the free software world in general have a great variety in the available tools and software. This includes the desktop environments. I have tried many desktop environments as well and finally got to the point that no desktop environment is the best desktop environment. Well, that’s not totally correct. A desktop environment is a nothing but a bunch of tools bundled and installed together. These tools include things like the graphical use interface with a tool bar and a system tray, an app finder, a window manager, a file manager, notification daemon, a login session manager, and so many other tools for various tasks. The issue here is that each desktop environment installs so many packages that are probably not at all needed by everyone. For me, I like to use certain tools that may render desktop environment default installed tools redundant.

This is the reason I turned into using minimal tools to manage my desktop and thus, creating my own desktop environment (sort of).

For starters, my graphical user interface is rendered and managed by the X11 windowing system. Although, Wayland popularity is rising, most of the current Linux GUI software is compatible with the X protocol.

To manage my windows, I use a tiling window manager; one that tiles the windows next to each other by default instead of stacking them on top of each other. There are many window managers that operate differently. The most popular window managers are i3wm, Awesome, and XMonad. I suggest starting out with i3wm and experimenting from there. My window manager of choice is dwm. I chose dwm mainly because it’s so minimal and its config file is written in C instead of a special DSL. dwm is a part of a group of tools known as the suckless tools.

Since dwm is minimal, it doesn’t come with a tool bar by default. The user needs to write their own bar. I see most users write an infinite loop in bash and output the data they need into the bar. However, I don’t think this is an efficient approach. I wrote my own bar in Go that schedules each section of the bar to run concurrently. It’s been running on my system for years and I barely feel it running.

My Desktop

Terminal Emulator

Again and again, the Linux world enjoys a great variety of available software. For terminal emulators, my choice has been the st terminal. The st terminal emulator is also a part of the suckless tools and is very minimal and light. It’s configured in C as well. A more extremely fast, full-featured terminal emulator I’d recommend is kitty.

Text Editor

For text editing, I use Vim exclusively. Although, I have been fascinated by the capabilities of Visual Studio Code recently, I always go for Vim for its minimal text editing workflow and the ability to run it inside a terminal emulator session so it’s usable everywhere, be it the desktop or the server. I have written a small series of posts about configuring Vim.

File manager

Since I started with a keyboard driven setup, my file manager should be keyboard driven as well. There are many good CLI file managers. I have been using ranger for a long time. However, I recently discovered nnn which is faster (written in C), minimal, and more modular. I have to say that I cheat sometimes and use Thunar (mainly to manage external devices such as USB sticks and mobile devices).

Media Software

My media software usage is very light. I only have VLC for video and cmus for music. Some people use MPV which, to me, looks like a great option but I have yet to invest some time using it to make the final decision (I will probably update this post with my findings).

UPDATE: I used mpv for a couple of days, tried to configure it but gave up, mainly, because I have enough config files already and I don’t need to worry about different decoders and shaders in order to play media (which is so minimal compared to my day-to-day computer needs).

Final Note

I advise you to experiment and evaluate different tools and try to customize your system to your liking. I understand that the great variety of available tools can lead to some kind of choice overload bias (more options, more difficult time to choose), however; just starting somewhere (even starting out with popular tools) can lead to better evaluation and better decision making.

Finally, if you want some inspiration, you can take a look at my configuration files on GitHub.