skill-neovim-implementation
Implement Neovim plugins and configurations with TDD. Invoke for lua-language implementation tasks.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
Implement Neovim plugins and configurations with TDD. Invoke for lua-language implementation tasks.
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
How to declaratively add, change, or remove AI coding agent assets — skills, MCP servers, plugin/capability installs, RTK hooks, shared instructions — in this home-manager repo's mods/agents/*.nix module. Use this whenever the user asks to add a skill, add an MCP server, install a plugin for Claude/Codex/OpenCode/Pi, gate something to a specific machine, update a pinned skill, or asks why removing something from mods/agents/*.nix didn't actually remove it after a rebuild. Also use this before writing any new code under mods/agents/ or mods/dotfiles/agents/scripts/, even if the user doesn't name this skill directly — this architecture has specific, non-obvious rules (see "The one rule that matters" and "The three layers") that are easy to violate by copying an old pattern.
Resolve conflicts after Stackman stops during a rebase. Use when stackman sync reports rebase conflicts, when the user asks to continue a Stackman rebase, or when Git is in a conflicted rebase caused by Stackman rebasing a branch onto its parent/upstream branch.
This skill should be used when the user asks about "neovim config", "nvim setup", "vim best practices", "neovim patterns", "modern neovim", "lua configuration", "neovim 0.10", or wants guidance on configuring Neovim following current standards and conventions.
Use when the user wants to handle GitHub pull request feedback, review comments, reviewer suggestions, pasted PR comments, or a PR URL with comments that need triage, code changes, or drafted reviewer replies.
Use when the user explicitly asks to store, create, organize, read from obsidian notes or obsidian vault.
Guide for this Neovim configuration -- a modular Lua-based IDE rooted at mods/dotfiles/nvim/. Use when configuring plugins, adding keybindings, setting up LSP servers, debugging, or extending the config. Covers lazy.nvim, plugin_registry, snacks.nvim pickers, blink.cmp completion, dual LSP architecture, DAP debugging, and which-key v3 aggregation.
| name | skill-neovim-implementation |
| description | Implement Neovim plugins and configurations with TDD. Invoke for lua-language implementation tasks. |
| allowed-tools | Read, Write, Edit, Bash(nvim:*, luacheck) |
Specialized implementation agent for Neovim configuration and Lua plugin development within this dotfiles repository.
This skill activates when:
Before making changes, always:
lua/user/plugin_registry.lua for current plugin list and load orderlua/user/lazy.lua for plugin specsAGENTS.md in the nvim directory for conventions# Test module loading
nvim --headless -c "lua require('user.plugins.category.name')" -c "qa"
# Test keymap discovery
nvim --headless -c "lua local p = require('user.whichkey.plugins'); print(vim.inspect(p.get_all_plugin_keymaps()))" -c "qa"
# Full health check
nvim --headless -c "checkhealth" -c "qa"
# Check for syntax errors
luacheck lua/ --codes
mods/dotfiles/nvim/
├── lua/user/
│ ├── init.lua # Entry point
│ ├── options.lua # Editor options
│ ├── keymaps.lua # Core keymaps
│ ├── lazy.lua # lazy.nvim bootstrap + plugin specs
│ ├── plugin_registry.lua # Module load order + keymap discovery
│ ├── autocommands.lua # Autocommands
│ ├── plugins/ # Plugin configs by category
│ │ ├── ai/ # AI integrations (copilot, codecompanion, etc.)
│ │ ├── code/ # Code tools (blink.cmp, treesitter, etc.)
│ │ ├── database/ # Database tools (dadbod)
│ │ ├── debug/ # DAP debugging
│ │ ├── editing/ # Editing enhancements
│ │ ├── git/ # Git tools (gitsigns, diff, etc.)
│ │ ├── navigation/ # Navigation (oil, harpoon, etc.)
│ │ ├── ui/ # UI (colorscheme, lualine, bufferline, etc.)
│ │ └── util/ # Utility plugins
│ ├── lsp/ # LSP orchestration (mason, attach, keymaps)
│ ├── whichkey/ # Which-key aggregation
│ ├── snacks/ # Snacks.nvim custom pickers
│ ├── dap/ # DAP per-language configs
│ └── utils/ # Utility modules (file, git, project, collection)
├── lsp/ # Native vim.lsp.config() server configs
└── after/ftplugin/ # Filetype-specific settings
-- lua/user/plugins/category/plugin-name.lua
local M = {}
function M.setup()
local ok, plugin = pcall(require, "plugin-name")
if not ok then
vim.notify("plugin-name not found")
return
end
plugin.setup({
-- configuration
})
end
function M.get_keymaps() -- Optional, for automatic keymap registration
return {
normal = {
{ "<leader>xx", "<cmd>Command<cr>", desc = "Description" },
},
visual = {
{ "<leader>xx", "<cmd>Command<cr>", desc = "Description" },
},
shared = {},
}
end
return M
lua/user/lazy.lualua/user/plugins/<category>/<name>.lualua/user/plugin_registry.lua -- add the module path to M.modules in the appropriate position (order matters for dependencies)setup() and optionally get_keymaps()lsp/<servername>.lua returning a table for vim.lsp.config()vim.lsp.enable() in lua/user/lsp/init.luaensure_installed in lua/user/lsp/mason.lualocal ok, plugin = pcall(require, "plugin-name")
if not ok then
vim.notify("plugin-name not found")
return
end
IMPORTANT: Always check ok, not the module value. When pcall fails, ok is false and the second return value is the error message string (truthy), so checking if not module will not catch failures.
vim.notify("Operation completed", vim.log.levels.INFO)
vim.notify("Missing optional dependency", vim.log.levels.WARN)
vim.notify("Critical error: " .. err, vim.log.levels.ERROR)
Always use these over deprecated alternatives:
vim.keymap.set (not vim.api.nvim_set_keymap)vim.bo[bufnr] / vim.wo[winnr] (not nvim_buf_get_option / nvim_buf_set_option)vim.json.decode (not vim.fn.json_decode)vim.diagnostic.jump({ count = N }) (not goto_next / goto_prev)vim.lsp.get_clients() (not get_client_by_id or get_active_clients)vim.api.nvim_create_user_command (not vim.cmd("command! ..."))vim.api.nvim_create_autocmd (not VimScript augroup/autocmd blocks)mods/dotfiles/nvim/lua/user/init.luamods/dotfiles/nvim/lua/user/plugin_registry.luamods/dotfiles/nvim/lua/user/lazy.luamods/dotfiles/nvim/lua/user/plugins/mods/dotfiles/nvim/lsp/ (native) + mods/dotfiles/nvim/lua/user/lsp/ (orchestration)mods/dotfiles/nvim/lua/user/whichkey/mods/dotfiles/nvim/lua/user/snacks/mods/dotfiles/nvim/lua/user/utils/mods/dotfiles/nvim/AGENTS.md