Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/erickm13/Salchipapa.Dots/llms.txt

Use this file to discover all available pages before exploring further.

Neovim is the core editor in Salchipapa.Dots. The configuration is built on top of LazyVim — a pre-configured Neovim distribution — with a curated layer of custom plugins covering AI coding assistants, a buffer-based file manager, fuzzy finding, a DAP debugger, Obsidian note-taking, and a deep bench of colorschemes. Everything is managed by lazy.nvim and activated through a single symlink.

Installation

Symlink the Neovim config directory into ~/.config/nvim:
ln -s ~/Salchipapa.Dots/SalchipapaNvim/nvim ~/.config/nvim
The installer (install.sh) handles this automatically. After symlinking, plugins are synced headlessly:
nvim --headless '+Lazy! sync' +qa

Entry point

init.lua is the first file Neovim loads. It runs two require calls in order:
-- Configure Node.js before loading plugins
require("config.nodejs").setup({ silent = true })

-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")
vim.opt.timeoutlen = 1000
vim.opt.ttimeoutlen = 0
config.nodejs must run before config.lazy so that vim.g.node_host_prog is set before any LSP servers or AI plugins attempt to spawn a Node process.

Config structure

SalchipapaNvim/nvim/
├── init.lua              — entry point
├── lua/config/
│   ├── lazy.lua          — lazy.nvim bootstrap
│   ├── keymaps.lua       — custom key mappings
│   ├── options.lua       — vim options
│   ├── autocmds.lua      — autocommands
│   ├── nodejs.lua        — Node.js/nvm path resolver
│   └── salchipapa/
│       ├── discipline.lua — cowboy mode (arrow key training)
│       └── utils.lua      — utility functions
└── lua/plugins/          — per-plugin LazyVim specs

Node.js path resolution

nodejs.lua runs a priority-ordered search for a system-level Node.js binary before any plugin is loaded. This prevents LSP servers and AI tools from accidentally picking up a project-local Node version (e.g., one set by .nvmrc) that may be too old. The search order is:
local system_paths = {
  "/opt/homebrew/bin/node",           -- Homebrew on Apple Silicon
  "/usr/local/bin/node",              -- Homebrew on Intel Mac or standard install
  vim.fn.expand("~/.volta/bin/node"), -- Volta's global Node
  vim.fn.expand("~/.local/share/nvm/v*/bin/node"), -- nvm.fish (fish shell)
  vim.fn.expand("~/.nvm/versions/node/*/bin/node"), -- NVM default version
  vim.fn.expand("~/.nix-profile/bin/node"),          -- Nix
  "/usr/bin/node",                    -- System default
}
Node.js v18 or higher is required; v22+ is recommended. If the detected version is below v18, a WARN-level notification is shown with upgrade instructions tailored to the detected package manager (Homebrew, Volta, NVM, or Nix). Two user commands are registered for diagnostics:
CommandDescription
:NodeInfoPrint the resolved Node path and version
:NodeRefreshRe-run the resolver and print info
:NodeDebugEnable verbose debug output and re-run

LazyVim extras enabled

lazy.lua imports the following LazyVim extra modules in addition to custom plugins:
CategoryExtra
Editorharpoon2, mini-files, snacks_picker, editor.mini-diff
Debuggingdap.core
Languagelang.typescript, lang.typescript.biome, lang.clangd, lang.json, lang.markdown
Formattingformatting.prettier
Lintinglinting.eslint
Codingcoding.mini-surround, coding.blink
Utilityutil.mini-hipatterns
AIai.copilot

WSL clipboard

When running inside WSL2, Neovim uses win32yank.exe as the clipboard provider:
if vim.fn.has("wsl") == 1 then
  vim.g.clipboard = {
    name = "win32yank",
    copy = {
      ["+"] = "win32yank.exe -i --crlf",
      ["*"] = "win32yank.exe -i --crlf",
    },
    paste = {
      ["+"] = "win32yank.exe -o --lf",
      ["*"] = "win32yank.exe -o --lf",
    },
    cache_enabled = false,
  }
end
win32yank.exe must be present on the Windows PATH (not just the WSL PATH). If clipboard operations silently fail, verify that win32yank.exe is accessible from a Windows terminal.

Autocommands

Two autocommands are set in autocmds.lua to maintain transparency across all terminal windows and colorscheme changes:
  • TermOpen — sets winhighlight to Normal:Normal,NormalFloat:Normal on every terminal buffer that opens (including claude-code and lazygit terminals).
  • ColorScheme — clears the background of SnacksNormal and SnacksNormalFloat highlight groups after any colorscheme switch, keeping snacks.nvim popups transparent.

Explore further

Plugins

Full catalogue of every plugin — AI, completion, file navigation, debugging, and more.

Keymaps

All custom key mappings: tmux navigation, Obsidian, oil, grep, and cowboy mode.

Colorschemes

20+ pre-configured colorschemes with transparent backgrounds. Default: Solarized Osaka.

AI Integrations

Avante, CopilotChat, CodeCompanion, Gemini CLI, and Claude Code details.

Build docs developers (and LLMs) love