Software tips for nerds

17. 01. 2020 | Jakub Kadlčík | EN desktop fedora vim vimwiki software

This article should rather be called What software I started using in 2019 but I just didn’t like that title. It is going to be the first post in a yearly series on this topic.

Admittedly, I have unconventional preferences on the user interface of applications, that I use daily. It manifests itself in a strong Vim modal editing addiction, tiling window manager and not having a mouse on my desk. I figured, that this series might be useful for other weirdos like me. Also, it will be fun to look back and see the year by year progression.

See /r/unixporn if you are aroused by these kinds of pictures.

My daily driver is Lenovo X1 Carbon, that I use almost exclusively for DevOps tasks. It has only 13” display so I usually go one maximized application per workspace. This is very conveniently achievable by using a tiling window manager, in my case Qtile.

Now, what changed in 2019? Quite a lot …

Vim for everything

I use Vim for almost a decade now, which is probably the longest I’ve sticked to some application. During that time, I repeatedly tried to use it as an IDE but inevitably failed each time. Let’s remember eclim as my Java IDE. I work almost exclusively on projects written in Python, which can be beautifully done in Vim but because of a gap in my skills, I was reliant on PyCharm. Thankfully, not anymore.

My biggest issue was misusing tabs instead of buffers and poor navigation within projects. Reality check, do you open one file per tab? This is a common practice in other text editors, but please know that this is not the purpose of tabs in Vim and you should be using buffers instead. Please, give them a chance and read Buffers, buffers, buffers.

Regarding project navigation, have you ever tried shift shift search in PyCharm or other JetBrains IDE? It’s exactly that thing, that you wouldn’t even imagine but after using it for the first time, you don’t understand how you lived without. What it does is, that it interactively fuzzy-finds files and tags (classes, functions, etc) that matches your input, so you can easily open them. In my opinion, this unquestionably defeats any other way of project navigation like using a file manager, NerdTree, or find in the command line.

Fortunately, both of these problems can be solved by fzf.vim, which quickly became one of my most favorite Vim plugins. Please read this section about fzf plugin.

I am forever grateful to Ian Langworth for writing VIM AFTER 11 YEARS, EVERYTHING I MISSED IN “VIM AFTER 11 YEARS” and VIM AFTER 15 YEARS articles. If you are a Vim user, those are an absolute must-read.

Urxvt

Although I spend a considerable amount of my work time in a terminal, I couldn’t care less what terminal emulator I use. The majority of them support the exact same features and in the end, you are just sitting there and typing commands into a black screen.

After migrating from PyCharm to Vim, my time spent in the terminal increased even more. Thinking about it, I use terminal and web browser. That’s it. Up until this point, I’ve been using gnome-terminal because it comes preinstalled with Fedora. While it is a perfectly fine piece of software, for me, it’s customizability sucks. I just don’t want to configure my core tools by clicking in a settings window. It has limitations, it is harder to manage in git, and so on.

Ultimately, the last straw that made me abandon gnome-terminal was its inability to use third-party color schemes. Among many others, there is a great project called base16 which defines palettes of colors for creating beautiful schemes and then provides configurations for countless applications. For most applications, the process is very simple. Put a color scheme file into an expected directory, then edit the config file and specify, which scheme you want to use. Unfortunately, it doesn’t work that way for gnome-terminal. You need to run a hundred-line bash script and possibly do other shenanigans and hope for the best.

Currently, my terminal emulator of choice is Urxvt (aka rxvt-unicode). Here comes my sales pitch - Urxvt is an old, ugly-looking application with a horrible user interface. How about that? Joking aside, it looks terrifying at first sight. However, it can be easily configured through ~/.Xresources and with very little effort, it looks as beautiful as the terminal can get.

Color scripts from stark/Color-Scripts

Tmux

Tmux is a terminal multiplexer, tmux is a replacement for GNU Screen, tmux is steroids for your terminal, tmux is the greatest thing since free porn. You. Want. Tmux!

It allows you to:

Recommended read - Boost Your Productivity In The Terminal With tmux

Weechat

The IRC protocol supports only plain-text communication. Sharing images, videos or audio can’t be done directly, but rather by uploading it somewhere and embedding a link. That being said, there is no reason to not use a terminal client. I’ve finally migrated from HexChat (and previously XChat) to Weechat.

My weechat configuration looks quite chaotic in a small window like this. It is optimized for fullscreen.

Newsboat

RSS is a well-known method for subscribing news feeds from various websites. It appears to be stupidly simple to use and it is the most effective way to keep an eye on interesting articles. So why I haven’t been able to use it? My typical pattern was - Why don’t I use RSS? Then installing a client, subscribing some feeds, being happy, then forgetting that I have an RSS client. And then going back to step one.

Newsboat with a panel indicator seems to do the trick for me.

Vimwiki

What is your current system of taking notes and managing to-do lists? Or do you even? For the longest time, my approach was to remember everything. Surprisingly enough, it worked fine throughout high school, college and all my previous jobs. However now, as I am growing older and my responsibilities increase, the beloved “if I don’t remember it, it wasn’t that important” philosophy is just not sufficient anymore. Also, repeatedly excusing myself during a work meeting, that I forgot to do something, was just unprofessional.

Well, where to keep notes and to-do lists? There is a gazillion of tools for desktops, smartphones, and everything. Apparently, they are even still making sketchbooks. Like … from paper. Who would know? Anyway, I had some criteria.

  1. In my team, we have week-long sprints, so I want to track tasks for that period. While I want to write detailed information about them, as well as fragmenting them into sub-tasks, I am not interested in specifying attributes such as explicit deadlines, locations, projects, etc.
  2. There may be tasks, that need to be done some specific day, so it would be useful to have also a page for each day.
  3. No mouse! Tools that require me to click on buttons to create tasks, or dragging them with a mouse to reorder is a hard no-go. This is not negotiable.

I’ve been using Joplin for some time. It allows you to simply create notebooks and notes within them. Each note is a markdown page and you can do whatever you want in it. Joplin was serving its purpose, but I didn’t really enjoy using it. First, it is written in Javascript and bundled with Electron, so it is kinda slow and clumsy. I was also missing my Vim key bindings (it has Vim mode now, so it shouldn’t be a problem anymore), and finally, it used a different color scheme than the rest of my system. Which, simply speaking, bothered me. This could have probably been solved by using its CLI interface, but then I discovered and migrated to Vimwiki.

I would say, it has the same exact features, but it is a Vim plugin.

Notes and long term ideas on the left, weekly plan on the right