Vanity, thy name is Go

Go vanity imports let you put a custom domain in front of your import paths. Instead of go get gitea.com/user/repo/pkg (or, in my case, go get src.tklk.dev/tklk/x/pkg ), the command becomes go get tklk.dev/pkg . The shorter path is decouple...

4 min

Monorepo! Monorepo! Monorepo!

What's it called? Monorepo! That's right, monorepo! I've been maintaining many small Go repositories for personal projects, libraries, and a bunch of experiments. The overhead that comes with all of that adds up. After recently switching to...

4 min

A serverless Docker registry with Bunny.net

I host all of my Docker images using my personal Gitea instance . Rather than expose my home network on the internet, I wanted to figure out a way to distribute them without having to worry about managing yet other server. I already use Bun...

7 min

Tricking GitHub Copilot into reviewing PRs in Gitea

Xe Iaso wrote about building a review bot that uses a self-hosted LLM to review GitHub pull requests. When I learned that some "AI" CLIs have SDKs, I wondered whether I could build something similar while leaving the loop and execution envi...

5 min

DIY Multi-Hop Boundary Sessions without HCP

I treat my homelab as if it has the same security requirements as a production environment because for me it is a production environment. I normally use Tailscale for protected access and avoid exposing services to the internet. Some remote...

6 min

SSH into your Gitea Actions for debugging

While Gitea Actions allows for local debugging of workflows, sometimes you need to debug directly on the runner. This is especially challenging since the workflows only exist for the duration of the run. Even if you have access to the serve...

3 min

Manage an entire fleet of macOS VMs with HashiCorp Nomad

To learn how Nomad driver plugins work, I built a driver plugin for Tart . It lets Nomad manage Tart macOS VMs in much the same way that it manages Docker containers. Disclaimer: This driver is a proof of concept and is not ready for produc...

2 min

Trouble with Azure Functions and managed identities

While automating TLS certificates for Azure Application Gateways, I ran into an issue with Azure Functions and managed identities. The tool I was using could not fetch a managed identity token. After reviewing its code and the Azure documen...

3 min

SSH Multi-Factor Authentication with SoloKey V2

In a bout of attempting to improve my operational security, I decided to review my current practices and see which areas I could improve. While I already use SSH keys for auth, having a file that is essentially a password to all my servers ...

3 min

Gitea Actions: Forget about YAML, let's use Nix

I maintain many repositories using Gitea Actions, and I've run into pipeline failures over small issues. Whitespace differences in YAML files are the most common cause, leading to unexpected parsing or complete failures. Recently, I helped ...

4 min