Dusk.nvim is a blazing fast Lua config suited for Full-stack Java development.
Optimized with Spring Boot && Angular projects in mind.
Dusk.nvim is designed to be:
- minimal. 1700 lines of code in total and you have a full IDE.
- performant. ~70-80ms startup time on modern hardware.
- Out-of-the-box complete. Works with installation.
- Not opinionated. Defaults are always preferred.
- Extensible. The codebase is very easy to understand and extend.
- Native LSP and autocompletion
- Syntax highlighting via nvim-treesitter
- Java Unit Testing
- Java Debugging
- Javascript client side && server side debugging
- Sonarlint support
- Git integration with LazyGit
- Explore files via nvim-tree
- Fuzzy finder via Telescope
- Good markdown support
dusk.nvim
nvim
├── init.lua
└── lua
├── optional
│ └── optionalfeatures.lua
├── pluginconfigs
│ ├── cmp.lua
│ ├── dadbod.lua
│ ├── dap.lua
│ ├── dashboard.lua
│ ├── jdtls.lua
│ ├── lsp.lua
│ ├── treesitter.lua
│ └── whichkey.lua
└── settings
├── autocommands.lua
├── keymaps.lua
└── options.lua
The project structure is very simple:
- Plugins with minimal configuration are loaded in init.lua.
Basically, go through init.lua and you have understood the whole codebase. - Vim options are in options.lua
- Non-whichkey registered keymaps are in keymaps.lua. The rest are in whichkey.lua.
- Autocommands are in autocommands.lua
- Go through the optionalfeatures.lua and uncomment the features you want enabled in your build.
- The more extensive configuration that some plugins require are in pluginconfigs folder.
Pay special attention to jdtls.lua, because there you can choose your Java server options
For Dusk.nvim to perform as intended, you need to have the following dependencies installed:
- Neovim version >= 0.9.5
- Git 2.23+
- Ripgrep for telescope
- fd for telescope
- Nodejs
- Neovim node client (npm install -g neovim) - neovim/node-client
- "zig", "clang", or "gcc" executables to be able to compile treesitter parsers (check your package manager for one of these)
- Treesitter-cli nodejs module (Check your package manager for a treesitter or treesitter-cli package)
- Java 17+ (for Java LSP server)
- A font with nerdfont icons (my suggestion: https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Hack)
- LazyGit && LazyDocker if you are going to use it inside neovim.
NOTE: Run :checkhealth command to see what other dependencies you might be missing and to receive help if you have problems with installation.
Platform | Supported |
---|---|
Windows | ✅ |
macOS | ✅ |
Linux | ✅ |
- Make sure to remove or move your current
nvim
directory (~/.config/nvim
), if it exists. git clone https://github.com/imbacraft/dusk.nvim
- Copy or Move the
nvim
folder from the cloned dusk.nvim project (not the dusk.nvim folder!) to your~/.config/
folder. In the end, your folder should look like this:~/.config/nvim
. Please note, depending on your OS, neovim might search for configuration in a different folder. In this case, run the:checkhealth
command inside neovim, to see where it looks for configuration and place the nvim folder inside that. - Run the
nvim
command and wait for the plugins to be installed. - If some plugins fail to install at this point, don't be alarmed. Enter the
:qa!
command to exit neovim. - Re-run the
nvim
command and enterSPC p s
to update the package manager (if it's not done automatically). In general, you might have to do a lot of restarts of nvim until all the packages are installed. It can take quite some time. - If some packages fail to install consistently, run the
:checkhealth
command and check the dependencies section above to see what you might be missing. - Happy editing!
Dusk.nvim provides a java development experience with the following advantages:
- Eclipse level editing and refactoring capabilities in neovim
- Support for Sonarlint
- Autocomplete candidates from the current buffer, which includes comments
- Superb coding navigation - searches references in decompiled sources also
- Execute and debug test methods and classes
Features curently not supported (these are what you will miss from your IDE - but also shows the room for improvement):
- No option for running all tests in test resource folders
- Referenced external libraries not available in file explorer tree
In jdtls.lua, you will find the following snippet. Here you can configure your multiple java runtimes.
Example:
settings = {
java = {
configuration = {
runtimes = {
{
name = "JavaSE-1.8",
path = "/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home",
},
{
name = "JavaSE-11",
path = "/opt/homebrew/Cellar/openjdk@11/11.0.18/libexec/openjdk.jdk/Contents/Home",
default = true
},
{
name = "JavaSE-19",
path = "/opt/homebrew/Cellar/openjdk/19.0.2/libexec/openjdk.jdk/Contents/Home",
},
}
}
}
}