My terminal config. Same setup on my Mac and my Ubuntu VPS.
Managed with stow — each folder is a package that gets symlinked into ~. Edit files here, they're already linked.
git clone https://github.com/YOUR_USER/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.shThen create ~/.config/git/config-personal:
[user]
name = Your Name
email = your@email.comOpen a new terminal. Done.
git clone https://github.com/YOUR_USER/dotfiles.git ~/dotfiles
cd ~/dotfiles
./install.shThen switch default shell to zsh (Ubuntu defaults to bash):
chsh -s $(which zsh)Log out and back in for it to take effect.
Create ~/.config/git/config-personal with your name/email (same as above).
Optionally create ~/.zshrc.local for machine-specific aliases/env vars.
First nvim launch will be slow — lazy.nvim is installing plugins. Run :checkhealth after to make sure LSP and treesitter are good.
nvim/ Neovim config (single init.lua from kickstart.nvim)
zsh/ Shell: aliases, fzf/fd integration, zoxide, zsh plugins (auto-install on first shell)
tmux/ Prefix is C-a, vim-style pane nav, splits keep current path
git/ nvim as editor, bat as pager, aliases (gst, gd, gl)
starship/ Minimal prompt: directory + git branch + status
yazi/ File manager config (show hidden, natural sort)
cd ~/dotfiles
stow -t ~ zsh git tmux nvim starship yazy
stow -D nvim # unlink (removes symlinks, not files)
stow -R zsh # re-link after changing folder structureOnly stow what you need. On the VPS I skip yazi sometimes.
| Tool | What I use it for |
|---|---|
| ripgrep | Fast grep. Also what Telescope uses inside nvim. |
| fzf | Ctrl+T find files, Ctrl+R search history. |
| fd | Fast find. Powers fzf's file search. |
| bat | cat with highlighting. Also git's pager. |
| yazi | File manager. y opens it and cd's you on quit. |
| zoxide | Smart cd. z proj jumps to ~/Dev/personal/project. Learns as you go. |
| tmux | Sessions survive SSH disconnects. |
| starship | Prompt. Fast, cross-shell. |
| neovim | Editor. kickstart.nvim gives LSP, completion, fuzzy finding, treesitter. |
Edit the servers table in nvim/.config/nvim/init.lua:
local servers = {
ts_ls = {}, -- typescript
pyright = {}, -- python
gopls = {}, -- go
lua_ls = { ... }, -- already there
}Restart nvim. Mason installs it automatically.
fdinstalls asfdfind,batasbatcat. The install script creates aliases in~/.local/bin.- If fzf keybindings don't work, check that
~/.fzf.zshexists or thatfzf --zshworks (needs fzf 0.48+). - Yazi installs via cargo, so you need rustup. The install script handles this but it takes a minute.
- If your terminal is Ghostty and input looks broken over SSH, copy the terminfo:
infocmp -x xterm-ghostty | ssh your-vps 'tic -x -'
- shortcuts.md — all keybindings by tool (shell, nvim, tmux, lazygit)
- flows.md — step-by-step workflows (finding code, fixing errors, git, VPS sessions)