A modular, language-agnostic Neovim configuration designed as a complete starter kit for any programming language.
This isn't just another Neovim config - it's your foundation for building the perfect development environment for ANY programming language. With our branch-based architecture, you can easily switch between different language setups or create your own specialized configuration.
- π₯ True Starter Kit Philosophy - Minimal base with extensible examples
- π³ Branch-Based Language Support - Switch between language configurations instantly with NeoChange
- π Educational by Design - Learn modern Neovim patterns and best practices
- β‘ Production Ready - Battle-tested configurations used by real developers
- π οΈ Community Driven - Contributions welcome for any programming language
This repository uses a powerful branch-based approach that lets you switch between different programming language configurations seamlessly:
main- π’ Pure Starter Base - Lua-optimized foundation (Start here!)ccpp-nvim- π· C/C++ Development - Complete C/C++ development environment- More coming soon! - Community contributions for Python, Go, Rust, JavaScript, etc.
NEW! You can now switch between different language configurations instantly using NeoChange:
" Switch to C/C++ development environment
:NeoChange ccpp-nvim
" Switch back to minimal Lua base
:NeoChange main
" NeoChange will automatically:
" - Switch git branches
" - Restart Neovim with new configuration
" - Handle plugin management seamlesslyNo more manual git commands or configuration headaches!
This branch provides a minimal but functional Neovim setup with:
- Essential plugins for modern editing
- Sensible defaults that work out of the box
- Clean, readable code you can easily understand and modify
- A foundation you can build upon for your specific needs
- Plugin Management: lazy.nvim for fast, lazy-loaded plugins
- LSP Support: Basic LSP setup with lua_ls (easily extensible)
- Completion: blink.cmp for modern completion experience
- Syntax Highlighting: Tree-sitter for accurate highlighting
- File Navigation: Telescope for fuzzy finding
- Git Integration: Basic git signs and navigation
- Modern UI: Clean theme with statusline
- Minimal by design - Only essential plugins included
- Well-documented - Every configuration choice is clear and commented
- Easily extensible - Add language support, themes, or plugins without conflicts
- Educational - Learn how each piece works together
- Neovim >= 0.10.0
- Git
- A C compiler (for telescope-fzf-native)
Mason will automatically install:
lua-language-server- For Neovim configuration editingstylua- Lua code formatting
Note: This is intentionally minimal. Add more tools as you need them for your specific languages and workflows.
-
Backup your existing configuration (if any):
mv ~/.config/nvim ~/.config/nvim.backup
-
Clone this configuration: Linux:
git clone https://github.com/rizkirakasiwi/nvim-minimal.git ~/.config/nvimWindows:
- powershell
git clone https://github.com/rizkirakasiwi/nvim-minimal.git "${env:LOCALAPPDATA}\nvim" - cmd
git clone https://github.com/rizkirakasiwi/nvim-minimal.git "%localappdata%\nvim"
- powershell
-
Switch to desired branch (optional):
cd ~/.config/nvim git checkout ccpp-nvim # For C/C++ + Lua support # Or stay on main for Lua-only optimization
-
Start Neovim:
nvim
-
Let lazy.nvim install plugins (this happens automatically on first run)
~/.config/nvim/
βββ init.lua # Entry point
βββ lua/
β βββ config/
β β βββ options.lua # Vim options and settings
β β βββ keymaps.lua # Key mappings
β β βββ autocmds.lua # Auto commands
β βββ plugins/
β βββ lsp.lua # LSP configuration
β βββ completion.lua # Completion engine
β βββ editor.lua # Core editing plugins
β βββ ui.lua # UI enhancements
β βββ debug.lua # Debugging support
βββ CLAUDE.md # Claude Code instructions
βββ README.md # This file
| Key | Action |
|---|---|
<Space> |
Leader key |
<C-s> |
Save file |
<Esc> |
Clear search highlight |
| Key | Action |
|---|---|
<C-h/j/k/l> |
Navigate windows |
<S-h/l> |
Navigate buffers |
<C-Up/Down/Left/Right> |
Resize windows |
| Key | Action |
|---|---|
<Space>e |
Toggle file explorer |
<Space>ff |
Find files |
<Space>fg |
Find text (live grep) |
<Space>fb |
Find buffers |
<Space>fr |
Recent files |
| Key | Action |
|---|---|
gd |
Go to definition |
gD |
Go to declaration |
gr |
Find references |
gI |
Go to implementation |
gt |
Go to type definition |
K |
Hover documentation |
<Space>ca |
Code actions |
<Space>cr |
Rename |
<Space>cf |
Format |
| Key | Action |
|---|---|
]d |
Next diagnostic |
[d |
Previous diagnostic |
<Space>cd |
Document diagnostics |
<Space>cD |
Workspace diagnostics |
<Space>xx |
Toggle Trouble |
| Key | Action |
|---|---|
]h |
Next git hunk |
[h |
Previous git hunk |
<Space>ghs |
Stage hunk |
<Space>ghr |
Reset hunk |
<Space>ghp |
Preview hunk |
<Space>ghb |
Blame line |
| Key | Action |
|---|---|
<Space>bd |
Delete buffer |
<Space>bb |
Switch to other buffer |
<Space>bp |
Toggle pin buffer |
- Use this configuration as-is to get familiar with modern Neovim
- Read through the configuration files to understand how everything works
- Gradually add customizations based on your needs
- Add languages: Check the
ccpp-nvimbranch for examples - Change theme: Modify
lua/plugins/ui.lua - Add plugins: Create new files in
lua/plugins/ - Modify keybinds: Edit
lua/config/keymaps.lua
Shows how to extend this base configuration with:
- C/C++ language server (clangd)
- Additional formatters and tools
- Debugging support
- More treesitter parsers
Consider creating your own branch for your specific setup:
git checkout -b my-config
# Add your customizations
git add -A && git commit -m "My personal config":NeoChange ccpp-nvim " Switch to C/C++ configuration
:NeoChange main " Switch to base configuration# Switch to C/C++ + Lua configuration
git checkout ccpp-nvim
# Switch back to Lua-only configuration
git checkout main
# After switching, restart Neovim to reload configurationPro Tip: Use NeoChange for seamless switching - it handles everything automatically!
This configuration is intentionally minimal. Instead of removing features you don't want, you add only what you need.
-
Add LSP server in
lua/plugins/lsp.lua:ensure_installed = { "stylua", "lua-language-server", "pyright", -- Add this }
-
Add server configuration:
servers = { lua_ls = { ... }, pyright = {}, -- Add this }
-
Add treesitter in
lua/plugins/editor.lua:ensure_installed = { "lua", "python", -- Add this }
-
Add formatter (optional):
formatters_by_ft = { lua = { "stylua" }, python = { "black" }, -- Add this }
Create a new file like lua/plugins/my-additions.lua:
return {
-- Your additional plugins here
{
"your-plugin/name",
config = function()
-- Plugin configuration
end,
},
}- Read the
ccpp-nvimbranch to see a real extension example - Check each plugin's documentation for more configuration options
- The lazy.nvim documentation explains the plugin specification format
- Check LSP status:
:LspInfo - Check Mason installations:
:Mason - Check logs:
:LspLog
- Check startup time:
nvim --startuptime startup.log - Profile plugins:
:Lazy profile
- Check blink.cmp capabilities:
:lua print(vim.inspect(require('blink.cmp').get_lsp_capabilities())) - Restart LSP:
:LspRestart
- Ensure you're on the correct branch:
git branch - After switching branches, restart Neovim completely
- Check branch-specific tool requirements
We need your help to make this the ultimate Neovim starter kit for ANY programming language!
New Language Branches - Help expand our starter kit ecosystem:
- π Python (
python-nvimbranch) - Data science, web dev, automation - π¦ Rust (
rust-nvimbranch) - Systems programming with rust-analyzer - πΉ Go (
go-nvimbranch) - Cloud-native development - β‘ JavaScript/TypeScript (
js-nvimbranch) - Modern web development - π· C# (
csharp-nvimbranch) - .NET development - π PHP (
php-nvimbranch) - Web development - β Java (
java-nvimbranch) - Enterprise development - And many more!
- Fork and create a new branch from
main - Add comprehensive language support (LSP, formatters, debuggers)
- Keep it production-ready - real developers should be able to use it immediately
- Document everything - explain your choices and configurations
- Test thoroughly - ensure everything works out of the box
- Keep it minimal - Only essential features that benefit all users
- Improve documentation - Help newcomers understand modern Neovim
- Fix bugs - Ensure the foundation is rock-solid
# Create your language branch
git checkout main
git checkout -b python-nvim # or your language
# Add your configuration
# Test thoroughly
# Submit a PR with detailed description
# Your branch becomes part of the starter kit ecosystem!All contributors get:
- Recognition in README.md
- Credit as branch maintainers
- Community appreciation for expanding the starter kit ecosystem
This configuration is inspired by:
- kickstart.nvim - The educational approach
- LazyVim - Modern plugin architecture
- Community feedback and real-world usage patterns
This configuration is available under the MIT license. Feel free to use, modify, and share!