Neovim config for the lazy
Find a file
pugud 2cd46d42ba
feat(lang): add solidity language support (#4742)
## Description

### Summary

This PR adds comprehensive support for Solidity development in Neovim
using LazyVim. The following updates were made to streamline Solidity
development:
### Changes

1. **Solidity File Type Detection**
- Configured LazyVim to recognize Solidity projects by detecting
`foundry.toml`, `hardhat.config.js`, and `hardhat.config.ts` files.
2. **Treesitter Support for Solidity**
- Added `solidity` to the list of languages ensured by
`nvim-treesitter`, providing syntax highlighting and better code
structure understanding.
3. **Language Server Protocol (LSP) Setup**
- Configured `nvim-lspconfig` to support `solidity_ls` as the LSP for
Solidity files.
- Set up `root_dir` detection based on project files or a `.git`
directory to enable proper LSP functioning in Solidity projects.
4. **Solidity Formatter**
- Integrated `forge_fmt` as a formatter for Solidity files using
`conform.nvim`, which utilizes `forge fmt` to format code.
    
### Why use `forge fmt` instead of Prettier?

- **Prettier's Solidity support requires extra plugins**: Prettier does
not have native Solidity support and depends on
`prettier-plugin-solidity`. Even with
`vim.g.lazyvim_prettier_needs_config = false`, formatting won't work
unless a `.prettierrc` file is configured, creating unnecessary
complexity.
- **`forge fmt` is the native tool for Solidity development**: `Forge`
is a widely used tool within the Solidity ecosystem, especially when
working with Foundry. It provides built-in formatting with no extra
dependencies, making it simpler and more efficient to integrate.
- **Hardhat uses `prettier-plugin-solidity`**: For users of Hardhat,
`prettier-plugin-solidity` is required for code formatting. However, the
integration with Prettier might add complexity, while `forge fmt`
simplifies the process.
- **Future customization**: We may allow users to choose between
`prettier-plugin-solidity` and `forge fmt` for formatting in the future,
depending on their preferred tools.
    
  
### Testing

- Confirmed that Solidity files are detected and syntax-highlighted by
Treesitter.
- Verified LSP functionality for Solidity, including code navigation and
error detection.
- Tested `forge_fmt` for automatic code formatting on Solidity files.
### Motivation

These changes provide a smoother and more robust Solidity development
experience in Lazyvim, including syntax highlighting, code navigation,
and automatic formatting.

## Related Issue(s)
https://github.com/LazyVim/LazyVim/issues/1901

## Checklist

- [x] I've read the
[CONTRIBUTING](https://github.com/LazyVim/LazyVim/blob/main/CONTRIBUTING.md)
guidelines.

---------

Co-authored-by: Folke Lemaitre <folke.lemaitre@gmail.com>
2025-10-20 11:20:05 +02:00
.github chore(main): release 15.9.0 (#6643) 2025-10-19 13:00:52 +02:00
doc chore(build): auto-generate docs 2025-10-20 05:02:32 +00:00
lua/lazyvim feat(lang): add solidity language support (#4742) 2025-10-20 11:20:05 +02:00
queries/lua feat(lua): added LazyVim as a treesitter builtin 2024-05-15 15:31:08 +02:00
scripts ci: update test scripts 2025-10-08 21:26:13 +02:00
tests test: detect old refs to plugins in extras 2025-10-20 10:55:05 +02:00
.editorconfig chore(update): update repository (#4054) 2024-07-15 17:09:19 +02:00
.gitignore ci: update 2024-07-06 23:45:22 +02:00
.neoconf.json build: neoconf sumneko_lua => lua_ls 2023-03-04 10:41:52 +01:00
CHANGELOG.md chore(main): release 15.9.0 (#6643) 2025-10-19 13:00:52 +02:00
CONTRIBUTING.md docs: added experience to CONTRIBUTING 2024-06-10 23:26:07 +02:00
init.lua feat(init)!: disable init.lua and show a message on how to use LazyVim 2023-01-07 11:44:40 +01:00
LICENSE docs: added LICENSE 2023-01-01 09:48:09 +01:00
NEWS.md docs(treesitter): fix checkhealth command (#6433) 2025-09-17 10:40:37 +02:00
README-CN.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README-DE.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README-ES.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README-FR.md docs(fr): add readme in french (#5300) 2025-10-20 00:01:17 -07:00
README-IT.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README-JP.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README-KO.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README-PL.md Added Polish translation of README (README-PL.md) (#5816) 2025-10-19 23:59:40 -07:00
README-PT.md docs(README): bump Neovim requirement to 0.11.2 (#6611) 2025-10-11 08:48:48 +02:00
README.md feat!: bump Neovim requirement to 0.11.2 2025-09-17 07:01:08 +02:00
selene.toml ci: update 2024-07-05 15:31:26 +02:00
stylua.toml build(format): sort requires 2023-10-09 11:34:23 +02:00
vim.yml ci: update test scripts 2025-10-08 21:26:13 +02:00


Install · Configure · Docs

LazyVim is a Neovim setup powered by 💤 lazy.nvim to make it easy to customize and extend your config. Rather than having to choose between starting from scratch or using a pre-made distro, LazyVim offers the best of both worlds - the flexibility to tweak your config as needed, along with the convenience of a pre-configured setup.

image

image

Features

  • 🔥 Transform your Neovim into a full-fledged IDE
  • 💤 Easily customize and extend your config with lazy.nvim
  • 🚀 Blazingly fast
  • 🧹 Sane default settings for options, autocmds, and keymaps
  • 📦 Comes with a wealth of plugins pre-configured and ready to use

Requirements

  • Neovim >= 0.11.2 (needs to be built with LuaJIT)
  • Git >= 2.19.0 (for partial clones support)
  • a Nerd Font (optional)
  • a C compiler for nvim-treesitter. See here

🚀 Getting Started

You can find a starter template for LazyVim here

Try it with Docker
docker run -w /root -it --rm alpine:edge sh -uelic '
  apk add git lazygit fzf curl neovim ripgrep alpine-sdk --update
  git clone https://github.com/LazyVim/starter ~/.config/nvim
  cd ~/.config/nvim
  nvim
'
Install the LazyVim Starter
  • Make a backup of your current Neovim files:

    mv ~/.config/nvim ~/.config/nvim.bak
    mv ~/.local/share/nvim ~/.local/share/nvim.bak
    
  • Clone the starter

    git clone https://github.com/LazyVim/starter ~/.config/nvim
    
  • Remove the .git folder, so you can add it to your own repo later

    rm -rf ~/.config/nvim/.git
    
  • Start Neovim!

    nvim
    

    Refer to the comments in the files on how to customize LazyVim.


There's a great video created by @elijahmanor with a walkthrough to get started.

Watch the video

@dusty-phillips wrote a comprehensive book called LazyVim for Ambitious Developers available for free online.

📂 File Structure

The files under config will be automatically loaded at the appropriate time, so you don't need to require those files manually. LazyVim comes with a set of default config files that will be loaded before your own. See here

You can add your custom plugin specs under lua/plugins/. All files there will be automatically loaded by lazy.nvim

~/.config/nvim
├── lua
│   ├── config
│   │   ├── autocmds.lua
│   │   ├── keymaps.lua
│   │   ├── lazy.lua
│   │   └── options.lua
│   └── plugins
│       ├── spec1.lua
│       ├── **
│       └── spec2.lua
└── init.lua

⚙️ Configuration

Refer to the docs