summaryrefslogtreecommitdiff
path: root/lua/config
diff options
context:
space:
mode:
Diffstat (limited to 'lua/config')
-rw-r--r--lua/config/lsp.lua25
-rw-r--r--lua/config/options.lua15
-rw-r--r--lua/config/plugins/completion.lua44
-rw-r--r--lua/config/plugins/debug.lua23
-rw-r--r--lua/config/plugins/extra.lua105
-rw-r--r--lua/config/plugins/formatting.lua11
-rw-r--r--lua/config/plugins/fuzzy.lua94
-rw-r--r--lua/config/plugins/init.lua1
-rw-r--r--lua/config/plugins/treesitter.lua8
-rw-r--r--lua/config/plugins/ui.lua12
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(_)