My personal Neovim configuration
- Easily Extendable and Configurable: Modular and simple directory structure.
- Intelligent Autocompletion: Powered by
blink.cmp(Rust fuzzy matching) andLuaSnip. - Git Integration: Visualize git changes with
gitsignsand TUI access vialazygit. - Language Support: Extensive LSP configuration with
masonandnvim-lspconfig(Go, TypeScript, Python, YAML, Docker, Terraform, etc.). - Formatting and Linting:
conform.nvimfor formatters with LSP fallback and format-on-save,nvim-lintfor additional linting (hadolint, shellcheck, yamllint, golangci-lint, ruff, tflint). - File Management:
Neo-treeas the file explorer andTelescopewith fzf-native for fuzzy finding. - Syntax Highlighting: Built-in Neovim 0.12 treesitter highlighting via
vim.treesitter.start(). - Navigation:
flash.nvimfor labeled jump navigation,nvim-surroundfor surround operations. - DevOps Tools: Kubernetes integration via
kubectl.nvimand TUI access to Docker (lazydocker), SQL (lazysql), and API clients (posting). - Modern UI: Catppuccin theme,
lualine,trouble.nvimfor diagnostics, and a modernized command palette/messaging system withnoice.nvim. - Session Management:
auto-sessionpersists sessions on exit; restore from the alpha dashboard'slbutton (no auto-restore on startup so the dashboard always shows first).
To use this configuration, you must have the following installed.
Required for fuzzy finding, installation, and compiling plugins (telescope-fzf-native and LuaSnip components).
- ripgrep (
rg): Required by Telescope for live grep. - C Compiler (
gccorclang) makecurl,tar,gzip
Installation examples:
# Debian/Ubuntu
sudo apt install build-essential curl tar gzip ripgrep
# macOS (requires Homebrew)
xcode-select --install # Installs git, gcc/clang, make
brew install ripgrep curlRequired for Language Server Protocols managed by Mason.
Managed by conform.nvim and nvim-lint. Install the ones relevant to your workflow:
# Formatters
brew install stylua shfmt
npm install -g prettier
pip install black
# Linters
brew install selene hadolint shellcheck yamllint tflint golangci-lint
pip install ruff- Nerd Fonts: Required for displaying icons.
- Recommended: JetBrainsMono Nerd Font.
- Download and install the font on your system, then configure your terminal emulator to use it.
- fortune: Displays random quotes on the dashboard (
alpha.nvim).# macOS/Linux via Homebrew brew install fortune # Debian/Ubuntu sudo apt install fortune-mod
These tools are integrated via key mappings but are not strictly required for Neovim to function.
- lazygit: Git TUI (
<leader>gtt). - lazydocker: Docker TUI (
<leader>dc). - lazysql: SQL client TUI (
<leader>sq). - posting: API development/testing TUI (
<leader>po).
Before proceeding, back up your existing Neovim configuration:
mv ~/.config/nvim ~/.config/nvim_backup
mv ~/.local/share/nvim ~/.local/share/nvim_backup
mv ~/.local/state/nvim ~/.local/state/nvim_backup
mv ~/.cache/nvim ~/.cache/nvim_backup- Install Neovim 0.12+ (e.g.,
brew install neovimor via your OS package manager). - Clone the repository directly into your Neovim configuration directory:
git clone https://github.com/jkleinne/nvim ~/.config/nvim
The nvim-install.sh script detects your platform and installs Neovim, build tools, runtimes (Node, Go), formatters, linters, TUI tools, and clones the configuration.
Supported platforms: macOS (Homebrew), Debian/Ubuntu (apt), Fedora/RHEL (dnf), Arch Linux (pacman), Alpine (apk).
git clone https://github.com/jkleinne/nvim ~/.config/nvim
cd ~/.config/nvim
./nvim-install.shThe script will:
- Install Neovim 0.12+ (prefers your system package manager, falls back to the GitHub release tarball)
- Install build dependencies, runtimes, formatters, linters, and TUI tools
- Detect your shell and update PATH if needed (bash, zsh, fish)
- Skip anything already installed
Run ./nvim-install.sh --help for details.
Open Neovim. The lazy.nvim plugin manager will automatically start installing the plugins, including compiling telescope-fzf-native and LuaSnip components.
nvimAfter the plugins are installed, run :checkhealth to ensure all dependencies are met and identify any issues.
:checkhealth
The configuration files are organized as follows:
~/.config/nvim/
├── lua/ # Lua configuration directory
│ ├── plugins/ # Individual plugin configurations
│ │ ├── lsp.lua
│ │ ├── telescope.lua
│ │ ├── ... (additional plugins)
│ │ └── init.lua # Plugin loader initialization
│ ├── mappings.lua # Key mappings and shortcuts
│ ├── settings.lua # General settings and options
├── init.lua # Main entry point
├── lazy-lock.json # Lock file for lazy.nvim
├── nvim-install.sh # Bootstrap script (macOS, Linux)
└── ...
The leader key is set to Space.
| Keybinding | Description |
|---|---|
<C-e> |
Toggle Neo-tree file explorer |
<TAB> |
Cycle to the next buffer |
<S-TAB> |
Cycle to the previous buffer |
<leader>bd |
Close the current buffer (Bdelete) |
s |
Flash jump (labeled jump to any visible location) |
S |
Flash treesitter jump (select treesitter nodes) |
| Keybinding | Description |
|---|---|
<leader>tf |
Find files in the current working directory |
<leader>tg |
Live grep (search text) in the current working directory |
<leader>tb |
List open buffers |
<leader>th |
Search help tags |
<leader>ts |
Search LuaSnip snippets |
| Keybinding | Description |
|---|---|
<C-w>t |
Open a new tab |
<leader>bn |
Open a new empty buffer (:enew) |
<leader>h |
Open a terminal in a horizontal split below |
<leader>v |
Open a terminal in a vertical split to the right |
<Esc><Esc> |
Exit terminal mode (double-tap; single Esc preserved for TUIs) |
<C-h> / <C-j> / <C-k> / <C-l> |
From terminal mode, jump to the left/lower/upper/right window |
| Keybinding | Description |
|---|---|
<leader>k |
Toggle Kubectl context viewer |
<leader>gtt |
Open LazyGit in a terminal buffer |
<leader>dc |
Open LazyDocker in a terminal buffer |
<leader>sq |
Open LazySQL in a terminal buffer |
<leader>po |
Open Posting (API tester) in a terminal buffer |
These are active when an LSP server is attached to a buffer.
| Keybinding | Description |
|---|---|
gd |
Go to definition |
K |
Hover documentation |
gi |
Go to implementation |
gr |
Go to references |
<C-k> |
Signature help |
<leader>D |
Go to type definition |
<leader>rn |
Rename symbol |
<leader>ca |
Code actions |
<leader>f |
Format buffer (conform.nvim with LSP fallback) |
gl |
Open floating diagnostics |
[d |
Go to previous diagnostic |
]d |
Go to next diagnostic |
<leader>q |
Send diagnostics to location list |
<leader>wa |
Add workspace folder |
<leader>wr |
Remove workspace folder |
<leader>wl |
List workspace folders |
| Keybinding | Description |
|---|---|
<leader>xx |
Toggle workspace diagnostics |
<leader>xd |
Toggle buffer diagnostics |
<leader>xl |
Toggle location list |
<leader>xq |
Toggle quickfix list |
| Keybinding | Description |
|---|---|
gcc |
Toggle line comment (built-in) |
gc |
Toggle comment (visual mode, built-in) |
cs"' |
Change surrounding " to ' (nvim-surround) |
ds( |
Delete surrounding ( (nvim-surround) |
ysiw] |
Add [] around word (nvim-surround) |
Here is a list of the key plugins included in this configuration:
- alpha-nvim: Startup screen.
- auto-session: Saves sessions on exit; restore on demand from the alpha dashboard (
l). - blink.cmp: Autocompletion engine with Rust fuzzy matcher.
- bufferline.nvim: Manage open buffers as tabs.
- catppuccin/nvim: Soothing pastel theme (Mocha flavor).
- conform.nvim: Formatter runner with LSP fallback and format-on-save.
- flash.nvim: Labeled jump navigation.
- gitsigns.nvim: Git decorations in the gutter.
- kubectl.nvim: Kubernetes integration.
- lazydev.nvim: Lazy-loaded Neovim API type information and completions for
lua_ls. - mason.nvim: Manage LSPs, linters, and formatters.
- neo-tree.nvim: File explorer.
- noice.nvim: Modernizes the UI for messages, cmdline, and popups.
- nvim-lint: Async linting for Dockerfile, shell, YAML, Go, Python, Terraform.
- nvim-surround: Surround operations (change, delete, add).
- telescope.nvim: Fuzzy finder with fzf-native sorting.
- todo-comments.nvim: Highlight and search TODO/FIXME/HACK comments.
- trouble.nvim: Diagnostics and quickfix UI.
- which-key.nvim: Displays a popup with possible keybindings.
For a complete list, refer to the lua/plugins folder in the repository.
- Themes: Change the colorscheme or flavor by modifying the
lua/plugins/colorscheme.luafile. - Keybindings: Update or add new keybindings in the
lua/mappings.luafile. - Plugins: Add or remove plugins in the
lua/plugins/directory.lazy.nvimwill manage them automatically upon restart. - Language Servers: Configure additional LSPs or change settings in
lua/plugins/lsp.lua, or install interactively using:Mason. - Formatters: Configure formatters per filetype in
lua/plugins/conform.lua. - Linters: Configure linters per filetype in
lua/plugins/lint.lua.
This project is licensed under the MIT License