Personal Neovim setup built on top of LazyVim. It focuses on strong language-server coverage for day-to-day backend/web development (Go, Python, PHP, TypeScript, Java) plus the DevOps tooling I touch the most (YAML, Docker, Helm, JSON). Lazy.nvim handles plugin management, so the config stays lean and reproducible.
- Neovim 0.9+ (or nightly) with LuaJIT support
- Git, curl/wget, unzip (for lazy.nvim bootstrapping)
- Build tools required by language servers you enable (Go, Python, Node.js, Java, etc.)
Optional but recommended:
- A Nerd Font (for icons in the UI)
ripgrepandfdso pickers/Telescope-style workflows stay fast
mv ~/.config/nvim ~/.config/nvim.backup # keep your previous config
git clone https://github.com/fahmiauliarahman/nvim ~/.config/nvim
rm -rf .git
nvim # lazy.nvim will bootstrap automaticallyThe first start downloads lazy.nvim and the plugins specified in lua/plugins. After the sync finishes, restart Neovim once so all LSP servers and formatters Mason installs are detected.
- Language Servers – Imports LazyVim extras for Go, Python (Pyright + Ruff), PHP, TypeScript, and Java. DevOps extras cover YAML, Docker, Helm, and JSON.
- Debugging-ready –
lazyvim.plugins.extras.dap.coregives you nvim-dap UI, adapters, and keymaps out of the box. - Opinionated formatting –
stevearc/conform.nvimrunsruff_formatfirst for Python, falling back to Black. Prettier is forced available even without a project config for JS/TS/MD, and LazyVim’s Black extra is enabled for consistency. - File management –
folke/snacks.nvimpowers the explorer and picker. Dotfiles are visible while common noise (node_modules, build artifacts, local venvs) stays hidden in both the sidebar and picker sources. - UI / themes – TokyoNight Night is the default colorscheme with Catppuccin Mocha ready as an alternative (
lua/plugins/themes.lua). Startup disables unused runtime plugins for faster launch. - Quality-of-life tweaks – Half-page scrolling keeps the cursor centered (
<C-d>/<C-u>mapped inlua/config/keymaps.lua). Global options favor Pyright and Ruff for Python and allow running Prettier without a local config.
init.lua -- bootstraps lazy.nvim via lua/config/lazy.lua
lua/config/
lazy.lua -- core Lazy setup + plugin imports
options.lua -- additional global options (LSP + formatter prefs)
keymaps.lua -- custom keybindings layered on LazyVim defaults
lua/plugins/
conform.lua -- formatter settings per filetype
snacks.lua -- explorer/picker rules
themes.lua -- theme configuration and defaults
stylua.toml -- formatter settings for Lua files
lazy-lock.json -- lockfile for reproducible plugin versions
- Override or extend plugins by adding new files under
lua/plugins/. Lazy.nvim will automatically pick them up. - Use
:Lazyto update plugins, check for issues, or remove unused specs. - Manage tooling via
:Mason(everything specified in the extras will auto-install, but you can add more). - Keep formatting consistent: run
stylua .before committing Lua changes.
- If lazy.nvim fails to install, ensure
gitandcurlare on your PATH and rerunnvim. - When LSP servers are missing, open
:Masonand verify the installer logs. Most extras install servers automatically, but JVM-based tools may requirejavaon PATH. - For UI glitches after updating plugins, run
:Lazy sync, restart Neovim, and (if needed) delete~/.local/share/nvim/lazyto trigger a clean reinstall.
Enjoy, and feel free to fork/tweak anything—LazyVim makes experimentation painless.