Everyone who uses computer majority of their time should strive to use their tools as efficiently as possible. Though the following – my setup – may look complicated, all its parts are quite simple. They were just put together gradually over the span of many years and will change when better alternatives appear.

The system consists of the latest version of Ubuntu ↗ but with a tiling window manager called AwesomeWM ↗.


There are many Linux distributions to choose from. I use Ubuntu for adoption – there are simply many people using it so majority of small issues get eventually fixed. It can be setup easily from windows to have both systems so attempting transition does not mean losing the other system. For less technically included, I’d recommend Ubuntu without the different window manager (described later). For technically inclined individuals I’d recommend Arch Linux ↗ (where you setup everything manually).

Window manager

The first thing people notice is that the system “looks” different. This is fault of window managers. They take care of laying out your windows and displaying system menus. So Debian or Arch could looks the same as my setup if they used the same window manager. The main difference between distributions is its package manager – the canonical way you install software.

Ubuntu comes with a preinstalled GDM ↗. When you install another window manager they live side by side and you may choose which one to activate in the login menu.

I use AwesomeWM ↗ – a tiling window manager, i.e., you do not drag and scale windows yourself but they are automatically tiled onto the window. Many people I know use i3 ↗ which looks like a reasonable alternative, it seems to have wider adoption, but I’m already used to mine so I will switch only if I have to.

For configuration I use altered configuration by lcpz ↗ on Github. As a theme lcpz lists many options of which I use slightly altered powerarrow ↗. My configuration is not public, this may change in the future.

Each screen has 9 desktops and they are changed on each screen independently of the other screens. Moving windows between screens and desktops or changing their positions is all done via keyboard shortcuts. Majority of the shortcuts are hidden under Mod key – the one with windows/mac logo.

I use ARandR ↗ to switch between having a single or more monitors on side-by-side or mirrored display. This is not automatic, but at least the program allows you to save the setup as a shell script that is easy to invoke.

To invoke programs or search among open windows I rebound Mod+r to rofi ↗ window switcher.

Terminal and Shell

Further things are not as noticeable. I wanted to have configuration for all things to be in files that I can save elsewhere. This got me to use terminal Alacritty ↗ – it comes with nice features that are somewhat natural if you already use vim.

The flavor of shell you use mainly changes how completion and history is handled. As shell I use zsh with ohmyzsh ↗. This is a significant improvement over the dumpsterfire of default bash. The community ohmyzsh provides a way to setup common features quite easily via plugins. I use:

  • autojump – adds command j <folder> that switches you to a matching folder (that is anywhere on the system)
  • git – show git repository status
  • zsh-autosuggestions – gray autosuggestions just after the command
  • zsh-shift-select – terminal text selection

Along with autojump I found it useful to have scoped commands for my projects. I did not find such a simple tool elsewhere, so I wrote it. See cmd post for details.


List of software that I find useful for various tasks.

I do not use the following often, or at all, but have some idea what I would try.