The boring parts, automated

September 28, 2026

On this page

I spend the whole day in a terminal, so I have tuned it until the boring parts disappear. These are the dotfiles. This is what they buy me.

I never type a path

Tab on anything opens a fuzzy list. cd app/<Tab> shows the folders, nvim **<Tab> shows the files, and a preview pops up when I want one. Zoxide remembers where I have been, so z port lands in the portfolio repo from anywhere.

fzf-tab listing the entries of a folder after pressing Tab

Grep that opens the file

rgf hidden is a live ripgrep. I type, the matches update, the preview shows the line in context, and Enter drops me into Neovim at that exact line. No copying paths, no :123.

Live ripgrep results on the left with the matched file previewed on the right

Files I can actually see

Yazi is the file manager. Images and PDFs render in the pane, git status sits next to each name, and quitting leaves the shell in whatever folder I ended up in.

Yazi showing a folder of images with one rendered in the preview pane

One editor, one picker

Neovim with fzf-lua for everything: ff files, fg grep, fb buffers. Same keys, same look as the shell, so there is nothing to relearn when I move between them.

Neovim with the fzf-lua file picker open over a TypeScript file

The rest is muscle memory

  • One tmux key jumps to any project's session, creating it if needed.
  • The shell starts instantly because nvm, pyenv and SDKMAN load the first time I call them, not on every tab.
  • lzd opens lazydocker, and <leader>d floats it over Neovim, so I can restart a container or tail its logs without leaving the editor.

Everything uses the same dark yellow-on-black theme, so it all looks like one tool instead of six.