My Current Neovim Workflow: Snacks, Blink, and Profiles

A tour of the Neovim workflow I actually use today: focused profiles, Snacks navigation, Blink completion, and explicit tooling.

Neovim open beside terminal tools in the dotfiles desktop setup

Editor configurations age quickly. Plugin names change, defaults move, and the workflow that looked good in a screenshot may not survive daily use.

This is the shape of my current Neovim setup, verified against the production branch of my dotfiles in September 2026.

Pick a language profile

The first decision is not a colorscheme. It is the kind of project I am opening.

The :Profile command selects core, web, go, or rust. Core covers Lua, shell, JSON, YAML, and Markdown. Other profiles enable their own LazyVim extras and use separate Mason and Treesitter data directories.

That keeps the editor’s base consistent while preventing every machine from accumulating every tool.

Snacks now owns the high-frequency paths:

  • <leader>e opens the explorer;
  • <leader>ff finds files from the project root;
  • <leader>fg searches Git-tracked files;
  • ;r greps from the current working directory;
  • \\ opens the buffer picker;
  • gd and gr use LSP definition and reference pickers;
  • <C-/> toggles a terminal.

Neo-tree is disabled, and Telescope is no longer the center of the setup. One picker system means fewer overlapping mappings and a more consistent preview interface.

Blink combines LSP, paths, snippets, buffer words, and tmux sources. Signature help and documentation use bordered windows; <C-y> accepts the selected item.

AI completion is optional rather than fused into the core completion path. The ai.lua and windsurf.lua specs can extend the setup, but editing and language intelligence still work without an AI provider.

That is an important boundary. Completion should degrade gracefully when a network service is unavailable.

Keep language tools explicit

Mason installs shared tools such as Stylua, Luacheck, ShellCheck, and shfmt. Profile-specific servers are added only when relevant. LSP inlay hints are disabled globally, while Lua keeps a restrained set of parameter hints.

Formatting is handled by Conform. Web formats come from LazyVim’s Prettier extra; Lua uses Stylua. I prefer a clear formatter owner over an invisible chain of LSP fallbacks.

Small tools that survived

A few plugins continue to earn their place:

  • inc-rename for live rename feedback;
  • mini.bracketed for structured next/previous navigation;
  • Dial for numbers, dates, booleans, semantic versions, and let/const;
  • Outline for a symbol view;
  • debugprint for temporary logging with a cleanup command;
  • nvim-highlight-colors for CSS and Tailwind color context.

The list matters less than the filter: each tool solves friction I can name.

The full configuration lives in crafts69guy/.dotfiles. It will change again. This article records the decisions, not a promise that every plugin will remain forever.

Read more

All posts
  1. Lazy.nvim plugin manager using the shared Huế theme
  2. Herdr agent workspace managed as part of the dotfiles setup
  3. A calm editor window resolving commands into a clear workflow
  4. A code editor connected to modular web development tools