From 16d566da938b049dda8998beec43e3cd85c4ed47 Mon Sep 17 00:00:00 2001 From: cafebabe <77344710+yuzu-eva@users.noreply.github.com> Date: Sat, 21 May 2022 23:33:01 +0200 Subject: Add nvim configuration --- .config/nvim/lua/lib/utils.lua | 22 +++++++ .config/nvim/lua/user/keymaps.lua | 35 +++++++++++ .config/nvim/lua/user/options.lua | 23 ++++++++ .config/nvim/lua/user/plugins.lua | 87 ++++++++++++++++++++++++++++ .config/nvim/lua/user/plugins/cmp.lua | 62 ++++++++++++++++++++ .config/nvim/lua/user/plugins/dracula.lua | 12 ++++ .config/nvim/lua/user/plugins/lspconfig.lua | 76 ++++++++++++++++++++++++ .config/nvim/lua/user/plugins/lualine.lua | 64 ++++++++++++++++++++ .config/nvim/lua/user/plugins/nvim-tree.lua | 13 +++++ .config/nvim/lua/user/plugins/telescope.lua | 25 ++++++++ .config/nvim/lua/user/plugins/treesitter.lua | 30 ++++++++++ 11 files changed, 449 insertions(+) create mode 100644 .config/nvim/lua/lib/utils.lua create mode 100644 .config/nvim/lua/user/keymaps.lua create mode 100644 .config/nvim/lua/user/options.lua create mode 100644 .config/nvim/lua/user/plugins.lua create mode 100644 .config/nvim/lua/user/plugins/cmp.lua create mode 100644 .config/nvim/lua/user/plugins/dracula.lua create mode 100644 .config/nvim/lua/user/plugins/lspconfig.lua create mode 100644 .config/nvim/lua/user/plugins/lualine.lua create mode 100644 .config/nvim/lua/user/plugins/nvim-tree.lua create mode 100644 .config/nvim/lua/user/plugins/telescope.lua create mode 100644 .config/nvim/lua/user/plugins/treesitter.lua (limited to '.config/nvim/lua') diff --git a/.config/nvim/lua/lib/utils.lua b/.config/nvim/lua/lib/utils.lua new file mode 100644 index 0000000..8abbabd --- /dev/null +++ b/.config/nvim/lua/lib/utils.lua @@ -0,0 +1,22 @@ +local M = {} + +M.keymap = function(mode, lhs, rhs, opts) + vim.api.nvim_set_keymap( + mode, + lhs, + rhs, + vim.tbl_extend('keep', opts or {}, { noremap = true, silent = true }) + ) +end + +M.buf_keymap = function(bufnr, mode, lhs, rhs, opts) + vim.api.nvim_buf_set_keymap( + bufnr, + mode, + lhs, + rhs, + vim.tbl_extend('keep', opts or {}, { noremap = true, silent = true }) + ) +end + +return M diff --git a/.config/nvim/lua/user/keymaps.lua b/.config/nvim/lua/user/keymaps.lua new file mode 100644 index 0000000..14c4b2c --- /dev/null +++ b/.config/nvim/lua/user/keymaps.lua @@ -0,0 +1,35 @@ +local keymap = require 'lib.utils'.keymap + +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +keymap('n', 'Q', ':bufdo bdelete') + +-- Allow gf to open non-existant files +keymap('n', 'gf', ':edit ') + +-- Quick navigation between splits +keymap('n', '', 'h') +keymap('n', '', 'j') +keymap('n', '', 'k') +keymap('n', '', 'l') + +-- Insert trailing ; or , from insert mode +keymap('i', ';;', 'A;') +keymap('i', ',,', 'A,') + +-- Open the current file in the default program +keymap('n', 'x', ':!xdg-open %') + +-- Resize with arrows +keymap('n', '', ':resize +2') +keymap('n', '', ':resize -2') +keymap('n', '', ':vertical resize -2') +keymap('n', '', ':vertical resize +2') + +-- Quickly escape to normal mode +keymap('i', 'jj', '') + +keymap('n', 'cd', ':cd %:p:h:pwd') + +keymap('n', 'E', ':EslintFixAll') diff --git a/.config/nvim/lua/user/options.lua b/.config/nvim/lua/user/options.lua new file mode 100644 index 0000000..69f0280 --- /dev/null +++ b/.config/nvim/lua/user/options.lua @@ -0,0 +1,23 @@ +vim.o.guicursor = 'a:block' +vim.o.expandtab = true +vim.o.shiftwidth = 4 +vim.o.tabstop = 4 +vim.o.signcolumn = 'yes:2' +vim.o.relativenumber = true +vim.o.number = true +vim.o.termguicolors = true +vim.o.ignorecase = true +vim.o.smartcase = true +vim.o.wildmode = 'longest:full,full' +vim.o.wrap = false +vim.o.scrolloff = 8 +vim.o.sidescrolloff = 8 +vim.o.cursorline = 1 +vim.o.splitright = 1 +vim.o.splitbelow = 1 +vim.o.clipboard = 'unnamedplus' -- Use Linux system clipboard +vim.o.updatetime = 250 -- Decrease CursorHold delay +vim.o.redrawtime = 10000 -- Allow more time for loading syntax on large files +vim.o.foldmethod = "expr" +vim.o.foldlevelstart = 10 +vim.o.foldexpr = "nvim_treesitter#foldexpr()" diff --git a/.config/nvim/lua/user/plugins.lua b/.config/nvim/lua/user/plugins.lua new file mode 100644 index 0000000..d1a01ce --- /dev/null +++ b/.config/nvim/lua/user/plugins.lua @@ -0,0 +1,87 @@ +require('packer').startup(function() + use { 'wbthomason/packer.nvim' } -- Let packer manage itself + + use { 'tpope/vim-commentary' } + use { 'tpope/vim-surround' } + use { 'tpope/vim-eunuch' } + + use { + 'dracula/vim', + as = 'dracula', + config = function() + require('user.plugins.dracula') + end + } + + use { + 'windwp/nvim-autopairs', + config = function() + require('nvim-autopairs').setup() + end + } + use { + 'kyazdani42/nvim-tree.lua', + requires = 'kyazdani42/nvim-web-devicons', + config = function() + require('user.plugins.nvim-tree') + end + } + use { + 'nvim-treesitter/nvim-treesitter', + run = ':TSUpdate', + requires = { + 'nvim-treesitter/playground', + 'nvim-treesitter/nvim-treesitter-textobjects', + 'lewis6991/spellsitter.nvim', + 'JoosepAlviste/nvim-ts-context-commentstring', + }, + config = function() + require('spellsitter').setup() + require('user.plugins.treesitter') + end + } + use { + 'neovim/nvim-lspconfig', + requires = { + 'b0o/schemastore.nvim', + 'folke/lsp-colors.nvim', + 'weilbith/nvim-code-action-menu', + }, + config = function() + require('user.plugins.lspconfig') + end + } + use { + 'hrsh7th/nvim-cmp', + requires = { + 'hrsh7th/cmp-nvim-lsp', + 'hrsh7th/cmp-buffer', + 'jessarcher/cmp-path', + 'hrsh7th/cmp-nvim-lua', + 'onsails/lspkind-nvim', + 'hrsh7th/cmp-nvim-lsp-signature-help', + }, + config = function() + require('user.plugins.cmp') + end + } + use { + 'nvim-telescope/telescope.nvim', + requires = { + 'nvim-lua/popup.nvim', + 'nvim-lua/plenary.nvim', + 'kyazdani42/nvim/nvim-web-devicons', + }, + config = function() + require('user.plugins.telescope') + end + } + use { + 'nvim-lualine/lualine.nvim', + requires = 'kyazdani42/nvim-web-devicons', + config = function() + require('user.plugins.lualine') + end + } +end) + diff --git a/.config/nvim/lua/user/plugins/cmp.lua b/.config/nvim/lua/user/plugins/cmp.lua new file mode 100644 index 0000000..fdd7b56 --- /dev/null +++ b/.config/nvim/lua/user/plugins/cmp.lua @@ -0,0 +1,62 @@ +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match '%s' == nil +end + +local cmp = require 'cmp' +local lspkind = require 'lspkind' + +-- Set completeopt to have a better completion experience +vim.o.completeopt = 'menuone,longest,preview' + +cmp.setup { + experimental = { + ghost_text = true, + }, + formatting = { + format = lspkind.cmp_format { + mode = 'symbol', + menu = { + nvim_lsp = '[LSP]', + nvim_lua = '[Lua]', + buffer = '[BUF]', + }, + }, + }, + mapping = { + [''] = cmp.mapping.select_prev_item(), + [''] = cmp.mapping.select_next_item(), + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.close(), + [''] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.replace, + select = false, + }, + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { 'i', 's' }), + [''] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + else + fallback() + end + + end, { 'i', 's' }), + }, + sources = { + { name = 'nvim_lsp' }, + { name = 'nvim_lsp_signature_help' }, + { name = 'nvim_lua' }, + { name = 'path' }, + { name = 'buffer' }, + }, +} diff --git a/.config/nvim/lua/user/plugins/dracula.lua b/.config/nvim/lua/user/plugins/dracula.lua new file mode 100644 index 0000000..a2b87fe --- /dev/null +++ b/.config/nvim/lua/user/plugins/dracula.lua @@ -0,0 +1,12 @@ +vim.cmd([[ + augroup DraculaOverrides + autocmd! + autocmd ColorScheme dracula highlight! link Pmenu DraculaBg + autocmd ColorScheme dracula highlight link NormalFloat DraculaBgLight + autocmd ColorScheme dracula highlight FloatBorder guifg=#343746 guibg=#343746 + autocmd ColorScheme dracula highlight DraculaBoundary guibg=none + autocmd ColorScheme dracula highlight DraculaDiffDelete ctermbg=none guibg=none + autocmd ColorScheme dracula highlight DraculaComment cterm=italic gui=italic + augroup end + colorscheme dracula +]]) diff --git a/.config/nvim/lua/user/plugins/lspconfig.lua b/.config/nvim/lua/user/plugins/lspconfig.lua new file mode 100644 index 0000000..248ad20 --- /dev/null +++ b/.config/nvim/lua/user/plugins/lspconfig.lua @@ -0,0 +1,76 @@ +local buf_option = vim.api.nvim_buf_set_option +local buf_keymap = require 'lib.utils'.buf_keymap + +vim.diagnostic.config { + virtual_text = false, + severity_sort = true, + float = { + source = true, + focus = false, + format = function(diagnostic) + if diagnostic.user_data ~= nil and diagnostic.user_data.lsp.code ~= nil then + return string.format("%s: %s", diagnostic.user_data.lsp.code, diagnostic.message) + end + return diagnostic.message + end, + } +} + +local on_attach = function(_, bufnr) + buf_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + buf_keymap(bufnr, 'n', 'gD', 'lua vim.lsp.buf.declaration()') + buf_keymap(bufnr, 'n', 'gd', 'lua vim.lsp.buf.definition()') + buf_keymap(bufnr, 'n', 'K', 'lua vim.lsp.buf.hover()') + buf_keymap(bufnr, 'n', 'gi', 'lua vim.lsp.buf.implementation()') + buf_keymap(bufnr, 'n', '', 'lua vim.lsp.buf.signature_help()') + buf_keymap(bufnr, 'n', 'D', 'lua vim.lsp.buf.type_definition()') + buf_keymap(bufnr, 'n', 'rn', 'lua vim.lsp.buf.rename()') + buf_keymap(bufnr, 'n', 'gr', ':Telescope lsp_references') + + buf_keymap(bufnr, 'n', 'ca', ':CodeActionMenu') + buf_keymap(bufnr, 'v', 'ca', ':CodeActionMenu') + + buf_keymap(bufnr, 'n', 'd', 'lua vim.diagnostic.open_float()') + buf_keymap(bufnr, 'n', '[d', 'lua vim.diagnostic.goto_prev()') + buf_keymap(bufnr, 'n', ']d', 'lua vim.diagnostic.goto_next()') + buf_keymap(bufnr, 'n', 'F', 'lua vim.lsp.buf.format { async = true }') + + -- if _.server_capabilities.document_formatting then + -- vim.api.nvim_command [[augroup Format]] + -- vim.api.nvim_command [[autocmd! * ]] + -- vim.api.nvim_command [[autocmd BufWritePre lua vim.lsp.buf.formatting_seq_sync()]] + -- vim.api.nvim_command [[augroup END]] + -- end + +end + + + +require'lspconfig'.eslint.setup{ + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + }, + handlers = { + ['window/showMessageRequest'] = function(_, result, _) return result end, + }, +} + +require'lspconfig'.tsserver.setup{ + on_attach = on_attach, + flags = { + debounce_text_changes = 150, + } +} +-- suppress error messages from lang servers +vim.notify = function(msg, log_level, _) + if msg:match 'exit code' then + return + end + if log_level == vim.log.levels.ERROR then + vim.api.nvim_err_writeln(msg) + else + vim.api.nvim_echo({ { msg } }, true, {}) + end +end diff --git a/.config/nvim/lua/user/plugins/lualine.lua b/.config/nvim/lua/user/plugins/lualine.lua new file mode 100644 index 0000000..6ac5cee --- /dev/null +++ b/.config/nvim/lua/user/plugins/lualine.lua @@ -0,0 +1,64 @@ +-- local tabLineHl = vim.api.nvim_get_hl_by_name('TabLine', true) +-- local bg = '#' .. bit.tohex(tabLineHl.background, 6) +-- local fg = '#' .. bit.tohex(tabLineHl.foreground, 6) +local fg = '#F8F8F2' -- DraculaFg +local bg = '#21222C' -- DraculaBgDark +local separator = '#424450' -- DraculaSubtle +-- local fg = '#' .. bit.tohex(vim.api.nvim_get_hl_by_name('DraculaFg', true).foreground, 6) +-- local bg = '#' .. bit.tohex(vim.api.nvim_get_hl_by_name('DraculaBgDark', true).background, 6) +-- local separator = '#' .. bit.tohex(vim.api.nvim_get_hl_by_name('DraculaSubtle', true).foreground, 6) + +require('lualine').setup { + options = { + component_separators = '', + section_separators = '▕', + theme = { + normal = { + a = { fg = fg, bg = bg }, + b = { fg = fg, bg = bg }, + c = { fg = fg, bg = bg }, + x = { fg = fg, bg = bg }, + y = { fg = fg, bg = bg }, + z = { fg = fg, bg = bg }, + }, + inactive = { c = { fg = fg, bg = bg } }, + }, + }, + sections = { + lualine_a = { + 'mode', + { '"▏"', color = { fg = separator } }, + }, + lualine_b = { + 'branch', + 'diff', + { '"▕"', color = { fg = separator } }, + '"🖧  " .. tostring(#vim.tbl_keys(vim.lsp.buf_get_clients()))', + { 'diagnostics', sources = { 'nvim_diagnostic' } }, + { '"▏"', color = { fg = separator } }, + }, + lualine_c = { 'filename' }, + lualine_x = { + 'filetype', + 'encoding', + 'fileformat', + }, + lualine_y = { + { '"▕"', color = { fg = separator } }, + '(vim.bo.expandtab and "␠ " or "⇥ ") .. " " .. vim.bo.shiftwidth', + { '"▏"', color = { fg = separator } }, + }, + lualine_z = { + 'location', + 'progress', + }, + }, + -- tabline = { + -- lualine_a = { + -- {'buffers'} + -- }, + -- lualine_z = { + -- {'tabs'} + -- } + -- } +} diff --git a/.config/nvim/lua/user/plugins/nvim-tree.lua b/.config/nvim/lua/user/plugins/nvim-tree.lua new file mode 100644 index 0000000..a4173e7 --- /dev/null +++ b/.config/nvim/lua/user/plugins/nvim-tree.lua @@ -0,0 +1,13 @@ +-- vim.g.nvim_tree_git_hl = 1 +vim.g.nvim_tree_highlight_opened_files = 1 +vim.g.nvim_tree_group_empty = 1 + +require('nvim-tree').setup { + git = { + ignore = false, + }, +} + +vim.cmd [[highlight NvimTreeIndentMarker guifg=#30323E]] + +vim.api.nvim_set_keymap('n', 'n', ':NvimTreeFindFileToggle', { silent = true, noremap = true }) diff --git a/.config/nvim/lua/user/plugins/telescope.lua b/.config/nvim/lua/user/plugins/telescope.lua new file mode 100644 index 0000000..b1d1136 --- /dev/null +++ b/.config/nvim/lua/user/plugins/telescope.lua @@ -0,0 +1,25 @@ +local telescope = require 'telescope' +local actions = require 'telescope.actions' +local keymap = require 'lib.utils'.keymap + +keymap('n', ';f', [[lua require('telescope.builtin').find_files()]]) +keymap('n', ';r', [[lua require('telescope.builtin').live_grep()]]) +keymap('n', ';\\', [[lua require('telescope.builtin').buffers()]]) + +require('telescope').setup { + defaults = { + sorting_strategy = 'ascending', + mappings = { + i = { + [""] = actions.close, + [''] = actions.cycle_history_next, + [''] = actions.cycle_history_prev, + }, + }, + file_ignore_patterns = { + '.git/', + 'node_modules/', + 'android/', + }, + } +} diff --git a/.config/nvim/lua/user/plugins/treesitter.lua b/.config/nvim/lua/user/plugins/treesitter.lua new file mode 100644 index 0000000..44cf008 --- /dev/null +++ b/.config/nvim/lua/user/plugins/treesitter.lua @@ -0,0 +1,30 @@ +require('nvim-treesitter.configs').setup { + indent = { + enable = true, + }, + highlight = { + enable = true, + disable = { 'NvimTree' }, + additional_vim_regex_highlighting = true, + }, + textobjects = { + select = { + enable = true, + lookahead = true, + keymaps = { + ['ia'] = '@parameter.inner', + -- ['aa'] = { + -- php = "" '@parameter.outer', + + -- python = "(function_definition) @function", + -- cpp = "(function_definition) @function", + -- c = "(function_definition) @function", + -- java = "(method_declaration) @function", + -- }, + }, + }, + }, + context_commentstring = { + enable = true, + }, +} -- cgit v1.2.3