From 015726ddf1ccec5ebc12c5189bc6a711ac2c0367 Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Sun, 4 Jun 2023 00:44:54 -0600 Subject: decouple more config into separate files, move stuff into lsp --- init.lua | 88 ------------------------------------ lua/plugins/alpha.lua | 10 ++++ lua/plugins/autocompletion.lua | 12 +++++ lua/plugins/init.lua | 16 ------- lua/plugins/lspconfig.lua | 84 ++++++++++++++++++++++++++++++---- lua/plugins/telescope-fzf-native.lua | 8 ---- lua/plugins/telescope.lua | 31 ++++++++----- 7 files changed, 117 insertions(+), 132 deletions(-) create mode 100644 lua/plugins/alpha.lua create mode 100644 lua/plugins/autocompletion.lua delete mode 100644 lua/plugins/telescope-fzf-native.lua diff --git a/init.lua b/init.lua index 7d14185..7296e77 100644 --- a/init.lua +++ b/init.lua @@ -76,99 +76,13 @@ vim.api.nvim_create_autocmd('TextYankPost', { pattern = '*', }) - - -- Diagnostic keymaps vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Go to previous diagnostic message' }) vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Go to next diagnostic message' }) vim.keymap.set('n', 'e', vim.diagnostic.open_float, { desc = 'Open floating diagnostic message' }) vim.keymap.set('n', 'q', vim.diagnostic.setloclist, { desc = 'Open diagnostics list' }) --- [[ Configure LSP ]] --- This function gets run when an LSP connects to a particular buffer. -local on_attach = function(_, bufnr) - local nmap = function(keys, func, desc) - if desc then - desc = 'LSP: ' .. desc - end - - vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) - end - - nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') - nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') - - nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') - nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') - nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') - nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') - nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') - nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') - - -- See `:help K` for why this keymap - nmap('K', vim.lsp.buf.hover, 'Hover Documentation') - nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') - - -- Lesser used LSP functionality - nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') - nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') - nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') - nmap('wl', function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, '[W]orkspace [L]ist Folders') - - -- Create a command `:Format` local to the LSP buffer - vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) - vim.lsp.buf.format() - end, { desc = 'Format current buffer with LSP' }) -end - --- Enable the following language servers --- Feel free to add/remove any LSPs that you want here. They will automatically be installed. --- --- Add any additional override configuration in the following tables. They will be passed to --- the `settings` field of the server config. You must look up that documentation yourself. -local servers = { - -- clangd = {}, - -- gopls = {}, - -- pyright = {}, - -- rust_analyzer = {}, - -- tsserver = {}, - - lua_ls = { - Lua = { - workspace = { checkThirdParty = false }, - telemetry = { enable = false }, - }, - }, -} - --- Setup neovim lua configuration -require('neodev').setup() - --- nvim-cmp supports additional completion capabilities, so broadcast that to servers -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) - --- Ensure the servers above are installed -local mason_lspconfig = require 'mason-lspconfig' - -mason_lspconfig.setup { - ensure_installed = vim.tbl_keys(servers), -} - -mason_lspconfig.setup_handlers { - function(server_name) - require('lspconfig')[server_name].setup { - capabilities = capabilities, - on_attach = on_attach, - settings = servers[server_name], - } - end, -} - -- [[ Configure nvim-cmp ]] --- See `:help cmp` local cmp = require 'cmp' local luasnip = require 'luasnip' require('luasnip.loaders.from_vscode').lazy_load() @@ -214,5 +128,3 @@ cmp.setup { { name = 'luasnip' }, }, } - --- vim: ts=2 sts=2 sw=2 et diff --git a/lua/plugins/alpha.lua b/lua/plugins/alpha.lua new file mode 100644 index 0000000..bd1491f --- /dev/null +++ b/lua/plugins/alpha.lua @@ -0,0 +1,10 @@ +return { + 'goolord/alpha-nvim', + enabled = false, + dependencies = { + 'nvim-tree/nvim-web-devicons' + }, + config = function () + require('alpha').setup(require('alpha.themes.theta').config) + end, +} diff --git a/lua/plugins/autocompletion.lua b/lua/plugins/autocompletion.lua new file mode 100644 index 0000000..333c4fe --- /dev/null +++ b/lua/plugins/autocompletion.lua @@ -0,0 +1,12 @@ +return { + 'hrsh7th/nvim-cmp', + dependencies = { + -- Snippet Engine & its associated nvim-cmp source + 'L3MON4D3/LuaSnip', + 'saadparwaiz1/cmp_luasnip', + -- Adds LSP completion capabilities + 'hrsh7th/cmp-nvim-lsp', + -- Adds a number of user-friendly snippets + 'rafamadriz/friendly-snippets', + }, +} diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 3e91383..e8b57ab 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -8,22 +8,6 @@ return { 'tpope/vim-sleuth', - { - -- Autocompletion - 'hrsh7th/nvim-cmp', - dependencies = { - -- Snippet Engine & its associated nvim-cmp source - 'L3MON4D3/LuaSnip', - 'saadparwaiz1/cmp_luasnip', - - -- Adds LSP completion capabilities - 'hrsh7th/cmp-nvim-lsp', - - -- Adds a number of user-friendly snippets - 'rafamadriz/friendly-snippets', - }, - }, - -- Useful plugin to show you pending keybinds. { 'folke/which-key.nvim', opts = {} }, { diff --git a/lua/plugins/lspconfig.lua b/lua/plugins/lspconfig.lua index ca3a791..1657cec 100644 --- a/lua/plugins/lspconfig.lua +++ b/lua/plugins/lspconfig.lua @@ -1,16 +1,82 @@ +local servers = { + -- clangd = {}, + -- gopls = {}, + -- pyright = {}, + -- rust_analyzer = {}, + -- tsserver = {}, + + lua_ls = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, +} + return { 'neovim/nvim-lspconfig', dependencies = { - { - 'williamboman/mason.nvim', - opts = { - ensure_installed = { - "gopls", - }, - }, - }, + 'hrsh7th/cmp-nvim-lsp', + -- Required for the keybinds + 'nvim-telescope/telescope.nvim', + { 'williamboman/mason.nvim', config = true }, 'williamboman/mason-lspconfig.nvim', { 'j-hui/fidget.nvim', opts = {} }, - 'folke/neodev.nvim', + { 'folke/neodev.nvim', opts = {} }, }, + config = function() + -- nvim-cmp supports additional completion capabilities, so broadcast that to servers + local capabilities = vim.lsp.protocol.make_client_capabilities() + capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + + local lspconfig = require('lspconfig') + local mason_lspconfig = require('mason-lspconfig') + mason_lspconfig.ensure_installed = vim.tbl_keys(servers) + + local on_attach = function(_, bufnr) + local nmap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + nmap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + nmap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + + nmap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + nmap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + nmap('gI', vim.lsp.buf.implementation, '[G]oto [I]mplementation') + nmap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') + nmap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + nmap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + -- See `:help K` for why this keymap + nmap('K', vim.lsp.buf.hover, 'Hover Documentation') + nmap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + nmap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + nmap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + nmap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + nmap('wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, '[W]orkspace [L]ist Folders') + + -- Create a command `:Format` local to the LSP buffer + vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) + vim.lsp.buf.format() + end, { desc = 'Format current buffer with LSP' }) + end + + mason_lspconfig.setup_handlers { + function(server_name) + lspconfig[server_name].setup { + capabilities = capabilities, + on_attach = on_attach, + settings = servers[server_name], + } + end, + } + end, } diff --git a/lua/plugins/telescope-fzf-native.lua b/lua/plugins/telescope-fzf-native.lua deleted file mode 100644 index 1fe2371..0000000 --- a/lua/plugins/telescope-fzf-native.lua +++ /dev/null @@ -1,8 +0,0 @@ -return { - 'nvim-telescope/telescope-fzf-native.nvim', - build = 'make', - config = function() - pcall(require('telescope').load_extension, 'fzf') - return vim.fn.executable 'make' == 1 - end, -} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index d182d7c..0961b38 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -3,6 +3,13 @@ return { branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim', + { + 'nvim-telescope/telescope-fzf-native.nvim', + build = 'make', + cond = function() + return vim.fn.executable 'make' == 1 + end, + } }, opts = { defaults = { @@ -14,23 +21,25 @@ return { }, }, }, - -- Best place to key keymaps in this file config = function() - vim.keymap.set('n', '?', require('telescope.builtin').oldfiles, { desc = '[?] Find recently opened files' }) - vim.keymap.set('n', '', require('telescope.builtin').buffers, { desc = '[ ] Find existing buffers' }) + -- Load fzf if available + pcall(require('telescope').load_extension, 'fzf') + local ts_builtin = require('telescope.builtin') + + vim.keymap.set('n', '?', ts_builtin.oldfiles, { desc = '[?] Find recently opened files' }) + vim.keymap.set('n', '', ts_builtin.buffers, { desc = '[ ] Find existing buffers' }) vim.keymap.set('n', '/', function() -- You can pass additional configuration to telescope to change theme, layout, etc. - require('telescope.builtin').current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { + ts_builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { winblend = 10, previewer = false, }) end, { desc = '[/] Fuzzily search in current buffer' }) - vim.keymap.set('n', 'gf', require('telescope.builtin').git_files, { desc = 'Search [G]it [F]iles' }) - vim.keymap.set('n', 'sf', require('telescope.builtin').find_files, { desc = '[S]earch [F]iles' }) - vim.keymap.set('n', 'sh', require('telescope.builtin').help_tags, { desc = '[S]earch [H]elp' }) - vim.keymap.set('n', 'sw', require('telescope.builtin').grep_string, { desc = '[S]earch current [W]ord' }) - vim.keymap.set('n', 'sg', require('telescope.builtin').live_grep, { desc = '[S]earch by [G]rep' }) - vim.keymap.set('n', 'sd', require('telescope.builtin').diagnostics, { desc = '[S]earch [D]iagnostics' }) - -- Other keybinds present for the LSP currently at init.lua + vim.keymap.set('n', 'gf', ts_builtin.git_files, { desc = 'Search [G]it [F]iles' }) + vim.keymap.set('n', 'sf', ts_builtin.find_files, { desc = '[S]earch [F]iles' }) + vim.keymap.set('n', 'sh', ts_builtin.help_tags, { desc = '[S]earch [H]elp' }) + vim.keymap.set('n', 'sw', ts_builtin.grep_string, { desc = '[S]earch current [W]ord' }) + vim.keymap.set('n', 'sg', ts_builtin.live_grep, { desc = '[S]earch by [G]rep' }) + vim.keymap.set('n', 'sd', ts_builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) end, } -- cgit v1.2.3-70-g09d2