Table of Contents:
- OS distribution - Archlinux
- System configuration - dotfiles
- Window manager - i3wm
- Terminal multiplexer - tmux
- Shell - zsh
- Editor - vim
- File manager - vifm
- System-wide interface - dmenu / rofi
As I spend significant amount of time working with computers, it's important to me to have a desktop environment which does not distract me from work.
Moreover I expect my system environment to help me be more productive and to complement my habits in context of how I interact with the environment.
In this post I'm gonna describe how is my linux installation setup and main tools I use on every day basic for past 6 years and why.
Do not expect configuration tutorial but rather high-level toolset overview.
OS distribution - Archlinux
As majority of current
Arch users, I started using
Xubuntu (Ubuntu with
xfce desktop environment instead of
gnome) as my first
UNIX based OS.
Xubuntu was certainly better than
Windows as it allowed me to "hack" it around and more importantly, it had a proper
However, at the end of the day, it was my unorthodox doing that led to all kind of crashes during system upgrade and ultimately was forcing me to reinstall the system.
Ubuntu is a robust preconfigured system made for general public, not necessary for developers, serving as out of the box conventional desktop everybody is familiar with.
It wasn't until some years later when a colleague of mine introduced me to
Archlinux distro, that solved most of my issues.
These are Archlinux features that make it a superior distribution for me personally:
- It includes base system only and its up to you to install and configure everything else that you need.
- Arch uses rolling release system as opposed to Ubuntu's discrete release system - this means that packages are always up to date, you don't have to wait 6 months for system upgrade nor use custom repositories with updated package versions. This is a big one for me!
- Its WIKI pages are far from any other knowledge base available. They provide comprehensive and well-arranged information about
Linuxin general. Its my GO-TO information source for
System configuration - dotfiles
All configuration files are tracked in (public)
git repository and reside in single
.dotfiles directory (check it out if you want to see how something is configured).
In there, configuration files are organized in separate folders by topic and symlinked into
$HOME when you run
This makes it really simple to add and edit configuration and when you need to reinstall once in roughly 5 years, you run single command to get everything setup exactly how it was before.
Window manager - i3wm
i3 is a tiling window manager.
Tiling window managers organize windows in a grid of tiles so that 100% of the screen space is always in use.
Note: You can still have classic floating windows but those are almost always redundant.
Usually, the user creates, deletes, moves, resizes or focuses windows with shortcuts (in addition to mouse navigation). Mine are defined in such way so that they match vim-like window manipulation mappings:
|Focus left window||Super+h|
|Focus right window||Super+l|
|Focus up window||Super+k|
|Focus bottom window||Super+j|
Since I use
Vim as my main editor, having the same shortcuts that do the same thing globally at system level, not just in the editor, makes it really convenient.
I'm too lazy to travel with my right hand from keyboard to mouse and back just so I can focus different window...
There are also 10 workspaces available which can contain different running applications. I switch between them with
Terminal multiplexer - tmux
tmux is a terminal multiplexer. It lets you switch easily between several programs in one terminal, detach them (they keep running in the background) and reattach them to a different terminal.
Shell - zsh
What makes zsh superior to regular
bash are its
Lets look at some examples:
The grey text behind cursor that you can see in the preview suggests best matching command based on what you have typed so far and on your shell command history.
You can accept suggested command anytime with
Moreover if you want to see list of available commands or arguments from man pages, you just press
Also you can notice that
git command is highlighted with green-ish color - that signalizes that command is recognized and the shell can find appropriate file with executable flag.
I also use some navigation tools that make a shell whole a lot more intuitive:
z: jump around
ztracks your most used directories, based on 'frecency'.
After a short learning phase,
zwill take you to the most 'recent'
directory that matches a pattern given on the command line.
In addition to
z, I've configured number aliases
2...and so on to
cd -2... which change your current dirrectory to the previous one.
Ctrl-R: search command history
This utility plays really well with the other
zshfeatures as it complements completion of more complex commands that I rarely use and can't quickly type out off the top of my head.
Editor - vim
vim does not need an introduction. Everybody in the field has at least heard of it. And if I exaggerate a bit, its either the greatest piece of software or source of fear and frustration.
It's out of the scope of this article to go through individual mappings and plugins I use.
However if you want to see the plugin list, its available HERE.
What are those fancy arrow-like UI segments? You are asking... Those are custom status lines for
zsh, powered by powerline plugin.
File manager - vifm
vifm is a curses based vim-like file manager.
Total Commander but better.
If you use
vim, you will love
System-wide interface - dmenu / rofi
If you got all the way down here, you may be asking where are some buttons, where is my system bar with time and tray area with application icons or start menu? The answer is simple, there are not any.
I have found out I do not need any system wide status bar with icons and basic information like date-time etc... It would be wasting of screen space the most of the time anyway and source of distraction.
So how do I start applications, turn off the computer, connect to wifi or manage removable devices like usb flash drives, you are asking? I use
What is dmenu and rofi
dmenu is a dynamic menu. The user gives it possible menu options as the input, and it creates a graphical menu with one item per line. The user can then select an item, through the arrow keys or typing a part of the name, and selected option is returned as the output. The user then takes the output, lets say it's
Power-off and implements the action - powers down the computer.
rofi is more powerful
So in practice, applications are built around
dmenu that are focusing on single task, like system power management, wifi connection, mouting/umouting removable devices etc...
You bind the application to a shortcut (or button) eg.
Super+m and dmenu will popup a list eg.: of connected flash drives that you can mount or umount.
You can comment directly below, but you would need to authorise the Utterance's app to post issues to GitHub on your behalf.