docs: document LSP server setup, correct plugin customization workflow

- Add 'Adding LSP Servers' section explaining the servers/mason_tools split
  and linking to mason-registry and lspconfig server list for name lookups
- Fix 'Adding a Plugin' section — core plugins need explicit registration
  in init.lua loader list; personal plugins go in lua/custom/plugins/
- Update project layout to include lua/whipsmart/ and lua/custom/
- Add format-on-save opt-in instructions

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Geoff Cheshire 2026-05-10 13:53:58 -04:00
parent 1eddcab2c8
commit e0d47d1853
1 changed files with 61 additions and 14 deletions

View File

@ -50,29 +50,76 @@ Whipsmart also exposes the raw `vim.pack` primitives:
```text ```text
~/.config/nvim/ ~/.config/nvim/
├── init.lua # Core options, keymaps, and modular loader ├── init.lua # Core options, keymaps, and plugin loader
├── UNIFIED.md # The Grand Unified roadmap and local instructions ├── UNIFIED.md # The Grand Unified roadmap and local instructions
├── nvim-pack-lock.json # Plugin lockfile (Tracked in Git) ├── nvim-pack-lock.json # Plugin lockfile (Tracked in Git)
└── lua/ └── lua/
└── plugins/ # Individual plugin modules ├── plugins/ # Core plugin modules (explicit load order in init.lua)
├── core_ui.lua # Which-key, Colorscheme, Oil, Mini.nvim │ ├── pack_manager.lua # pack-manager.nvim UI setup
├── lsp.lua # LSP, Mason, and Tooling │ ├── core_ui.lua # Which-key, Colorscheme, Oil, Mini.nvim
├── telescope.lua # Fuzzy Finding │ ├── telescope.lua # Fuzzy Finding
├── cmp.lua # Autocompletion and Snippets │ ├── lsp.lua # LSP, Mason, and Tooling
├── treesitter.lua # Syntax Highlighting │ ├── cmp.lua # Autocompletion and Snippets
├── format.lua # Conform.nvim Formatting │ ├── treesitter.lua # Syntax Highlighting
└── pack_manager.lua # pack-manager.nvim UI setup │ └── format.lua # Conform.nvim Formatting
├── whipsmart/ # Opt-in extras (not loaded by default)
│ ├── health.lua # :checkhealth whipsmart
│ └── plugins/ # autopairs, debug, gitsigns+, indent, lint, neo-tree
└── custom/
└── plugins/ # Your personal plugins — no merge conflicts here
``` ```
## 💻 Customization ## 💻 Customization
### Adding a New Plugin ### Adding a Personal Plugin
To add a plugin, create a new `.lua` file in `lua/plugins/`. Whipsmart will automatically detect and load it. Drop a `.lua` file in `lua/custom/plugins/` — it is loaded automatically on startup and will never conflict with upstream changes.
Example `lua/plugins/harpoon.lua`: Example `lua/custom/plugins/harpoon.lua`:
```lua ```lua
vim.pack.add({ "https://github.com/ThePrimeagen/harpoon" }) vim.pack.add { 'https://github.com/ThePrimeagen/harpoon' }
-- Your configuration here require('harpoon').setup {}
```
### Adding a Core Plugin
To add a plugin to the core `lua/plugins/` layer, create the file and then register it in the explicit loader list in `init.lua` (Section 2):
```lua
for _, mod in ipairs {
...
'plugins.my_new_plugin', -- add here
} do
```
### Adding LSP Servers
LSP configuration lives in `lua/plugins/lsp.lua` and has two separate lists that must both be updated:
1. **`servers`** — uses **lspconfig names** (passed to `vim.lsp.config` / `vim.lsp.enable`):
```lua
local servers = {
lua_ls = { ... }, -- lspconfig name
pyright = {}, -- lspconfig name
}
```
2. **`mason_tools`** — uses **Mason registry names** (passed to `mason-tool-installer`):
```lua
local mason_tools = {
'lua-language-server', -- Mason name for lua_ls
'pyright', -- Mason name (happens to match here)
'stylua', -- formatter, Mason name
}
```
> **Note:** lspconfig names and Mason names often differ. Look up the correct Mason name at [mason-registry](https://mason-registry.dev/registry/list) and the lspconfig name in the [lspconfig server list](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md).
### Enabling Format-on-Save
In `lua/plugins/format.lua`, add filetypes to `fmt_on_save_fts`:
```lua
local fmt_on_save_fts = {
lua = true,
go = true,
}
``` ```
### Machine-Specific Settings ### Machine-Specific Settings