165 lines
6.0 KiB
Markdown
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.
|