diff --git a/lazy-lock.json b/lazy-lock.json new file mode 100644 index 0000000..d388910 --- /dev/null +++ b/lazy-lock.json @@ -0,0 +1,53 @@ +{ + "LazyVim": { "branch": "main", "commit": "28db03f958d58dfff3c647ce28fdc1cb88ac158d" }, + "SchemaStore.nvim": { "branch": "main", "commit": "6e4ffd193995176ee5ea5b8adba0f315adc68b9f" }, + "avante.nvim": { "branch": "main", "commit": "e89eb79abf5754645e20aa6074da10ed20bba33c" }, + "blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "catppuccin": { "branch": "main", "commit": "beaf41a30c26fd7d6c386d383155cbd65dd554cd" }, + "conform.nvim": { "branch": "master", "commit": "8314f4c9e205e7f30b62147069729f9a1227d8bf" }, + "copilot.lua": { "branch": "master", "commit": "c13f6f5147b80298301eb409991f28a991736cc3" }, + "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, + "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, + "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" }, + "gitsigns.nvim": { "branch": "main", "commit": "42d6aed4e94e0f0bbced16bbdcc42f57673bd75e" }, + "grug-far.nvim": { "branch": "main", "commit": "794f03c97afc7f4b03fb6ec5111be507df1850cf" }, + "img-clip.nvim": { "branch": "main", "commit": "b6ddfb97b5600d99afe3452d707444afda658aca" }, + "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, + "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" }, + "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "e5f73a9e3d271d449685f1059eb1868f4ba276f6" }, + "mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" }, + "mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" }, + "mini.ai": { "branch": "main", "commit": "bfb26d9072670c3aaefab0f53024b2f3729c8083" }, + "mini.icons": { "branch": "main", "commit": "efc85e42262cd0c9e1fdbf806c25cb0be6de115c" }, + "mini.pairs": { "branch": "main", "commit": "d5a29b6254dad07757832db505ea5aeab9aad43a" }, + "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, + "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, + "nvim-dap": { "branch": "master", "commit": "cdfd55a133f63228c55f91378f12908cb2a78ded" }, + "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, + "nvim-dap-python": { "branch": "master", "commit": "1808458eba2b18f178f990e01376941a42c7f93b" }, + "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, + "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" }, + "nvim-lint": { "branch": "master", "commit": "ca6ea12daf0a4d92dc24c5c9ae22a1f0418ade37" }, + "nvim-lspconfig": { "branch": "master", "commit": "92ee7d42320edfbb81f3cad851314ab197fa324a" }, + "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, + "nvim-treesitter": { "branch": "main", "commit": "2ba5ec184609a96b513bf4c53a20512d64e27f39" }, + "nvim-treesitter-textobjects": { "branch": "main", "commit": "28a3494c075ef0f353314f627546537e43c09592" }, + "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" }, + "nvim-web-devicons": { "branch": "master", "commit": "6788013bb9cb784e606ada44206b0e755e4323d7" }, + "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "render-markdown.nvim": { "branch": "main", "commit": "73a6ebc842cf81926eb1d424820b800f6f6a1227" }, + "snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }, + "telescope.nvim": { "branch": "master", "commit": "3333a52ff548ba0a68af6d8da1e54f9cd96e9179" }, + "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, + "tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, + "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, + "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, + "venv-selector.nvim": { "branch": "main", "commit": "58bae72c84b9f7f864c879ec1896e384296f9ffb" }, + "vim-dadbod": { "branch": "master", "commit": "6d1d41da4873a445c5605f2005ad2c68c99d8770" }, + "vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" }, + "vim-dadbod-ui": { "branch": "master", "commit": "48c4f271da13d380592f4907e2d1d5558044e4e5" }, + "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" } +} diff --git a/lazyvim.json b/lazyvim.json new file mode 100644 index 0000000..d8bcaf6 --- /dev/null +++ b/lazyvim.json @@ -0,0 +1,10 @@ +{ + "extras": [ + + ], + "install_version": 8, + "news": { + "NEWS.md": "11866" + }, + "version": 8 +} \ No newline at end of file diff --git a/lua/config/keymaps.lua b/lua/config/keymaps.lua index 2c134f7..c42d26e 100644 --- a/lua/config/keymaps.lua +++ b/lua/config/keymaps.lua @@ -1,3 +1,13 @@ -- Keymaps are automatically loaded on the VeryLazy event -- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua -- Add any additional keymaps here + +vim.keymap.set("n", "th", function() + vim.cmd("lcd %:p:h") + vim.cmd("split | terminal") +end, { desc = "Terminal (horizontal)" }) + +vim.keymap.set("n", "tv", function() + vim.cmd("lcd %:p:h") + vim.cmd("vsplit | terminal") +end, { desc = "Terminal (vertical)" }) diff --git a/lua/config/lazy.lua b/lua/config/lazy.lua index d73bfa1..12cd029 100644 --- a/lua/config/lazy.lua +++ b/lua/config/lazy.lua @@ -18,6 +18,16 @@ require("lazy").setup({ spec = { -- add LazyVim and import its plugins { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + + -- Language support (these enable LSP, formatting, linting & DAP) + { import = "lazyvim.plugins.extras.lang.go" }, + { import = "lazyvim.plugins.extras.lang.python" }, + { import = "lazyvim.plugins.extras.lang.typescript" }, + { import = "lazyvim.plugins.extras.lang.tailwind" }, + { import = "lazyvim.plugins.extras.lang.json" }, + + -- DAP (Debug Adapter Protocol) + { import = "lazyvim.plugins.extras.dap.core" }, -- import/override with your plugins { import = "plugins" }, }, diff --git a/lua/plugins/ai.lua b/lua/plugins/ai.lua new file mode 100644 index 0000000..b8b0402 --- /dev/null +++ b/lua/plugins/ai.lua @@ -0,0 +1,61 @@ +return { + -- Avante: Cursor-like AI assistant + { + "yetone/avante.nvim", + event = "VeryLazy", + lazy = false, + version = false, + build = "make", + dependencies = { + "nvim-treesitter/nvim-treesitter", + "stevearc/dressing.nvim", + "nvim-lua/plenary.nvim", + "MunifTanjim/nui.nvim", + "nvim-tree/nvim-web-devicons", + "zbirenbaum/copilot.lua", -- Optional for copilot suggestions + { + "HakonHarnes/img-clip.nvim", + event = "VeryLazy", + opts = { + default = { + embed_image_as_base64 = false, + prompt_for_file_name = false, + drag_and_drop = { insert_mode = true }, + }, + }, + }, + { + "MeanderingProgrammer/render-markdown.nvim", + opts = { file_types = { "markdown", "Avante" } }, + ft = { "markdown", "Avante" }, + }, + }, + ---@module 'avante' + ---@type avante.Config + opts = { + debug = true, + provider = "claude", + mode = "agentic", + auto_suggestions_provider = "copilot", + providers = { + claude = { + model = "claude-sonnet-4-5", + }, + }, + behaviour = { + auto_seggestions = true, + auto_set_keymaps = true, + }, + mappings = { + ask = "aa", + edit = "ae", + refresh = "ar", + toggle = { + default = "at", + debug = "ad", + hint = "ah", + }, + }, + }, + }, +} diff --git a/lua/plugins/dap.lua b/lua/plugins/dap.lua new file mode 100644 index 0000000..b729abe --- /dev/null +++ b/lua/plugins/dap.lua @@ -0,0 +1,65 @@ +return { + -- Ensure Mason installs debug adapters + { + "mason-org/mason.nvim", + opts = { + ensure_installed = { + "delve", -- Go debugger + "debugpy", -- Python debugger + "js-debug-adapter", -- JS/TS debugger + }, + }, + }, + + -- Mason DAP bridge - auto-configures adapters + { + "jay-babu/mason-nvim-dap.nvim", + dependencies = { "mason-org/mason.nvim", "mfussenegger/nvim-dap" }, + opts = { + ensure_installed = { "delve", "debugpy", "js" }, + automatic_installation = true, + handlers = {}, + }, + }, + + { + "mfussenegger/nvim-dap", + dependencies = { + "jay-babu/mason-nvim-dap.nvim", + { + "leoluz/nvim-dap-go", + opts = {}, + }, + { + "mfussenegger/nvim-dap-python", + config = function() + local mason_path = vim.fn.stdpath("data") .. "/mason/packages/debugpy/venv/bin/python" + require("dap-python").setup(mason_path) + end, + }, + }, + }, + + { + "rcarriga/nvim-dap-ui", + dependencies = { "nvim-neotest/nvim-nio" }, + keys = { + { + "du", + function() + require("dapui").toggle() + end, + desc = "DAP UI", + }, + { + "de", + function() + require("dapui").eval() + end, + desc = "Eval", + mode = { "n", "v" }, + }, + }, + opts = {}, + }, +} diff --git a/lua/plugins/editor.lua b/lua/plugins/editor.lua new file mode 100644 index 0000000..ea4e3b6 --- /dev/null +++ b/lua/plugins/editor.lua @@ -0,0 +1,79 @@ +return { + -- Telescope: show gitignored files + { + "nvim-telescope/telescope.nvim", + opts = { + defaults = { + file_ignore_patterns = {}, -- Don't ignore anything by default + }, + pickers = { + find_files = { + hidden = true, + no_ignore = true, -- Include .gitignore files + }, + live_grep = { + additional_args = function() + return { "--hidden", "--no-ignore" } + end, + }, + }, + }, + keys = { + -- Override default to include hidden/ignored + { "ff", "Telescope find_files hidden=true no_ignore=true", desc = "Find Files (all)" }, + { "fF", "Telescope find_files", desc = "Find Files (respect gitignore)" }, + }, + }, + { + "folke/snacks.nvim", + priority = 1000, + lazy = false, + version = false, + ---@module 'snacks' + ---@type snacks.Config + opts = { + picker = { + hidden = true, + ignored = true, + live = true, + sources = { + files = { + hidden = true, + ignored = true, + }, + }, + }, + explorer = { + ignored = true, + hidden = true, + }, + styles = { + notification = { + wo = { + wrap = true, + }, + }, + }, + }, + }, + { + "folke/todo-comments.nvim", + optional = true, + keys = { + { + "st", + function() + Snacks.picker.todo_comments() + end, + desc = "Todo", + }, + { + "sT", + function() + Snacks.picker.todo_comments({ keywords = { "TODO", "FIX", "FIXME" } }) + end, + desc = "Todo/Fix/Fixme", + }, + }, + }, +} diff --git a/lua/plugins/sql.lua b/lua/plugins/sql.lua new file mode 100644 index 0000000..692c898 --- /dev/null +++ b/lua/plugins/sql.lua @@ -0,0 +1,40 @@ +return { + -- vim-dadbod with project-local connections + { + "kristijanhusak/vim-dadbod-ui", + dependencies = { + { "tpope/vim-dadbod", lazy = true }, + { "kristijanhusak/vim-dadbod-completion", ft = { "sql", "mysql", "plsql" }, lazy = true }, + }, + cmd = { "DBUI", "DBUIToggle", "DBUIAddConnection", "DBUIFindBuffer" }, + init = function() + vim.g.db_ui_use_nerd_fonts = 1 + + -- Use project-local connection file + vim.g.db_ui_save_location = vim.fn.getcwd() .. "/.db" + + -- Or look for a dadbod.json in project root + vim.g.db_ui_env_variable_url = "DATABASE_URL" + vim.g.db_ui_env_variable_name = "DATABASE_NAME" + + -- Auto-load connections from .dadbod.json if it exists + local project_db_config = vim.fn.getcwd() .. "/.dadbod.json" + if vim.fn.filereadable(project_db_config) == 1 then + vim.g.dbs = vim.fn.json_decode(vim.fn.readfile(project_db_config)) + end + end, + keys = { + { "D", "DBUIToggle", desc = "Toggle DBUI" }, + }, + }, + + { + "hrsh7th/nvim-cmp", + optional = true, + dependencies = { "kristijanhusak/vim-dadbod-completion" }, + opts = function(_, opts) + opts.sources = opts.sources or {} + table.insert(opts.sources, { name = "vim-dadbod-completion" }) + end, + }, +}