From 68cb7ea3d53962e5a6a738c25f814c6c6cd54da0 Mon Sep 17 00:00:00 2001 From: Evan Reichard Date: Fri, 29 May 2026 07:43:36 -0400 Subject: [PATCH] feat(nvim): exrc dynamic LSP --- .../programs/terminal/git/config/.gitignore | 1 + .../terminal/nvim/config/lua/lsp-config.lua | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/modules/home/programs/terminal/git/config/.gitignore b/modules/home/programs/terminal/git/config/.gitignore index beb95cc..6742ee5 100755 --- a/modules/home/programs/terminal/git/config/.gitignore +++ b/modules/home/programs/terminal/git/config/.gitignore @@ -3,3 +3,4 @@ _scratch .envrc .agents .pi +.nvim.lua diff --git a/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua b/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua index dd25b4c..08e888f 100755 --- a/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua +++ b/modules/home/programs/terminal/nvim/config/lua/lsp-config.lua @@ -304,3 +304,30 @@ none_ls.setup({ end end, }) + +------------------------------------------------------ +---------------------- EXRC LSP ---------------------- +------------------------------------------------------ + +vim.o.exrc = true -- native path: /.nvim.lua on startup + +local loaded = {} -- absolute path -> true +local function load_project_config(buf) + local fname = vim.api.nvim_buf_get_name(buf) + if fname == "" then return end + local found = vim.fs.find(".nvim.lua", { + upward = true, + path = vim.fs.dirname(fname), + })[1] + if not found or loaded[found] then return end + local content = vim.secure.read(found) + if content then + loaded[found] = true + local chunk, err = loadfile(found) + if chunk then chunk() else vim.notify("project config: " .. err, vim.log.levels.ERROR) end + end +end + +vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, { + callback = function(args) load_project_config(args.buf) end, +})