initial commit for my nvim config (all in one file for now)
This commit is contained in:
517
init.lua
Normal file
517
init.lua
Normal file
@ -0,0 +1,517 @@
|
||||
local o = vim.opt
|
||||
local g = vim.g
|
||||
local a = vim.api
|
||||
|
||||
g.mapleader = " "
|
||||
|
||||
---------------
|
||||
-- better ui --
|
||||
---------------
|
||||
o.number = true
|
||||
o.relativenumber = true
|
||||
o.numberwidth = 2
|
||||
o.cursorline = true
|
||||
o.scrolloff = 5 -- # lines below/above cursor
|
||||
o.showmode = false
|
||||
o.cmdheight = 2
|
||||
o.mouse = "" -- no mouse
|
||||
|
||||
o.wrap = true
|
||||
o.linebreak = true
|
||||
o.emoji = false
|
||||
o.clipboard = 'unnamedplus' -- use system clipboard
|
||||
|
||||
-- intenting & tabing
|
||||
o.expandtab = true
|
||||
o.smarttab = true
|
||||
o.cindent = true
|
||||
o.autoindent = true
|
||||
o.tabstop = 2
|
||||
o.shiftwidth = 2
|
||||
o.softtabstop = -1 -- If negative, shiftwidth value is used
|
||||
|
||||
-- width line
|
||||
o.colorcolumn = { 80 }
|
||||
vim.cmd('highlight ColorColumn ctermbg=0 guibg=lightgrey')
|
||||
|
||||
-- colors
|
||||
o.termguicolors = true
|
||||
vim.cmd('colorscheme jellybeans-nvim')
|
||||
|
||||
local colors = {
|
||||
black = '#000000',
|
||||
black2 = '#161616',
|
||||
grey = '#1E1E1E',
|
||||
grey2 = '#404040',
|
||||
white = '#ffffff',
|
||||
red = '#E06C75',
|
||||
orange = '#EA936C',
|
||||
yellow = '#E5C07B',
|
||||
green = '#98C379',
|
||||
blue = '#61AFEF',
|
||||
purple = '#C678DD',
|
||||
}
|
||||
|
||||
-- custom opts
|
||||
tablines = 'colored' -- false, colored, wrap
|
||||
minimapcolor = colors.grey
|
||||
|
||||
------------
|
||||
-- saving --
|
||||
------------
|
||||
o.swapfile = false
|
||||
o.undofile = true
|
||||
o.confirm = true
|
||||
|
||||
------------
|
||||
-- search --
|
||||
------------
|
||||
o.ignorecase = true
|
||||
o.smartcase = true
|
||||
o.wrapscan = true
|
||||
o.showmatch = true
|
||||
|
||||
----------------
|
||||
-- wild menus --
|
||||
----------------
|
||||
o.wildoptions = 'pum'
|
||||
o.pumblend = 10
|
||||
o.pumheight = 20
|
||||
|
||||
o.wildignorecase = true
|
||||
o.wildignore = '*.o'
|
||||
|
||||
-------------------
|
||||
-- auto commands --
|
||||
-------------------
|
||||
a.nvim_create_augroup('bufcheck', {clear = true})
|
||||
|
||||
-- highlight yanks
|
||||
a.nvim_create_autocmd('TextYankPost', {
|
||||
group = 'bufcheck',
|
||||
pattern = '*',
|
||||
callback = function() vim.highlight.on_yank{timeout = 250} end
|
||||
})
|
||||
|
||||
-- start terminal in insert mode
|
||||
a.nvim_create_autocmd('TermOpen', {
|
||||
group = 'bufcheck',
|
||||
pattern = '*',
|
||||
command = 'startinsert | set winfixheight'
|
||||
})
|
||||
|
||||
-- start git messages in insert mode
|
||||
a.nvim_create_autocmd('FileType', {
|
||||
group = 'bufcheck',
|
||||
pattern = { 'gitcommit', 'gitrebase', },
|
||||
command = 'startinsert | 1'
|
||||
})
|
||||
|
||||
--------------
|
||||
-- keybinds --
|
||||
--------------
|
||||
local default_opts = { noremap = true, silent = true }
|
||||
local expr_opts = { noremap = true, expr = true, silent = true }
|
||||
|
||||
-- use esc to close term
|
||||
a.nvim_set_keymap("t", "<ESC>", "<C-d>", default_opts)
|
||||
|
||||
-- open file viewer
|
||||
a.nvim_set_keymap("n", "<C-e>", ":Explore<CR>", default_opts)
|
||||
a.nvim_set_keymap("n", "<S-e>", ":Sexplore<CR>", default_opts)
|
||||
|
||||
-- clear search
|
||||
a.nvim_set_keymap("n", "<ESC>", ":nohlsearch<Bar>:echo<CR>", default_opts)
|
||||
|
||||
-- Resizing panes
|
||||
a.nvim_set_keymap("n", "<C-h>", ":vertical resize -1<CR>", default_opts)
|
||||
a.nvim_set_keymap("n", "<C-l>", ":vertical resize +1<CR>", default_opts)
|
||||
a.nvim_set_keymap("n", "<C-k>", ":resize +1<CR>", default_opts)
|
||||
a.nvim_set_keymap("n", "<C-j>", ":resize -1<CR>", default_opts)
|
||||
|
||||
-- don't blame me pls
|
||||
local title = "Nvim"
|
||||
a.nvim_set_keymap("n", "<C-g>",
|
||||
":Gitsigns toggle_current_line_blame<CR>", default_opts
|
||||
)
|
||||
|
||||
----------------------
|
||||
-- plugin functions --
|
||||
----------------------
|
||||
vim.cmd [[highlight IndentBlanklineIndent1 guifg=#E06C75 gui=nocombine]]
|
||||
vim.cmd [[highlight IndentBlanklineIndent2 guifg=#EA936C gui=nocombine]]
|
||||
vim.cmd [[highlight IndentBlanklineIndent3 guifg=#E5C07B gui=nocombine]]
|
||||
vim.cmd [[highlight IndentBlanklineIndent4 guifg=#98C379 gui=nocombine]]
|
||||
vim.cmd [[highlight IndentBlanklineIndent5 guifg=#61AFEF gui=nocombine]]
|
||||
vim.cmd [[highlight IndentBlanklineIndent6 guifg=#C678DD gui=nocombine]]
|
||||
|
||||
if tablines == 'colored' then
|
||||
require("indent_blankline").setup {
|
||||
space_char_blankline = " ",
|
||||
char_highlight_list = {
|
||||
"IndentBlanklineIndent1",
|
||||
"IndentBlanklineIndent2",
|
||||
"IndentBlanklineIndent3",
|
||||
"IndentBlanklineIndent4",
|
||||
"IndentBlanklineIndent5",
|
||||
"IndentBlanklineIndent6",
|
||||
},
|
||||
}
|
||||
elseif tablines == 'wrap' then
|
||||
o.list = true
|
||||
|
||||
require("indent_blankline").setup {
|
||||
space_char_blankline = " ",
|
||||
show_current_context = true,
|
||||
show_current_context_start = true,
|
||||
}
|
||||
else
|
||||
g.indent_blankline_char = ' '
|
||||
end
|
||||
|
||||
-- minimap
|
||||
a.nvim_set_hl(0, 'CodewindowBorder', {fg = minimapcolor})
|
||||
|
||||
-- lua line
|
||||
local custom = require'lualine.themes.auto'
|
||||
|
||||
custom.normal = {
|
||||
a = { fg = colors.black, bg = colors.blue, gui = 'bold' },
|
||||
b = { fg = colors.black, bg = colors.blue, gui = 'bold' },
|
||||
c = { fg = colors.white, bg = colors.grey },
|
||||
x = {},
|
||||
y = { fg = colors.blue, bg = colors.black2 },
|
||||
z = { fg = colors.black2, bg = colors.blue, gui = 'bold' },
|
||||
}
|
||||
custom.insert = {
|
||||
a = { fg = colors.black, bg = colors.green, gui = 'bold' },
|
||||
b = { fg = colors.black, bg = colors.green, gui = 'bold' },
|
||||
c = { fg = colors.white, bg = colors.grey },
|
||||
x = {},
|
||||
y = { fg = colors.green, bg = colors.black2 },
|
||||
z = { fg = colors.black2, bg = colors.green, gui = 'bold' },
|
||||
}
|
||||
custom.replace = {
|
||||
a = { fg = colors.black, bg = colors.orange, gui = 'bold' },
|
||||
b = { fg = colors.black, bg = colors.orange, gui = 'bold' },
|
||||
c = { fg = colors.white, bg = colors.grey },
|
||||
x = {},
|
||||
y = { fg = colors.orange, bg = colors.black2 },
|
||||
z = { fg = colors.black2, bg = colors.orange, gui = 'bold' },
|
||||
}
|
||||
custom.visual = {
|
||||
a = { fg = colors.black, bg = colors.purple, gui = 'bold' },
|
||||
b = { fg = colors.black, bg = colors.purple, gui = 'bold' },
|
||||
c = { fg = colors.white, bg = colors.grey },
|
||||
x = {},
|
||||
y = { fg = colors.purple, bg = colors.black2 },
|
||||
z = { fg = colors.black2, bg = colors.purple, gui = 'bold' },
|
||||
}
|
||||
custom.command = {
|
||||
a = { fg = colors.black, bg = colors.red, gui = 'bold' },
|
||||
b = { fg = colors.black, bg = colors.red, gui = 'bold' },
|
||||
c = { fg = colors.white, bg = colors.grey },
|
||||
x = {},
|
||||
y = { fg = colors.red, bg = colors.black2 },
|
||||
z = { fg = colors.black2, bg = colors.red, gui = 'bold' },
|
||||
}
|
||||
custom.terminal = {
|
||||
a = { fg = colors.black, bg = colors.yellow, gui = 'bold' },
|
||||
b = { fg = colors.black, bg = colors.yellow, gui = 'bold' },
|
||||
c = { fg = colors.white, bg = colors.grey },
|
||||
x = {},
|
||||
y = { fg = colors.yellow, bg = colors.black2 },
|
||||
z = { fg = colors.black2, bg = colors.yellow, gui = 'bold' },
|
||||
}
|
||||
custom.inactive = {
|
||||
a = { bg = colors.grey },
|
||||
b = { bg = colors.grey },
|
||||
c = { bg = colors.grey },
|
||||
x = { bg = colors.grey },
|
||||
y = { bg = colors.grey },
|
||||
z = { bg = colors.grey },
|
||||
}
|
||||
|
||||
require('lualine').setup {
|
||||
options = {
|
||||
icons_enabled = false,
|
||||
component_separators = { left = '', right = '' },
|
||||
section_separators = { left = '', right = '' },
|
||||
disabled_filetypes = {
|
||||
statusline = { "", },
|
||||
winbar = {},
|
||||
},
|
||||
theme = custom,
|
||||
always_divide_middle = false,
|
||||
globalstatus = false,
|
||||
refresh = {
|
||||
statusline = 100,
|
||||
tabline = 1000,
|
||||
winbar = 1000,
|
||||
}
|
||||
},
|
||||
sections = {
|
||||
lualine_a = {'mode'},
|
||||
lualine_b = {
|
||||
{ 'filetype',
|
||||
color = { fg = colors.white, bg = colors.grey },
|
||||
},
|
||||
{ 'filename',
|
||||
filestatus = true,
|
||||
path = 1,
|
||||
|
||||
symbols = {
|
||||
modified = '[+]',
|
||||
readonly = '[=]',
|
||||
unnamed = 'No Name',
|
||||
newfile = '[New]',
|
||||
}
|
||||
}
|
||||
},
|
||||
lualine_c = {'diff'},
|
||||
lualine_x = {
|
||||
{ 'fileformat',
|
||||
color = { gui = 'bold' }
|
||||
}
|
||||
},
|
||||
lualine_y = {'progress'},
|
||||
lualine_z = {
|
||||
{ 'location',
|
||||
padding = 1,
|
||||
}
|
||||
}
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_c = {'filename'},
|
||||
lualine_x = {'location'},
|
||||
},
|
||||
}
|
||||
|
||||
a.nvim_set_hl(0, "PmenuSel", { bg = colors.grey2 })
|
||||
a.nvim_set_hl(0, "Pmenu", { bg = colors.black2 })
|
||||
a.nvim_set_hl(0, "CmpItemMenu", { fg = colors.purple, italic = true })
|
||||
a.nvim_set_hl(0, "CmpItemKindSnippet", { bg = "#A377BF", bold = true })
|
||||
a.nvim_set_hl(0, "CmpItemKindText", { bg = "#63bc47", bold = true })
|
||||
|
||||
-- completion
|
||||
local has_words_before = function()
|
||||
unpack = unpack or table.unpack
|
||||
local line, col = unpack(a.nvim_win_get_cursor(0))
|
||||
return col ~= 0 and a.nvim_buf_get_lines(0, line - 1, line, true)
|
||||
[1]:sub(col, col):match("%s") == nil
|
||||
end
|
||||
local luasnip = require('luasnip')
|
||||
local cmp = require('cmp')
|
||||
local lspkind = require('lspkind')
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
cmp.setup {
|
||||
completion = { autocomplete = false, },
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
luasnip.lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'nvim-lsp', priority = 3, max_item_count = 5 },
|
||||
{ name = 'luasnip', priority = 2, max_item_count = 3 },
|
||||
{ name = 'path', priority = 1, max_item_count = 3 },
|
||||
{ name = 'buffer' },
|
||||
{ name = 'calc' },
|
||||
}),
|
||||
window = {
|
||||
completion = {
|
||||
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
|
||||
col_offset = -3,
|
||||
side_padding = 0,
|
||||
}
|
||||
},
|
||||
formatting = {
|
||||
fields = { "kind", "abbr", "menu" },
|
||||
format = function(entry, vim_item)
|
||||
local kind_icons = {
|
||||
Text = "Tx",
|
||||
Snippet = "<>",
|
||||
}
|
||||
local menu_items = {
|
||||
buffer = "buffer",
|
||||
nvim_lsp = "LSP",
|
||||
luasnip = "luasnip",
|
||||
nvim_lua = "lua",
|
||||
calc = "calc",
|
||||
}
|
||||
|
||||
vim_item.kind = string.format(' %s ', kind_icons[vim_item.kind])
|
||||
vim_item.menu = string.format(' (%s)', menu_items[entry.source.name])
|
||||
|
||||
return vim_item
|
||||
end
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
["<Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
elseif luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
elseif has_words_before() then
|
||||
cmp.complete()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { "i", "s" }),
|
||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { "i", "s" }),
|
||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||
['<ESC>'] = cmp.mapping.close(),
|
||||
}),
|
||||
sorting = {
|
||||
comparators = {
|
||||
cmp.config.compare.offset,
|
||||
cmp.config.compare.exact,
|
||||
cmp.config.compare.score,
|
||||
require "cmp-under-comparator".under,
|
||||
cmp.config.compare.kind,
|
||||
cmp.config.compare.sort_text,
|
||||
cmp.config.compare.length,
|
||||
cmp.config.compare.order,
|
||||
},
|
||||
},
|
||||
enabled = function()
|
||||
local context = require 'cmp.config.context'
|
||||
if a.nvim_get_mode().mode == 'c' then
|
||||
return true
|
||||
else
|
||||
return not context.in_treesitter_capture("comment")
|
||||
and not context.in_syntax_group("Comment")
|
||||
end
|
||||
end
|
||||
}
|
||||
|
||||
-------------
|
||||
-- plugins --
|
||||
-------------
|
||||
return require('packer').startup(function(use)
|
||||
-- use packer to manage packer :)
|
||||
use 'wbthomason/packer.nvim'
|
||||
|
||||
-- the rest of the plugins
|
||||
use 'lukas-reineke/indent-blankline.nvim'
|
||||
use { 'lukas-reineke/virt-column.nvim',
|
||||
config = function()
|
||||
require('virt-column').setup()
|
||||
end
|
||||
}
|
||||
use { 'nvim-lualine/lualine.nvim' }
|
||||
use { 'nvchad/nvim-colorizer.lua',
|
||||
config = function()
|
||||
require('colorizer').setup {
|
||||
filetypes = { '*' },
|
||||
user_default_options = {
|
||||
names = false,
|
||||
RRGGBBAA = true,
|
||||
AARRGGBB = true,
|
||||
},
|
||||
}
|
||||
end
|
||||
}
|
||||
use { 'nvim-treesitter/nvim-treesitter',
|
||||
config = function()
|
||||
require'nvim-treesitter.configs'.setup {
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
}
|
||||
end,
|
||||
requires = {
|
||||
{ 'nvim-treesitter/nvim-treesitter-context',
|
||||
config = function()
|
||||
require'treesitter-context'.setup {
|
||||
enable = true,
|
||||
max_lines = 1,
|
||||
patterns = {
|
||||
default = {
|
||||
'function',
|
||||
--[[ 'class',
|
||||
'method', ]]
|
||||
},
|
||||
},
|
||||
}
|
||||
end
|
||||
},
|
||||
}
|
||||
|
||||
}
|
||||
use 'b3nj5m1n/kommentary'
|
||||
use { 'metalelf0/jellybeans-nvim',
|
||||
requires = { 'rktjmp/lush.nvim' },
|
||||
}
|
||||
use { 'gorbit99/codewindow.nvim',
|
||||
config = function()
|
||||
local codewindow = require('codewindow')
|
||||
codewindow.setup({
|
||||
show_cursor = false,
|
||||
minimap_width = 15,
|
||||
window_border = 'double',
|
||||
exclude_filetypes = {
|
||||
"netrw",
|
||||
"help",
|
||||
"packer",
|
||||
},
|
||||
})
|
||||
codewindow.apply_default_keybinds()
|
||||
end,
|
||||
}
|
||||
use 'jghauser/mkdir.nvim'
|
||||
use { 'lewis6991/gitsigns.nvim',
|
||||
config = function() require('gitsigns').setup() end
|
||||
}
|
||||
use { 'chentoast/marks.nvim',
|
||||
config = function() require('marks').setup() end
|
||||
}
|
||||
use { 'nacro90/numb.nvim',
|
||||
config = function() require('numb').setup() end
|
||||
}
|
||||
use { 'stevearc/stickybuf.nvim',
|
||||
config = function() require('stickybuf').setup() end
|
||||
}
|
||||
|
||||
-- completion
|
||||
use { 'hrsh7th/nvim-cmp',
|
||||
requires = {
|
||||
'hrsh7th/cmp-buffer',
|
||||
'hrsh7th/cmp-path',
|
||||
'hrsh7th/cmp-calc',
|
||||
'saadparwaiz1/cmp_luasnip',
|
||||
'hrsh7th/cmp-nvim-lua',
|
||||
'lukas-reineke/cmp-under-comparator',
|
||||
{ 'onsails/lspkind.nvim',
|
||||
config = function()
|
||||
require('lspkind').init()
|
||||
end
|
||||
},
|
||||
}
|
||||
}
|
||||
use { 'L3MON4D3/LuaSnip',
|
||||
tag = 'v1.*',
|
||||
requires = {
|
||||
'rafamadriz/friendly-snippets',
|
||||
},
|
||||
}
|
||||
use { 'doxnit/cmp-luasnip-choice',
|
||||
config = function()
|
||||
require('cmp_luasnip_choice').setup({
|
||||
auto_open = true,
|
||||
})
|
||||
end
|
||||
}
|
||||
use { 'windwp/nvim-autopairs',
|
||||
config = function() require("nvim-autopairs").setup {} end
|
||||
}
|
||||
end)
|
Reference in New Issue
Block a user