diff options
Diffstat (limited to 'lua/config')
-rw-r--r-- | lua/config/lsp.lua | 25 | ||||
-rw-r--r-- | lua/config/options.lua | 15 | ||||
-rw-r--r-- | lua/config/plugins/completion.lua | 44 | ||||
-rw-r--r-- | lua/config/plugins/debug.lua | 23 | ||||
-rw-r--r-- | lua/config/plugins/extra.lua | 105 | ||||
-rw-r--r-- | lua/config/plugins/formatting.lua | 11 | ||||
-rw-r--r-- | lua/config/plugins/fuzzy.lua | 94 | ||||
-rw-r--r-- | lua/config/plugins/init.lua | 1 | ||||
-rw-r--r-- | lua/config/plugins/treesitter.lua | 8 | ||||
-rw-r--r-- | lua/config/plugins/ui.lua | 12 |
10 files changed, 261 insertions, 77 deletions
diff --git a/lua/config/lsp.lua b/lua/config/lsp.lua index a5bf027..413e06f 100644 --- a/lua/config/lsp.lua +++ b/lua/config/lsp.lua @@ -5,6 +5,25 @@ vim.diagnostic.config({ virtual_text = true, }) -vim.lsp.enable("lua-language-server") -vim.lsp.enable("nixd") -vim.lsp.enable("rust-analyzer") +vim.lsp.enable({ + "lua-language-server", + + "nixd", + + "rust-analyzer", + + "angular-language-server", + "biome", + "typescript-language-server", +}) + +vim.lsp.inlay_hint.enable(true) + +-- Enable Angular HTML Treesitter grammar when needed +vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, { + pattern = { "*.component.html", "*.container.html" }, + callback = function() + vim.bo.filetype = "htmlangular" + vim.treesitter.start(nil, "angular") + end, +}) diff --git a/lua/config/options.lua b/lua/config/options.lua index 1cacdeb..6208be7 100644 --- a/lua/config/options.lua +++ b/lua/config/options.lua @@ -18,6 +18,9 @@ if os.getenv("WAYLAND_DISPLAY") and vim.fn.exepath("wl-copy") ~= "" then } end +-- Disable deprecation warnings +vim.deprecate = function(_) end + -- Terminal colors vim.opt.termguicolors = true @@ -56,3 +59,15 @@ map("n", "N", "Nzzzv", { desc = "Previous Search Result" }) -- Reset search highlight on ESC map("n", "<Esc>", "<cmd>nohlsearch<CR>", { desc = "Reset search highlight" }) + +-- Window related binds +map("n", "<C-w>d", "<C-w>c", { desc = "[D]elete [W]indow" }) + +-- Buffer related binds +map("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "[D]elete [B]uffer" }) + +-- Tab related binds +map("n", "[T", "<cmd>tabprev<CR>", { desc = "Previous Tab" }) +map("n", "]T", "<cmd>tabnext<CR>", { desc = "Previous Tab" }) +map("n", "<leader><tab>d", "<cmd>tabclose<CR>", { desc = "[D]elete [T]ab" }) +map("n", "<leader><tab>n", "<cmd>tabnew<CR>", { desc = "[N]ew [T]ab" }) diff --git a/lua/config/plugins/completion.lua b/lua/config/plugins/completion.lua index 7a02809..2b7e69d 100644 --- a/lua/config/plugins/completion.lua +++ b/lua/config/plugins/completion.lua @@ -1,5 +1,32 @@ return { { + "lazydev.nvim", + -- NOTE: if lazyloaded, blink will break as `lze` doesn't packadd this package... + -- ft = "lua", + after = function(_) + -- NOTE: this is required to fix strange filtering in `lazydev.nvim` + --- @diagnostic disable-next-line: duplicate-set-field + require("lazydev.lsp").supports = function(client) + local client_names = { + -- Default client names from `lazydev.nvim` + "lua_ls", + "emmylua-analyzer-rust", + -- NOTE: I have `lua-language-server` name which was not in list + "lua-language-server", + } + + return client and vim.tbl_contains(client_names, client.name) + end + + require("lazydev").setup({ + library = { + { path = "${3rd}/luv/library", words = { "vim%.uv" } }, + { path = "snacks.nvim", words = { "Snacks" } }, + }, + }) + end, + }, + { "blink.cmp", event = "DeferredUIEnter", after = function(_) @@ -18,7 +45,22 @@ return { ghost_text = { enabled = true }, }, - sources = { default = { "lsp", "path", "snippets", "buffer" } }, + cmdline = { + completion = { + ghost_text = { enabled = false }, + }, + }, + + sources = { + default = { "lazydev", "lsp", "path", "snippets", "buffer" }, + providers = { + lazydev = { + name = "LazyDev", + module = "lazydev.integrations.blink", + score_offset = 100, + }, + }, + }, fuzzy = { sorts = { "exact", "score", "sort_text" }, diff --git a/lua/config/plugins/debug.lua b/lua/config/plugins/debug.lua new file mode 100644 index 0000000..0f6378b --- /dev/null +++ b/lua/config/plugins/debug.lua @@ -0,0 +1,23 @@ +return { + { + "nvim-dap", + event = "DeferredUIEnter", + load = function(name) + vim.cmd.packadd(name) + vim.cmd.packadd("nvim-dap-ui") + vim.cmd.packadd("nvim-dap-virtual-text") + end, + after = function(_) + -- require("dap").setup() + require("dapui").setup() + require("nvim-dap-virtual-text").setup({}) + + local dap = require("dap") + dap.adapters.lldb = { + type = "executable", + command = "lldb-dap", + name = "lldb", + } + end, + }, +} diff --git a/lua/config/plugins/extra.lua b/lua/config/plugins/extra.lua index aba060b..2f7bf9c 100644 --- a/lua/config/plugins/extra.lua +++ b/lua/config/plugins/extra.lua @@ -1,11 +1,105 @@ return { { + "multicursor-nvim", + event = "DeferredUIEnter", + after = function(_) + local mc = require("multicursor-nvim") + mc.setup({ + signs = false, + }) + + -- Keybindings would be a lot better as <localleader> + local map = vim.keymap.set + + -- NOTE: this required for "repeatable" commands + -- I'd like to use `2<localleader>cn` for example (and that doesn't work out of box) + local map_rep = function(modes, bind, action) + map(modes, bind, function() + for _ = 1, vim.v.count1, 1 do + action() + end + end) + end + + -- stylua: ignore start + map({ "n", "x" }, "<localleader><localleader>", function() mc.clearCursors() end) + map({ "n", "x" }, "<localleader>R", function() mc.restoreCursors() end) + + map_rep({ "n", "x" }, "<localleader>j", function() mc.lineAddCursor(1) end) + map_rep({ "n", "x" }, "<localleader>k", function() mc.lineAddCursor(-1) end) + map_rep({ "n", "x" }, "<localleader>J", function() mc.lineSkipCursor(1) end) + map_rep({ "n", "x" }, "<localleader>K", function() mc.lineSkipCursor(-1) end) + + map_rep({ "n", "x" }, "<localleader>cn", function() mc.matchAddCursor(1) end) + map_rep({ "n", "x" }, "<localleader>cN", function() mc.matchAddCursor(-1) end) + map_rep({ "n", "x" }, "<localleader>cs", function() mc.matchSkipCursor(1) end) + map_rep({ "n", "x" }, "<localleader>cS", function() mc.matchSkipCursor(-1) end) + map({ "n", "x" }, "<localleader>cM", mc.matchAllAddCursors) + map("x", "<localleader>m", mc.matchCursors) + map("x", "<localleader>s", mc.splitCursors) + + -- map("n", "<localleader>g", mc.addCursorOperator) + map({ "n", "x" }, "<localleader>g", mc.operator) + -- stylua: ignore end + + -- Customize how cursors look. + local hl = vim.api.nvim_set_hl + hl(0, "MultiCursorCursor", { reverse = true }) + hl(0, "MultiCursorVisual", { link = "Visual" }) + hl(0, "MultiCursorSign", { link = "SignColumn" }) + hl(0, "MultiCursorMatchPreview", { link = "Search" }) + hl(0, "MultiCursorDisabledCursor", { reverse = true }) + hl(0, "MultiCursorDisabledVisual", { link = "Visual" }) + hl(0, "MultiCursorDisabledSign", { link = "SignColumn" }) + end, + }, + { + "yanky.nvim", + event = "DeferredUIEnter", + after = function(_) + require("yanky").setup({ + highlight = { timer = 150 }, + system_clipboard = { + sync_with_ring = true, + }, + }) + end, + keys = { + { "y", "<Plug>(YankyYank)", mode = { "n", "x" }, desc = "Yank Text" }, + { "p", "<Plug>(YankyPutAfter)", mode = { "n", "x" }, desc = "Put Text After Cursor" }, + { "P", "<Plug>(YankyPutBefore)", mode = { "n", "x" }, desc = "Put Text Before Cursor" }, + { "gp", "<Plug>(YankyGPutAfter)", mode = { "n", "x" }, desc = "Put Text After Selection" }, + { "gP", "<Plug>(YankyGPutBefore)", mode = { "n", "x" }, desc = "Put Text Before Selection" }, + { "[y", "<Plug>(YankyCycleForward)", desc = "Cycle Forward Through Yank History" }, + { "]y", "<Plug>(YankyCycleBackward)", desc = "Cycle Backward Through Yank History" }, + { "]p", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put Indented After Cursor (Linewise)" }, + { "[p", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put Indented Before Cursor (Linewise)" }, + { "]P", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put Indented After Cursor (Linewise)" }, + { "[P", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put Indented Before Cursor (Linewise)" }, + { ">p", "<Plug>(YankyPutIndentAfterShiftRight)", desc = "Put and Indent Right" }, + { "<p", "<Plug>(YankyPutIndentAfterShiftLeft)", desc = "Put and Indent Left" }, + { ">P", "<Plug>(YankyPutIndentBeforeShiftRight)", desc = "Put Before and Indent Right" }, + { "<P", "<Plug>(YankyPutIndentBeforeShiftLeft)", desc = "Put Before and Indent Left" }, + { "=p", "<Plug>(YankyPutAfterFilter)", desc = "Put After Applying a Filter" }, + { "=P", "<Plug>(YankyPutBeforeFilter)", desc = "Put Before Applying a Filter" }, + }, + }, + { "which-key.nvim", event = "DeferredUIEnter", after = function(_) require("which-key").setup() require("which-key").add({ + { + "<leader>w", + group = "windows", + proxy = "<C-w>", + expand = function() + return require("which-key.extras").expand.win() + end, + }, + { "<leader>s", group = "search" }, { @@ -17,4 +111,15 @@ return { }) end, }, + { + "oil.nvim", + -- NOTE: lazy loading is not recommended + event = "DeferredUIEnter", + after = function(_) + require("oil").setup() + end, + keys = { + { "-", "<CMD>Oil<CR>", { desc = "Open parent directory" } }, + }, + }, } diff --git a/lua/config/plugins/formatting.lua b/lua/config/plugins/formatting.lua index 9563905..98bbe06 100644 --- a/lua/config/plugins/formatting.lua +++ b/lua/config/plugins/formatting.lua @@ -10,6 +10,17 @@ return { lua = { "stylua" }, nix = { "nixfmt" }, rust = { "rustfmt", lsp_format = "fallback" }, + + html = { "prettierd" }, + htmlangular = { "prettierd" }, + json = { "biome" }, + jsonc = { "biome" }, + javascript = { "biome" }, + javascriptreact = { "biome" }, + ["javascript.jsx"] = { "biome" }, + typescript = { "biome" }, + typescriptreact = { "biome" }, + ["typescript.jsx"] = { "biome" }, }, }) diff --git a/lua/config/plugins/fuzzy.lua b/lua/config/plugins/fuzzy.lua index fb3cd60..95bb108 100644 --- a/lua/config/plugins/fuzzy.lua +++ b/lua/config/plugins/fuzzy.lua @@ -14,87 +14,35 @@ return { "fzf-lua", event = "DeferredUIEnter", after = function(_) - require("fzf-lua").setup() + require("fzf-lua").setup({ + keymap = { + fzf = { + ["tab"] = "down", + ["shift-tab"] = "up", + ["ctrl-q"] = "select-all+accept", + }, + }, + }) end, keys = { -- General - { - "<leader><leader>", - function() - require("fzf-lua").files() - end, - mode = { "n" }, - desc = "Search Files", - }, - { - "<leader><localleader>", - function() - require("fzf-lua").buffers() - end, - mode = { "n" }, - desc = "Search Buffers", - }, - { - "<leader>/", - function() - require("fzf-lua").live_grep() - end, - mode = { "n" }, - desc = "Search Grep", - }, - { - "<leader>:", - function() - require("fzf-lua").command_history() - end, - mode = { "n" }, - desc = "Command History", - }, + -- stylua: ignore start + { "<leader><leader>", function() require("fzf-lua").files() end, mode = { "n" }, desc = "Search Files", }, + { "<leader><localleader>", function() require("fzf-lua").buffers() end, mode = { "n" }, desc = "Search Buffers", }, + { "<leader>/", function() require("fzf-lua").live_grep() end, mode = { "n" }, desc = "Search Grep", }, + { "<leader>:", function() require("fzf-lua").command_history() end, mode = { "n" }, desc = "Command History", }, -- Search - { - "<leader>sR", - function() - require("fzf-lua").resume() - end, - mode = { "n" }, - desc = "[R]esume [S]earch", - }, - { - "<leader>sb", - function() - require("fzf-lua").buffers() - end, - mode = { "n" }, - desc = "[S]earch [B]uffers", - }, - { - "<leader>sf", - function() - require("fzf-lua").files() - end, - mode = { "n" }, - desc = "[S]earch [F]iles", - }, - { - "<leader>sg", - function() - require("fzf-lua").live_grep() - end, - mode = { "n" }, - desc = "[S]earch [G]rep", - }, + { "<leader>sR", function() require("fzf-lua").resume() end, mode = { "n" }, desc = "[R]esume [S]earch", }, + { "<leader>sb", function() require("fzf-lua").buffers() end, mode = { "n" }, desc = "[S]earch [B]uffers", }, + { "<leader>sf", function() require("fzf-lua").files() end, mode = { "n" }, desc = "[S]earch [F]iles", }, + { "<leader>sg", function() require("fzf-lua").live_grep() end, mode = { "n" }, desc = "[S]earch [G]rep", }, + { "<leader>sh", function() require("fzf-lua").helptags() end, mode = { "n" }, desc = "[S]earch [G]rep", }, -- Code - { - "<leader>ca", - function() - require("fzf-lua").lsp_code_actions() - end, - mode = { "n" }, - desc = "[C]ode [A]ctions", - }, + { "<leader>ca", function() require("fzf-lua").lsp_code_actions() end, mode = { "n" }, desc = "[C]ode [A]ctions", }, + -- stylua: ignore end }, }, } diff --git a/lua/config/plugins/init.lua b/lua/config/plugins/init.lua index 1ec4b50..f7c44fd 100644 --- a/lua/config/plugins/init.lua +++ b/lua/config/plugins/init.lua @@ -56,5 +56,6 @@ require("lze").load({ { import = "config.plugins.completion" }, { import = "config.plugins.formatting" }, { import = "config.plugins.git" }, + { import = "config.plugins.debug" }, { import = "config.plugins.extra" }, }) diff --git a/lua/config/plugins/treesitter.lua b/lua/config/plugins/treesitter.lua index 931a474..63bf48d 100644 --- a/lua/config/plugins/treesitter.lua +++ b/lua/config/plugins/treesitter.lua @@ -2,6 +2,7 @@ return { { "nvim-treesitter", event = "DeferredUIEnter", + dep_of = { "nvim-ts-autotag" }, load = function(name) vim.cmd.packadd(name) vim.cmd.packadd("nvim-treesitter-textobjects") @@ -13,4 +14,11 @@ return { }) end, }, + { + "nvim-ts-autotag", + event = { "BufReadPre", "BufNewFile" }, + after = function(_) + require("nvim-ts-autotag").setup() + end, + }, } diff --git a/lua/config/plugins/ui.lua b/lua/config/plugins/ui.lua index 19da163..e552f0e 100644 --- a/lua/config/plugins/ui.lua +++ b/lua/config/plugins/ui.lua @@ -10,6 +10,18 @@ return { }, { + "lualine.nvim", + event = "DeferredUIEnter", + after = function(_) + require("lualine").setup({ + options = { + theme = "catppuccin", + }, + }) + end, + }, + + { "noice.nvim", event = "DeferredUIEnter", after = function(_) |