brainfucksec / neovim-lua

Neovim KISS configuration with Lua
GNU General Public License v3.0
826 stars 116 forks source link
dotfiles ide kiss lua neovim neovim-config neovim-configuration neovim-dotfiles neovim-lua nvim nvim-configs nvim-lua vim vimrc

neovim-lua_logo

Neovim KISS configuration with Lua and LSP


Table of Contents

Plugins

lazy.nvim - A modern plugin manager for Neovim

lualine.nvim - A blazing fast and easy to configure neovim statusline plugin written in pure lua.

nvim-lspconfig - A collection of common configurations for Neovim's built-in language server client

nvim-cmp - Auto completion plugin

LuaSnip - Snippet Engine for Neovim written in Lua

nvim-tree.lua - A File Explorer written In Lua

indentBlankline - Adds indentation guides to all lines (including empty lines)

nvim-autopairs - A super powerful autopairs for Neovim

Tagbar - A class outline viewer for Vim

gitsigns - Super fast git decorations implemented purely in lua/teal

nvim-treesitter - Nvim Treesitter configurations and abstraction layer

alpha-nvim - A fast and highly customizable greeter for neovim.

nvim-web-devicons - A Lua fork of vim-devicons

Directory Tree

${HOME}/.config/nvim

alt text

Files and Settings

/nvim

See: nanotee/nvim-lua-guide: Where to put Lua files

/nvim/lua/core

/nvim/lua/lsp

/nvim/lua/plugins

Installation

  1. Install Neovim v0.10.x.

  2. Install Nerd Fonts, (the font of the screenshots are JetBrainsMono Nerd Font).

  3. Install Node.js - npm for download packages of LSP language servers, see: LSP Configuration.

  4. Make a backup of your current nvim folder if necessary:

mv ~/.config/nvim ~/.config/nvim.backup
  1. Download neovim-lua with git and copy the nvim folder in the ${HOME}/.config directory:
git clone https://github.com/brainfucksec/neovim-lua.git
cd neovim-lua/
cp -Rv nvim ~/.config/
  1. Install lazy.nvim for install and manage the plugins, see: lazy.nvim - Installation

  2. Run Neovim for download/sync plugins with lazy

nvim

LSP Configuration

  1. Install LSP language servers with npm, see: Languages Currently Supported
sudo npm install -g \
    bash-language-server \
    pyright \
    vscode-langservers-extracted \
    typescript typescript-language-server
  1. Install additional packages for plugins support:

C, C++:

Python:

  1. Open a source file of one of the supported languages with Neovim, and run command :LspInfo for verify the LSP support.

See: nvim-lspconfig - Quickstart

Languages Currently Supported

Lua - builtin

Bash - bashls

Python - pyright

C, C++ - clangd

HTML, CSS, JSON - vscode-langservers-extracted

JavaScript, TypeScript - ts_ls

See: nvim-lspconfig #doc/LSP configs

Appearance

Available Colorschemes

Fonts: See: Installation

Icons: nvim-web-devicons

See: Screenshots

The color scheme (default: OneDark) is defined in the following file:

--[[
Set Neovim UI color scheme.
Insert preferred color scheme in the `color_scheme` variable.
Color scheme is loaded at "Load color scheme" after settings sections, setup
must be called before loading.
--]]
local status_ok, color_scheme = pcall(require, 'onedark')

-- Color scheme setup (settings) before load:
require('onedark').setup {
    -- Your preferences here.
}

-- Load color scheme:
require('onedark').load()

Keymaps

These are the default keymaps, in the following shortcuts, the <leader> key is set up to , (comma) character, see: keymaps.lua.

Shortcut Mode Description
kk Insert Esc with kk
<leader>c Normal Clear search highlights
<F2> Normal Toggle Paste mode
<leader>tk/th Normal Change split orientation (vertical/horizontal)
<Ctrl> + {h,j,k,l} Normal Move around splits windows
<leader>r Normal Reload configuration file
<leader>s Normal Save file
<leader>q Normal Save (close all windows) and exit from Neovim
<Ctrl> + t Normal Open terminal (:Term)
<Esc> Terminal Exit terminal
<Ctrl> + n Normal Open NvimTree
<leader>z Normal Open Tagbar

Configuration Check

:checkhealth

alt text

nvim --startuptime > /tmp/nvim-start.log

nvim /tmp/nvim-start.log

See: :help startuptime

Also you can check the plugins configuration and startup time with lazy:

:checkhealth lazy
:Lazy profile

See: lazy.nvim - Usage

Screenshots

(Click to expand) **OneDark Darker** ![1-onedark_darker.png](img/1-onedark_darker.png) **OneDark Dark** ![2-onedark_dark.png](img/2-onedark_dark.png) **OneDark Cool** ![3-onedark_cool.png](img/3-onedark_cool.png) **OneDark Deep** ![4-onedark_deep.png](img/4-onedark_deep.png) **Kanagawa Wave** (lualine theme: palenight) ![5-kanagawa_wave.png](img/5-kanagawa_wave.png) **Kanagawa Dragon** (lualine theme: seoul256) ![6-kanagawa_dragon.png](img/6-kanagawa_dragon.png) **Monokai** (lualine theme: molokai) ![7-monokai.png](img/7-monokai.png) **Rosé Pine** (lualine theme: nightfly) ![8-rose-pine.png](img/8-rose-pine.png) **lazy.nvim** ![lazy-nvim.png](img/lazy-nvim.png)

Guides and Resources

Other Neovim Lua Projects and Examples

Lua Resources


Disclaimer

This setup is based on KISS principle, probably some concepts may not be valid for everyone. Then feel free to take what you need but don't install anything without checking first!

This setup is not a Framework but it is the configuration I use to work on Linux, it can be used by default as it can be a start point to understand how Neovim is structured and maybe improve this config. Is the base configuration I use, and it tries to stay as simple as possible, with each addition weighted along these lines.

Less is more

Thanks to: