diff options
author | LostNeophyte <[email protected]> | 2023-01-25 11:06:39 +0100 |
---|---|---|
committer | LostNeophyte <[email protected]> | 2023-01-25 11:11:25 +0100 |
commit | eba121cc651413d753f688162413008a6ed455e2 (patch) | |
tree | 737757af86e0be6a2517e4ad21fffb859621494f | |
parent | 4b9f4b2ae6dfc034ba10abab5ab91c357c058734 (diff) |
refactor: use callbacks for configuring builtins
28 files changed, 280 insertions, 328 deletions
diff --git a/lua/lvim/bootstrap.lua b/lua/lvim/bootstrap.lua index 1ba6ba42..7bfe6f76 100644 --- a/lua/lvim/bootstrap.lua +++ b/lua/lvim/bootstrap.lua @@ -82,7 +82,7 @@ function M:init(base_dir) if os.getenv "LUNARVIM_RUNTIME_DIR" then vim.opt.rtp:remove(join_paths(vim.call("stdpath", "data"), "site")) vim.opt.rtp:remove(join_paths(vim.call("stdpath", "data"), "site", "after")) - -- vim.opt.rtp:prepend(join_paths(self.runtime_dir, "site")) + vim.opt.rtp:append(join_paths(self.runtime_dir, "lvim", "after")) vim.opt.rtp:append(join_paths(self.runtime_dir, "site", "after")) diff --git a/lua/lvim/config/_deprecated.lua b/lua/lvim/config/_deprecated.lua index d4b15f30..5ce851c2 100644 --- a/lua/lvim/config/_deprecated.lua +++ b/lua/lvim/config/_deprecated.lua @@ -17,7 +17,7 @@ local function deprecate(name, alternative) end) end -function M.handle() +function M.pre_user_config() local mt = { __newindex = function(_, k, _) deprecate(k) @@ -32,33 +32,9 @@ function M.handle() lvim.builtin.theme.tokyonight.options[k] = v end, }) - - ---@deprecated - lvim.builtin.notify = {} - setmetatable(lvim.builtin.notify, { - __newindex = function(_, k, _) - deprecate("lvim.builtin.notify." .. k, "See LunarVim#3294") - end, - }) - - ---@deprecated - lvim.builtin.dashboard = {} - setmetatable(lvim.builtin.dashboard, { - __newindex = function(_, k, _) - deprecate("lvim.builtin.dashboard." .. k, "Use `lvim.builtin.alpha` instead. See LunarVim#1906") - end, - }) - - ---@deprecated - lvim.lsp.popup_border = {} - setmetatable(lvim.lsp.popup_border, mt) - - ---@deprecated - lvim.lang = {} - setmetatable(lvim.lang, mt) end -function M.post_load() +function M.post_user_config() if lvim.lsp.override and not vim.tbl_isempty(lvim.lsp.override) then deprecate("lvim.lsp.override", "Use `lvim.lsp.automatic_configuration.skipped_servers` instead") vim.tbl_map(function(c) @@ -156,4 +132,11 @@ function M.post_load() end end +M.post_builtin = { + -- example: + -- which_key = function () + -- + -- end +} + return M diff --git a/lua/lvim/config/init.lua b/lua/lvim/config/init.lua index 9f4bb45e..7823d9f2 100644 --- a/lua/lvim/config/init.lua +++ b/lua/lvim/config/init.lua @@ -18,7 +18,7 @@ function M:init() require("lvim.keymappings").load_defaults() local builtins = require "lvim.core.builtins" - builtins.config { user_config_file = user_config_file } + builtins.init() local settings = require "lvim.config.settings" settings.load_defaults() @@ -26,21 +26,7 @@ function M:init() local autocmds = require "lvim.core.autocmds" autocmds.load_defaults() - local lvim_lsp_config = require "lvim.lsp.config" - lvim.lsp = vim.deepcopy(lvim_lsp_config) - - lvim.builtin.luasnip = { - sources = { - friendly_snippets = true, - }, - } - - lvim.builtin.bigfile = { - active = true, - config = {}, - } - - require("lvim.config._deprecated").handle() + require("lvim.config._deprecated").pre_user_config() end --- Override the configuration with a user provided one @@ -65,7 +51,7 @@ function M:load(config_path) Log:set_level(lvim.log.level) - require("lvim.config._deprecated").post_load() + -- require("lvim.config._deprecated").post_load() autocmds.define_autocmds(lvim.autocommands) diff --git a/lua/lvim/config/settings.lua b/lua/lvim/config/settings.lua index 42281ca1..0d6de07c 100644 --- a/lua/lvim/config/settings.lua +++ b/lua/lvim/config/settings.lua @@ -51,7 +51,7 @@ M.load_default_options = function() sidescrolloff = 8, -- minimal number of screen lines to keep left and right of the cursor. showcmd = false, ruler = false, - laststatus = 3, + laststatus = 0, } --- SETTINGS --- diff --git a/lua/lvim/core/alpha.lua b/lua/lvim/core/alpha.lua index 42159d70..81bff949 100644 --- a/lua/lvim/core/alpha.lua +++ b/lua/lvim/core/alpha.lua @@ -1,23 +1,21 @@ local M = {} function M.config() - local lazy_set = require("lvim.utils.modules").lazy_set - local lvim_dashboard = lazy_set("lvim.core.alpha.dashboard", "get_sections") - local lvim_startify = lazy_set("lvim.core.alpha.startify", "get_sections") - lvim.builtin.alpha = { + local config = { dashboard = { config = {}, - section = lvim_dashboard, + section = require("lvim.core.alpha.dashboard").get_sections(), opts = { autostart = true }, }, startify = { config = {}, - section = lvim_startify, + section = require("lvim.core.alpha.startify").get_sections(), opts = { autostart = true }, }, - active = true, mode = "dashboard", } + ---@cast config +LvimBuiltin + lvim.builtin.alpha = config end local function resolve_buttons(theme_name, button_section) @@ -75,14 +73,6 @@ local function configure_additional_autocmds() pattern = "alpha", command = "set showtabline=0 | autocmd BufLeave <buffer> set showtabline=" .. vim.opt.showtabline._value, }) - if not lvim.builtin.lualine.options.globalstatus then - -- https://github.com/goolord/alpha-nvim/issues/42 - vim.api.nvim_create_autocmd("FileType", { - group = group, - pattern = "alpha", - command = "set laststatus=0 | autocmd BufUnload <buffer> set laststatus=" .. vim.opt.laststatus._value, - }) - end end function M.setup() diff --git a/lua/lvim/core/autopairs.lua b/lua/lvim/core/autopairs.lua index b9b66683..76032eb7 100644 --- a/lua/lvim/core/autopairs.lua +++ b/lua/lvim/core/autopairs.lua @@ -1,9 +1,7 @@ local M = {} function M.config() - lvim.builtin.autopairs = { - active = true, - on_config_done = nil, + local config = { ---@usage modifies the function or method delimiter by filetypes map_char = { all = "(", @@ -44,6 +42,8 @@ function M.config() highlight_grey = "Comment", }, } + ---@cast config +LvimBuiltin + lvim.builtin.autopairs = config end local function on_confirm_done(...) @@ -71,9 +71,6 @@ M.setup = function() fast_wrap = lvim.builtin.autopairs.fast_wrap, } - if lvim.builtin.autopairs.on_config_done then - lvim.builtin.autopairs.on_config_done(autopairs) - end pcall(function() require "nvim-autopairs.completion.cmp" require("cmp").event:off("confirm_done", on_confirm_done) diff --git a/lua/lvim/core/breadcrumbs.lua b/lua/lvim/core/breadcrumbs.lua index 0bf87a45..fe80cd95 100644 --- a/lua/lvim/core/breadcrumbs.lua +++ b/lua/lvim/core/breadcrumbs.lua @@ -5,9 +5,7 @@ local M = {} local icons = lvim.icons.kind M.config = function() - lvim.builtin.breadcrumbs = { - active = true, - on_config_done = nil, + local config = { winbar_filetype_exclude = { "help", "startify", @@ -77,6 +75,8 @@ M.config = function() depth_limit_indicator = "..", }, } + ---@cast config +LvimBuiltin + lvim.builtin.breadcrumbs = config end M.setup = function() @@ -87,10 +87,6 @@ M.setup = function() M.create_winbar() navic.setup(lvim.builtin.breadcrumbs.options) - - if lvim.builtin.breadcrumbs.on_config_done then - lvim.builtin.breadcrumbs.on_config_done() - end end M.get_filename = function() diff --git a/lua/lvim/core/bufferline.lua b/lua/lvim/core/bufferline.lua index abe16437..a65bc632 100644 --- a/lua/lvim/core/bufferline.lua +++ b/lua/lvim/core/bufferline.lua @@ -41,9 +41,7 @@ local function custom_filter(buf, buf_nums) end M.config = function() - lvim.builtin.bufferline = { - active = true, - on_config_done = nil, + local config = { keymap = { normal_mode = {}, }, @@ -142,6 +140,8 @@ M.config = function() sort_by = "id", }, } + ---@cast config +LvimBuiltin + lvim.builtin.bufferline = config end M.setup = function() @@ -158,10 +158,6 @@ M.setup = function() options = lvim.builtin.bufferline.options, highlights = lvim.builtin.bufferline.highlights, } - - if lvim.builtin.bufferline.on_config_done then - lvim.builtin.bufferline.on_config_done() - end end --stylua: ignore diff --git a/lua/lvim/core/builtins/init.lua b/lua/lvim/core/builtins/init.lua index 4764ff70..e918b033 100644 --- a/lua/lvim/core/builtins/init.lua +++ b/lua/lvim/core/builtins/init.lua @@ -1,33 +1,76 @@ local M = {} +---@class LvimBuiltin +---@field active boolean is builtin enabled +---@field setup table options passed to setup() +---@field on_config function function called to configure the builtin +---@field on_config_done function function called to configure the builtin + local builtins = { - "lvim.core.theme", - "lvim.core.which-key", - "lvim.core.gitsigns", - "lvim.core.cmp", - "lvim.core.dap", - "lvim.core.terminal", - "lvim.core.telescope", - "lvim.core.treesitter", - "lvim.core.nvimtree", - "lvim.core.lir", - "lvim.core.illuminate", - "lvim.core.indentlines", - "lvim.core.breadcrumbs", - "lvim.core.project", - "lvim.core.bufferline", - "lvim.core.autopairs", - "lvim.core.comment", - "lvim.core.lualine", - "lvim.core.alpha", - "lvim.core.mason", + "which_key", + "gitsigns", + "cmp", + "dap", + "terminal", + "telescope", + "treesitter", + "nvimtree", + "lir", + "illuminate", + "indentlines", + "breadcrumbs", + "project", + "bufferline", + "autopairs", + "comment", + "lualine", + "alpha", + "mason", } -function M.config(config) - for _, builtin_path in ipairs(builtins) do - local builtin = reload(builtin_path) +function M.init() + for _, name in ipairs(builtins) do + lvim.builtin[name] = { active = true } + end + + reload("lvim.core.theme").config() + + lvim.builtin.cmp.cmdline = { enable = false } + + lvim.builtin.luasnip = { + sources = { + friendly_snippets = true, + }, + } + + lvim.builtin.bigfile = { + active = true, + config = {}, + } +end + +function M.setup(builtin_mod_name) + local builtin_name = builtin_mod_name:gsub("-", "_") + local mod = require("lvim.core." .. builtin_mod_name) + + -- initialize config table + mod.config() + local builtin = lvim.builtin[builtin_name] + + if type(builtin.on_config) == "function" then + builtin.on_config() + + local deprecated = require "lvim.config._deprecated" + local deprecation_handler = deprecated.post_builtin[builtin_name] + if deprecation_handler then + deprecation_handler() + end + end + + mod.setup() - builtin.config(config) + if type(builtin.on_config_done) == "function" then + builtin.on_config_done() end end diff --git a/lua/lvim/core/cmp.lua b/lua/lvim/core/cmp.lua index 142d548f..2360947f 100644 --- a/lua/lvim/core/cmp.lua +++ b/lua/lvim/core/cmp.lua @@ -127,9 +127,7 @@ M.config = function() return end - lvim.builtin.cmp = { - active = true, - on_config_done = nil, + local config = { enabled = function() local buftype = vim.api.nvim_buf_get_option(0, "buftype") if buftype == "prompt" then @@ -354,6 +352,8 @@ M.config = function() }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.cmp = config end function M.setup() @@ -368,10 +368,6 @@ function M.setup() }) end end - - if lvim.builtin.cmp.on_config_done then - lvim.builtin.cmp.on_config_done(cmp) - end end return M diff --git a/lua/lvim/core/comment.lua b/lua/lvim/core/comment.lua index f07929c7..c75d402c 100644 --- a/lua/lvim/core/comment.lua +++ b/lua/lvim/core/comment.lua @@ -1,9 +1,7 @@ local M = {} function M.config() - lvim.builtin.comment = { - active = true, - on_config_done = nil, + local config = { ---Add a space b/w comment and the line ---@type boolean padding = true, @@ -72,15 +70,14 @@ function M.config() ---@type function|nil post_hook = nil, } + ---@cast config +LvimBuiltin + lvim.builtin.comment = config end function M.setup() local nvim_comment = require "Comment" nvim_comment.setup(lvim.builtin.comment) - if lvim.builtin.comment.on_config_done then - lvim.builtin.comment.on_config_done(nvim_comment) - end end return M diff --git a/lua/lvim/core/dap.lua b/lua/lvim/core/dap.lua index d8de10d5..029d1d98 100644 --- a/lua/lvim/core/dap.lua +++ b/lua/lvim/core/dap.lua @@ -1,9 +1,7 @@ local M = {} M.config = function() - lvim.builtin.dap = { - active = true, - on_config_done = nil, + local config = { breakpoint = { text = lvim.icons.ui.Bug, texthl = "DiagnosticSignError", @@ -95,6 +93,8 @@ M.config = function() }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.dap = config end M.setup = function() @@ -110,10 +110,6 @@ M.setup = function() end dap.set_log_level(lvim.builtin.dap.log.level) - - if lvim.builtin.dap.on_config_done then - lvim.builtin.dap.on_config_done(dap) - end end M.setup_ui = function() diff --git a/lua/lvim/core/gitsigns.lua b/lua/lvim/core/gitsigns.lua index 1c8619c8..1cf6e4ac 100644 --- a/lua/lvim/core/gitsigns.lua +++ b/lua/lvim/core/gitsigns.lua @@ -1,9 +1,7 @@ local M = {} M.config = function() - lvim.builtin.gitsigns = { - active = true, - on_config_done = nil, + local config = { opts = { signs = { add = { @@ -69,15 +67,14 @@ M.config = function() yadm = { enable = false }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.gitsigns = config end M.setup = function() local gitsigns = reload "gitsigns" gitsigns.setup(lvim.builtin.gitsigns.opts) - if lvim.builtin.gitsigns.on_config_done then - lvim.builtin.gitsigns.on_config_done(gitsigns) - end end return M diff --git a/lua/lvim/core/illuminate.lua b/lua/lvim/core/illuminate.lua index 5968b4bb..3c14ecab 100644 --- a/lua/lvim/core/illuminate.lua +++ b/lua/lvim/core/illuminate.lua @@ -1,9 +1,7 @@ local M = {} M.config = function() - lvim.builtin.illuminate = { - active = true, - on_config_done = nil, + local config = { options = { -- providers: provider used to get references in the buffer, ordered by priority providers = { @@ -51,6 +49,8 @@ M.config = function() under_cursor = true, }, } + ---@cast config +LvimBuiltin + lvim.builtin.illuminate = config end M.setup = function() @@ -63,10 +63,6 @@ M.setup = function() if not config_ok then return end - - if lvim.builtin.illuminate.on_config_done then - lvim.builtin.illuminate.on_config_done() - end end return M diff --git a/lua/lvim/core/indentlines.lua b/lua/lvim/core/indentlines.lua index 3097daf8..d0716a4c 100644 --- a/lua/lvim/core/indentlines.lua +++ b/lua/lvim/core/indentlines.lua @@ -1,9 +1,7 @@ local M = {} M.config = function() - lvim.builtin.indentlines = { - active = true, - on_config_done = nil, + local config = { options = { enabled = true, buftype_exclude = { "terminal", "nofile" }, @@ -25,6 +23,8 @@ M.config = function() show_current_context = true, }, } + ---@cast config +LvimBuiltin + lvim.builtin.indentlines = config end M.setup = function() @@ -34,10 +34,6 @@ M.setup = function() end indent_blankline.setup(lvim.builtin.indentlines.options) - - if lvim.builtin.indentlines.on_config_done then - lvim.builtin.indentlines.on_config_done() - end end return M diff --git a/lua/lvim/core/lir.lua b/lua/lvim/core/lir.lua index 83f79b6f..eca156a7 100644 --- a/lua/lvim/core/lir.lua +++ b/lua/lvim/core/lir.lua @@ -5,9 +5,7 @@ M.config = function() local actions = utils.require_on_exported_call "lir.actions" local clipboard_actions = utils.require_on_exported_call "lir.clipboard.actions" - lvim.builtin.lir = { - active = true, - on_config_done = nil, + local config = { icon = "î—¿", show_hidden_files = false, ignore = {}, -- { ".DS_Store" "node_modules" } etc. @@ -72,6 +70,8 @@ M.config = function() ) end, } + ---@cast config +LvimBuiltin + lvim.builtin.lir = config end function M.icon_setup() @@ -111,10 +111,6 @@ function M.setup() lir.setup(lvim.builtin.lir) M.icon_setup() - - if lvim.builtin.lir.on_config_done then - lvim.builtin.lir.on_config_done(lir) - end end return M diff --git a/lua/lvim/core/lualine/init.lua b/lua/lvim/core/lualine/init.lua index 0ee35c04..bb530258 100644 --- a/lua/lvim/core/lualine/init.lua +++ b/lua/lvim/core/lualine/init.lua @@ -1,14 +1,15 @@ local M = {} M.config = function() - lvim.builtin.lualine = { - active = true, + local config = { style = "lvim", options = { icons_enabled = nil, component_separators = nil, section_separators = nil, theme = nil, - disabled_filetypes = nil, + disabled_filetypes = { + statusline = { "alpha" }, + }, globalstatus = true, }, sections = { @@ -29,8 +30,9 @@ M.config = function() }, tabline = nil, extensions = nil, - on_config_done = nil, } + ---@cast config +LvimBuiltin + lvim.builtin.lualine = config end M.setup = function() @@ -47,11 +49,8 @@ M.setup = function() require("lvim.core.lualine.styles").update() + vim.opt.laststatus = 3 lualine.setup(lvim.builtin.lualine) - - if lvim.builtin.lualine.on_config_done then - lvim.builtin.lualine.on_config_done(lualine) - end end return M diff --git a/lua/lvim/core/mason.lua b/lua/lvim/core/mason.lua index 75b12229..51271045 100644 --- a/lua/lvim/core/mason.lua +++ b/lua/lvim/core/mason.lua @@ -3,7 +3,7 @@ local M = {} local join_paths = require("lvim.utils").join_paths function M.config() - lvim.builtin.mason = { + local config = { ui = { border = "rounded", keymaps = { @@ -50,6 +50,8 @@ function M.config() download_url_template = "https://github.com/%s/releases/download/%s/%s", }, } + ---@cast config +LvimBuiltin + lvim.builtin.mason = config end function M.get_prefix() diff --git a/lua/lvim/core/nvimtree.lua b/lua/lvim/core/nvimtree.lua index 6f87e30d..d3c7a2de 100644 --- a/lua/lvim/core/nvimtree.lua +++ b/lua/lvim/core/nvimtree.lua @@ -2,9 +2,7 @@ local M = {} local Log = require "lvim.core.log" function M.config() - lvim.builtin.nvimtree = { - active = true, - on_config_done = nil, + local config = { setup = { auto_reload_on_write = false, disable_netrw = false, @@ -232,6 +230,8 @@ function M.config() }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.nvimtree = config end function M.setup() @@ -276,10 +276,6 @@ function M.setup() end nvim_tree.setup(lvim.builtin.nvimtree.setup) - - if lvim.builtin.nvimtree.on_config_done then - lvim.builtin.nvimtree.on_config_done(nvim_tree) - end end function M.start_telescope(telescope_mode) diff --git a/lua/lvim/core/project.lua b/lua/lvim/core/project.lua index 17473c55..f2da6c33 100644 --- a/lua/lvim/core/project.lua +++ b/lua/lvim/core/project.lua @@ -1,13 +1,7 @@ local M = {} function M.config() - lvim.builtin.project = { - ---@usage set to false to disable project.nvim. - --- This is on by default since it's currently the expected behavior. - active = true, - - on_config_done = nil, - + local config = { ---@usage set to true to disable setting the current-woriking directory --- Manual mode doesn't automatically change your root directory, so you have --- the option to manually do so using `:ProjectRoot` command. @@ -50,6 +44,8 @@ function M.config() ---@usage path to store the project history for use in telescope datapath = get_cache_dir(), } + ---@cast config +LvimBuiltin + lvim.builtin.project = config end function M.setup() @@ -59,9 +55,6 @@ function M.setup() end project.setup(lvim.builtin.project) - if lvim.builtin.project.on_config_done then - lvim.builtin.project.on_config_done(project) - end end return M diff --git a/lua/lvim/core/telescope.lua b/lua/lvim/core/telescope.lua index b701f7e4..c1b4e2ec 100644 --- a/lua/lvim/core/telescope.lua +++ b/lua/lvim/core/telescope.lua @@ -8,10 +8,7 @@ local M = {} function M.config() local actions = require("lvim.utils.modules").require_on_exported_call "telescope.actions" - lvim.builtin.telescope = { - ---@usage disable telescope completely [not recommended] - active = true, - on_config_done = nil, + local config = { theme = "dropdown", ---@type telescope_themes defaults = { prompt_prefix = lvim.icons.ui.Telescope .. " ", @@ -107,6 +104,8 @@ function M.config() }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.telescope = config end function M.setup() @@ -136,10 +135,6 @@ function M.setup() end) end - if lvim.builtin.telescope.on_config_done then - lvim.builtin.telescope.on_config_done(telescope) - end - if lvim.builtin.telescope.extensions and lvim.builtin.telescope.extensions.fzf then pcall(function() require("telescope").load_extension "fzf" diff --git a/lua/lvim/core/terminal.lua b/lua/lvim/core/terminal.lua index 663ba77a..0635b4a9 100644 --- a/lua/lvim/core/terminal.lua +++ b/lua/lvim/core/terminal.lua @@ -2,9 +2,7 @@ local M = {} local Log = require "lvim.core.log" M.config = function() - lvim.builtin["terminal"] = { - active = true, - on_config_done = nil, + local config = { -- size can be a number or function which is passed the current terminal size = 20, open_mapping = [[<c-\>]], @@ -46,6 +44,8 @@ M.config = function() { nil, "<M-3>", "Float Terminal", "float", nil }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.terminal = config end --- Get current buffer size @@ -98,10 +98,6 @@ M.setup = function() M.add_exec(opts) end - - if lvim.builtin.terminal.on_config_done then - lvim.builtin.terminal.on_config_done(terminal) - end end M.add_exec = function(opts) diff --git a/lua/lvim/core/treesitter.lua b/lua/lvim/core/treesitter.lua index 456a2955..e44a39c7 100644 --- a/lua/lvim/core/treesitter.lua +++ b/lua/lvim/core/treesitter.lua @@ -2,9 +2,7 @@ local M = {} local Log = require "lvim.core.log" function M.config() - lvim.builtin.treesitter = { - on_config_done = nil, - + local config = { -- A list of parser names, or "all" ensure_installed = {}, @@ -93,6 +91,8 @@ function M.config() max_file_lines = 1000, -- Do not enable for files with more than 1000 lines, int }, } + ---@cast config +LvimBuiltin + lvim.builtin.treesitter = config end function M.setup() @@ -111,10 +111,6 @@ function M.setup() local opts = vim.deepcopy(lvim.builtin.treesitter) treesitter_configs.setup(opts) - - if lvim.builtin.treesitter.on_config_done then - lvim.builtin.treesitter.on_config_done(treesitter_configs) - end end return M diff --git a/lua/lvim/core/which-key.lua b/lua/lvim/core/which-key.lua index 8cedeabc..cfff800c 100644 --- a/lua/lvim/core/which-key.lua +++ b/lua/lvim/core/which-key.lua @@ -1,9 +1,6 @@ local M = {} M.config = function() - lvim.builtin.which_key = { - ---@usage disable which-key completely [not recommended] - active = true, - on_config_done = nil, + local config = { setup = { plugins = { marks = false, -- shows a list of your marks on ' and ` @@ -298,6 +295,8 @@ M.config = function() }, }, } + ---@cast config +LvimBuiltin + lvim.builtin.which_key = config end M.setup = function() @@ -313,10 +312,6 @@ M.setup = function() which_key.register(mappings, opts) which_key.register(vmappings, vopts) - - if lvim.builtin.which_key.on_config_done then - lvim.builtin.which_key.on_config_done(which_key) - end end return M diff --git a/lua/lvim/lsp/config.lua b/lua/lvim/lsp/config.lua index f6abeeca..4cb9cf54 100644 --- a/lua/lvim/lsp/config.lua +++ b/lua/lvim/lsp/config.lua @@ -45,107 +45,115 @@ local skipped_servers = { local skipped_filetypes = { "markdown", "rst", "plaintext", "toml", "proto" } -local join_paths = require("lvim.utils").join_paths +local M = {} -return { - templates_dir = join_paths(get_runtime_dir(), "site", "after", "ftplugin"), - diagnostics = { - signs = { - active = true, - values = { - { name = "DiagnosticSignError", text = lvim.icons.diagnostics.Error }, - { name = "DiagnosticSignWarn", text = lvim.icons.diagnostics.Warning }, - { name = "DiagnosticSignHint", text = lvim.icons.diagnostics.Hint }, - { name = "DiagnosticSignInfo", text = lvim.icons.diagnostics.Information }, +M.config = function() + local join_paths = require("lvim.utils").join_paths + + lvim.lsp = { + -- Function that gets called to configure lvim.lsp + config = nil, + templates_dir = join_paths(get_runtime_dir(), "site", "after", "ftplugin"), + diagnostics = { + signs = { + active = true, + values = { + { name = "DiagnosticSignError", text = lvim.icons.diagnostics.Error }, + { name = "DiagnosticSignWarn", text = lvim.icons.diagnostics.Warning }, + { name = "DiagnosticSignHint", text = lvim.icons.diagnostics.Hint }, + { name = "DiagnosticSignInfo", text = lvim.icons.diagnostics.Information }, + }, + }, + virtual_text = true, + update_in_insert = false, + underline = true, + severity_sort = true, + float = { + focusable = true, + style = "minimal", + border = "rounded", + source = "always", + header = "", + prefix = "", + format = function(d) + local code = d.code or (d.user_data and d.user_data.lsp.code) + if code then + return string.format("%s [%s]", d.message, code):gsub("1. ", "") + end + return d.message + end, }, }, - virtual_text = true, - update_in_insert = false, - underline = true, - severity_sort = true, + document_highlight = false, + code_lens_refresh = true, float = { focusable = true, style = "minimal", border = "rounded", - source = "always", - header = "", - prefix = "", - format = function(d) - local code = d.code or (d.user_data and d.user_data.lsp.code) - if code then - return string.format("%s [%s]", d.message, code):gsub("1. ", "") - end - return d.message - end, }, - }, - document_highlight = false, - code_lens_refresh = true, - float = { - focusable = true, - style = "minimal", - border = "rounded", - }, - on_attach_callback = nil, - on_init_callback = nil, - automatic_configuration = { - ---@usage list of servers that the automatic installer will skip - skipped_servers = skipped_servers, - ---@usage list of filetypes that the automatic installer will skip - skipped_filetypes = skipped_filetypes, - }, - buffer_mappings = { - normal_mode = { - ["K"] = { "<cmd>lua vim.lsp.buf.hover()<cr>", "Show hover" }, - ["gd"] = { "<cmd>lua vim.lsp.buf.definition()<cr>", "Goto Definition" }, - ["gD"] = { "<cmd>lua vim.lsp.buf.declaration()<cr>", "Goto declaration" }, - ["gr"] = { "<cmd>lua vim.lsp.buf.references()<cr>", "Goto references" }, - ["gI"] = { "<cmd>lua vim.lsp.buf.implementation()<cr>", "Goto Implementation" }, - ["gs"] = { "<cmd>lua vim.lsp.buf.signature_help()<cr>", "show signature help" }, - ["gl"] = { - function() - local config = lvim.lsp.diagnostics.float - config.scope = "line" - vim.diagnostic.open_float(0, config) - end, - "Show line diagnostics", + on_attach_callback = nil, + on_init_callback = nil, + automatic_configuration = { + ---@usage list of servers that the automatic installer will skip + skipped_servers = skipped_servers, + ---@usage list of filetypes that the automatic installer will skip + skipped_filetypes = skipped_filetypes, + }, + buffer_mappings = { + normal_mode = { + ["K"] = { "<cmd>lua vim.lsp.buf.hover()<cr>", "Show hover" }, + ["gd"] = { "<cmd>lua vim.lsp.buf.definition()<cr>", "Goto Definition" }, + ["gD"] = { "<cmd>lua vim.lsp.buf.declaration()<cr>", "Goto declaration" }, + ["gr"] = { "<cmd>lua vim.lsp.buf.references()<cr>", "Goto references" }, + ["gI"] = { "<cmd>lua vim.lsp.buf.implementation()<cr>", "Goto Implementation" }, + ["gs"] = { "<cmd>lua vim.lsp.buf.signature_help()<cr>", "show signature help" }, + ["gl"] = { + function() + local config = lvim.lsp.diagnostics.float + config.scope = "line" + vim.diagnostic.open_float(0, config) + end, + "Show line diagnostics", + }, }, + insert_mode = {}, + visual_mode = {}, }, - insert_mode = {}, - visual_mode = {}, - }, - buffer_options = { - --- enable completion triggered by <c-x><c-o> - omnifunc = "v:lua.vim.lsp.omnifunc", - --- use gq for formatting - formatexpr = "v:lua.vim.lsp.formatexpr(#{timeout_ms:500})", - }, - ---@usage list of settings of nvim-lsp-installer - installer = { - setup = { - ensure_installed = {}, - automatic_installation = { - exclude = {}, + buffer_options = { + --- enable completion triggered by <c-x><c-o> + omnifunc = "v:lua.vim.lsp.omnifunc", + --- use gq for formatting + formatexpr = "v:lua.vim.lsp.formatexpr(#{timeout_ms:500})", + }, + ---@usage list of settings of nvim-lsp-installer + installer = { + setup = { + ensure_installed = {}, + automatic_installation = { + exclude = {}, + }, }, }, - }, - nlsp_settings = { - setup = { - config_home = join_paths(get_config_dir(), "lsp-settings"), - -- set to false to overwrite schemastore.nvim - append_default_schemas = true, - ignored_servers = {}, - loader = "json", + nlsp_settings = { + setup = { + config_home = join_paths(get_config_dir(), "lsp-settings"), + -- set to false to overwrite schemastore.nvim + append_default_schemas = true, + ignored_servers = {}, + loader = "json", + }, }, - }, - null_ls = { - setup = { - debug = false, + null_ls = { + setup = { + debug = false, + }, + config = {}, }, - config = {}, - }, - ---@deprecated use lvim.lsp.automatic_configuration.skipped_servers instead - override = {}, - ---@deprecated use lvim.lsp.installer.setup.automatic_installation instead - automatic_servers_installation = nil, -} + ---@deprecated use lvim.lsp.automatic_configuration.skipped_servers instead + override = {}, + ---@deprecated use lvim.lsp.installer.setup.automatic_installation instead + automatic_servers_installation = nil, + } +end + +return M diff --git a/lua/lvim/lsp/init.lua b/lua/lvim/lsp/init.lua index b997b171..03650a99 100644 --- a/lua/lvim/lsp/init.lua +++ b/lua/lvim/lsp/init.lua @@ -89,6 +89,11 @@ end function M.setup() Log:debug "Setting up LSP support" + require("lvim.lsp.config").config() + if type(lvim.lsp.config) == "function" then + lvim.lsp.config() + end + local lsp_status_ok, _ = pcall(require, "lspconfig") if not lsp_status_ok then return diff --git a/lua/lvim/plugin-loader.lua b/lua/lvim/plugin-loader.lua index 31b2e6dd..56021875 100644 --- a/lua/lvim/plugin-loader.lua +++ b/lua/lvim/plugin-loader.lua @@ -46,7 +46,7 @@ function plugin_loader.init(opts) end vim.opt.runtimepath:append(lazy_install_dir) - vim.opt.runtimepath:append(join_paths(plugins_dir, "*")) + -- vim.opt.runtimepath:append(join_paths(plugins_dir, "*")) local lazy_cache = require "lazy.core.cache" lazy_cache.setup { @@ -101,7 +101,7 @@ function plugin_loader.load(configurations) end -- remove plugins from rtp before loading lazy, so that all plugins won't be loaded on startup - vim.opt.runtimepath:remove(join_paths(plugins_dir, "*")) + -- vim.opt.runtimepath:remove(join_paths(plugins_dir, "*")) local status_ok = xpcall(function() local opts = { diff --git a/lua/lvim/plugins.lua b/lua/lvim/plugins.lua index 27a90c7d..425e8559 100644 --- a/lua/lvim/plugins.lua +++ b/lua/lvim/plugins.lua @@ -12,7 +12,7 @@ local core_plugins = { { "williamboman/mason.nvim", config = function() - require("lvim.core.mason").setup() + require("lvim.core.builtins").setup "mason" end, lazy = true, }, @@ -33,7 +33,7 @@ local core_plugins = { "nvim-telescope/telescope.nvim", branch = "0.1.x", config = function() - require("lvim.core.telescope").setup() + require("lvim.core.builtins").setup "telescope" end, dependencies = { "telescope-fzf-native.nvim" }, lazy = true, @@ -46,7 +46,7 @@ local core_plugins = { "hrsh7th/nvim-cmp", config = function() if lvim.builtin.cmp then - require("lvim.core.cmp").setup() + require("lvim.core.builtins").setup "cmp" end end, event = { "InsertEnter", "CmdlineEnter" }, @@ -101,7 +101,7 @@ local core_plugins = { "windwp/nvim-autopairs", event = "InsertEnter", config = function() - require("lvim.core.autopairs").setup() + require("lvim.core.builtins").setup "autopairs" end, enabled = lvim.builtin.autopairs.active, }, @@ -114,7 +114,7 @@ local core_plugins = { local utils = require "lvim.utils" local path = utils.join_paths(get_runtime_dir(), "site", "pack", "lazy", "opt", "nvim-treesitter") vim.opt.rtp:prepend(path) -- treesitter needs to be before nvim's runtime in rtp - require("lvim.core.treesitter").setup() + require("lvim.core.builtins").setup "treesitter" end, event = "User FileOpened", dependencies = "nvim-ts-context-commentstring", @@ -128,7 +128,7 @@ local core_plugins = { { "kyazdani42/nvim-tree.lua", config = function() - require("lvim.core.nvimtree").setup() + require("lvim.core.builtins").setup "nvimtree" end, enabled = lvim.builtin.nvimtree.active, cmd = { "NvimTreeToggle", "NvimTreeOpen", "NvimTreeFocus", "NvimTreeFindFileToggle" }, @@ -138,7 +138,7 @@ local core_plugins = { { "tamago324/lir.nvim", config = function() - require("lvim.core.lir").setup() + require("lvim.core.builtins").setup "lir" end, enabled = lvim.builtin.lir.active, event = "User DirOpened", @@ -146,7 +146,7 @@ local core_plugins = { { "lewis6991/gitsigns.nvim", config = function() - require("lvim.core.gitsigns").setup() + require("lvim.core.builtins").setup "gitsigns" end, event = "User FileOpened", enabled = lvim.builtin.gitsigns.active, @@ -156,7 +156,7 @@ local core_plugins = { { "folke/which-key.nvim", config = function() - require("lvim.core.which-key").setup() + require("lvim.core.builtins").setup "which-key" end, event = "VeryLazy", enabled = lvim.builtin.which_key.active, @@ -166,7 +166,7 @@ local core_plugins = { { "numToStr/Comment.nvim", config = function() - require("lvim.core.comment").setup() + require("lvim.core.builtins").setup "comment" end, keys = { { "gc", mode = { "n", "v" } }, { "gb", mode = { "n", "v" } } }, event = "User FileOpened", @@ -176,8 +176,9 @@ local core_plugins = { -- project.nvim { "ahmedkhalf/project.nvim", + event = "VeryLazy", config = function() - require("lvim.core.project").setup() + require("lvim.core.builtins").setup "project" end, enabled = lvim.builtin.project.active, }, @@ -195,9 +196,9 @@ local core_plugins = { "nvim-lualine/lualine.nvim", -- "Lunarvim/lualine.nvim", config = function() - require("lvim.core.lualine").setup() + require("lvim.core.builtins").setup "lualine" end, - event = "VimEnter", + event = "User FileOpened", enabled = lvim.builtin.lualine.active, }, @@ -205,7 +206,7 @@ local core_plugins = { { "SmiteshP/nvim-navic", config = function() - require("lvim.core.breadcrumbs").setup() + require("lvim.core.builtins").setup "breadcrumbs" end, event = "User FileOpened", enabled = lvim.builtin.breadcrumbs.active, @@ -214,7 +215,7 @@ local core_plugins = { { "akinsho/bufferline.nvim", config = function() - require("lvim.core.bufferline").setup() + require("lvim.core.builtins").setup "bufferline" end, branch = "main", event = "User FileOpened", @@ -225,7 +226,7 @@ local core_plugins = { { "mfussenegger/nvim-dap", config = function() - require("lvim.core.dap").setup() + require("lvim.core.builtins").setup "dap" end, enabled = lvim.builtin.dap.active, event = "User FileOpened", @@ -245,7 +246,7 @@ local core_plugins = { { "goolord/alpha-nvim", config = function() - require("lvim.core.alpha").setup() + require("lvim.core.builtins").setup "alpha" end, enabled = lvim.builtin.alpha.active, }, @@ -256,7 +257,7 @@ local core_plugins = { event = "VeryLazy", branch = "main", config = function() - require("lvim.core.terminal").setup() + require("lvim.core.builtins").setup "terminal" end, enabled = lvim.builtin.terminal.active, }, @@ -270,7 +271,7 @@ local core_plugins = { { "RRethy/vim-illuminate", config = function() - require("lvim.core.illuminate").setup() + require("lvim.core.builtins").setup "illuminate" end, event = "User FileOpened", enabled = lvim.builtin.illuminate.active, @@ -279,7 +280,7 @@ local core_plugins = { { "lukas-reineke/indent-blankline.nvim", config = function() - require("lvim.core.indentlines").setup() + require("lvim.core.builtins").setup "indentlines" end, event = "User FileOpened", enabled = lvim.builtin.indentlines.active, @@ -299,15 +300,16 @@ local core_plugins = { lazy = lvim.colorscheme ~= "onedarker", }, - { - "lunarvim/bigfile.nvim", - config = function() - pcall(function() - require("bigfile").config(lvim.builtin.bigfile.config) - end) - end, - enabled = lvim.builtin.bigfile.active, - }, + -- TODO: add option in bigfile to not require treesitter + -- { + -- "lunarvim/bigfile.nvim", + -- config = function() + -- pcall(function() + -- require("bigfile").config(lvim.builtin.bigfile.config) + -- end) + -- end, + -- enabled = lvim.builtin.bigfile.active, + -- }, } local default_snapshot_path = join_paths(get_lvim_base_dir(), "snapshots", "default.json") |