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:
NVIM_PROFILEDOTFILES_PROFILECODESPACES=trueimpliesminimalfallback
standard
If a profile value is invalid, we ignore it and continue to the next source.
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.
OS and user specific overlays#
init.lua
└─ lazy.nvim spec
└─ import "plugins.override"
└─ which calls vvn.profile_config.get_plugin_specs()
├─ loads vvn.os-config.plugin_specs
└─ loads vvn.user-config.plugin_specs
init.lua imports plugins.override for overlay plugin specs.
plugins.override calls vvn.profile_config.get_plugin_specs() and
returns one merged plugin spec list to lazy.nvim.
This keeps lazy plugin imports profile-aware while preserving the existing
NVIM_APPNAME worktree behavior.
Telescope filter integration#
lua/vvn/profile_config.lua resolves base telescope filters and merges
user overrides from vvn.user-config.telescope_filters.
lua/plugins/expedition/telescope.lua consumes that merged result to build
rg and fd arguments.
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
headless smoke runs can force sync install with
NVIM_TREESITTER_SYNC_INSTALL=1
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.