My Laptop Setup

August 16, 2019 Personal 7 minutes, 42 seconds

I am running a Lenovo X1 Carbon 6th Generation1 with following specs:

  • Intel Core i7-8550U processor (8 MB Cache, up to 4,00 GHz)
  • Intel UHD-Grafik 620
  • 16 GB LPDDR3 2.133 MHz (solded)
  • 1 TB SSD, M.2 2280, PCIe, NVMe, OPAL 2.0-enabled
  • 35,6 cm (14") WQHD (2.560 x 1.440), IPS, anti-glare, 300 cd/m²
  • Schwarz
  • Intel Dualband-Wireless-AC 8265 (2x2) WLAN
  • Fibocom Cat9 L850-GL 4G LTE

My first Lenovo Laptop was the superior x220 and I was totally impressed by its lightweight formfactor and its performance. My father is still running it today (as of June 2019)! I was so impressed that I even upgraded just after one year to the successor x230 that was my main working machine until May 2019!

At this point I was totally commited to run Lenovo laptops for two main reasons:

  1. Lenovo's trackpoint. I am almost as fast as with a real mouse by using the trackpoint despite my workflow being heavily keyboard centric.
  2. Lenovo's keyboards are top notch! The classical ones even more than the newer chiclet ones but still top notch! I even replaced my keyboard of the x230 with an old one :)

Of course there are more reasons like excellent performance, build quality, and the classical look

Besides my x1 I use an ErgoDZ EZ keyboard, a Logitech MX Anywhere 2S in midnight blue, a Panasonic Bluetooth RP-HD605NE-K9. For more ports I use the Inateck USB C Hub USB C port replikator.

I am running the i3wm flavor of Manjaro Arch Linux.

In my opinion Manjaro is the best desktop operating system as it provides a good balance between the bleeding edge of pure Arch and the stability of non rolling release distributions like Ubuntu.

Furthermore, Pacman and the AUR provide basically packages for every software you can imagine. Therefore, I do not have to worry about different installation mechanism mechanisms like manually or via pip. Everything is managed by the system's package manager

Last but not least, the Arch community does a superior job in creating documentation and helpful articles. In my opinion it is the biggest knowledge base of a distribution that is often also applicable for other distributions.

Currently, I am not running a Desktop Environment (DE) like KDE, Gnome, XFCE, etc. As mentioned earlier I am running a Window Manager (WM) named i3wm. A window manager is usually part of a DE and is responsible for the management of windows within a graphical user interface.

An impression of my setup:

Please have a look at CLI-Applications and GUI-Applications for additional applications I use and recommend.

PIM manages my contacts, calendar and mails. Currently, my tasks are tracked just in a simple markdown file.

The goal here is to keep my data local and in plain text files to be able utilize powerful text operations. Therefore, there are tow components necessary: One to sync all data to servers so that my mobile is up to data as well and one to display the data.

For synchronizing form servers to my disk and vice versa I use the following two tools: isync and vdirsyncer. Both tools speak common protocols like CaldDAV (calendar, CardDAV (contacts) respectively IMAP (mail).

For displaying and interacting I use khal (calendar), khard (contacts), and mutt (mail)

My main editor/IDE is a heavily customized Neovim a fork of the infamous Vim. From time to time I also use the Insiders build of Visual Studio Code for instance for debugging. At this time VSC is the best graphical editor/IDE available. My config and plugins are described here and here.

My workflow is mainly terminal based. Except browsing the web I spend most of the time in front of a black window :) To enhance my experience I use some awesome tools.

Let's begin with the shell itself. I am using zsh with Fish-like autosuggestions for zsh, zsh-syntax-highlighting, and zsh-completions. Additionally, I created some dozens of aliases in order to fast execute commands or remap old commands to the new executables. Another important feature of each shell should be a sane history configuration meaning an unlimited history file, shared history between sessions and immediately appending items to the history.

As terminal I use termite which is very fast, minimalistic and keyboard-driven.

In order to move around and find things fast in my terminal there I use a couple of commandline tools. The most important tools are fzf and fasd. fzf allows you to quickly fuzzy find files and folders and search your history. Due to the ability to stdin to fzf the customizations are nearly endless.

Here you can see fzf find invoked by Ctrl+t. Notice also the preview window on the right side. By hitting Ctrl+o I can open the selected file in my editor or by just entering the path to the file is entered at the cursor in my terminal. As I said the possibilities are endless and you should really give it a try. There is also a Vim integration.

fasd allows you to quickly jump to folders by indexing and weighting your visited folders. With fasd you don't need to enter the full path of a folder as it also works with fuzzy matching. It is often enough to just enter the folders basename ignoring the full path and fasd will do the rest

find, grep, ps, cat, and ls are well known tools as Linux user. They are preinstalled on each major distribution and are for sure the first tools one would to learn. But there are some alternatives which provide good defaults, are faster, easier to use, looking better, and trying to achieve compatibility to the original programs' arguments and flags.

original alternative
find fd
grep ripgrep
ps procs
cat bat
ls exa or lsd

Nevertheless, I strongly recommend to learn the original tools as you cannot assume to find those replacements on each system!

I am a keyboard fan. For the things I do the keyboard is the primary input method as most of the time I handle with some form of textual data. Actually, my main reason for switching to a Linux OS back in 2009 was to be able to operate my Laptop with my keyboard only because I always forgot my mouse. After some years of fear of Vim, caused by not being able to quit it, I decided to give it a deeper try not aware of the impact of my style of work!

Since that my usage of Vim improved a lot and I discovered and still discover new features every day. Furthermore, Vim's modal editing approach inspired me to only use applications that support Vim-like key bindings. In my opinion the productivity highly increases when not just using keyboard shortcuts but also barely leave the Home Row. Vim-like key bindings strongly support not this pattern on regular keyboard layouts[1], I decided to give it a deeper try. My skills in using Vim improved a lot and I discovered and still discover new features every day. Furthermore, Vim's modal editing approach inspired me to only use applications that support Vim-like key bindings. In my opinion the productivity highly increases when not just using keyboard shortcuts but also barely leave the Home Row. Vim-like key bindings strongly support not this pattern on regular keyboard layouts2 like qwert[z|y].

Here is a not comprehensive list of applications that support Vim-like key bindings:

  • Vim Vixen → a vim plugin for firefox
  • mutt and neomutt → mail clients with vim key bindings
  • vifm and ranger → file managers
  • zathura → keyboard driven lightweight pdf viewer
  • newsboat → terminal RSS reader
  • sc-im → ncurses spreadsheet with Vim's modal editing
  • sxiv → an image viewer
  • qutebrowser → keyboard-focused web browser
  • tig → a git ncurses interface
  • every major IDE/editor like Visual Studio Code, Intellij IDEA, Eclipse, etc. can be extended with a Vim plugin

Another aspect which is quite controversy is my preference when it comes to multi monitor operation. I don't have one! In my opinion I can work best by only focusing on one screen with one maximized window and optionally panes like Vim's split view. I find it way to distracting working with two or more monitors to properly identify which window is active, where my mouse is and always turning my head in the right direction. In order to be productive with just one screen I have some rules that are anchored in my subconsciousness:

  1. Use virtual desktops and strictly order them e.g. on my first desktop is always my web browser
  2. Use shortcuts to efficiently switch between desktops
  3. Use shortcuts or a tiling window manager to be able to easily tile two windows on one desktop if necessary
  4. Use a launcher application to start applications fast
  5. Use less bloated applications to reduce GUI elements and focus on content
  6. Use a drop down Terminal like Yakuake for quick terminal tasks without modifying your current desktop
  7. Let the WM handle the window management ;)

  1. I am not sponsored by any company in this article 

  2. I cannot speak for dvorak, neo, and other special layouts