My Neovim configuration files
Clone this repository to your ~/.config/nvim/ directory:
git clone git@github.com:lararosekelley/nvim ~/.config/nvimInstall a font with support for icons on your system. I recommend using the getnf
utility to install a Nerd Font.
You can view the getnf docs here.
After installing a Nerd Font, set your terminal emulator to use it.
For full LSP support:
- C (with any compiler, such as
cc,clang,gcc, orzig) - Go
- Java (with
javac) - Julia
- Lua (with
luarocks) - Node.js (with
npmandyarn) - Ruby (with
gem) - Rust (with
cargo) - PHP (with
composer) - Python 3.14+ (with
pip3) installed in~/.pyenv/versions/neovim3/bin/python
For a few languages, additional "provider" packages are required:
- Node.js -
neovim - Python -
pynvim(see above) - Ruby -
neovim
These should all be available on your $PATH, though local binaries will be
used first if available. See lua/plugins/lsp/init.lua
for configuration options.
bashcurl- fd
- fzf
gitgzip- just (for the development tasks below)
- ripgrep
shtar- lazygit
- make
- tmux
- tree-sitter
wget- latex2text
- mmdc (for Mermaid diagrams)
For terminal image previews:
chafa- ueberzugpp
- viu
When Neovim is next opened, plugins will be installed and configured automatically.
For use of the cmp_kitty completion
source for nvim-cmp, you need to use the Kitty terminal with one of the
following lines in your kitty.conf:
allow_remote_control socket-only
allow_remote_control socket
allow_remote_control yesAfterwards, set the socket Kitty will listen to by following the instructions here.
Example:
listen_on unix:@kittyConfiguration begins in the init.lua file, with most files living under the lua/ directory, broken up by purpose and plugin.
See full plugin configuration here.
Tasks run through just. Install the tooling once:
just installThat installs the Node dev dependencies and clones the Neovim plugins the test
harness needs into .tests/ (gitignored).
Specs live in spec/ and run under
plenary.nvim's busted runner, inside
a headless Neovim started from spec/minimal_init.lua.
Running in a real Neovim is what makes vim.* available to the modules under
test.
just test # whole suite
just test-file spec/util_spec.lua # one fileSpecs must not touch the live configuration. Where a module does file I/O, as
utils.spelling does against the ltex dictionary, the specs cover the pure
transforms and leave the command wrappers alone. Use spec.helpers rather than
vim.fn.stdpath("config") to locate repo files, since the two only coincide
outside CI.
just format # stylua, in place
just lint # stylua --check, selene, markdownlint-cli2, vale
just check # format, then lint, then testA husky pre-commit hook runs stylua and selene over the staged Lua files, and
commit-msg runs commitlint against
commitlint.config.cjs, which requires a conventional
commit with a scope from its enum. The same checks run in CI
(.github/workflows/ci.yml) across Neovim stable
and nightly.
The nvim-basic-ide repository was
used as a reference while converting my old .vimrc to the Lua-based configuration.
See LICENSE.