Just nvim
. It is an simple and extensible neovim config with awesome community plugins.
- Nerd Fonts
- Neovim 0.7+
- Plugin Requirements:
- ripgrep (live grep for
telescope
) curl
orwget
(formason
)
- ripgrep (live grep for
Note the screenshots used JetBrainsMono Nerd Font.
git clone https://github.com/jaeheonji/nvim $HOME/.config/nvim && nvim
- Soothing pastel theme by catppuccin
- Dashboard with alpha-nvim
- Buffer & Tab line with bufferline.nvim
- Neovim LSP with nvim-lspconfig and mason.nvim
- Autocompletion with nvim-cmp
- Diagnositcs, code actions and more with null-ls.nvim
- Statusline with feline.nvim
- File browse with neo-tree.nvim
- Fuzzy find with telescope.nvim
- Popup suggestions and key binding with which-key.nvim
- Git integration for buffers with gitsigns.nvim
- Syntax highlighting with nvim-treesitter
- Autopair with nvim-autopairs
- Powerful commenting with comment.nvim
A list of all plugins can be found here.
One of the goals of this project is to provide users with a extensible user configuration. And the user configuration should be easy to understand and simple.
First, To set up a user configuration, copy the default config to custom.lua
.
cp ~/.config/nvim/lua/core/config.lua ~/.config/nvim/lua/custom.lua
Please check the file name and path. Currently, only one path is supported.
The user configuration provides five components:
colorscheme
options
key_bindings
plugins
hooks
The colorscheme
currently only provides catppuccin/nvim
. Instead, you can set up transparency through the transparency
option. This options is false
by default.
You can set options
for neovim. If you want to turn off the default options and set a new value, you can do the following.
options = {
enable_default = false, -- disable default options
setup = function()
vim.opt.number = true
vim.opt.relativenumber = false
...
end,
}
Same as options
. Note that this project basically supports which-key
, so you can use which-key
to key-binding as follows.
options = {
enable_default = true,
setup = function()
local default_opts = { noremap = true, silent = true }
local map = vim.keymap.set
-- bind with vim.keymap.set function
map({ "n", "v" }, "<C-c>", '"+y', default_opts)
map({ "n" }, "<C-v>", '"+p', default_opts)
-- using which-key
local ok, wkey = pcall(require, "which-key")
if not ok then
return
end
wkey.register({ ... })
end,
}
The plugins
are one of the most important components of user configuration. The plugins provides two options. The first is to add a new plugin and the rest is to override the settings for the plugin provided by this project.
Add new plugins
plugins = {
custom = {
{
-- I love Rust :)
"simrat39/rust-tools.nvim"
ft = { "rust "},
config = function()
require("rust-tools").setup({ ... })
end
}
}
...
}
Override settings
Override settings uses the same table as each plugin settings by default. But, for null-ls
and lspconfig
settings, use custom settings for convenience. The following is an example.
plugins = {
override = {
["lspconfig"] = {
servers = {
sumneko_lua = { on_attch = function() ... end },
gopls = {},
golangci_lint_ls = {},
}
},
["null-ls"] = {
source = {
"code_actions.gitsigns",
"formatting.stylua",
}
}
}
}
For more user configuration examples, check out my configuration.