Tools I Use - 2021

 

I wrote a long-winded post over a year ago on the tools I was using at the time.

As far as the rationale for why I choose to use what I use, I couldn’t agree with myself more. One thing I would add is that I prefer low friction tools for my work.

Low Friction

Low friction is the quality of a tool being appropriate for the work yet not getting in your way. This simple phrase ties to a number of other concepts such as “power” (in the programming sense of a powerful abstraction) and Unix extensibility. It doesn’t mean introducing abstractions that make easy tasks trivial and involved tasks disproportionately more complicated.

This recognition of the long term value of a particular approach, tool set, or paradigm is often missed in computer science education in favor of making the process superficially easy for novices. We should strive to keep systems and tools as simple and “real” as possible instead of adding layers of abstraction that make it harder to build further understanding and skills later on.

Tools I Use

I’m still mainly using arch, yay, the basic coreutils, and conda for data science and other work. I’ve since swapped out a lot of the other tools I was using for better, more minimal, more extensible, and/or more configurable alternatives. I’m not going to go into everything here, just a few highlights.

Shells, Languages, and Shell Tools

  • zsh: I recently switched from bash to zsh for my login shell. I don’t hate bash, but I find zsh to be more ergonomic for the purposes of a login shell. I still use a narrowly POSIX compliant shell for /bin/sh
  • julia: I have been using/learning Julia for a short time. In addition to using it as a full fledged language, I use a dropdown Julia REPL for what I used to use xonsh for. Julia is a great example of a low friction data science tool. More on Julia to come.
  • fd: a clean alternative to find
  • ripgrep: grep multiple files recursively. I used to do this with GNU grep and shell scripting, but rg is much nicer.

File Managers

  • lf: switched from ranger to lf a long time ago. Lf has a very similar interface to ranger except it’s better and faster. I use dragon for drag I/O support and pistol for previews.

Text Editors

  • kakoune: I switched from neovim to kakoune a while ago. Kakoune has an implementation that feels much simpler and less cluttered than vim or neovim. Kakoune is also a lot easier and cleaner to configure. Kakoune feels like what vim is trying to be, and I think for people new to linux going from vi to kakoune would in some ways be easier than going from vi to vim.

Graphical / UI

  • st (xst): I’m still using st, but I use a fork called xst. I use this fork because it has what I want and I don’t want to manage an st build.
  • bspwm: I switched from i3-gaps to bspwm. This simplified my system a lot, now sxhkd handles all of my hotkeys instead of only most of them as with i3.
  • polybar: I still use polybar and my polybar rice looks the same as it did in 2019 aside from minor updates.
  • rofi: switched from dmenu to rofi a long time ago. Rofi is extensible and easy to configure. Rofi is more suckless than dmenu.
  • qutebrowser: I still use qutebrowser as my main browser. I have more script integration now which reduces friction while using the browser.
  • buku: I still use buku, now it’s nicely integrated with rofi and qutebrowser. One of the few user facing programs I use that are written in Python.

Media

  • mpd+ncmpcpp: I barely listen to music on my computer, and when I do it’s usually a music video with mpv. I want to switch to a simple standalone player like cmus in the future.

Other stuff

  • Main desktop config
  • I’m playing around with FreeBSD on an old macbook pro in my downtime, still working through some issues getting everything working.
  • I have a pinephone running alpine linux that I’m playing with as well, I released my basic dotfiles on github recently.