A modern, IDE-like Neovim configuration with comprehensive LSP support, optimized for TypeScript, Python, Go, Rust, Protocol Buffers, and Terraform development featuring the Tokyo Night theme.
- lazy.nvim as a fast, modern plugin manager
- 🌙 Tokyo Night color scheme for a clean, modern look
- ⚡ Optimized startup time with lazy loading
- 🏗️ Well-structured, maintainable configuration
Full LSP integration via nvim-lspconfig with:
- TypeScript/JavaScript - Full-stack development with ESLint, Prettier
- Python - Data science ready with Black, isort, ruff
- Go - Enterprise development with gopls, golangci-lint, gofumpt
- Rust - Modern systems programming with rustaceanvim, real-time diagnostics
- Protocol Buffers - Modern API development with buf LSP and formatting
- Terraform - Infrastructure as Code with terraform-ls, tflint, and tfsec
- TailwindCSS - Modern CSS framework support
- HTML/CSS - Web development essentials
- 📊 Syntax highlighting with Treesitter
- 📝 Intelligent auto-completion via nvim-cmp
- 💅 Code formatting with conform.nvim
- 🔬 Fast linting with nvim-lint +
eslint_dfor JavaScript/TypeScript - ⚡ Optimized ESLint auto-fixing on save (faster than traditional LSP approach)
- 🐛 Multi-language debugging with nvim-dap
- Go: go.nvim for advanced Go development
- Rust: rustaceanvim for modern Rust development + crates.nvim for dependency management
- Python: Virtual environment management with swenv.nvim
- JavaScript/TypeScript: Advanced project detection and configuration
- 🔎 Fuzzy finding with Telescope
- 📁 File navigation with nvim-tree
- 📑 Enhanced UI with bufferline, lualine
- 🍞 Breadcrumb navigation with barbecue
- ⚡ Lightning-fast navigation with harpoon
- 🎭 Integrated terminal with toggleterm
- ⚡ Quick jump navigation with flash.nvim
- Real-time git changes with gitsigns
- Full git workflow with fugitive
- Conflict resolution with git-conflict.nvim
- Git diff viewer with diffview.nvim
Seamless compatibility with existing VS Code projects:
- Automatic Settings Sync - Reads and applies
.vscode/settings.jsonconfigurations - TailwindCSS Compatibility - Matches VS Code's
classAttributesandexperimental.classRegexpatterns exactly - ESLint Auto-fix - Fast auto-fix on save using
eslint_d(implements VS Code's"source.fixAll.eslint": "explicit") - Modern ESLint Support - Works with flat config (
eslint.config.js) and traditional.eslintrcconfigurations - Prettier Configuration - Respects project-specific prettier configs and formatting rules
- Unified Spell Check - Automatically imports custom words from VS Code's
cSpell.wordssettings - Project Detection - Smart detection of frontend, backend, CDK, and other project types
- Performance Optimized - Uses
eslint_dfor fast linting and auto-fixing without LSP overhead
- 🔍 Advanced search highlighting with hlslens
- 📋 Clipboard history with neoclip
- 🏷️ TODO comments tracking with todo-comments
- 🎨 Color highlighting with colorizer
- 🔧 Problem diagnostics with trouble.nvim
- Neovim >= 0.9.0 (0.10+ recommended)
- Git for version control and plugin management
- ripgrep for Telescope file search
- fd for Telescope file finder
- A Nerd Font for icons (JetBrains Mono recommended)
- Node.js and npm (for LSP servers and tools)
- Python 3.8+
- pip for package management
- Recommended: pyenv for Python version management
- Go 1.19+
- golangci-lint for comprehensive linting
- buf CLI - Modern Protocol Buffer tooling (installed automatically via Mason or manually via Homebrew):
brew install bufbuild/buf/buf
- Key features: Uses buf CLI for:
- Real-time LSP diagnostics and validation
- Automatic formatting with
buf format - Modern Protocol Buffer development workflow
- Compatible with buf.yaml configuration files
- Rust (latest stable) installed via rustup
- Required components (install via rustup, NOT Mason):
rustup component add rust-analyzer clippy rustfmt
- Key features: Uses rustaceanvim for:
- Real-time diagnostics without LSP restarts
- Background test execution with diagnostic feedback
- Enhanced error explanations with
:RustLsp explainError - Automatic rust-analyzer configuration
-
Terraform CLI (latest stable) for Infrastructure as Code development
-
Key features: Comprehensive Terraform development setup:
# Install via HashiCorp tap (macOS) - Recommended brew tap hashicorp/tap brew install hashicorp/tap/terraform # Or via package manager (Ubuntu/Debian) wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install terraform
-
Integrated tools (installed automatically via Mason):
terraform-ls- Language server for syntax highlighting and validationtflint- Linter for catching errors and enforcing best practicestfsec- Security scanner for Terraform codeterraform fmt- Built-in code formatter for consistent style
-
Features:
- Real-time LSP diagnostics and validation
- Automatic formatting on save with
terraform fmt - Comprehensive linting with tflint and tfsec
- Syntax highlighting for
.tf,.tfvars, and HCL files - Project-specific configuration detection
- Terminal integration for
terraform init,plan,apply, andvalidate
mv ~/.config/nvim ~/.config/nvim.bakgit clone https://github.com/weirdry/nvim-config.git ~/.config/nvim# macOS (via Homebrew)
brew install ripgrep fd
# Ubuntu/Debian
sudo apt install ripgrep fd-find
# Arch Linux
sudo pacman -S ripgrep fd# Rust (if not installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup component add rust-analyzer clippy rustfmt
# Go tools (if using Go)
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
# Protocol Buffers (if using protobuf)
brew install bufbuild/buf/buf
# Terraform (if using Infrastructure as Code)
brew tap hashicorp/tap
brew install hashicorp/tap/terraformnvimThe plugins will be automatically installed on the first launch via Mason and lazy.nvim.
<Space>- Leader key<leader>ff- Find files<leader>fg- Live grep (search text)<leader>fb- Browse buffers<leader>fh- Search help tags<leader>fw- Search current word<Esc><Esc>- Clear search highlights
<leader>ft- Toggle file explorer<leader>fT- Search TODOs<leader>fn- Clipboard history
gd- Go to definitiongr- Find referencesgi- Go to implementationK- Show hover information<leader>rn- Rename symbol<leader>ca- Code actions
<Tab>- Next buffer<S-Tab>- Previous buffer<leader>bc- Close buffer (pick)<leader>bo- Close all other buffers<leader>bp- Pick buffer<leader>bs- Sort buffers
<leader>ha- Add file to Harpoon<leader>hm- Toggle Harpoon menu<leader>h1-4- Jump to Harpoon file 1-4<leader>hp/hn- Previous/Next Harpoon file
:RustLsp explainError- Explain error codes with detailed documentation:RustLsp testables- Run Rust tests with background diagnostics:RustLsp debuggables- Debug Rust applications<leader>rh- Toggle inlay hints<leader>cr- Cargo run<leader>ct- Cargo test<leader>cc- Cargo check<leader>cb- Cargo build<leader>cC- Cargo clippy<leader>cw- Cargo watch<leader>cf- Cargo format<leader>rc- Find Cargo.toml<leader>rs- Search in Rust files
<leader>gtf- Go to type definition<leader>gim- Go to implementation- Auto-formatting on save with goimports
<leader>ti- Terraform init<leader>tp- Terraform plan<leader>ta- Terraform apply<leader>tv- Terraform validate- Auto-formatting on save with
terraform fmt - Real-time linting with tflint and tfsec
[d- Previous diagnostic]d- Next diagnostic<leader>e- Show diagnostic details<leader>q- Show diagnostic list<leader>xx- Toggle Trouble diagnostics
<C-\>- Toggle floating terminal<Esc><Esc>- Exit terminal mode (in terminal)
s- Flash jump (quick navigation)<leader>fs- Flash treesitter search<leader>sv- Select Python virtual environment
~/.config/nvim/
├── init.lua # Main configuration file
├── README.md # This file
└── screenshots/ # Configuration screenshots
└── screenshot.webp
This configuration is designed to be easily customizable:
- Add LSP server to
mason-lspconfigensure_installed list - Configure LSP in the LSP settings section
- Add formatters/linters to respective sections
- Add language-specific autocmds if needed
All key mappings are centralized in the "키 매핑 (Keymaps)" section for easy modification.
Each plugin configuration is clearly separated and documented within the lazy.nvim setup block.
- LSP not working: Ensure language servers are installed via
:Mason - Icons not showing: Install a Nerd Font and set it in your terminal
- Slow startup: Check
:Lazy profilefor plugin loading times - ESLint auto-fix not working: Ensure
eslint_dis installed via Mason and project has valid ESLint config - Formatting not working: Verify formatters are installed and configured
:Mason- Manage LSP servers and tools:Lazy- Manage plugins:checkhealth- Check Neovim health:LspInfo- Check LSP status:Telescope diagnostics- View all diagnostics
This configuration is optimized for performance with:
- Lazy loading for most plugins
- Async formatting and linting with background job processing
- Optimized ESLint workflow -
eslint_ddaemon for instant linting and auto-fixing - Smart project detection - Conditional tool loading based on project type
- Fast buffer reloading - Optimized file change detection after auto-fixes
- Large file optimizations - Automatic syntax/TreeSitter disabling for files >1MB
- Pre-initialized formatters - Background loading of formatting tools on startup
Special thanks to the Neovim community and all the plugin authors that make this configuration possible:
- Folke Lemaitre for lazy.nvim, tokyonight, and many other excellent plugins
- ThePrimeagen for Harpoon
- nvim-treesitter team
- All LSP server maintainers and the broader open-source community
MIT
