Tools I use

November 30, 2020


It should be no mystery that tooling is a big part of anyone working with computers. They can make a huge impact on your workflow and productivity.

I decided to maintain a list of the tools I feel define my workflow, focusing on the tools that I don’t see used as much by my peers (e.g. I don’t list my browser or anything commonplace):

  • NixOS
    I used macOS heavily for at least 7 years. Before that, I was one of those guys always testing dozens of Linux distros. Fast-forward to 2019 and I decided to get a non-Apple laptop, and the distro I landed on was NixOS. There are many websites out there preaching the gospel of NixOS. For me all boils down to very few things:

    • Reproducible, text-based configuration of the system (from what packages are available to the configuration of services and kernel modules)
    • I feel more confident making changes to the system because if I fuck up, and I often do, I can easily rollback to a previous working state.
    • I feel free to try all kinds of software (from small apps to full-blown desktop environments) without ever feeling like I’m polluting the OS. In other distros is very easy to install lots of stuff that one forgets to then uninstall.
      • Using nix-shell -p, or nix run, and trying out apps that I might never use again without fear of that breaking something else is liberating
  • kitty
    A very fast terminal emulator. These are the things I like about it:

    • It is GPU-accelerated. Super responsive and smooth scrolling.
    • Supports multiplexing (think of iTerm) out of the box, so you don’t need to use tmux.
    • Supports images
    • Comes with a handy side-by-side diff viewer.
    • Easy to open links on a buffer without using the mouse.

    The only complaint I hear from people I recommend this to is that you need to configure it by editing a file (no GUI). It’s worth though.

  • ripgrep
    Like grep or ack but orders of magnitude faster.

  • fd
    A simpler, faster alternative to find.

  • trilium
    This one is a bit hard to define so here’s a brief summary:

    • On the surface, it is a note-taking app
    • It’s meant for power users though; it allows you to script functionality from within the app. You create Javascript “notes” of “code” type and alter the functionality and UI of the application. Mind blowing.
    • It can work locally, but it can also run as a server which one can self-host (which is what I do). That means you can run the UI as an app (with all the performance benefits of it), but still have the option to fallback to use it through a web browser (where you get the very same UI)
    • The scripting API is comprehensive, and it even lets you run web endpoints that are served by the Trilium server
    • Even theming is done via special notes that you annotate as themes.
    • The author also wrote a web clipper that sends whole web pages to Trilium, so you can collect/bookmark websites, edit them, annotate them, etc.
  • nextdns
    One of my favorites. This is a DNS server provider that has ad-blocking built in (at the DNS level, of course). Think of PiHole but less cumbersome to use (no self-hosting). They offer a plethora of integrations (from the most common operating systems to browsers, mobile support, or just DNS servers). It also keeps a log of the DNS queries, lets you build deny/allow lists, shows you basic analytics (% of requests blocked, for instance).

    I used them when it was in beta, and the moment they started charging for it I paid them a year in advance without hesitation. It’s that good.

  • k9s
    A better way to interact with Kubernetes clusters. kubectl is OK, but if you need to work with Kubernetes daily and keep an eye on those pods, then k9s is going to make your life way easier.

  • barrier
    Allows me to control two (or more) different operating systems with a single keyboard/mouse. It makes it look like the other systems are additional screens.
    I found this to be super useful because I have a very old, but still powerful Mac mini from 2013. It runs macOS and has a huge screen (which uses a plug for which my laptop has no port).
    So I use it as a secondary screen, mainly to run kitty and ssh back into my laptop (and also for browsing and listening to music as the speakers are way better than my laptop’s).
    I really like the workflow, plus it gives me the option to run software for macOS should I need to.

  • vimium
    Makes web navigation faster by reducing the time I spend using the mouse. This and uBlock Origin are the two plugins I install on any new browser.

  • jq
    This is a must-have. jq is almost a language in and of itself and allows you to filter/massage/manipulate JSON documents. It is 100% worth learning its syntax and how to operate it.

  • miniflux (self-hosted, web app)
    A very minimalist RSS reader that does what it is supposed to do and nothing else. I self-host this too.

  • bitwarden (self-hosted, web app + mobile apps)
    A password manager (my replacement for LastPass). Can be self-hosted and I host the Rust server version. It has web-browser extensions and mobile apps.

  • starship
    Customizing the shell prompt is tiresome and boring, and I regularly switch between zsh, fish and bash. starship is a cross-shell prompt that out of the box does a lot. It can be further customized, but I have never done it. The defaults are OK for me.

  • monicahq (self-hosted, web app)
    This one is a “personal CRM” where you can have a database of people you know and track your interactions, etc. It has a basic journal app inside. I try hard to use it, and it is a really good product, but it is easy for me to forget it even exists. That said, I do love the idea and try to keep it up-to-date.

  • httpie
    Like curl but with a friendlier interface and syntax highlighting

  • lnav
    Sometimes you need to inspect log files and cat/grep is not enough. lnav has a bunch of features, but mainly I use for its syntax highlighting, search capabilities, filters, jumping (to next error, for instance).

  • bat
    Like cat but colors the output

  • choose
    A friendly alternative to cut and sometimes

  • hub
    Create Github pull requests, open current repo in the browser, create gists, all from the CLI.

  • fzf
    Enables fuzzy search on the CLI. I use it mainly for searching in the history, but it also integrates with lots of other cli tools (e.g. ktx/kns uses it to let you select the default k8s context/namespace)

  • terraform
    Infrastructure as code. I use this at work, but also all my self-hosted apps are managed by Terraform. It has already saved me a few times. It is very easy to forget how you run a piece of software, what their dependencies are, and the configuration they need, etc.
    Before Terraform, resurrecting my servers from a catastrophic crash was very painful or just impossible. With Terraform I know I can rebuild/fix the infrastructure in a reliable, consistent way.

  • kubernetes (k3s)
    I use Kubernetes to orchestrate all my self-hosted apps. Specifically, I use a light-way version called k3s. It might be like killing a fly with a laser gun, but I already have experience with it from work and it does make it very easy to maintain my servers running.

  • ktx/ns
    Easily switch between kubernetes contexts and namespaces. The more I use k9s the less I need these, but they are still useful once in a while.

There’s a chance I’m forgetting other tools, especially those that are so useful as to be almost invisible. I will try to keep this list updated as I refine them, ditch them, or discover new ones.

To document:

  • macondo


  • Timewarrior/taskwarrior

© 2017 | Powered by Hugo ♥ | Art by Clip Art ETC