summary refs log tree commit diff
path: root/.vim/lua/internal/exrc.lua
diff options
context:
space:
mode:
authorRobert Günzler <r@gnzler.io>2022-10-14 20:57:03 +0200
committerRobert Günzler <r@gnzler.io>2022-10-14 21:01:15 +0200
commit2d2009413f8be624a7cca95cf702e32d9315cbef (patch)
treef024c1b5b27b886530e86221593e3cfdc3672d7e /.vim/lua/internal/exrc.lua
parent6d7e524d3d7a71da2cea61b335a59e9544e2a6f7 (diff)
vim: move custom modules under internal/
Diffstat (limited to '.vim/lua/internal/exrc.lua')
-rw-r--r--.vim/lua/internal/exrc.lua49
1 files changed, 49 insertions, 0 deletions
diff --git a/.vim/lua/internal/exrc.lua b/.vim/lua/internal/exrc.lua
new file mode 100644
index 0000000..6b7742b
--- /dev/null
+++ b/.vim/lua/internal/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