This repo is the current baseline for my local shell and terminal environment. It is intentionally small and centered around an XDG-style Zsh layout, Neovim, Zellij, Atuin, and zsh-patina.
Home-directory shims:
~/.gitconfig~/.gitignore~/.hushlogin~/.psqlrc~/.zshenv
XDG-managed config:
~/.config/atuin/config.toml~/.config/nvim~/.config/psql/psqlrc~/.config/zellij/config.kdl~/.config/zsh/.zshenv~/.config/zsh/.zshrc~/.config/zsh/*.zsh~/.config/zsh-patina/config.toml
The Brewfile contains the core CLI tools this setup expects:
atuinbatezafzfghgitjqmiseneovimnushellripgreptrashzellijzsh-patina
Install them with:
brew bundleRun the repo checks with:
mise run checkRun just the wt tests with:
mise run testThis validates:
install.shbin/wt- the managed zsh files
- the managed Zellij config and layouts
Apply the managed files with:
./install.shThen restart the shell:
exec zshOn a fresh machine, open Neovim once after install so LazyVim can install the managed plugins:
nvimThe managed Git config includes a few workflow aliases:
git stgit upgit swgit maingit lggit lastgit undo
git sw uses fzf to switch local branches sorted by recent activity, with a
preview of recent commits.
wt is a small local Git worktree helper installed to ~/.local/bin/wt.
Current commands:
wt listwt cd <name>wt new <name>wt pickwt mainwt rm <name>wt rm --path <path>
Interactive zsh wrappers:
wpicks a worktree andcds into itwn <name>creates a worktree andcds into itwmjumps back to the main checkout
In interactive zsh, wt cd <name> jumps to an existing worktree, wt new <name> drops you into the new worktree, and wt rm <name> hops back to the
main checkout first if you remove the worktree you are currently inside.
Managed worktrees are created relative to the current repo's parent directory:
~/code/cli->~/code/wt/cli/<branch>~/hiive/server->~/hiive/wt/server/<branch>
Existing worktrees created by other tools still show up in wt list and
wt pick.
Completion menus for wt cd, wt path, and wt rm also include the latest
commit context for each branch.
The managed Neovim config is the official LazyVim starter layout under
~/.config/nvim.
This means:
- LazyVim provides the core editing experience and plugin defaults
lazy.nvimis still the underlying plugin manager- the repo keeps a committed
lazy-lock.jsonfor plugin version stability
This first pass is intentionally close to the starter:
- no custom plugin overrides yet
- no extra language packs yet
- no local tweaks beyond the starter structure
After the first install, a useful sanity check is:
:LazyHealthSource:
The default Zellij config includes:
default_shell "/bin/zsh"- the built-in
tokyo-nighttheme - session serialization
- Neovim as the scrollback editor
The managed layout ai.kdl gives you one large main pane plus a right-side lazygit pane.
Useful shell aliases:
zjattaches or creates a Zellij sessionzalaunches Zellij with theailayout
~/.zshenvsetsZDOTDIR=$XDG_CONFIG_HOME/zsh, so the real interactive shell config lives under~/.config/zsh.PSQLRCis set to~/.config/psql/psqlrc, while~/.psqlrcremains as a compatibility shim.- The shell config assumes some optional tools may be absent and guards those integrations accordingly.
- Some machine-specific integrations are intentionally not managed here.
- Review
dotfiles/gitconfigbefore applying it on a different machine or account, because it includes signing and credential configuration.