diff --git a/lua/Polydev/configs.lua b/lua/Polydev/configs.lua index 250b73f..dcbedd2 100644 --- a/lua/Polydev/configs.lua +++ b/lua/Polydev/configs.lua @@ -2,72 +2,79 @@ local M = {} M.defaults = { globals = { - project_root = "~/Projects", - keybinds = { - ["po"] = "PolydevManager", - } + project_root = "~/Projects", + keybinds = { + ["po"] = "PolydevManager", + }, }, terminal = { - preset = nil, - border = true, + preset = nil, + border = { + enabled = true, + type = "rounded", + }, + }, +} + +local function default_languages(project_root) + return { + rust = { + project_root = project_root .. "/Rust", + keybinds = { + ["pr"] = "RustRun", + }, + }, + java = { + project_root = project_root .. "/Java", + keybinds = { + ["pr"] = "JavaRun", + }, + }, + lua = { + project_root = project_root .. "/Lua", + keybinds = { + ["pr"] = "LuaRun", + }, + }, + c = { + project_root = project_root .. "/C", + keybinds = { + ["pr"] = "CRun", + }, + build_attributes = "", + }, + cpp = { + project_root = project_root .. "/CPP", + keybinds = { + ["pr"] = "CppRun", + }, + build_attributes = "", + }, + html = { + project_root = project_root .. "/Html", + }, } -} - -M.defaults.rust = { - project_root = M.defaults.globals.project_root .. "/Rust", - keybinds = { - ["pr"] = "RustRun", - }, -} - -M.defaults.java = { - project_root = M.defaults.globals.project_root .. "/Java", - keybinds = { - ["pr"] = "JavaRun", - }, -} - -M.defaults.python = { - project_root = M.defaults.globals.project_root .. "/Python", - keybinds = { - ["pr"] = "PythonRun", - ["pb"] = "PythonPip", - }, -} - -M.defaults.lua = { - project_root = M.defaults.globals.project_root .. "/Lua", - keybinds = { - ["pr"] = "LuaRun", - }, -} - -M.defaults.c = { - project_root = M.defaults.globals.project_root .. "/C", - keybinds = { - ["pr"] = "CRun", - }, - build_attributes = "", -} - -M.defaults.cpp = { - project_root = M.defaults.globals.project_root .. "/CPP", - keybinds = { - ["pr"] = "CppRun", - }, - build_attributes = "", -} - -M.defaults.html = { - project_root = M.defaults.globals.project_root .. "/Html", -} +end M.user_config = {} +---@param user_opts table function M.setup(user_opts) + -- First merge global and terminal M.user_config = vim.tbl_deep_extend("force", {}, M.defaults, user_opts or {}) + + -- Now use the final resolved project_root from user_config + local root = M.user_config.globals.project_root + local langs = default_languages(root) + + -- Inject languages into the config, respecting user overrides + for lang, conf in pairs(langs) do + M.user_config[lang] = vim.tbl_deep_extend("force", conf, M.user_config[lang] or {}) + end end +---@param lang string +---@return table function M.get(lang) return M.user_config[lang] or {} end diff --git a/lua/Polydev/ui.lua b/lua/Polydev/ui.lua index 79175c3..8f86f92 100644 --- a/lua/Polydev/ui.lua +++ b/lua/Polydev/ui.lua @@ -1,5 +1,7 @@ local M = {} +---@param path string +---@return table local function get_entries(path) local result = {} local handle = vim.loop.fs_scandir(path) @@ -69,13 +71,13 @@ function M.load_language_module(lang, opts) return true end +---@param project_root string function M.manager(project_root) local templates = require("Polydev.templates") local Popup = require("nui.popup") local Layout = require("nui.layout") local event = require("nui.utils.autocmd").event - local display_dir = vim.fn.expand(vim.fn.getcwd()) - local cwd = display_dir + local cwd = vim.fn.expand(vim.fn.getcwd()) local entries = get_entries(cwd) local current_view = vim.deepcopy(entries) @@ -209,7 +211,7 @@ function M.manager(project_root) local hints = { "", "/ → Find a → New Directory % → New File R → Rename", - "x → New Helper File d → New Project D → Delete q → Quit", + "x → New Helper File d → New Project D → Delete", } if not popup.bufnr then return end vim.api.nvim_buf_set_lines(popup.bufnr, 0, -1, false, {}) @@ -250,7 +252,7 @@ function M.manager(project_root) popup:map("n", "/", function() vim.schedule(prompt_filter) end) -- Mappings - popup:map("n", "q", function() popup:unmount() end) + popup:map("n", "", function() popup:unmount() end) -- Creates new file popup:map("n", "%", function() diff --git a/lua/Polydev/utils.lua b/lua/Polydev/utils.lua index 39c2bc8..89345f2 100644 --- a/lua/Polydev/utils.lua +++ b/lua/Polydev/utils.lua @@ -80,7 +80,7 @@ function M.terminal(cmd) row = row, col = col, style = "minimal", - border = M.opts.border and "rounded" or "none", + border = M.opts.border.enabled and M.opts.border.type, }) vim.api.nvim_set_option_value("winblend", vim.o.pumblend, { win = win }) vim.api.nvim_set_option_value("winhighlight", "Normal:Pmenu,FloatBorder:Pmenu", { win = win })