diff --git a/config/lua/ivy/config/lsp.lua b/config/lua/ivy/config/lsp.lua index 7e6bc9b..e7db0d4 100644 --- a/config/lua/ivy/config/lsp.lua +++ b/config/lua/ivy/config/lsp.lua @@ -1,7 +1,3 @@ --- common ===================================================================== --- vim.lsp.config('*', {}) - --- enable ===================================================================== vim.lsp.enable({ "astro", "bashls", @@ -33,6 +29,7 @@ vim.lsp.enable({ }) vim.g.lsp_on_attach = function(_, buf) - local opts = { buffer = buf } + ---@type vim.keymap.set.Opts + local opts = { buf = buf } vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) end diff --git a/config/lua/ivy/init.lua b/config/lua/ivy/init.lua index 3fa85cc..b46a980 100644 --- a/config/lua/ivy/init.lua +++ b/config/lua/ivy/init.lua @@ -1,9 +1,12 @@ +-- prelude ===================================================================== + +local datadir = vim.fn.stdpath("data") vim.opt.rtp:prepend({ - "~/.local/share/ivy/site/pack/*/start/*", - "~/.local/share/ivy/site/pack/*/start/*/after", + datadir .. "/site/pack/*/start/*", + datadir .. "/site/pack/*/start/*/after", }) vim.opt.packpath:prepend({ - "~/.local/share/ivy/site", + datadir .. "/site", }) vim.on = function(event, group, ...) @@ -19,45 +22,21 @@ vim.once:init() require("ivy.notifs").init() -local load_cfg = function(mod) - local ok, result = pcall(require, mod) - if not ok then - return vim.notify("error loading " .. mod .. ":\n\t" .. result, vim.log.levels.ERROR) - end - return result -end +-- helper ====================================================================== -local load = function(spec) - return load_cfg(spec.name) +local function findmods(rootmod) + local path = ("lua/%s/*.lua"):format(string.gsub(rootmod, "%.", "/")) + return vim.iter(vim.api.nvim_get_runtime_file(path, true)):map(function(file) + local name = string.gsub(vim.fs.basename(file), "%.lua$", "") + return ("%s.%s"):format(rootmod, name) + end) end -local base_path = debug.getinfo(1).source:sub(2, -#"/lua/ivy/init.lua") +-- config ====================================================================== -vim - .iter(ipairs({ - { "ivy.config.disable" }, - { "ivy.config.options" }, - { "ivy.config.autocmds", event = "User ConfigDone" }, - { "ivy.config.keymaps", event = "UIEnter" }, - { "ivy.config.neovide" }, - { "ivy.config.lsp", event = "User PackDone" }, - })) - :map(function(_, spec) - local modname = spec[1] - local path = vim.fs.joinpath(base_path, ("lua/%s.lua"):format(modname:gsub("%.", "/"))) - return { - name = spec[1], - url = "file://" .. path, - event = spec.event, - path = path, - load = load, - ensure = false, - } - end) - :each(function(plug) - require("lynn").register(plug, true) - require("lynn").load(plug.name) - end) +findmods("ivy.config"):each(require) + +-- lynn ======================================================================== require("lynn").packdir = vim.fs.joinpath( vim.iter(vim.opt.packpath:get()):find(function(v) @@ -67,12 +46,13 @@ require("lynn").packdir = vim.fs.joinpath( os.getenv("NVIM_APPNAME"), "opt" ) -vim.iter(vim.api.nvim_get_runtime_file("lua/ivy/plugins/*.lua", true)):each(function(file) - local name = string.gsub(vim.fs.basename(file), "%.lua$", "") - require("lynn").import("ivy.plugins." .. name, true) +findmods("ivy.plugins"):each(function(mod) + require("lynn").import(mod, true) end) require("lynn").setup() +-- lifecycle =================================================================== + vim.api.nvim_exec_autocmds("User", { pattern = "ConfigDone" }) require("ivy.health").loaded = true diff --git a/config/lua/ivy/config/autocmds.lua b/config/plugin/autocmds.lua similarity index 93% rename from config/lua/ivy/config/autocmds.lua rename to config/plugin/autocmds.lua index a32074d..102abd7 100644 --- a/config/lua/ivy/config/autocmds.lua +++ b/config/plugin/autocmds.lua @@ -21,7 +21,10 @@ vim.on({ "WinEnter", "TermOpen" }, "@ivy.editor.terminal.startinsert", { pattern = "term://*", desc = "start insert mode in terminal", }, function(ev) - if vim.api.nvim_get_current_buf() ~= ev.buf or vim.bo[ev.buf].buftype ~= "terminal" then + if + vim.api.nvim_get_current_buf() ~= ev.buf + or vim.bo[ev.buf].buftype ~= "terminal" + then return end vim.cmd("startinsert") diff --git a/config/lua/ivy/config/keymaps.lua b/config/plugin/keymaps.lua similarity index 100% rename from config/lua/ivy/config/keymaps.lua rename to config/plugin/keymaps.lua