diff options
Diffstat (limited to '')
-rw-r--r-- | init.lua | 517 |
1 files changed, 517 insertions, 0 deletions
diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..fafa001 --- /dev/null +++ b/init.lua @@ -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) |