summary refs log tree commit diff
path: root/.vim/lua/exrc.lua
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-08-17 15:27:37 +0200
committerRobert Günzler <r@gnzler.io>2022-08-17 15:27:37 +0200
commit4727b38cfeb30ac72635a9854a26ef13bc63592b (patch)
tree8b731456a38c99206f7a7ed167db6dd9913c157c /.vim/lua/exrc.lua
parent5feb09d4f6e9c4d2b8a6f2b8ac29911850824046 (diff)
vim: move custom exrc loading into module
Diffstat (limited to '.vim/lua/exrc.lua')
-rw-r--r--.vim/lua/exrc.lua49
1 files changed, 49 insertions, 0 deletions
diff --git a/.vim/lua/exrc.lua b/.vim/lua/exrc.lua
new file mode 100644
index 0000000..6b7742b
--- /dev/null
+++ b/.vim/lua/exrc.lua
@@ -0,0 +1,49 @@
+local root_pattern = require('lspconfig.util').root_pattern
+
+local M = {
+  config = {
+    filenames = {'.nvimrc'}
+  }
+}
+
+M.setup = function (opt)
+  vim.validate {
+    filenames = { opt.filenames, 'table', true },
+  }
+
+  M.config = vim.tbl_extend('force', M.config, opt)
+
+  local group = vim.api.nvim_create_augroup('ExrcLoad', { clear = true })
+  vim.api.nvim_create_autocmd('VimEnter', {
+    callback = M.load,
+    group = group,
+  })
+end
+
+local load = function (root, filename)
+  local fpath = root .. '/' .. filename
+  if root and vim.loop.fs_stat(fpath) then
+    vim.cmd('luafile ' .. fpath)
+    vim.notify('[exrc] loaded')
+  else
+    error(string.format('[exrc] %s not found', fpath))
+  end
+end
+
+M.load = function ()
+  local root = vim.fn.getcwd()
+  for _, fname in ipairs(M.config.filenames) do
+    local ok = false
+    ok, _ = pcall(load, root, fname)
+    if ok then return true end
+
+    -- try harder by searching up the dir tree
+    root = root_pattern(fname)(root)
+    ok, _ = pcall(load, root, fname)
+    if ok then return true end
+  end
+
+  return false
+end
+
+return M