Charvim is a custom Neovim configuration designed for efficiency, speed, and a seamless development experience. Built on Neovim 0.12+.
For detailed information on how to use and customize this configuration, refer to the official wiki:
-> Charvim Wiki
Charvim/
├── nvim/
│ ├── after/
│ │ └── ftplugin/
│ │ ├── cobol.lua # COBOL-specific settings
│ │ └── make.lua # Makefile-specific settings
│ ├── colors/
│ │ └── noir-cat.lua # Custom noir-cat colorscheme
│ ├── lua/
│ │ ├── img/
│ │ │ └── charVim.txt # ASCII art for the dashboard
│ │ ├── alpha-config.lua # Dashboard configuration
│ │ ├── autoclose.lua # Auto-closing brackets and quotes
│ │ ├── completion-config.lua # nvim-cmp completion config
│ │ ├── dap-config.lua # Debugger configuration
│ │ ├── harpoon-config.lua # Harpoon keymaps and setup
│ │ ├── keymaps.lua # Custom keybindings
│ │ ├── lint-config.lua # Linter configuration (nvim-lint)
│ │ ├── lsp-config.lua # LSP settings and handlers
│ │ ├── options.lua # General Neovim options
│ │ ├── plugins.lua # Plugin definitions via lazy.nvim
│ │ ├── rename-config.lua # Find & replace / rename panel
│ │ ├── statusline.lua # Custom mode-aware statusline
│ │ ├── theme-switcher.lua # Runtime theme cycling with persistence
│ │ └── treesitter-config.lua # Treesitter setup
│ └── init.lua # Main entry point
├── .github/
│ └── workflows/
│ ├── config_test.yml # CI: headless Neovim config test
│ └── setup_test.yml # CI: install script test
├── .gitignore
├── CHANGELOG
├── LICENSE
├── README.md # This file
└── setup.sh # Install script
- init.lua: The main entry point. Loads all modules in order — options, keymaps, plugins, and post-plugin configs.
- options.lua: General editor settings like line numbers, tabs, scrolloff, clipboard, and cursor shape.
- keymaps.lua: Custom keybindings. Includes leader-key shortcuts, line movement, file runners for Python, Java, and HTML, and terminal shortcuts.
- plugins.lua: All plugin definitions managed by
lazy.nvim.
-
lsp-config.lua: LSP setup for ten language servers — all managed through Mason and the native
vim.lspAPI. Includes inlay hints, diagnostics config, and build-system detection for Java and Kotlin projects.Server Language(s) lua_lsLua goplsGo pyrightPython ts_lsTypeScript / JavaScript jdtlsJava (Maven, Gradle, Ant) kotlin_language_serverKotlin clangdC / C++ / Objective-C sourcekit-lspSwift / Objective-C tinymistTypst lemminxXML -
completion-config.lua: Autocompletion powered by
nvim-cmpwithluasnipsnippets, LSP source, and buffer source.
- avante.nvim: AI-assisted code chat and editing powered by Anthropic Claude (
claude-haiku-4-5). Use:AvanteAskto chat about code or:AvanteEditto edit with AI assistance. RequiresANTHROPIC_API_KEYset in your environment or a.envfile at the repo root.
- statusline.lua: Custom statusline with mode-aware highlights that dynamically adapt to the active colorscheme.
- alpha-config.lua: Startup dashboard with ASCII art, quick-access buttons, and a footer showing the date and Neovim version.
- theme-switcher.lua: Theme picker with Telescope live-preview — browse themes and see them applied before confirming. The last-used theme is persisted and restored on startup. Cycle with
:ThemeSelector switch directly with:Theme <name>. - noir-cat.lua: A custom dark colorscheme in
nvim/colors/.
-
rename-config.lua: Find & replace / rename panel built with
nui.nvim. Live ripgrep search with file preview, single-occurrence or project-wide replacement, and automatic LSP rename when the cursor is on a known symbol. Open with<leader>Sor:Find. -
multicursor.lua: Homebrew multi-cursor implementation (no plugin dependency). Add cursors above/below with
Ctrl+Up/Ctrl+Down, or enter multi-cursor mode withCtrl+Nand then navigate withj/k. Exit withEsc. -
harpoon-config.lua: Harpoon2 setup for quick file switching. Navigate with
Alt+1throughAlt+5, or cycle withAlt+N/Alt+P. -
dap-config.lua: Debug Adapter Protocol setup for Python, Java, C/C++, and Kotlin. Opens a UI automatically when a session starts.
-
lint-config.lua: Linter configuration via
nvim-lint. Linters are installed via Mason.Filetype Linter Lua luacheckGo staticcheckPython ruffJavaScript / TypeScript eslint_dJava checkstyleKotlin ktlint -
treesitter-config.lua: Treesitter parsers for syntax highlighting, indentation, and incremental selection. Includes auto tag closing for HTML/JSX.
-
autoclose.lua: Auto-closes brackets, quotes, and parentheses in insert and command mode. Also wraps visual selections.
- after/ftplugin/cobol.lua: COBOL-specific settings — 8-space tabs, column markers at 7 and 73, and absolute line numbers.
- after/ftplugin/make.lua: Makefile-specific settings.
Run the install script:
bash <(curl -s https://raw.githubusercontent.com/CrtlUserKnown/Charvim/main/setup.sh)The script automatically installs missing system dependencies before setting up the config. Supported package managers:
| OS / Distro | Package manager |
|---|---|
| macOS | brew |
| Fedora / RHEL | dnf |
| Debian / Ubuntu | apt |
| Arch Linux | pacman |
Or manually:
-
Backup your existing configuration:
mv ~/.config/nvim ~/.config/nvim.bak
-
Clone the repository:
git clone https://github.com/CrtlUserKnown/Charvim.git ~/.config/nvim -
Launch Neovim:
nvim
Plugins will be installed automatically via lazy.nvim on first launch.
- Neovim 0.12+
- Git
- A Nerd Font for icons
ripgrep— used by Telescope live grep andrename-configfd— used by Telescope file finderpython3— for DAP Python supportmake— required to buildavante.nvimnode— required by Mason-managed LSP servers (TypeScript, etc.)ANTHROPIC_API_KEY— set in your environment or a.envfile at the repo root (for avante.nvim AI features)
Built by CrtlUserKnown