summaryrefslogtreecommitdiff
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--lua/config/lsp.lua33
-rw-r--r--lua/config/options.lua12
-rw-r--r--lua/config/plugins/completion.lua53
-rw-r--r--lua/config/plugins/debug.lua23
-rw-r--r--lua/config/plugins/extra.lua52
-rw-r--r--lua/config/plugins/formatting.lua2
-rw-r--r--lua/config/plugins/fuzzy.lua85
-rw-r--r--lua/config/plugins/init.lua2
-rw-r--r--lua/config/plugins/snippets.lua13
-rw-r--r--lua/config/plugins/ui.lua26
10 files changed, 228 insertions, 73 deletions
diff --git a/lua/config/lsp.lua b/lua/config/lsp.lua
index 413e06f..7004b6c 100644
--- a/lua/config/lsp.lua
+++ b/lua/config/lsp.lua
@@ -10,6 +10,8 @@ vim.lsp.enable({
"nixd",
+ "qmlls",
+
"rust-analyzer",
"angular-language-server",
@@ -27,3 +29,34 @@ vim.api.nvim_create_autocmd({ "BufReadPost", "BufNewFile" }, {
vim.treesitter.start(nil, "angular")
end,
})
+
+vim.api.nvim_create_autocmd("LspAttach", {
+ callback = function(args)
+ local buffer = args.buf
+ local client = vim.lsp.get_client_by_id(args.data.client_id)
+ if client then
+ -- Keybindings
+ local map = vim.keymap.set
+ local opts = { buffer = buffer }
+
+ map("n", "<leader>cr", vim.lsp.buf.rename, opts)
+ map("n", "gd", vim.lsp.buf.definition, opts)
+ map("n", "gD", vim.lsp.buf.declaration, opts)
+ map("n", "gI", vim.lsp.buf.implementation, opts)
+ map("n", "gy", vim.lsp.buf.type_definition, opts)
+ map("n", "gr", vim.lsp.buf.references, opts)
+
+ map("n", "K", function()
+ return vim.lsp.buf.hover()
+ end, opts)
+
+ map("n", "gK", function()
+ return vim.lsp.buf.signature_help()
+ end, opts)
+
+ map({ "n", "i" }, "<C-;>", function()
+ return vim.lsp.buf.signature_help()
+ end, opts)
+ end
+ end,
+})
diff --git a/lua/config/options.lua b/lua/config/options.lua
index 5a7be5d..6208be7 100644
--- a/lua/config/options.lua
+++ b/lua/config/options.lua
@@ -59,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..7acef49 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(_)
@@ -10,6 +37,13 @@ return {
},
completion = {
+ list = {
+ selection = {
+ auto_insert = false,
+ preselect = false,
+ },
+ },
+
documentation = {
auto_show = true,
auto_show_delay_ms = 500,
@@ -18,7 +52,24 @@ return {
ghost_text = { enabled = true },
},
- sources = { default = { "lsp", "path", "snippets", "buffer" } },
+ snippets = { preset = "luasnip" },
+
+ 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 2b1d8ef..bc5cbd1 100644
--- a/lua/config/plugins/extra.lua
+++ b/lua/config/plugins/extra.lua
@@ -91,6 +91,15 @@ return {
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" },
{
@@ -99,6 +108,9 @@ return {
{ "<leader>gh", group = "hunk" },
{ "<leader>S", group = "surround" },
},
+
+ { "<leader>x", group = "extra" },
+ { "<leader>xS", group = "supercollider" },
})
end,
},
@@ -113,4 +125,44 @@ return {
{ "-", "<CMD>Oil<CR>", { desc = "Open parent directory" } },
},
},
+ {
+ "scnvim",
+ -- NOTE: this plugin is broken when try to lazyload
+ lazy = false,
+ after = function(_)
+ local scnvim = require("scnvim")
+ local map = scnvim.map
+ local map_expr = scnvim.map_expr
+
+ scnvim.setup({
+ ensure_installed = true,
+ keymaps = {
+ ["<M-CR>"] = {
+ map("editor.send_block", { "i", "n" }),
+ map("editor.send_selection", "x"),
+ },
+ ["<C-CR>"] = map("editor.send_line", { "i", "n" }),
+ ["<C-k>"] = map("signature.show", { "i", "n" }),
+
+ ["<F12>"] = map("sclang.hard_stop", { "i", "n", "x" }),
+ },
+ })
+
+ vim.api.nvim_create_augroup("my.scnvim", { clear = true })
+ vim.api.nvim_create_autocmd("InsertEnter", {
+ pattern = "*.scd",
+ group = "my.scnvim",
+ once = true,
+ callback = function()
+ -- Loading snippets to LuaSnip
+ require("luasnip").add_snippets("supercollider", require("scnvim/utils").get_snippets())
+ end,
+ })
+ end,
+ keys = {
+ { "<leader>xSs", "<CMD>SCNvimStart<CR>", desc = "Start SuperCollider" },
+ { "<leader>xSS", "<CMD>SCNvimStop<CR>", desc = "Stop SuperCollider" },
+ { "<leader>xSr", "<CMD>SCNvimRecompile<CR>", desc = "Recompile SuperCollider sclang" },
+ },
+ },
}
diff --git a/lua/config/plugins/formatting.lua b/lua/config/plugins/formatting.lua
index 6efe5d2..98bbe06 100644
--- a/lua/config/plugins/formatting.lua
+++ b/lua/config/plugins/formatting.lua
@@ -11,6 +11,8 @@ return {
nix = { "nixfmt" },
rust = { "rustfmt", lsp_format = "fallback" },
+ html = { "prettierd" },
+ htmlangular = { "prettierd" },
json = { "biome" },
jsonc = { "biome" },
javascript = { "biome" },
diff --git a/lua/config/plugins/fuzzy.lua b/lua/config/plugins/fuzzy.lua
index 9bab351..95bb108 100644
--- a/lua/config/plugins/fuzzy.lua
+++ b/lua/config/plugins/fuzzy.lua
@@ -19,6 +19,7 @@ return {
fzf = {
["tab"] = "down",
["shift-tab"] = "up",
+ ["ctrl-q"] = "select-all+accept",
},
},
})
@@ -26,82 +27,22 @@ return {
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..3c372a0 100644
--- a/lua/config/plugins/init.lua
+++ b/lua/config/plugins/init.lua
@@ -54,7 +54,9 @@ require("lze").load({
{ import = "config.plugins.treesitter" },
{ import = "config.plugins.mini" },
{ import = "config.plugins.completion" },
+ { import = "config.plugins.snippets" },
{ import = "config.plugins.formatting" },
{ import = "config.plugins.git" },
+ { import = "config.plugins.debug" },
{ import = "config.plugins.extra" },
})
diff --git a/lua/config/plugins/snippets.lua b/lua/config/plugins/snippets.lua
new file mode 100644
index 0000000..5a37b0c
--- /dev/null
+++ b/lua/config/plugins/snippets.lua
@@ -0,0 +1,13 @@
+return {
+ {
+ "luasnip",
+ dep_of = { "blink.cmp" },
+ load = function(name)
+ vim.cmd.packadd(name)
+ vim.cmd.packadd("friendly-snippets")
+ end,
+ after = function(_)
+ require("luasnip.loaders.from_vscode").lazy_load()
+ end,
+ },
+}
diff --git a/lua/config/plugins/ui.lua b/lua/config/plugins/ui.lua
index e552f0e..7e4f44c 100644
--- a/lua/config/plugins/ui.lua
+++ b/lua/config/plugins/ui.lua
@@ -17,6 +17,32 @@ return {
options = {
theme = "catppuccin",
},
+
+ sections = {
+ lualine_a = { "mode" },
+ lualine_b = { "branch", "diff", "diagnostics" },
+ lualine_c = { "filename" },
+
+ lualine_x = {
+ -- SuperCollider status bar (server status)
+ {
+ function()
+ -- NOTE: for some reason LuaLS doesn't find `gsub` in string o.O
+ ---@diagnostic disable-next-line
+ return require("scnvim.statusline").get_server_status():gsub("%%", "%%%%")
+ end,
+ cond = function()
+ return vim.bo.filetype == "supercollider"
+ end,
+ },
+
+ "filetype",
+ "encoding",
+ "fileformat",
+ },
+ lualine_y = { "progress" },
+ lualine_z = { "location" },
+ },
})
end,
},