diff --git a/lua/cosmic/config/examples/config.lua b/lua/cosmic/config/examples/config.lua index 5c371b4..ae05e44 100644 --- a/lua/cosmic/config/examples/config.lua +++ b/lua/cosmic/config/examples/config.lua @@ -16,6 +16,25 @@ local config = { rename_notification = true, -- Enable non-default servers, use default lsp config -- Check here for configs that will be used by default: https://github.com/williamboman/nvim-lsp-installer/tree/main/lua/nvim-lsp-installer/servers + + -- lsp servers that should be installed + ensure_installed = { + 'astro', + 'bashls', + 'cssls', + 'gopls', + 'graphql', + 'html', + 'jsonls', + 'tsserver', + 'sumneko_lua', + 'pyright', + 'svelte', + 'tailwindcss', + 'yamlls', + }, + + -- lsp servers that should be enabled servers = { -- Enable rust_analyzer rust_analyzer = true, diff --git a/lua/cosmic/core/user.lua b/lua/cosmic/core/user.lua index e290971..0d296a3 100644 --- a/lua/cosmic/core/user.lua +++ b/lua/cosmic/core/user.lua @@ -9,6 +9,26 @@ local default_config = { format_on_save = true, -- true/false or table of filetypes {'.ts', '.js',} format_timeout = 3000, rename_notification = true, + -- lsp servers that should be installed + ensure_installed = { + 'astro', + --[[ 'actionlint', ]] + --[[ 'eslint_d', ]] + --[[ 'prettierd', ]] + 'bashls', + 'cssls', + 'gopls', + 'graphql', + 'html', + 'jsonls', + 'tsserver', + 'sumneko_lua', + 'pyright', + 'svelte', + 'tailwindcss', + 'yamlls', + }, + -- lsp servers that should be enabled servers = { astro = true, tailwindcss = true, diff --git a/lua/cosmic/lsp/init.lua b/lua/cosmic/lsp/init.lua index ccc1b7f..f990387 100644 --- a/lua/cosmic/lsp/init.lua +++ b/lua/cosmic/lsp/init.lua @@ -1,4 +1,3 @@ --- set up lsp servers require('cosmic.lsp.diagnostics') require('cosmic.lsp.commands') diff --git a/lua/cosmic/plugins/auto-session/init.lua b/lua/cosmic/plugins/auto-session/init.lua index a898578..9818fff 100644 --- a/lua/cosmic/plugins/auto-session/init.lua +++ b/lua/cosmic/plugins/auto-session/init.lua @@ -6,7 +6,6 @@ local defaults = { auto_session_enabled = false, auto_save_enabled = true, auto_restore_enabled = false, - auto_session_use_git_branch = true, } return { diff --git a/lua/cosmic/plugins/mason-lspconfig/init.lua b/lua/cosmic/plugins/mason-lspconfig/init.lua new file mode 100644 index 0000000..2b59619 --- /dev/null +++ b/lua/cosmic/plugins/mason-lspconfig/init.lua @@ -0,0 +1,71 @@ +local user_config = require('cosmic.core.user') +return { + 'williamboman/mason-lspconfig.nvim', + config = function() + require('mason').setup({ + ui = { + border = user_config.border, + }, + }) + require('mason-lspconfig').setup({ + ensure_installed = user_config.lsp.ensure_installed, + }) + + -- set up lsp servers + local u = require('cosmic.utils') + local default_config = require('cosmic.lsp.providers.defaults') + local lspconfig = require('lspconfig') + + -- initial default servers + -- by default tsserver/ts_utils and null_ls are enabled + local requested_servers = {} + + -- get disabled servers from config + local disabled_servers = {} + for config_server, config_opt in pairs(user_config.lsp.servers) do + -- null ls doesn't need to be setup by lspconfig + if not config_server == 'null_ls' then + print(config_server) + end + + --[[ print(config_server) ]] + if config_opt == false or config_server == 'null_ls' then + table.insert(disabled_servers, config_server) + elseif not vim.tbl_contains(requested_servers, config_server) then + -- add additonally defined servers to be installed + table.insert(requested_servers, config_server) + end + end + + for _, requested_server in pairs(requested_servers) do + local opts = default_config + + -- disable server if config disabled server list says so + opts.autostart = true + if vim.tbl_contains(disabled_servers, requested_server) then + opts.autostart = false + end + + -- set up default cosmic options + if requested_server == 'tsserver' then + opts = u.merge(opts, require('cosmic.lsp.providers.tsserver')) + elseif requested_server == 'jsonls' then + opts = u.merge(opts, require('cosmic.lsp.providers.jsonls')) + elseif requested_server == 'pyright' then + opts = u.merge(opts, require('cosmic.lsp.providers.pyright')) + elseif requested_server == 'sumneko_lua' then + opts = u.merge(opts, require('cosmic.lsp.providers.sumneko_lua')) + end + + -- override options if user definds them + if type(user_config.lsp.servers[requested_server]) == 'table' then + if user_config.lsp.servers[requested_server].opts ~= nil then + opts = u.merge(opts, user_config.lsp.servers[requested_server].opts) + end + end + + lspconfig[requested_server].setup(opts) + end + end, + event = 'BufEnter', +} diff --git a/lua/cosmic/plugins/mason/init.lua b/lua/cosmic/plugins/mason/init.lua new file mode 100644 index 0000000..ca1b15f --- /dev/null +++ b/lua/cosmic/plugins/mason/init.lua @@ -0,0 +1,3 @@ +return { + 'williamboman/mason.nvim', +} diff --git a/lua/cosmic/plugins/null-ls/config.lua b/lua/cosmic/plugins/null-ls/config.lua index 703f840..d4537a8 100644 --- a/lua/cosmic/plugins/null-ls/config.lua +++ b/lua/cosmic/plugins/null-ls/config.lua @@ -1,9 +1,9 @@ local u = require('cosmic.utils') local defaults = require('cosmic.lsp.providers.defaults') local null_ls = require('null-ls') -local config = require('cosmic.core.user') +local user_config = require('cosmic.core.user') -local config_opts = u.merge(config.lsp.servers.null_ls or {}, { +local config_opts = u.merge(user_config.lsp.servers.null_ls or {}, { default_cosmic_sources = true, }) diff --git a/lua/cosmic/plugins/nvim-lsp-installer/config.lua b/lua/cosmic/plugins/nvim-lsp-installer/config.lua deleted file mode 100644 index 3f72e47..0000000 --- a/lua/cosmic/plugins/nvim-lsp-installer/config.lua +++ /dev/null @@ -1,77 +0,0 @@ -local u = require('cosmic.utils') -local default_config = require('cosmic.lsp.providers.defaults') -local config = require('cosmic.core.user') -local lsp_installer = require('nvim-lsp-installer') - -lsp_installer.settings({ - ui = { - keymaps = { - -- Keymap to expand a server in the UI - toggle_server_expand = 'i', - -- Keymap to install a server - install_server = '', - -- Keymap to reinstall/update a server - update_server = 'u', - -- Keymap to uninstall a server - uninstall_server = 'x', - }, - }, -}) - --- initial default servers --- by default tsserver/ts_utils and null_ls are enabled -local requested_servers = {} - --- get disabled servers from config -local disabled_servers = {} -for config_server, config_opt in pairs(config.lsp.servers) do - if config_opt == false then - table.insert(disabled_servers, config_server) - elseif not vim.tbl_contains(requested_servers, config_server) then - -- add additonally defined servers to be installed - table.insert(requested_servers, config_server) - end -end - --- go through requested_servers and ensure installation -local lsp_installer_servers = require('nvim-lsp-installer.servers') -for _, requested_server in pairs(requested_servers) do - local ok, server = lsp_installer_servers.get_server(requested_server) - if ok then - if not server:is_installed() then - server:install() - end - end -end - -lsp_installer.on_server_ready(function(server) - local opts = default_config - - -- disable server if config disabled server list says so - opts.autostart = true - if vim.tbl_contains(disabled_servers, server.name) then - opts.autostart = false - end - - -- set up default cosmic options - if server.name == 'tsserver' then - opts = u.merge(opts, require('cosmic.lsp.providers.tsserver')) - elseif server.name == 'jsonls' then - opts = u.merge(opts, require('cosmic.lsp.providers.jsonls')) - elseif server.name == 'pyright' then - opts = u.merge(opts, require('cosmic.lsp.providers.pyright')) - elseif server.name == 'sumneko_lua' then - opts = u.merge(opts, require('cosmic.lsp.providers.sumneko_lua')) - end - - -- override options if user definds them - if type(config.lsp.servers[server.name]) == 'table' then - if config.lsp.servers[server.name].opts ~= nil then - opts = u.merge(opts, config.lsp.servers[server.name].opts) - end - end - - -- This setup() function is exactly the same as lspconfig's setup function (:help lspconfig-quickstart) - server:setup(opts) - vim.cmd([[ do User LspAttachBuffers ]]) -end) diff --git a/lua/cosmic/plugins/nvim-lsp-installer/init.lua b/lua/cosmic/plugins/nvim-lsp-installer/init.lua deleted file mode 100644 index 8a8b98e..0000000 --- a/lua/cosmic/plugins/nvim-lsp-installer/init.lua +++ /dev/null @@ -1,9 +0,0 @@ -local user_config = require('cosmic.core.user') -return { - 'williamboman/nvim-lsp-installer', - config = function() - require('cosmic.plugins.nvim-lsp-installer.config') - end, - event = 'BufEnter', - enabled = not vim.tbl_contains(user_config.disable_builtin_plugins, 'nvim-lsp-installer'), -} diff --git a/readme.md b/readme.md index 288310f..b380da2 100644 --- a/readme.md +++ b/readme.md @@ -39,7 +39,7 @@ Full featured native LSP functionality! - Explore files via [nvim-tree](https://github.com/kyazdani42/nvim-tree.lua) - Fuzzy finder via [Telescope](https://github.com/nvim-telescope/telescope.nvim) - Floating terminal with [vim-floaterm](https://github.com/voldikss/vim-floaterm) -- Auto LSP installation via [nvim-lsp-installer](https://github.com/williamboman/nvim-lsp-installer) +- Auto LSP/formatter/linter installation via [mason.nvim](https://github.com/williamboman/mason.nvim) - Autocompletion via [nvim-cmp](https://github.com/hrsh7th/nvim-cmp) - Additional TypeScript support via [nvim-lsp-ts-utils](https://github.com/jose-elias-alvarez/nvim-lsp-ts-utils) - Snippet support via [LuaSnip](https://github.com/L3MON4D3/LuaSnip)