diff --git a/lua/findroot.lua b/lua/findroot.lua new file mode 100644 index 0000000..a301dec --- /dev/null +++ b/lua/findroot.lua @@ -0,0 +1,50 @@ +local Path = require("plenary.path") +local source_basedir_markers = { + ".telescope-root", + ".editorconfig", + "build.sbt", + "package.json", + "setup.py", + ".git", +} +function find_upwards_any(base, filenames) + local folder = Path:new(base) + local root = Path.path.root(folder) + + while folder:absolute() ~= root do + for _, filename in ipairs(filenames) do + local p = folder:joinpath(filename) + if p:exists() then + return p + end + end + folder = folder:parent() + end + return "" +end + +local function find_dir(base) + print("base: ", base) + if base == nil then + base = vim.loop.cwd() + end + --@type Path + local search_root + search_root = find_upwards_any(base, source_basedir_markers) + print("search_root: ", search_root) + if search_root ~= "" then + local file = search_root:_split() + if file[#file] == ".telescope-root" then + local target = search_root:parent():joinpath(search_root:head(1)) + if target:exists() then + return tostring(target) + end + else + return tostring(search_root:parent()) + end + else + return base + end +end + +return find_dir diff --git a/lua/plugins/luadev.lua b/lua/plugins/luadev.lua new file mode 100644 index 0000000..bac9479 --- /dev/null +++ b/lua/plugins/luadev.lua @@ -0,0 +1,3 @@ +return { + "bfredl/nvim-luadev", +} diff --git a/lua/plugins/telescope.lua b/lua/plugins/telescope.lua index 1df1a0f..f3c210d 100644 --- a/lua/plugins/telescope.lua +++ b/lua/plugins/telescope.lua @@ -12,21 +12,28 @@ return { keys = function() local builtin = require("telescope.builtin") local utils = require("telescope.utils") + -- stylua: ignore start return { - { ',,', function() builtin.fd { cwd = utils.buffer_dir() } end, desc = "Find files in current file's dir" }, - { ',ff', builtin.fd, desc = "Find files" }, - { ',fg', builtin.git_files, desc = "Find files (git)" }, - { ',gs', builtin.git_status, desc = "Git status" }, - { ',s', builtin.lsp_dynamic_workspace_symbols, desc = "Symbols" }, - { 'g/', builtin.live_grep, desc = "Live grep" }, - { 'g:', builtin.command_history, desc = "Command history" }, - { '', builtin.current_buffer_fuzzy_find, desc = "Fuzzy find" }, - { '*', builtin.grep_string, desc = "Find at cursor" }, - { 'gb', builtin.buffers, desc = "Switch buffer" }, - { ":", builtin.command_history, desc = "Command History" }, - { ";", builtin.commands, desc = "Commands" }, + { ',,', + function() + builtin.fd { cwd = require("findroot")(utils.buffer_dir()) } + end, + desc = "Find files in base dir (defined by .telescope-root file)" + }, + { ',ff', builtin.fd, desc = "Find files" }, + { ',fg', builtin.git_files, desc = "Find files (git)" }, + { ',gs', builtin.git_status, desc = "Git status" }, + { ',s', builtin.lsp_dynamic_workspace_symbols, desc = "Symbols" }, + { 'g/', builtin.live_grep, desc = "Live grep" }, + { 'g:', builtin.command_history, desc = "Command history" }, + { '', builtin.current_buffer_fuzzy_find, desc = "Fuzzy find" }, + { '*', builtin.grep_string, desc = "Find at cursor" }, + { 'gb', builtin.buffers, desc = "Switch buffer" }, + { ":", builtin.command_history, desc = "Command History" }, + { ";", builtin.commands, desc = "Commands" }, } end, + --stylua: ignore end opts = { defaults = { prompt_prefix = " ", @@ -34,20 +41,19 @@ return { }, extensions = { fzf = { - fuzzy = true, -- false will only do exact matching - override_generic_sorter = true, -- override the generic sorter - override_file_sorter = true, -- override the file sorter - case_mode = "smart_case", -- or "ignore_case" or "respect_case" - -- the default case_mode is "smart_case" + fuzzy = true, + override_generic_sorter = true, + override_file_sorter = true, + case_mode = "smart_case", }, ["ui-select"] = { - require("telescope.themes").get_dropdown {} + require("telescope.themes").get_dropdown({}), }, }, }, config = function(_, opts) - local telescope = require('telescope') + local telescope = require("telescope") telescope.setup(opts) - telescope.load_extension('fzf') + telescope.load_extension("fzf") end, }