Config Profiles#
Overview#
We have two runtime profiles to control how Neovim configuration occurs:
standardfor the full setup behavior.minimalfor a lean setup that avoids Neovim-managed external tool installs.
Profile resolution#
Profile resolution lives in lua/vvn/profile.lua.
We resolve the active profile with this precedence:
VVN_NVIM_PROFILEVVN_DOTFILES_PROFILECODESPACES=trueimpliesminimalfallback
standard
If a profile value is invalid, we ignore it and continue to the next source.
Only VVN_NVIM_PROFILE and VVN_DOTFILES_PROFILE participate in explicit
profile selection.
This gives us three customization points, plus OS/user overlays.
Treesitter parser lists
Enabled LSP server names
Mason package install policy
It also supports plugin specs that are specific to the current OS and user.
Profile behavior model#
Profile specific behavior is centralized in lua/vvn/profile_config.lua.
Because this is centralized, we can change profile behavior without spreading logic across many plugin files.
LSP integration#
Profile-aware LSP behavior is implemented in lua/plugins/pde/lsp.lua.
server configs are registered first
enabled servers are selected from profile config
Mason installs are optional and profile gated
Treesitter integration#
Profile-aware Treesitter behavior is implemented in
lua/plugins/treesitter/config.lua.
parser install list is profile driven through
get_treesitter_ensure_installed()the Neovim 0.12 flow starts Treesitter explicitly with
vim.treesitter.start()headless smoke runs can force sync install with
NVIM_TREESITTER_SYNC_INSTALL=1
Docker and wrapper scripts export VVN_NVIM_PROFILE before launching
Neovim, so headless and interactive runs resolve the same parser list.
See Treesitter Setup Flow for the runtime order.
Mason behavior#
We still use mason.nvim, and install behavior is explicit.
Install flow is gated by both profile policy and
NVIM_MASON_AUTO_INSTALL=1.
This is important for minimal because we can validate startup and baseline
editing behavior without Neovim trying to install servers.
The profile setup does not use:
mason-lspconfig.nvimmason-tool-installer.nvim
Plugin specs#
Profile-aware plugin spec behavior is implemented in
lua/vvn/profile_config.lua.
Overlay plugin specs resolve through:
vvn.os-config.plugin_specsvvn.user-config.plugin_specs
get_plugin_specs() merges base profile specs with OS and user overlays and
returns one list to plugins.override.
Future change checklist#
When we add or change language support, we should update profiles in this order:
Update server config in
lua/plugins/pde/lsp.lua.Decide whether the server belongs in
standardonly, or in bothstandardandminimal.If it should auto-install, add the Mason package name in
lua/vvn/profile_config.lua.Run Docker smoke checks for both profiles to confirm behavior still matches expectations.
When we change profile defaults, we should keep minimal conservative and
add things there only when they are essential to baseline editing.
This gives us a stable place to evolve the config without losing clarity about what each profile is supposed to do.