--[ GLOBAL ]-- vim.o.background = "dark" vim.cmd([[colorscheme gruvbox]]) vim.g.mapleader = ";" vim.o.signcolumn = "yes" vim.wo.number = true vim.wo.relativenumber = true vim.wo.cursorline = true --[ LSPCONFIG ]-- local on_attach = function(_, bufnr) local bufmap = function(keys, func) vim.keymap.set('n', keys, func, { buffer = bufnr }) end bufmap('r', vim.lsp.buf.rename) bufmap('a', vim.lsp.buf.code_action) bufmap('gd', vim.lsp.buf.definition) bufmap('gD', vim.lsp.buf.declaration) bufmap('gI', vim.lsp.buf.implementation) bufmap('D', vim.lsp.buf.type_definition) bufmap('gr', require('telescope.builtin').lsp_references) bufmap('s', require('telescope.builtin').lsp_document_symbols) bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) bufmap('K', vim.lsp.buf.hover) vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) vim.lsp.buf.format() end, {}) end local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) require('neodev').setup() require'lspconfig'.nil_ls.setup{ on_attach = on_attach, capabilities = capabilities } require'lspconfig'.pyright.setup{ on_attach = on_attach, capabilities = capabilities } require'lspconfig'.gopls.setup{ on_attach = on_attach, capabilities = capabilities } require'lspconfig'.terraformls.setup{ on_attach = on_attach, capabilities = capabilities } --[ LEAP ]-- require('leap').add_default_mappings() -- Don't remap 'x' in visual mode. vim.keymap.del({'x', 'o'}, 'x') vim.keymap.del({'x', 'o'}, 'X') --[ TELESCOPE ]-- local builtin = require('telescope.builtin') vim.keymap.set('n', 'ff', builtin.find_files, {}) vim.keymap.set('n', 'fg', builtin.live_grep, {}) vim.keymap.set('n', 'fb', builtin.buffers, {}) vim.keymap.set('n', 'fr', builtin.lsp_references, {}) vim.keymap.set('n', 'fs', builtin.lsp_document_symbols, {}) require('telescope').setup{ pickers = { find_files = { theme = "dropdown" }, live_grep = { theme = "dropdown" }, buffers = { theme = "dropdown" }, lsp_references = { theme = "dropdown" }, lsp_document_symbols = { theme = "dropdown" } } } --[ COMMENTARY ]-- vim.cmd([[autocmd FileType nix setlocal commentstring=#\ %s]]) --[ GITSIGNS ]-- require("gitsigns").setup() --[ CMP ]-- local cmp = require('cmp') local luasnip = require('luasnip') require('luasnip.loaders.from_vscode').lazy_load() luasnip.config.setup {} cmp.setup { snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert { [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete {}, [''] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Replace, select = true, }, [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() else fallback() end end, { 'i', 's' }), [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.locally_jumpable(-1) then luasnip.jump(-1) else fallback() end end, { 'i', 's' }), }, sources = { { name = 'nvim_lsp' }, { name = 'luasnip' }, }, }