Skip to main content

Posts

28 posts on the terminal, data, AI and my homelab. Browse by tag or see the archive.

  1. Terminal setup - 2026

    Following on from my list of favourite CLI tools, I thought I would walk through my whole terminal setup. My configs are linked at the end of this article.

    8 min read
  2. Fixing Discord Alerts on kube-prometheus-stack

    My Alertmanager Was Silently Dead for Two Days: Fixing Discord Alerts on kube-prometheus-stack

    15 min read
  3. Managing Talos machine config with patches, mise and hunk

    My homelab cluster, portland, is three Dell OptiPlex 7060 Micros running Talos Linux. All three are control-plane nodes that also run workloads. Everything inside Kubernetes is GitOps'd through Argo CD, but the Talos machine config underneath it was... not. I'd been changing nodes with talosctl patch machineconfig, one patch at a time, and slowly losing track of what was actually on each box.

    17 min read
  4. Intercepting iOS App Traffic with mitmproxy CLI & Web UI Guide

    Intercepting HTTP(S) traffic from a real iOS device is a powerful way to understand what your app (or any third‑party app) is sending and receiving—without Xcode, without re‑signing, and without touching a simulator. This guide provides a streamlined setup process and covers both the command‑line interface (CLI) and the Web UI (mitmweb) for capturing, filtering, and modifying your mobile traffic.

    7 min read
  5. Switching themes automatically in Neovim

    We're going to be using Catppuccin and this setup is generally for MacOS but this idea will work on Linux too. On macOS, you can run this shell command in Lua to get the current system appearance:

    2 min read
  6. Connecting to Forticlient in Omarchy with openfortivpn

    I have found a love for window tile management whether that be Aerospace for MacOs or Hyprland for Arch. They suit my workflow especially on a large 32" screen, I have been playing with Omarchy An opinionated Arch + Hyprland Setup by DHH

    2 min read
  7. Attempting to Master Vim Motions

    I am not a professional developer, but I am a hobbyist one, who knows what the future holds. As a Lead Solution Engineer, I do get to tinker with code in my day-to-day. But it's not my main role, more of a side quest. However, outside of my role I do love to tinker with code and homelabbing. Before I became a Solution Engineer, I spent some time in IT, which meant a lot of time in the terminal.

    7 min read
  8. Supercharge your API workflow with Kulala in Neovim

    If you're a developer like me who lives in Neovim and frequently works with APIs, you've probably bounced between different tools for testing HTTP requests. Maybe you've used Postman, httpie, or curl commands scattered across your terminal history. But what if I told you there's a better way—one that keeps you in your favorite editor and treats your API requests as code?

    6 min read
  9. Why you need CROSS JOIN with an UNNEST in Trino

    If you've worked with arrays or delimited strings in Trino, you've probably encountered the need to "explode" them into separate rows. This is where UNNEST comes in. But there's a catch: unlike some other SQL databases, Trino requires you to use CROSS JOIN UNNEST rather than just UNNEST in your SELECT clause. Let's explore why.

    5 min read
  10. Ah moment when using slices in Go!

    The slices package defines various functions useful with slices of any type. Below are some small examples I came across today. I wanted to see how I could remove a string from a slice. Below I have a slice called names.

    2 min read