diff options
Diffstat (limited to '.config/nvim/lua/user')
| -rw-r--r-- | .config/nvim/lua/user/keymaps.lua | 31 | ||||
| -rw-r--r-- | .config/nvim/lua/user/misc.lua | 6 | ||||
| -rw-r--r-- | .config/nvim/lua/user/options.lua | 24 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins.lua | 101 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/cmp.lua | 73 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/dracula.lua | 13 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/lspconfig.lua | 131 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/lualine.lua | 64 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/luasnip.lua | 9 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/nvim-tree.lua | 13 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/telescope.lua | 25 | ||||
| -rw-r--r-- | .config/nvim/lua/user/plugins/treesitter.lua | 31 |
12 files changed, 521 insertions, 0 deletions
diff --git a/.config/nvim/lua/user/keymaps.lua b/.config/nvim/lua/user/keymaps.lua new file mode 100644 index 0000000..59c323c --- /dev/null +++ b/.config/nvim/lua/user/keymaps.lua @@ -0,0 +1,31 @@ +local keymap = require 'lib.utils'.keymap + +vim.g.mapleader = ' ' +vim.g.maplocalleader = ' ' + +keymap('n', '<leader>Q', ':bufdo bdelete<CR>') + +-- Allow gf to open non-existant files +keymap('n', 'gf', ':edit <cfile><CR>') + +-- Quick navigation between splits +keymap('n', '<c-h>', '<c-w>h') +keymap('n', '<c-j>', '<c-w>j') +keymap('n', '<c-k>', '<c-w>k') +keymap('n', '<c-l>', '<c-w>l') + +-- Open the current file in the default program +keymap('n', '<leader>x', ':!xdg-open %<CR><CR>') + +-- Resize with arrows +keymap('n', '<C-Up>', ':resize +2<CR>') +keymap('n', '<C-Down>', ':resize -2<CR>') +keymap('n', '<C-Left>', ':vertical resize -2<CR>') +keymap('n', '<C-Right>', ':vertical resize +2<CR>') + +-- Quickly escape to normal mode +keymap('i', 'jj', '<Esc>') + +keymap('n', '<leader>cd', ':cd %:p:h<CR>:pwd<CR>') + +keymap('n', '<leader>E', ':EslintFixAll<CR>') diff --git a/.config/nvim/lua/user/misc.lua b/.config/nvim/lua/user/misc.lua new file mode 100644 index 0000000..88d47cf --- /dev/null +++ b/.config/nvim/lua/user/misc.lua @@ -0,0 +1,6 @@ +vim.cmd [[ + augroup Indentation + autocmd! + autocmd FileType html set inde= + augroup END +]] diff --git a/.config/nvim/lua/user/options.lua b/.config/nvim/lua/user/options.lua new file mode 100644 index 0000000..0c35dfc --- /dev/null +++ b/.config/nvim/lua/user/options.lua @@ -0,0 +1,24 @@ +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()" +vim.o.hlsearch = 0 diff --git a/.config/nvim/lua/user/plugins.lua b/.config/nvim/lua/user/plugins.lua new file mode 100644 index 0000000..755f0e9 --- /dev/null +++ b/.config/nvim/lua/user/plugins.lua @@ -0,0 +1,101 @@ +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 { 'tpope/vim-sleuth' } + + use { + 'dracula/vim', + as = 'dracula', + config = function() + require('user.plugins.dracula') + end + } + use { + 'windwp/nvim-autopairs', + config = function() + require('nvim-autopairs').setup() + end + } + + use { + 'windwp/nvim-ts-autotag', + config = function() + require('nvim-ts-autotag').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', + 'L3MON4D3/LuaSnip', + '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 + } + use { + 'L3MON4D3/LuaSnip', + config = function() + require('user.plugins.luasnip') + 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..81cd2ee --- /dev/null +++ b/.config/nvim/lua/user/plugins/cmp.lua @@ -0,0 +1,73 @@ +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 luasnip = require 'luasnip' +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]', + }, + }, + }, + snippet = { + expand = function(args) + require('luasnip').lsp_expand(args.body) + end, + }, + mapping = { + ['<C-p>'] = cmp.mapping.select_prev_item(), + ['<C-n>'] = cmp.mapping.select_next_item(), + ['<C-d>'] = cmp.mapping.scroll_docs(-4), + ['<C-r>'] = cmp.mapping.scroll_docs(4), + ['<C-Space>'] = cmp.mapping.complete(), + ['<C-e>'] = cmp.mapping.close(), + ['<CR>'] = cmp.mapping.confirm { + behavior = cmp.ConfirmBehavior.replace, + select = false, + }, + ['<Tab>'] = cmp.mapping(function(fallback) + if luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif cmp.visible() then + cmp.select_next_item() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { 'i', 's' }), + ['<S-Tab>'] = cmp.mapping(function(fallback) + if luasnip.jumpable(-1) then + luasnip.jump(-1) + elseif 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 = 'luasnip' }, + { 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..3d1e91a --- /dev/null +++ b/.config/nvim/lua/user/plugins/dracula.lua @@ -0,0 +1,13 @@ +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 + autocmd ColorScheme dracula highlight Normal guibg=#000000 + 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..a63975b --- /dev/null +++ b/.config/nvim/lua/user/plugins/lspconfig.lua @@ -0,0 +1,131 @@ +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', '<cmd>lua vim.lsp.buf.declaration()<CR>') + buf_keymap(bufnr, 'n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>') + buf_keymap(bufnr, 'n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>') + buf_keymap(bufnr, 'n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>') + buf_keymap(bufnr, 'n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>') + buf_keymap(bufnr, 'n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>') + buf_keymap(bufnr, 'n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>') + buf_keymap(bufnr, 'n', 'gr', ':Telescope lsp_references<CR>') + + buf_keymap(bufnr, 'n', '<leader>ca', ':CodeActionMenu<CR>') + buf_keymap(bufnr, 'v', '<leader>ca', ':CodeActionMenu<CR>') + + buf_keymap(bufnr, 'n', '<leader>d', '<cmd>lua vim.diagnostic.open_float()<CR>') + buf_keymap(bufnr, 'n', '[d', '<cmd>lua vim.diagnostic.goto_prev()<CR>') + buf_keymap(bufnr, 'n', ']d', '<cmd>lua vim.diagnostic.goto_next()<CR>') + buf_keymap(bufnr, 'n', '<leader>F', '<cmd>lua vim.lsp.buf.format { async = true }<CR>') + + -- Autoformat on save doesn't work with server_capabilities, even + -- though it's the replacement for the deprecated resolved_capabilities. + + -- if _.server_capabilities.document_formatting then + -- vim.api.nvim_command [[augroup Format]] + -- vim.api.nvim_command [[autocmd! * <buffer>]] + -- vim.api.nvim_command [[autocmd BufWritePre <buffer> lua vim.lsp.buf.formatting_seq_sync()]] + -- vim.api.nvim_command [[augroup END]] + -- end +end + +-- provide additional completion capabilities +local capabilities = require('cmp_nvim_lsp').default_capabilities(vim.lsp.protocol.make_client_capabilities()) + +require 'lspconfig'.emmet_ls.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, + filetypes = { 'html', 'javascript', 'typescript', 'javascriptreact', 'typescriptreact' } +} + +local runtime_path = vim.split(package.path, ';') +table.insert(runtime_path, "lua/?.lua") +table.insert(runtime_path, "lua/?/init.lua") +require 'lspconfig'.sumneko_lua.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, + cmd = { "/home/cafebabe/.local/src/lua-language-server/bin/lua-language-server", "-E", "/home/cafebabe/.local/src/lua-language-server/bin/main.lua" }; + settings = { + Lua = { + runtime = { + -- Tell language server which version of lua is used. + version = 'LuaJIT', + -- Setup lua path + path = runtime_path, + }, + diagnostics = { + -- Recognize globals + globals = { 'vim', 'use', 'parse' }, + }, + workspace = { + -- Make server aware of Neovim runtime files + library = vim.api.nvim_get_runtime_file("", true), + }, + -- Do not send telemetry data + telemetry = { + enable = false, + }, + }, + }, +} + +require 'lspconfig'.bashls.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, +} + +require 'lspconfig'.pylsp.setup { + on_attach = on_attach, + capabilities = capabilities, + flags = { + debounce_text_changes = 150, + }, +} + +require 'lspconfig'.clangd.setup { + on_attach = on_attach, + capabilities = capabilities, + 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/luasnip.lua b/.config/nvim/lua/user/plugins/luasnip.lua new file mode 100644 index 0000000..2e7462a --- /dev/null +++ b/.config/nvim/lua/user/plugins/luasnip.lua @@ -0,0 +1,9 @@ +local ls = require "luasnip" +require("luasnip.loaders.from_lua").load({ paths = "~/.config/nvim/snippets" }) + +ls.config.set_config { + history = true, + updateevents = 'TextChanged,TextChangedI', + enable_autosnippets = true, +} + 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..3c425c5 --- /dev/null +++ b/.config/nvim/lua/user/plugins/nvim-tree.lua @@ -0,0 +1,13 @@ +require('nvim-tree').setup { + renderer = { + highlight_opened_files = "all", + group_empty = true, + }, + git = { + ignore = false, + }, +} + +vim.cmd [[highlight NvimTreeIndentMarker guifg=#30323E]] + +vim.api.nvim_set_keymap('n', '<leader>n', ':NvimTreeFindFileToggle<CR>', { 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', [[<cmd>lua require('telescope.builtin').find_files()<CR>]]) +keymap('n', ';r', [[<cmd>lua require('telescope.builtin').live_grep()<CR>]]) +keymap('n', ';\\', [[<cmd>lua require('telescope.builtin').buffers()<CR>]]) + +require('telescope').setup { + defaults = { + sorting_strategy = 'ascending', + mappings = { + i = { + ["<Esc>"] = actions.close, + ['<C-Down>'] = actions.cycle_history_next, + ['<C-Up>'] = 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..32c74ee --- /dev/null +++ b/.config/nvim/lua/user/plugins/treesitter.lua @@ -0,0 +1,31 @@ +require('nvim-treesitter.configs').setup { + indent = { + enable = true, + disable = { 'html' }, + }, + 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, + }, +} |
