↓ Skip to main content

My Local Setup

The laptop I actually work on, and the reasoning behind how it’s set up. It’s deliberately terminal-first and reproducible - if this machine died, a new one would look like it within the hour.

The setup
#

LayerWhat
HardwareFramework Laptop 13 - AMD Ryzen 5 7640U, 30GB RAM, 2TB WD_BLACK SN770 (LUKS), Radeon 760M
OSZirconium 44 - an opinionated Fedora bootc image (immutable, image-based updates) running the Niri compositor
Terminalfoot + fish + zellij
Shell nicetiesstarship, atuin, zoxide
EditorNeovim on LazyVim
KeyboardMoErgo Go60 - split ergonomic
PhonePixel running GrapheneOS
CLI toolkitripgrep, fd, fzf, bat, eza, yazi, television, jq, yq, delta, gitui, bottom, dust, hyperfine
ContainersRootless Podman + Distrobox
Toolingmise for tools and tasks, chezmoi for dotfiles, Tailscale for access, kubectl + k9s, restic + rclone for backups
Secrets1Password CLI via fnox

Why these choices
#

DecisionReasoning
Image-based OSZirconium updates by swapping images, so the laptop stays reproducible and rolling back is free.
Terminal-firstfoot is Wayland-native and fast; fish plus zellij makes long-lived sessions and SSH into the cluster pleasant.
Neovim on LazyVimKeyboard-driven, behaves identically over SSH and locally, and its config is just files in chezmoi.
Rootless containersPodman with no daemon and no root; Distrobox when a task wants another distro’s toolchain.
mise + chezmoiTools and configuration are declared, so any machine becomes my machine in minutes.
TailscalePrivate access to the homelab from anywhere without opening a port.
Split keyboardErgonomic and built to last - the biggest day-to-day quality-of-life upgrade I’ve made.
GrapheneOSHardened Android with no Google services by default.