From dbf9c5783f810eb0ff84d9ddc609fa9704df6e3f Mon Sep 17 00:00:00 2001 From: Marcelo Canaparro Date: Sat, 6 Jan 2024 16:10:06 +0000 Subject: [PATCH] Adds dashboard and telescope-ui-select --- after/plugin/cmp.lua | 90 +++++----- after/plugin/lsp.lua | 183 +++++++++++---------- lua/custom/plugins/dashboard.lua | 24 +++ lua/custom/plugins/lsp-config.lua | 23 --- lua/custom/plugins/telescope-ui-select.lua | 35 ++++ lua/options.lua | 4 +- lua/pluginlist.lua | 62 +++---- 7 files changed, 229 insertions(+), 192 deletions(-) create mode 100644 lua/custom/plugins/dashboard.lua delete mode 100644 lua/custom/plugins/lsp-config.lua create mode 100644 lua/custom/plugins/telescope-ui-select.lua diff --git a/after/plugin/cmp.lua b/after/plugin/cmp.lua index ad117758..e77cc4ac 100644 --- a/after/plugin/cmp.lua +++ b/after/plugin/cmp.lua @@ -1,47 +1,47 @@ -- [[ Configure nvim-cmp ]] -- See `:help 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' }, --- }, --- } +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' }, + }, +} diff --git a/after/plugin/lsp.lua b/after/plugin/lsp.lua index 6b13d0e6..858a23df 100644 --- a/after/plugin/lsp.lua +++ b/after/plugin/lsp.lua @@ -1,93 +1,94 @@ --- -- [[ Configure LSP ]] --- -- This function gets run when an LSP connects to a particular buffer. --- local on_attach = function(_, bufnr) --- -- NOTE: Remember that lua is a real programming language, and as such it is possible --- -- to define small helper and utility functions so you don't have to repeat yourself --- -- many times. --- -- --- -- In this case, we create a function that lets us more easily define mappings specific --- -- for LSP related items. It sets the mode, buffer and description for us each time. --- local nmap = function(keys, func, desc) --- if desc then --- desc = 'LSP: ' .. desc --- end +-- [[ Configure LSP ]] +-- This function gets run when an LSP connects to a particular buffer. +local on_attach = function(_, bufnr) + -- NOTE: Remember that lua is a real programming language, and as such it is possible + -- to define small helper and utility functions so you don't have to repeat yourself + -- many times. + -- + -- In this case, we create a function that lets us more easily define mappings specific + -- for LSP related items. It sets the mode, buffer and description for us each time. + local remap = function(keys, func, desc) + if desc then + desc = 'LSP: ' .. desc + end + + vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) + end + + remap('rn', vim.lsp.buf.rename, '[R]e[n]ame') + remap('ca', vim.lsp.buf.code_action, '[C]ode [A]ction') + + remap('gd', vim.lsp.buf.definition, '[G]oto [D]efinition') + remap('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences') + remap('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation') + remap('D', vim.lsp.buf.type_definition, 'Type [D]efinition') + remap('ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols') + remap('ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols') + + -- See `:help K` for why this keymap + remap('K', vim.lsp.buf.hover, 'Hover Documentation') + remap('', vim.lsp.buf.signature_help, 'Signature Documentation') + + -- Lesser used LSP functionality + remap('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration') + remap('wa', vim.lsp.buf.add_workspace_folder, '[W]orkspace [A]dd Folder') + remap('wr', vim.lsp.buf.remove_workspace_folder, '[W]orkspace [R]emove Folder') + remap('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. -- --- vim.keymap.set('n', keys, func, { buffer = bufnr, desc = desc }) --- end +-- 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. -- --- 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', require('telescope.builtin').lsp_implementations, '[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. --- -- --- -- If you want to override the default filetypes that your language server will attach to you can --- -- define the property 'filetypes' to the map in question. --- local servers = { --- -- clangd = {}, --- -- gopls = {}, --- -- pyright = {}, --- -- rust_analyzer = {}, --- -- tsserver = {}, --- -- html = { filetypes = { 'html', 'twig', 'hbs'} }, --- --- 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], --- filetypes = (servers[server_name] or {}).filetypes, --- } --- end --- } +-- If you want to override the default filetypes that your language server will attach to you can +-- define the property 'filetypes' to the map in question. +local servers = { + -- clangd = {}, + -- gopls = {}, + -- pyright = {}, + -- rust_analyzer = {}, + -- tsserver = {}, + -- html = { filetypes = { 'html', 'twig', 'hbs'} }, + + lua_ls = { + Lua = { + workspace = { checkThirdParty = false }, + telemetry = { enable = false }, + }, + }, + pyright = {} +} + +-- 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], + filetypes = (servers[server_name] or {}).filetypes, + } + end +} diff --git a/lua/custom/plugins/dashboard.lua b/lua/custom/plugins/dashboard.lua new file mode 100644 index 00000000..5fbc0785 --- /dev/null +++ b/lua/custom/plugins/dashboard.lua @@ -0,0 +1,24 @@ +return { + { + 'nvimdev/dashboard-nvim', + event = 'VimEnter', + config = function() + require('dashboard').setup { + -- config = { + -- shortcut = { + -- -- action can be a function type + -- { desc = string, group = 'highlight group', key = 'shortcut key', action = 'action when you press key' }, + -- }, + -- packages = { enable = true }, -- show how many plugins neovim loaded + -- -- limit how many projects list, action when you press key or enter it will run this action. + -- -- action can be a functino type, e.g. + -- -- action = func(path) vim.cmd('Telescope find_files cwd=' .. path) end + -- project = { enable = true, limit = 8, icon = 'your icon', label = '', action = 'Telescope find_files cwd=' }, + -- mru = { limit = 10, icon = 'your icon', label = '', cwd_only = false }, + -- footer = {}, -- footer + -- } + } + end, + dependencies = { { 'nvim-tree/nvim-web-devicons' } } + } +} diff --git a/lua/custom/plugins/lsp-config.lua b/lua/custom/plugins/lsp-config.lua deleted file mode 100644 index e046b7d9..00000000 --- a/lua/custom/plugins/lsp-config.lua +++ /dev/null @@ -1,23 +0,0 @@ -return { - { - "williamboman/mason.nvim", - config = function () - require('mason').setup() - end - }, - { - 'williamboman/mason-lspconfig.nvim', - config = function() - require("mason-lspconfig").setup { - ensure_installed = { "lua_ls", "pyright" }, - } - end - }, - { - "neovim/nvim-lspconfig", - config = function() - local lspconfig = require('lspconfig') - lspconfig.lua_ls.setup({}) - end - } -} diff --git a/lua/custom/plugins/telescope-ui-select.lua b/lua/custom/plugins/telescope-ui-select.lua new file mode 100644 index 00000000..a4fc37d8 --- /dev/null +++ b/lua/custom/plugins/telescope-ui-select.lua @@ -0,0 +1,35 @@ +return { + { + 'nvim-telescope/telescope-ui-select.nvim', + config = function() + -- This is your opts table + require("telescope").setup { + extensions = { + ["ui-select"] = { + require("telescope.themes").get_dropdown { + -- even more opts + } + + -- pseudo code / specification for writing custom displays, like the one + -- for "codeactions" + -- specific_opts = { + -- [kind] = { + -- make_indexed = function(items) -> indexed_items, width, + -- make_displayer = function(widths) -> displayer + -- make_display = function(displayer) -> function(e) + -- make_ordinal = function(e) -> string + -- }, + -- -- for example to disable the custom builtin "codeactions" display + -- do the following + -- codeactions = false, + -- } + } + } + } + -- To get ui-select loaded and working with telescope, you need to call + -- load_extension, somewhere after setup function: + require("telescope").load_extension("ui-select") + end + + } +} diff --git a/lua/options.lua b/lua/options.lua index d7b901ab..17bc824e 100644 --- a/lua/options.lua +++ b/lua/options.lua @@ -47,8 +47,8 @@ vim.o.completeopt = 'menuone,noselect' vim.o.termguicolors = true -- Number of spaces that a in the file counts for -vim.opt.tabstop = 4 -- Number of spaces to use for each step of (auto)indent -vim.opt.shiftwidth = 4 -- Use spaces instead of tabs +vim.opt.tabstop = 4 +vim.opt.shiftwidth = 4 vim.opt.expandtab = true diff --git a/lua/pluginlist.lua b/lua/pluginlist.lua index ae628fd3..86f176c5 100644 --- a/lua/pluginlist.lua +++ b/lua/pluginlist.lua @@ -11,38 +11,38 @@ return { -- NOTE: First, some plugins that don't require any configuration -- NOTE: This is where your plugins related to LSP can be installed. -- The configuration is done below. Search for lspconfig to find it below. - -- { - -- -- LSP Configuration & Plugins - -- 'neovim/nvim-lspconfig', - -- dependencies = { - -- -- Automatically install LSPs to stdpath for neovim - -- { 'williamboman/mason.nvim', config = true }, - -- 'williamboman/mason-lspconfig.nvim', - -- - -- -- Useful status updates for LSP - -- -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` - -- { 'j-hui/fidget.nvim', tag = 'legacy', opts = {} }, - -- - -- -- Additional lua configuration, makes nvim stuff amazing! - -- 'folke/neodev.nvim', - -- }, - -- }, + { + -- LSP Configuration & Plugins + 'neovim/nvim-lspconfig', + dependencies = { + -- Automatically install LSPs to stdpath for neovim + { 'williamboman/mason.nvim', config = true }, + 'williamboman/mason-lspconfig.nvim', - -- { - -- -- 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 status updates for LSP + -- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})` + { 'j-hui/fidget.nvim', tag = 'legacy', opts = {} }, + + -- Additional lua configuration, makes nvim stuff amazing! + 'folke/neodev.nvim', + }, + }, + + { + -- 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 = {} },