Karnull's terminal setup: zsh, tmux and Neovim, shared across a Mac, a home
server, a Raspberry Pi and a work machine. Anything every machine uses lives on
main; anything tied to one machine lives on that machine's sys/ branch and
links back to the rest.
| Path | What it is |
|---|---|
zsh/ |
Shell config split by job, mostly lazy-loaded so the prompt comes up fast |
zplugins/ |
Vendored zsh plugins: defer, syntax highlighting and devedit |
tmux/ |
tmux with window templates, an fzf session switcher and a ghostnet popup |
nvim/ |
Neovim on the built-in vim.pack, with plugins loaded after startup |
vimrc |
Plain Vim, for when Neovim isn't around (claude ctrl+g in docker) |
git/ |
Git defaults, fzf-powered aliases and a global ignore |
Each machine checks out its sys/ branch and puts main beside it as a
worktree at generic/. Files on a sys/ branch are either specific to that
machine or symlinks into generic/, so overriding a shared file just means
swapping the symlink for a real one.
Shared changes made on a machine go on a chore/<system>-updates branch, such
as chore/cloud-updates, and come back to main as a pull request. Every other
machine picks them up on its next update.
sys/darwin: the macOS daily driversys/cloud: a self-hosted Linux Mint serversys/edge: a Raspberry Pi edge serversys/wsl: the work machine, on Windows Subsystem for Linux
Retired, but kept for reference:
x/tools: configs for tools no longer in usex/system: the old layout, one branch with a folder per systemx/star: the original dotfiles, from the GNU/Linux daily-driver days
The installer is a shell script kept outside this repository:
wget -O - https://karsh.page/terminal | sh