$ uname -a
FreeBSD gw.lan 14.2-RELEASE FreeBSD 14.2-RELEASE amd64
$ cat ~/.workflow
edit: nvim
shell: zsh
mux: tmux
term: wezterm
keys: glove80
Hardware
Keyboards
- Glove80 (MoErgo) — primary daily driver. Split, columnar, contoured. My
layout is on GitHub.
- Advantage360 Professional (Kinesis) — travel keyboard with ZMK firmware. Config is
here.
Workstation
- A reasonably-spec'd desktop for heavier work and a 14-inch laptop for travel.
- Two displays. Vertical arrangement, not horizontal.
- Wired ethernet wherever practical. Wifi is for visitors.
Audio
- Closed-back headphones for focus work.
- A small XLR mic on a boom arm for calls and the rare YouTube recording.
Operating Systems
- FreeBSD 14.x on the edge router and on a small fleet of long-uptime hosts. ZFS root, base-system everything.
- NixOS 24.11 on workstations and Kubernetes nodes. Declarative, reproducible, and the closest thing to "it just works" once you've climbed the learning curve. (See why.)
- Proxmox VE as the hypervisor under most of it.
Editor & Terminal
- Neovim with a small Lua config. LSPs for the languages I touch most, telescope for fuzzy navigation, treesitter for highlighting, nothing exotic.
- Wezterm as the terminal — GPU-accelerated, scriptable in Lua, sensible defaults.
- tmux for persistent sessions on remote hosts. SSH disconnects shouldn't take work with them.
Shell & CLI
- Zsh with a thin
.zshrc. Whatever fancy plugin system you're using, you almost certainly don't need it.
- Starship for the prompt — fast, written in Rust, minimal config.
- ripgrep, fd, fzf, bat, jq, sd, delta. The boring-modern stack of grep/find/sed/diff replacements.
- direnv for per-project environments.
- git, of course. Plus lazygit for the moments my hands want a TUI.
- htop, btop, and iftop for "what is this box doing right now" — see also the TUI apps post.
Network & Homelab
- FreeBSD pf router at the edge — the heart of the network. Tour the setup.
- unbound for recursive DNS, with DNSSEC validation and a small blocklist.
- WireGuard for road-warrior VPN back into the LAN. (Setup post.)
- Real, native IPv6 via DHCPv6-PD from the ISP. (How.)
- Managed L2 switch for VLANs to the IoT and quarantine networks.
Servers & Storage
- Proxmox VE on a single homelab box hosting most of the VMs.
- NixOS VMs for everything that runs more than a handful of services.
- kubeadm + Cilium for the Kubernetes cluster, on bare-metal-ish VMs. (Build notes.)
- ZFS everywhere — for the boot environments alone.
- ZFS send/recv to a remote pool for offsite backups. (Replication script.)
- Prometheus + Grafana + Alertmanager for monitoring.
Languages I Reach For
- Bash / Shell — for glue, ops scripts, and "just enough automation".
- Python — for anything past 50 lines of shell.
- Go — for tools that need to be a single static binary.
- Nix expressions — for the configuration that defines everything else.
Browser & Day-to-Day
- Firefox with a handful of containers and uBlock Origin.
- Plain Markdown in a git repo for notes, journal, and drafts.
- An RSS reader for keeping up with people; not algorithmic feeds.
- A password manager that doesn't sync through anyone else's cloud.
Things I've Stopped Using
- Heavyweight router GUIs (OPNsense, pfSense). Both fine, both more abstraction than I want.
- Most Electron apps. The ones I keep are kept reluctantly.
- Managed cloud Kubernetes for personal projects. Bare metal teaches more.
- Trying to learn ten things at once. Pick one and go deep.
Influences
$ echo "Boring tools, sharp habits, written down."