Skip to content

venkatarenduchintala/nvim-config

Repository files navigation

Neovim configuration for SRE, Java, Python, Rust and Lua

CI

Personal Lua-based Neovim configuration used as a daily IDE for SRE/DevOps work and software development.

Disclaimer: This configuration is based on and forked from magidc/nvim-config. Credits to the original author for the foundational setup.


Prerequisites

Dependency Version Why
Neovim 0.11+ Native LSP API (vim.lsp.config, after/lsp/)
ripgrep any Telescope live grep and file search
C compiler (gcc or clang) any Compiling treesitter parsers from source
Node.js 18+ Required by several LSP servers installed via mason: bashls, eslint, jsonls, html, cssls
git any lazy.nvim bootstrap and plugin installation

Installation

Manual Setup

  1. Clone this repository into ~/.config/nvim:
    git clone --depth 1 https://github.com/venkatarenduchintala/nvim-config.git ~/.config/nvim
    
  2. Install Neovim (0.11+). On Debian/Ubuntu the included script builds from source (stable branch) and installs system-wide:
    bash ~/.config/nvim/install_nvim.sh
    This also installs the C compiler and build tools, satisfying that prerequisite. For other platforms see the Neovim install guide.
  3. Ensure all remaining prerequisites are installed (ripgrep, node.js, git).
  4. Launch Neovim — lazy.nvim bootstraps itself on first start and installs all plugins.
  5. LSP servers, DAP adapters, linters and formatters are installed automatically by mason.nvim on first launch.

Themes

Themes use a small plug-n-play system: each colorscheme lives in its own file under lua/themes/<name>.lua that returns a lazy.nvim plugin spec. lua/theme.lua auto-discovers every file in that directory, so adding a theme is drop-in — there is no central list to edit. Only the active theme's plugin is installed; the others are never fetched, keeping startup lean.

Default: gruvbox (Gruvbox Material), set in lua/settings.lua via require("theme").set_active_theme("gruvbox").

Switching

Use the :Theme command (tab-completes across the discovered themes):

:Theme                 " show the active theme and list all available
:Theme everforest      " select a theme

The choice is persisted to a machine-local state file (stdpath("data")/active-theme.txt) and applied on the next launch, where the active theme installs itself via lazy.nvim. To change the default for a fresh install, edit the set_active_theme(...) call in lua/settings.lua.

Adding a theme

Create lua/themes/<name>.lua returning a lazy.nvim spec that loads the colorscheme in its config function:

return {
  "author/mytheme.nvim",
  config = function()
    vim.o.background = "dark"
    vim.cmd.colorscheme("mytheme")
  end,
}

It is discovered automatically and becomes selectable via :Theme mytheme.

Included themes

Alongside the previously bundled colorschemes, several low-eyestrain dark themes (medium contrast, warm, desaturated) are included for long editing sessions:

  • gruvbox_material_soft — Gruvbox Material, medium background, low UI contrast
  • everforest — warm green-grey, muted
  • kanagawa — muted "ink painting" palette
  • tokyonight_moon — softer Tokyonight variant
  • zenbones — contrast-engineered, warm (requires lush.nvim)

The status line (lualine) uses theme = "auto", so it follows whichever colorscheme is active.


Custom Mappings

Core mappings are defined in lua/mappings.lua. WhichKey provides inline descriptions for all bindings. Plugin-specific mappings live in lua/plugins/configs/. LSP mappings are defined in lua/lsp/ and are only active when a language server is attached.


Directory Structure

.
├── after/lsp/              # Per-server LSP settings (Neovim 0.11+ native API)
│   ├── gopls.lua           #   Go
│   ├── rust_analyzer.lua   #   Rust
│   ├── yamlls.lua          #   YAML (SchemaStore + Kubernetes schemas)
│   ├── helm_ls.lua         #   Helm
│   ├── ansiblels.lua       #   Ansible
│   ├── jsonnet_ls.lua      #   Jsonnet / Grafonnet
│   ├── lua_ls.lua          #   Lua (Neovim API aware)
│   └── eslint.lua          #   ESLint with auto-fix on save
├── lua/
│   ├── lsp/
│   │   ├── init.lua        #   Global capabilities + LspAttach autocmd
│   │   ├── handlers.lua    #   on_attach and capabilities shared across servers
│   │   └── configs/        #   Language-specific lifecycle plugins
│   │       ├── java.lua    #     jdtls (own startup lifecycle)
│   │       ├── rust.lua    #     rustaceanvim + crates.nvim
│   │       ├── go.lua      #     nvim-dap-go (DAP only)
│   │       ├── python.lua  #     nvim-dap-python + jupyter client
│   │       ├── yaml.lua    #     yaml-companion (Telescope schema picker)
│   │       └── dap.lua     #     DAP UI and adapters
│   ├── plugins/
│   │   ├── init.lua        #   Plugin list (lazy.nvim entry point)
│   │   └── configs/        #   Per-plugin configuration files
│   ├── themes/             #   One file per colorscheme (see Themes section)
│   ├── mappings.lua        #   Core key mappings
│   ├── settings.lua        #   Neovim options and default theme selection
│   └── theme.lua           #   Theme auto-discovery loader + :Theme command
├── test/                   #   CI validation suite (see test/README.md)
│   ├── ci_validate.sh      #     Orchestrates all validation steps
│   ├── fixtures/           #     Source files used as treesitter parse targets
│   └── *.lua               #     Headless validation scripts
└── .github/workflows/
    └── validate.yml        #   GitHub Actions: build devcontainer + run test suite

Tests

See test/README.md for the full test suite documentation — scripts, fixtures, what each validates, and how to run the pipeline locally.


Featured Plugins

LSP — Core Infrastructure

All roles

  • mason.nvim — automatic installation of LSP servers, DAP adapters, linters and formatters
  • mason-lspconfig — bridges mason with Neovim's native LSP API; auto-enables all installed servers
  • mason-nvim-lint — bridges mason with nvim-lint for automatic linter installation
  • Native LSP (Neovim 0.11+)vim.lsp.config / vim.lsp.enable API; global capabilities in lua/lsp/init.lua; per-server settings in after/lsp/<name>.lua
  • lspsaga.nvim — enhanced LSP UI: code actions, hover docs, rename, breadcrumbs
  • nvim-lint — async linting engine; triggers on save
  • conform.nvim — formatting engine with per-filetype formatter chains

SRE / DevOps

Go · Terraform · Helm · Ansible · Bash · Dockerfile · YAML · Jsonnet · Python · Markdown

Language Servers

  • gopls — Go LSP: unused params, shadow analysis, staticcheck, gofumpt formatting
  • terraformls + tflint — Terraform/HCL LSP and linting
  • helm_ls — Helm chart LSP with embedded yamlls for template files
  • ansiblels + ansible-lint — Ansible playbook LSP with validation and linting
  • bashls + shellcheck + shfmt — Bash LSP, linting and formatting
  • dockerls + docker_compose_language_service + hadolint — Dockerfile/Compose LSP and linting
  • yamlls + yamllint + kube-linter — YAML LSP (SchemaStore-backed), linting; Kubernetes manifest linting
  • jsonnet_ls — Jsonnet/Grafonnet LSP for Grafana dashboards as code (Tanka support via -t flag)
  • pyright + ruff — Python LSP; ruff for fast linting and formatting (replaces pylint + black)
  • marksman — Markdown LSP: link resolution, wikilinks, references
  • actionlint — GitHub Actions workflow linting

Treesitter Parsers

go · terraform · hcl · bash · gotmpl · dockerfile · jsonnet · python · markdown · markdown_inline · yaml


Development — Java

Java · Spring Boot · Gradle · Maven

  • nvim-jdtls — full jdtls lifecycle management: organize imports, super implementation, DAP integration
  • nvim-dap + mason-nvim-dap — Debug Adapter Protocol; Java debug adapter + test runner via jdtls

Development — Rust

Rust · Cargo

  • rustaceanvim — native LSP API Rust support: runnables, debuggables, hover actions; uses after/lsp/rust_analyzer.lua settings
  • crates.nvimCargo.toml dependency info and version management inline

Development — Python

Python · Jupyter

  • pyright + ruff — type-checked Python LSP with fast unified linting/formatting
  • nvim-dap-python — Python debug adapter via debugpy
  • nvim-jupyter-client — Jupyter notebook editing inside Neovim

Development — Lua

Neovim plugin development

  • lazydev.nvim — accurate Neovim API completions and type hints for lua_ls; replaces manual workspace.library setup
  • lua_ls — Lua LSP with LuaJIT runtime and Neovim global awareness

Development — Web / General

JavaScript · TypeScript · HTML · CSS · JSON · Rust · C/C++ · LaTeX

  • eslint — JavaScript/TypeScript linting with auto-fix on save
  • html/cssls/jsonls/clangd/pyright — LSP coverage for web and systems languages
  • vimtex — LaTeX editing with live compile and PDF preview

Completion

All roles

  • nvim-cmp — completion engine with sources: LSP, Neovim API, buffer, path, luasnip, lazydev
  • LuaSnip — snippet engine with VSCode snippet support
  • lspkind.nvim — VSCode-style completion item kind icons

Navigation

All roles

  • Telescope — fuzzy finder over files, buffers, LSP symbols, git, diagnostics and more
  • neo-tree — file explorer with git status integration
  • aerial.nvim — code outline window for symbols and quick navigation
  • glance.nvim — peek at definitions, references and implementations in a floating window
  • leap.nvim + flash.nvim — fast cursor motion anywhere on screen
  • nvim-spider — CamelCase and snake_case word motions

Editing

All roles


Git

All roles


AI

All roles

  • claudecode.nvim — Claude Code integration: AI-assisted editing, code generation and explanation directly in the editor

UI & Productivity

All roles

  • bufferline.nvim — tab bar with buffer management
  • lualine.nvim — status line with LSP, git and diagnostics info
  • trouble.nvim — diagnostics panel: errors, warnings, LSP references, quickfix
  • todo-comments.nvim — highlight and search TODO/FIXME/NOTE/HACK comments
  • which-key.nvim — popup showing available key bindings as you type
  • toggleterm.nvim — floating, horizontal and vertical terminal panes
  • neoclip.nvim — clipboard history picker via Telescope
  • nvim-notify — animated popup notifications
  • illuminate.nvim — automatically highlight all occurrences of the word under the cursor
  • nvim-colorizer — inline color preview for hex codes and CSS colors
  • undotree — visual undo history tree
  • project.nvim — automatic project root detection and project switching
  • Large file handler — native BufReadPre autocmd disables LSP, treesitter, syntax, illuminate and swapfile for files larger than 2 MiB
  • neoscroll.nvim — smooth scrolling animations
  • vim-startify — start screen with recent files and sessions

About

My config for Neovim

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors