Files
nvim_config/AGENTS.md
2026-02-08 12:54:03 +03:00

165 lines
6.0 KiB
Markdown

# AGENTS.md
This document is the operating guide for coding agents working in this Neovim
configuration repository.
## Repository Snapshot
- Project type: personal Neovim config (Lua)
- Entry point: `init.lua` -> `lua/core/*` -> `lua/plugins/*`
- Plugin manager: `lazy.nvim`
- No dedicated CI, test suite, formatter config, or lint config is committed
- Primary language: Lua (Neovim runtime APIs)
## Directory Layout
- `init.lua`: bootstrap into core config
- `lua/core/options.lua`: editor options and globals
- `lua/core/keymaps.lua`: global and command keymaps
- `lua/core/lazy.lua`: lazy.nvim bootstrap and setup
- `lua/plugins/init.lua`: plugin spec list
- `lua/plugins/config/*.lua`: per-plugin config modules
- `lua/utils/*.lua`: utility helpers (for example `reload.lua`)
## Build / Lint / Test Commands
There is no Makefile/package manager script layer, so use direct commands.
### Environment checks
- Verify Neovim can start this config:
- `nvim --headless -u /home/alican/.config/nvim/init.lua +qa`
- Verify plugin bootstrap and lockfile resolution:
- `nvim --headless -u /home/alican/.config/nvim/init.lua '+Lazy! sync' +qa`
- Optional runtime health checks:
- `nvim --headless -u /home/alican/.config/nvim/init.lua '+checkhealth' +qa`
### Formatting
- Preferred formatter for Lua: `stylua`
- Format whole repo:
- `stylua /home/alican/.config/nvim`
- Format a single file:
- `stylua /home/alican/.config/nvim/lua/plugins/init.lua`
If `stylua` is not installed, do not mass-reformat; preserve existing style in
touched regions only.
### Linting
- No lint config is committed (`.luacheckrc` not found).
- If `luacheck` is available, run ad hoc:
- `luacheck /home/alican/.config/nvim/lua`
- Treat lint as advisory unless the repository later adds pinned lint rules.
### Testing
- No test framework is currently configured in-repo.
- Use headless startup as the minimum smoke test:
- `nvim --headless -u /home/alican/.config/nvim/init.lua +qa`
### Running a single test (important)
There are no existing unit/integration test files, so there is no real
single-test command today.
If you add Plenary-based tests, use this pattern for a single test file:
- `nvim --headless -u /home/alican/.config/nvim/init.lua -c "PlenaryBustedFile tests/<name>_spec.lua" -c qa`
If you add a plain Lua test runner later, document exact single-test invocations
here and keep this section updated.
## Code Style Guidelines
Follow local conventions observed in current files first, then these rules.
### Imports and module structure
- Use `require("...")` with explicit module paths.
- Keep imports at top of file unless lazy-loading is intentional.
- Prefer locals for required modules (example: `local cmp = require("cmp")`).
- Return module tables (`local M = {}; ...; return M`) for utility modules.
- Plugin config modules should avoid side effects outside setup behavior.
### Formatting and layout
- Preserve existing indentation style per file (repo currently mixes tabs/spaces).
- Keep lines reasonably short (existing config uses `colorcolumn = "80"`).
- Use trailing commas in multiline Lua tables.
- Keep one logical statement per line.
- Group related options/settings in contiguous blocks.
- Avoid large unrelated reformatting in feature/fix commits.
### Types and annotations
- Lua is dynamically typed here; no strict type checker is configured.
- Keep useful EmmyLua annotations when present (for example `---@type ...`).
- Add annotations only when they improve editor/LSP inference.
- Do not add noisy type comments for obvious locals.
### Naming conventions
- Module/file names: lowercase, path-based (`core.options`, `plugins.config.lsp`).
- Local variables: `snake_case`.
- Exported module tables: `M`.
- User commands: `PascalCase` where already used (`ReloadConfig`).
- Avoid introducing new global functions/variables.
- Exception: if global is required by Vim command callbacks, prefix carefully and
document intent.
### Neovim API usage
- Prefer modern APIs:
- `vim.keymap.set` over `vim.api.nvim_set_keymap`
- `vim.api.nvim_create_user_command` for user commands
- Use buffer-local mappings/options when behavior is buffer-scoped.
- Keep plugin setup isolated in `lua/plugins/config/<plugin>.lua` when practical.
- Keep core bootstrap files (`core/*`) minimal and composable.
### Error handling and resilience
- Fail softly for optional dependencies when reasonable (`pcall(require, ...)`).
- Avoid crashing startup for non-critical plugin behavior.
- Use `vim.notify(..., vim.log.levels.<LEVEL>)` for actionable runtime feedback.
- For external commands in Lua, check return status if failure is meaningful.
### Plugin and dependency changes
- Add/modify plugin specs only in `lua/plugins/init.lua` unless refactoring.
- Keep plugin options in dedicated config modules when they grow beyond trivial.
- For plugins with build hooks (example: markdown preview), do not assume Node/npm
is available in all environments; mention prerequisites in PR notes.
- Preserve lockfile intent (`lazy-lock.json`) when updating plugin versions.
### Commit hygiene for agents
- Make focused changes with minimal scope.
- Do not fix unrelated style issues opportunistically.
- Include validation notes in your final response (what you ran, what you could
not run).
- If commands are unavailable locally, state that clearly and provide exact
follow-up commands.
## Cursor / Copilot Rules
Checked paths:
- `.cursorrules`
- `.cursor/rules/`
- `.github/copilot-instructions.md`
Current status: no Cursor or Copilot instruction files were found in this
repository.
If these files are added later, agents must treat them as higher-priority
repository policy and this document should be updated to summarize them.
## Agent Workflow Checklist
- Read nearby files before editing; match local patterns.
- Keep edits minimal and reversible.
- Run at least one headless Neovim smoke check after non-trivial changes.
- For plugin changes, run `'+Lazy! sync'` headless when possible.
- Update this file when tooling, test framework, or style policy changes.