diff --git a/.nvim/project.lua b/.nvim/project.lua new file mode 100644 index 0000000..bdb0b77 --- /dev/null +++ b/.nvim/project.lua @@ -0,0 +1,5 @@ +return { + type = 'custom', + run = [[yarn start]], + debug = [[yarn start]], +} diff --git a/lua/cargdev/core/function/project_commands.lua b/lua/cargdev/core/function/project_commands.lua new file mode 100644 index 0000000..8500fed --- /dev/null +++ b/lua/cargdev/core/function/project_commands.lua @@ -0,0 +1,27 @@ +vim.api.nvim_create_user_command("RunProject", function() + local config_path = ".nvim/project.lua" + if vim.fn.filereadable(config_path) == 0 then + vim.notify("No project config found. Run `:e` on any file to generate it.", vim.log.levels.WARN) + return + end + local config = loadfile(config_path)() + if config and config.run then + vim.cmd("vsplit | terminal " .. config.run) + else + vim.notify("Run command not found in project config.", vim.log.levels.ERROR) + end +end, {}) + +vim.api.nvim_create_user_command("DebugProject", function() + local config_path = ".nvim/project.lua" + if vim.fn.filereadable(config_path) == 0 then + vim.notify("No project config found. Run `:e` on any file to generate it.", vim.log.levels.WARN) + return + end + local config = loadfile(config_path)() + if config and config.debug then + vim.cmd("vsplit | terminal " .. config.debug) + else + vim.notify("Debug command not found in project config.", vim.log.levels.ERROR) + end +end, {}) diff --git a/lua/cargdev/core/init.lua b/lua/cargdev/core/init.lua index 9f8be3c..74250fa 100644 --- a/lua/cargdev/core/init.lua +++ b/lua/cargdev/core/init.lua @@ -16,4 +16,12 @@ local function load_functions() end end + +--[[ vim.api.nvim_create_autocmd("BufReadPost", { + once = true, + callback = function() + require("cargdev.core.project_config").bootstrap_config() + end +}) + ]] load_functions() diff --git a/lua/cargdev/core/keymaps.lua b/lua/cargdev/core/keymaps.lua index 6b51142..7cdef87 100644 --- a/lua/cargdev/core/keymaps.lua +++ b/lua/cargdev/core/keymaps.lua @@ -65,3 +65,7 @@ keymap.set("n", "", ":vertical resize -5", { noremap = true, silent = t keymap.set("n", "", ":vertical resize +5", { noremap = true, silent = true }) keymap.set("n", "", ":resize +5", { noremap = true, silent = true }) keymap.set("n", "", ":resize -5", { noremap = true, silent = true }) + +-- Run and Debug Project +keymap.set("n", "pr", ":RunProject", { desc = "Run Project" }) +keymap.set("n", "pd", ":DebugProject", { desc = "Debug Project" }) diff --git a/lua/cargdev/core/project_config.lua b/lua/cargdev/core/project_config.lua new file mode 100644 index 0000000..49803f5 --- /dev/null +++ b/lua/cargdev/core/project_config.lua @@ -0,0 +1,57 @@ +local M = {} + +local function ask_input(prompt, default) + vim.fn.inputsave() + local result = vim.fn.input(prompt .. " [" .. default .. "]: ") + vim.fn.inputrestore() + return result ~= "" and result or default +end + +local function detect_project_type() + if vim.fn.filereadable("pom.xml") == 1 then + return "java" + elseif vim.fn.filereadable("angular.json") == 1 then + return "angular" + elseif vim.fn.filereadable("package.json") == 1 then + local pkg = vim.fn.readfile("package.json") + for _, line in ipairs(pkg) do + if line:match("nestjs") then return "node" end + if line:match("react") then return "react" end + end + return "node" + end + return "custom" +end + +M.bootstrap_config = function() + local config_file = ".nvim/project.lua" + if vim.fn.filereadable(config_file) == 1 then return end + + vim.fn.mkdir(".nvim", "p") + + local type = detect_project_type() + vim.notify("Detected project type: " .. type, vim.log.levels.INFO) + + -- Ask user for run/debug commands + local run = ask_input("Enter run command", type == "java" and "./mvnw spring-boot:run" or "yarn start") + local debug = ask_input("Enter debug command", type == "java" + and "./mvnw spring-boot:run -Dspring-boot.run.jvmArguments='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005'" + or "node --inspect-brk dist/main.js") + + -- Write to file + local f = io.open(config_file, "w") + if f then + f:write("return {\n") + f:write(" type = '" .. type .. "',\n") + f:write(" run = [[" .. run .. "]],\n") + f:write(" debug = [[" .. debug .. "]],\n") + f:write("}\n") + f:close() + vim.notify("Project configuration written to " .. config_file, vim.log.levels.INFO) + else + vim.notify("Failed to write config file", vim.log.levels.ERROR) + end +end + +return M + diff --git a/lua/cargdev/plugins/aicargdev.lua b/lua/cargdev/plugins/aicargdev.lua index 9f0b335..4937c2d 100644 --- a/lua/cargdev/plugins/aicargdev.lua +++ b/lua/cargdev/plugins/aicargdev.lua @@ -1,17 +1,17 @@ return { { - "CarGDev/avante.nvim", + "yetone/avante.nvim", event = "VeryLazy", lazy = false, version = false, -- Always pull the latest change opts = { - provider = "cargdev", -- API provider configuration + provider = "cargdev", -- API provider configuration vendors = { cargdev = { - name = "cargdev", -- Optional + name = "cargdev", -- Optional endpoint = "https://api-ai.cargdev.io/api/generate", api_key_name = "CARGDEV_API_KEY", -- reference the ENV VAR below - model = "qwen2.5-coder:7b", + model = "codellama:7b", __inherited_from = "ollama", -- ensures compatibility max_tokens = 8192, }, @@ -21,12 +21,12 @@ return { build = "make", dependencies = { "nvim-treesitter/nvim-treesitter", -- Syntax highlighting support - "stevearc/dressing.nvim", -- UI elements - "nvim-lua/plenary.nvim", -- Utility library - "MunifTanjim/nui.nvim", -- UI library for modal components + "stevearc/dressing.nvim", -- UI elements + "nvim-lua/plenary.nvim", -- Utility library + "MunifTanjim/nui.nvim", -- UI library for modal components -- Optional dependencies: "nvim-tree/nvim-web-devicons", -- Icons support - "zbirenbaum/copilot.lua", -- Copilot integration + "zbirenbaum/copilot.lua", -- Copilot integration { "HakonHarnes/img-clip.nvim", -- Image pasting support event = "VeryLazy", @@ -38,18 +38,19 @@ return { drag_and_drop = { insert_mode = true, }, - use_absolute_path = true, -- For Windows users + use_absolute_path = true, -- For Windows users }, }, }, { - "MeanderingProgrammer/render-markdown.nvim", -- Render markdown support - opts = { - file_types = { "markdown", "Avante" }, - }, + "MeanderingProgrammer/render-markdown.nvim", ft = { "markdown", "Avante" }, + config = function() + require("render-markdown").setup({ + file_types = { "markdown", "Avante" }, + }) + end, }, }, }, } - diff --git a/lua/cargdev/plugins/companion.lua.bak b/lua/cargdev/plugins/companion.lua.bak new file mode 100644 index 0000000..7638f90 --- /dev/null +++ b/lua/cargdev/plugins/companion.lua.bak @@ -0,0 +1,32 @@ +-- return { +-- { +-- "olimorris/codecompanion.nvim", +-- event = "VeryLazy", +-- lazy = false, +-- version = false, +-- opts = { +-- adapters = { +-- openai = function() +-- return require("codecompanion.adapters").extend("openai", { +-- name = "openai", +-- model = "codellama:7b", +-- endpoint = "https://api-ai.cargdev.io/v1", +-- api_key = os.getenv("CARGDEV_API_KEY"), +-- max_tokens = 2048, +-- }) +-- end, +-- }, +-- strategies = { +-- chat = { adapter = "openai" }, +-- inline = { adapter = "openai" }, +-- agent = { adapter = "openai" }, +-- }, +-- }, +-- dependencies = { +-- "nvim-lua/plenary.nvim", +-- "nvim-treesitter/nvim-treesitter", +-- "nvim-telescope/telescope.nvim", +-- }, +-- } +-- } +-- diff --git a/lua/cargdev/plugins/dap.lua b/lua/cargdev/plugins/dap.lua index 90c1071..7e718a1 100644 --- a/lua/cargdev/plugins/dap.lua +++ b/lua/cargdev/plugins/dap.lua @@ -1,27 +1,108 @@ return { "mfussenegger/nvim-dap", dependencies = { - { "nvim-neotest/nvim-nio", lazy = false }, -- Ensure `nvim-nio` loads first + { "nvim-neotest/nvim-nio", lazy = false }, "rcarriga/nvim-dap-ui", "jay-babu/mason-nvim-dap.nvim", "mfussenegger/nvim-dap-python", "theHamsta/nvim-dap-virtual-text", "nvim-telescope/telescope-dap.nvim", + "Weissle/persistent-breakpoints.nvim", + { + "nvim-neotest/neotest", + dependencies = { + "nvim-neotest/neotest-jest", + "nvim-neotest/neotest-python", + "nvim-lua/plenary.nvim", + "antoinemadec/FixCursorHold.nvim", + }, + config = function() + require("neotest").setup({ + adapters = { + require("neotest-jest")({}), + require("neotest-python")({}), + }, + }) + end, + }, }, config = function() local dap = require("dap") local dapui = require("dapui") + local widgets = require("dap.ui.widgets") + local api, fn = vim.api, vim.fn + local keymap = vim.keymap.set - -- UI Setup - dapui.setup() + -- ๐ŸŽฏ Fixed Layout UI (no floating) + dapui.setup({ + layouts = { + { + elements = { + { id = "scopes", size = 0.25 }, + { id = "breakpoints", size = 0.25 }, + { id = "stacks", size = 0.25 }, + { id = "watches", size = 0.25 }, + }, + size = 40, -- width (left) + position = "left", + }, + { + elements = { + { id = "repl", size = 0.5 }, + { id = "console", size = 0.5 }, + }, + size = 10, -- height (bottom) + position = "bottom", + }, + }, + controls = { + enabled = true, + element = "repl", + icons = { + pause = "โธ", + play = "โ–ถ", + step_into = "โคต", + step_over = "โญ", + step_out = "โคด", + step_back = "โฎ", + run_last = "๐Ÿ”", + terminate = "โน", + }, + }, + floating = { border = "rounded", mappings = { close = { "q", "" } } }, + windows = { indent = 1 }, + }) - -- Mason Debugger Installer + -- ๐Ÿง  Mason DAP require("mason-nvim-dap").setup({ ensure_installed = { "node2", "chrome", "firefox" }, automatic_setup = true, }) - -- Automatically open DAP UI when debugging starts + -- ๐Ÿ” Virtual Text + require("nvim-dap-virtual-text").setup({ + commented = true, + highlight_changed_variables = true, + highlight_new_as_changed = true, + virt_text_pos = "eol", + all_frames = true, + }) + + -- ๐Ÿ’พ Persistent Breakpoints + require("persistent-breakpoints").setup({ + load_breakpoints_event = { "BufReadPost" }, + }) + + api.nvim_create_autocmd("VimLeavePre", { + callback = function() + local ok, pb = pcall(require, "persistent-breakpoints.api") + if ok and type(pb.save_breakpoints) == "function" then + pb.save_breakpoints() + end + end, + }) + + -- ๐Ÿ” Auto-open/close UI on debug events dap.listeners.after.event_initialized["dapui_config"] = function() dapui.open() end @@ -32,56 +113,63 @@ return { dapui.close() end - -- Enable virtual text for debugging - require("nvim-dap-virtual-text").setup({}) - - -- Keymaps for debugging - local keymap = vim.keymap.set - keymap("n", "dc", "lua require'dap'.continue()", { desc = "Start Debugging" }) - - keymap("n", "do", function() - dap.step_over() - end, { desc = "Step Over" }) - - keymap("n", "di", function() - dap.step_into() - end, { desc = "Step Into" }) - - keymap("n", "dot", function() - dap.step_out() - end, { desc = "Step Out" }) - - keymap("n", "db", function() - dap.toggle_breakpoint() - end, { desc = "Toggle Breakpoint" }) - + -- ๐ŸŽฎ Keymaps + keymap("n", "dc", dap.continue, { desc = "โ–ถ Start Debugging" }) + keymap("n", "do", dap.step_over, { desc = "โญ Step Over" }) + keymap("n", "di", dap.step_into, { desc = "โคต Step Into" }) + keymap("n", "dot", dap.step_out, { desc = "โคด Step Out" }) + keymap("n", "db", dap.toggle_breakpoint, { desc = "๐Ÿ”ด Toggle Breakpoint" }) keymap("n", "dB", function() - dap.set_breakpoint(vim.fn.input("Breakpoint condition: ")) - end, { desc = "Conditional Breakpoint" }) + dap.set_breakpoint(fn.input("Breakpoint condition: ")) + end, { desc = "โš  Conditional Breakpoint" }) + keymap("n", "dr", dap.repl.open, { desc = "๐Ÿ’ฌ Open REPL" }) + keymap("n", "dl", dap.run_last, { desc = "๐Ÿ” Run Last Debug" }) + keymap("n", "du", dapui.toggle, { desc = "๐Ÿงฉ Toggle DAP UI" }) + keymap("n", "dq", dap.terminate, { desc = "โ›” Stop Debugging" }) - keymap("n", "dr", function() - dap.repl.open() - end, { desc = "Open REPL" }) + -- ๐Ÿงผ Reset UI + keymap("n", "drt", function() + dap.terminate() + dapui.close() + vim.defer_fn(function() + dapui.open() + end, 200) + end, { desc = "๐Ÿงผ Reset DAP UI Layout" }) - keymap("n", "dl", function() - dap.run_last() - end, { desc = "Run Last Debug Session" }) + -- ๐Ÿ”ญ Telescope Integration + require("telescope").load_extension("dap") + keymap("n", "dcf", "Telescope dap configurations", { desc = "๐Ÿ”ญ DAP Configs" }) + keymap("n", "dcb", "Telescope dap list_breakpoints", { desc = "๐Ÿงท List Breakpoints" }) + keymap("n", "dco", "Telescope dap commands", { desc = "โš™๏ธ DAP Commands" }) - keymap("n", "du", function() - dapui.toggle() - end, { desc = "Toggle DAP UI" }) - - keymap("n", "dq", "lua require'dap'.terminate()", { desc = "Stop Debugging" }) - - -- Java DAP Configuration - dap.adapters.java = function(callback) - callback({ - type = "server", - host = "127.0.0.1", - port = { port }, -- Port JDTLS uses for debugging - }) + -- ๐Ÿงฟ Sign Icons + for name, icon in pairs({ + DapBreakpoint = "๐Ÿ”ด", + DapBreakpointCondition = "โš ๏ธ", + DapBreakpointRejected = "๐Ÿšซ", + DapLogPoint = "๐Ÿ’ฌ", + DapStopped = "โ–ถ", + }) do + fn.sign_define(name, { text = icon, texthl = "DiagnosticSignInfo", linehl = "", numhl = "" }) end + -- ๐Ÿ” NestJS Smart Watcher (optional) + api.nvim_create_autocmd("BufWritePost", { + pattern = "*.ts", + callback = function() + if fn.filereadable(".nvim/project.lua") == 1 then + local config = loadfile(".nvim/project.lua")() + if config and config.run and config.run:match("nest") then + -- Your custom logic here + end + end + end, + }) + + -- โ˜• Java Debug Adapter + dap.adapters.java = function(callback) + callback({ type = "server", host = "127.0.0.1", port = { port } }) + end dap.configurations.java = { { name = "Attach to running Java process", @@ -92,11 +180,13 @@ return { }, } - -- Node.js Adapter Configuration for NestJS + -- ๐Ÿง  Node.js (NestJS / TypeScript) dap.adapters.node2 = { type = "executable", command = "node", - args = { os.getenv("HOME") .. "/.local/share/nvim/mason/packages/node-debug2-adapter/out/src/nodedebug.js" }, + args = { + os.getenv("HOME") .. "/.local/share/nvim/mason/packages/node-debug2-adapter/out/src/nodedebug.js", + }, } dap.configurations.typescript = { @@ -110,82 +200,21 @@ return { outFiles = { "${workspaceFolder}/dist/**/*.js" }, sourceMaps = true, protocol = "inspector", - cwd = vim.fn.getcwd(), - runtimeArgs = { "--inspect-brk" }, -- ๐Ÿš€ Ensures debugging starts properly + cwd = fn.getcwd(), + runtimeArgs = { "--inspect-brk" }, restart = true, }, { - name = "Attach to Process", + name = "Attach to NestJS (start:debug)", type = "node2", request = "attach", - processId = require("dap.utils").pick_process, + port = 9229, + protocol = "inspector", + cwd = fn.getcwd(), + sourceMaps = true, + outFiles = { "${workspaceFolder}/dist/**/*.js" }, + skipFiles = { "/**" }, }, } - - -- dap.configurations.typescript = { - -- { - -- name = "Launch NestJS", - -- type = "node2", - -- request = "launch", - -- program = "${workspaceFolder}/dist/main.js", -- โš ๏ธ Ensure this is correct! - -- args = {}, - -- console = "integratedTerminal", - -- outFiles = { "${workspaceFolder}/dist/**/*.js" }, - -- sourceMaps = true, - -- protocol = "inspector", - -- cwd = vim.fn.getcwd(), - -- runtimeArgs = { "--nolazy" }, - -- }, - -- { - -- name = "Attach to Process", - -- type = "node2", - -- request = "attach", - -- processId = require("dap.utils").pick_process, - -- }, - -- } - - -- dap.adapters.chrome = { - -- type = "executable", - -- command = "node", - -- args = { os.getenv("HOME") .. "/.local/share/nvim/mason/packages/chrome-debug-adapter/out/src/chromeDebug.js" }, - -- } - -- - -- dap.configurations.typescript = { - -- { - -- name = "Attach to Chrome", - -- type = "chrome", - -- request = "attach", - -- program = "${file}", - -- cwd = vim.fn.getcwd(), - -- port = 9222, -- ๐Ÿš€ Chrome debugging port - -- webRoot = "${workspaceFolder}", - -- sourceMaps = true, - -- skipFiles = { "/**", "webpack://_N_E/./node_modules/**" }, - -- }, - -- { - -- name = "Launch Chrome with DevTools", - -- type = "chrome", - -- request = "launch", - -- url = "http://localhost:4000", -- Your React app runs on this port - -- webRoot = "${workspaceFolder}", - -- runtimeArgs = { "--remote-debugging-port=9222" }, - -- sourceMaps = true, - -- skipFiles = { "/**", "webpack://_N_E/./node_modules/**" }, - -- }, - -- } - -- - -- dap.configurations.javascript = { - -- { - -- name = "Attach to Chrome", - -- type = "chrome", - -- request = "attach", - -- program = "${file}", - -- cwd = vim.fn.getcwd(), - -- port = 9222, -- ๐Ÿš€ Default Chrome Debug Port - -- webRoot = "${workspaceFolder}", - -- sourceMaps = true, - -- skipFiles = { "/**", "webpack://_N_E/./node_modules/**" }, - -- }, - -- } end, } diff --git a/lua/cargdev/plugins/fileOperations.lua b/lua/cargdev/plugins/fileOperations.lua new file mode 100644 index 0000000..355b6f3 --- /dev/null +++ b/lua/cargdev/plugins/fileOperations.lua @@ -0,0 +1,11 @@ +return { + "antosha417/nvim-lsp-file-operations", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-tree/nvim-tree.lua", -- or "nvim-neo-tree/neo-tree.nvim" + }, + config = function() + require("lsp-file-operations").setup() + end +} + diff --git a/lua/cargdev/plugins/lsp/lspconfig.lua b/lua/cargdev/plugins/lsp/lspconfig.lua index cc3047c..18b8257 100644 --- a/lua/cargdev/plugins/lsp/lspconfig.lua +++ b/lua/cargdev/plugins/lsp/lspconfig.lua @@ -5,6 +5,7 @@ return { "hrsh7th/cmp-nvim-lsp", { "antosha417/nvim-lsp-file-operations", config = true }, { "folke/neodev.nvim", opts = {} }, + { "pmizio/typescript-tools.nvim", dependencies = { "nvim-lua/plenary.nvim" } }, -- <- CORRECT HERE }, config = function() -- import lspconfig plugin @@ -64,6 +65,27 @@ return { opts.desc = "Restart LSP" keymap.set("n", "rs", ":LspRestart", opts) -- mapping to restart lsp if necessary + vim.api.nvim_create_autocmd("CursorHold", { + buffer = ev.buf, + callback = function() + vim.diagnostic.open_float(nil, { focusable = false }) + end, + }) + vim.o.updatetime = 250 + vim.diagnostic.config({ + float = { + border = "rounded", + source = "always", -- Or "if_many" + header = "", + prefix = "", + }, + virtual_text = { + spacing = 4, + prefix = "โ—", -- Could be 'โ—', 'โ– ', 'โ–Ž', or empty "" + severity = { min = vim.diagnostic.severity.WARN }, -- only show Warn or higher + }, + severity_sort = true, + }) end, }) @@ -81,6 +103,7 @@ return { mason_lspconfig.setup_handlers({ ["tsserver"] = function() lspconfig["tsserver"].setup({ + cmd = { "typescript-language-server", "--stdio" }, capabilities = capabilities, root_dir = lspconfig.util.root_pattern("package.json"), settings = { @@ -165,5 +188,17 @@ return { }) end, }) + require("typescript-tools").setup({ + settings = { + expose_as_code_action = "all", + tsserver_file_preferences = { + importModuleSpecifierPreference = "relative", + quotePreference = "single", + }, + tsserver_format_options = { + allowIncompleteCompletions = true, + }, + }, + }) end, } diff --git a/lua/cargdev/plugins/nvim-tree.lua b/lua/cargdev/plugins/nvim-tree.lua index 3df4d9f..85fdd2c 100644 --- a/lua/cargdev/plugins/nvim-tree.lua +++ b/lua/cargdev/plugins/nvim-tree.lua @@ -8,6 +8,14 @@ return { vim.g.loaded_netrw = 1 vim.g.loaded_netrwPlugin = 1 + -- ๐Ÿงผ Remove invalid autocommand (FileExplorer) if it exists + vim.api.nvim_create_autocmd("VimEnter", { + once = true, + callback = function() + pcall(vim.cmd, "autocmd! FileExplorer *") + end, + }) + nvimtree.setup({ view = { width = 35, diff --git a/tree.log b/tree.log index b20c3b8..06f93d7 100644 --- a/tree.log +++ b/tree.log @@ -1,5 +1,4 @@ . -โ”œโ”€โ”€ README.md โ”œโ”€โ”€ ftplugin โ”‚ย ย  โ””โ”€โ”€ java.lua โ”œโ”€โ”€ init.lua @@ -8,52 +7,52 @@ โ”œโ”€โ”€ lazigitconfig.log โ”œโ”€โ”€ lazy-lock.json โ”œโ”€โ”€ lua -โ”‚ย ย  โ”œโ”€โ”€ cargdev -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ core -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ function -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ openTerminal.lua -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ init.lua -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ keymaps.lua -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ options.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ lazy.lua -โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ plugins -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ alpha.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ auto-session.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ autopairs.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ bufferline.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ buffertabs.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ colorscheme.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ comments.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ copilot.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dap.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dressing.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ formatting.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ gitsigns.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ indent-blankline.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ init.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ lazygit.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ linting.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ lsp -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ jdtls.lua -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ lspconfig.lua -โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ mason.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ lualine.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ noice.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ nvim-cmp.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ nvim-jdtls.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ nvim-tree.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ nvim-treesitter-text-objects.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ substitute.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ surround.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ telescope.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ tmux.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ todo-comments.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ treesitter.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ trouble.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ vim-maximizer.lua -โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ wakatime.lua -โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ which-key.lua -โ”‚ย ย  โ””โ”€โ”€ myconfig +โ”‚ย ย  โ””โ”€โ”€ cargdev +โ”‚ย ย  โ”œโ”€โ”€ core +โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ function +โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ openTerminal.lua +โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ init.lua +โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ keymaps.lua +โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ options.lua +โ”‚ย ย  โ”œโ”€โ”€ lazy.lua +โ”‚ย ย  โ””โ”€โ”€ plugins +โ”‚ย ย  โ”œโ”€โ”€ aicargdev.lua +โ”‚ย ย  โ”œโ”€โ”€ alpha.lua +โ”‚ย ย  โ”œโ”€โ”€ auto-session.lua +โ”‚ย ย  โ”œโ”€โ”€ autopairs.lua +โ”‚ย ย  โ”œโ”€โ”€ bufferline.lua +โ”‚ย ย  โ”œโ”€โ”€ buffertabs.lua +โ”‚ย ย  โ”œโ”€โ”€ colorscheme.lua +โ”‚ย ย  โ”œโ”€โ”€ comments.lua +โ”‚ย ย  โ”œโ”€โ”€ copilot.lua +โ”‚ย ย  โ”œโ”€โ”€ dap.lua +โ”‚ย ย  โ”œโ”€โ”€ dressing.lua +โ”‚ย ย  โ”œโ”€โ”€ formatting.lua +โ”‚ย ย  โ”œโ”€โ”€ gitsigns.lua +โ”‚ย ย  โ”œโ”€โ”€ indent-blankline.lua +โ”‚ย ย  โ”œโ”€โ”€ init.lua +โ”‚ย ย  โ”œโ”€โ”€ lazygit.lua +โ”‚ย ย  โ”œโ”€โ”€ linting.lua +โ”‚ย ย  โ”œโ”€โ”€ lsp +โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ lspconfig.lua +โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ mason.lua +โ”‚ย ย  โ”œโ”€โ”€ lualine.lua +โ”‚ย ย  โ”œโ”€โ”€ noice.lua +โ”‚ย ย  โ”œโ”€โ”€ nvim-cmp.lua +โ”‚ย ย  โ”œโ”€โ”€ nvim-jdtls.lua +โ”‚ย ย  โ”œโ”€โ”€ nvim-tree.lua +โ”‚ย ย  โ”œโ”€โ”€ nvim-treesitter-text-objects.lua +โ”‚ย ย  โ”œโ”€โ”€ substitute.lua +โ”‚ย ย  โ”œโ”€โ”€ surround.lua +โ”‚ย ย  โ”œโ”€โ”€ telescope.lua +โ”‚ย ย  โ”œโ”€โ”€ tmux.lua +โ”‚ย ย  โ”œโ”€โ”€ todo-comments.lua +โ”‚ย ย  โ”œโ”€โ”€ treesitter.lua +โ”‚ย ย  โ”œโ”€โ”€ trouble.lua +โ”‚ย ย  โ”œโ”€โ”€ vim-maximizer.lua +โ”‚ย ย  โ”œโ”€โ”€ wakatime.lua +โ”‚ย ย  โ””โ”€โ”€ which-key.lua +โ”œโ”€โ”€ README.md โ””โ”€โ”€ tree.log -9 directories, 48 files +8 directories, 48 files