Epistemic Status: lotus Blooming — This is all subjective opinion, so take it with a grain of salt and feel free to disagree with me. But don’t be afraid to try something new. You just might find you like it.


I use a lot of tools in my work as a software engineer. Some of them go unnoticed, or I’ve started using them and forget about them. I’m like a professional that sometimes forgets to tell those they teach about the techniques or tools that they’ve used their whole career because they used them so much that it’s just become second nature.

This is an attempt to correct that by taking note of what I use. Some of this is also to help me remember what I use, or to note down something I want to start using.

I tend to prefer free and open source software, but I’m pragmatic and willing to use the best tool I can find for the job. If it’s worth it, I’ll pay for it, open source or not.

Command Line Tools

These are CLI tools that I use every day or in various projects. It’s by no means exhaustive1.

  • fish - The friendly interactive shell. Yes it’s not bash compatible, but if I need that, I’ll run bash. For an interactive shell I think fish can’t be beat, and if it ever is I’ll switch. The auto-completion is the best I’ve seen and I miss it any time I can’t use it.
  • starship - A shell prompt configuration tool. I find this easier to use than hacking on my prompt directly. It also has decent defaults for most of what I use.
  • exa - A replacement for ls. I just alias ls to exa in most cases. There are situations where it can have worse performance because it stats files.
  • just - A task runner and a nice substitute for make. I do have to install it everywhere, but it has a nicer UX. I’d like to subsume this functionality into my per project Nix flakes, but I haven’t sat down and looked into that.
  • direnv - I use this with Nix flakes to set up language specific development environments in a reproducible way. It can be used in other ways though, but I usually just use it for this.
  • nix - Technically I use this all the time, since it’s the command used by Nix and NixOS.
  • lychee - This is a link checker I use for my blog. Anytime I deploy a new version, all the links are checked to make sure they haven’t died, that way I’m not leaving bad links around, because I hate when that happens.2
  • frogmouth — “Frogmouth is a Markdown viewer / browser for your terminal, built with Textual”. I’ve been using various terminal Markdown viewers over the years, and this one is the latest that I’m giving a try. It seems nice enough so far. It also looks like a nice demo of what Textual can offer.
  • typst — “Focus on your text and let Typst take care of layout and formatting”. This seems like a new take on the space that is in, but with a more approachable syntax. I’ve tried for years to get my partner to use something like for her academic work, but her area of study is History and that field among others usually sticks to Word. This might be a better fit for those fields (as well as Math and Computer Science where currently dominates). I’m putting this under CLI tool, because I don’t expect I’ll use their web app version, just their open-source version CLI too.
  • tup - I haven’t actually tried this yet, but the idea intrigues me and I keep forgetting its name so I’m listing it here. “Tup is a file-based build system for Linux, OSX, and Windows. It inputs a list of file changes and a directed acyclic graph (DAG), then processes the DAG to execute the appropriate commands required to update dependent files.”

GUI Tools

These run the gamut from IDEs and editors to browsers.

  • Pretty much any Jetbrains IDE. At my first job, they had us use IntelliJ for our work. Not that I couldn’t use a different editor, but it just was easier to use what everyone else was using. When I moved to Atlassian to work on Bitbucket Cloud, I tried out PyCharm to see if it was good enough. I was surprised by how well it analysed the code. I think IDEs get a bad rap and one of these days I’ll explain my rational for why I use them3.
  • Emacs - the venerable GNU editor. I learned to use this when I was in my Lisp phase and using Clojure a lot. Remapping Caps Lock to Control was the best decision I ever made, and it came out of this, and a reading of the blog post The Modern Space Cadet. I should probably also mention Doom Emacs. I used to manage my own configurations, usually in an Org Mode literate file, but I found that Doom Emacs just has almost exactly what I want, so I switched and haven’t looked back. I, of course, removed the evil module because I prefer Emacs key bindings.
  • Vim - the other editor, though I guess that’s a matter of perspective. I used this before I used Emacs, and I had the same experience with it as a I did with Emacs. I hated it at first4, and then learned it and liked it.
  • Firefox - I’ve used this since it was called Firebird. There was a short while that I used Chrome, but I prefer to use things that aren’t written by an advertising company.
  • Obsidian - This is a personal knowledge base, based on simple Markdown files. I’m using it to power this website. I like it because its Markdown editor is one of the best I’ve seen (a wonderful combination of WYSIWYG and text editor), and it works like a personal wiki. I can reference pages that don’t exist yet from multiple places, and the moment I add that page (by just clicking one of the dead links), it instantly connects them all together correctly. I’ll write up how I use it at some point, once I’m sure the way I’m using it will stick.

Online Tools

I believe you should pay for services you use5. These are a few services I’ve switched to from “free” platforms. I’m still in the process of switching others.

  • Proton Mail6 - This is the Swiss hosted email service provider. They now provide a cloud drive, and a calendar, all with a focus on security and privacy. I moved my email here from Google Mail by way of Hey, and you can read about why I switched from Hey to Proton Mail.
  • Kagi - A search provider. They also have a browser but I still prefer Firefox.

Why pay for a search provider?

Why pay for a search provider when there’s Duck Duck Go? Duck Duck Go is great, and I still occasionally use it, but if I want to make sure my interests and the interests of my search engine are aligned, then I ought to be paying for it. In an ideal world this would be a public good, but we’re not in an ideal world.

  • Omnivore - “the free, open source, read-it-later app for serious readers”. I just started using this, so the jury is still out on it. Seems useful.
  • Google Web Font Helper - rather than use Google Web Fonts, which are just a way to get web site owners to host Google’s ad spyware (nothing is provided for free from Google), this tool helps with taking those fonts and self-hosting them. I’ve used that for my font needs on this site.

Operating Systems

I mentioned some of this in the Technologies That Excite Me section.

Footnotes

  1. That exhaustive list would be in my NixOS configuration, since by adding it there once I don’t have to remember to install it on any system I use again.

  2. There’s another tool called xrefcheck that I’ve come across that seems to do the same, but I haven’t taken the time to check it out yet.

  3. Language Server Protocol is improving the situation for bringing your own editor, but they still usually miss key features that IDEs can provide (e.g. navigating a codebase by symbol or class name). The dumb part is, these features are in the spec. It’s probably just that no one realizes what they’re missing and doesn’t know to ask for it from server implementors.

  4. Like a lot of people, my first experience with Vim involved reading some Linux HOWTO and being instructed to use it to edit something and then not knowing how to hell to exit the thing. This was back in the ’90s. The really funny thing is, if you try to use the Emacs exit shortcut (Ctrl-X Ctrl-C) in Vim, it will tell you how to quit “correctly”.

  5. That’s assuming you can afford it, of course. If you can’t put food on the table, then you have other priorities and by all means use whatever you can get.

  6. Technically this is all now Proton, since they re-branded, but I still to refer to it this way most of the time.