From 2b2676d45e52db5e2dbfa8b2fd72ee95b2967dd2 Mon Sep 17 00:00:00 2001 From: Marc Pervaz Boocha Date: Mon, 7 Jul 2025 23:39:20 +0530 Subject: Add Exrc and modulized LSPAttach --- .config/nvim/.luarc.json | 3 + .config/nvim/ftplugin/lua.lua | 2 - .config/nvim/init.lua | 120 +++------------------ .config/nvim/lua/lsp.lua | 114 ++++++++++++++++++++ .gitmodules | 20 +--- .local/share/nvim/site/pack/plugins/start/conform | 1 - .../nvim/site/pack/plugins/start/nvim-lspconfig | 2 +- .../nvim/site/pack/plugins/start/nvim-treesitter | 2 +- .zfunc/zsh-completions | 2 +- 9 files changed, 138 insertions(+), 128 deletions(-) create mode 100644 .config/nvim/.luarc.json delete mode 100644 .config/nvim/ftplugin/lua.lua create mode 100644 .config/nvim/lua/lsp.lua delete mode 160000 .local/share/nvim/site/pack/plugins/start/conform diff --git a/.config/nvim/.luarc.json b/.config/nvim/.luarc.json new file mode 100644 index 0000000..63c0022 --- /dev/null +++ b/.config/nvim/.luarc.json @@ -0,0 +1,3 @@ +{ + "$schema": "https://raw.githubusercontent.com/sumneko/vscode-lua/master/setting/schema.json" +} diff --git a/.config/nvim/ftplugin/lua.lua b/.config/nvim/ftplugin/lua.lua deleted file mode 100644 index ab8173f..0000000 --- a/.config/nvim/ftplugin/lua.lua +++ /dev/null @@ -1,2 +0,0 @@ - --- require'lazydev'.setup {} diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 4fda0df..2d516ab 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -24,10 +24,7 @@ vim.g.loaded_python_provider = 0 vim.o.list = true vim.o.mouse = 'a' -vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()' -vim.o.foldmethod = "expr" vim.o.foldcolumn = "auto" - vim.o.cursorline = true vim.o.laststatus = 2 vim.o.statusline = "%!v:lua.require'lines'.status()" @@ -37,6 +34,8 @@ vim.o.signcolumn = 'yes' vim.o.completeopt = "menuone,noselect,popup,fuzzy" vim.o.showtabline = 2 +vim.o.exrc = true + vim.cmd.colorscheme 'retrobox' vim.keymap.set({ 'n', 'x' }, 'y', '"+y') @@ -72,9 +71,16 @@ end require 'mason'.setup {} +require 'nvim-treesitter'.update() + vim.api.nvim_create_autocmd('FileType', { callback = function(args) - pcall(vim.treesitter.start, args.buf, args.match) + local ok = pcall(vim.treesitter.start, args.buf, args.match) + if ok then + vim.wo.foldmethod = "expr" + vim.wo.foldexpr = 'v:lua.vim.treesitter.foldexpr()' + vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()" + end end }) @@ -86,116 +92,15 @@ vim.diagnostic.config { virtual_lines = true, } -vim.keymap.set('n', 'f', function() - vim.lsp.buf.format { async = true } -end) - -vim.api.nvim_create_user_command("Format", function(args) - local range = nil - if args.count ~= -1 then - local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] - range = { - start = { args.line1, 0 }, - ["end"] = { args.line2, end_line:len() }, - } - end - vim.lsp.buf.format { async = true, range = range } -end, { range = true }) - -vim.keymap.set({ 'n', 'v' }, 'grl', function() - vim.lsp.codelens.run() -end) - -vim.keymap.set('n', 'wa', function() - vim.lsp.buf.add_workspace_folder() -end) - -vim.keymap.set('n', 'wr', function() - vim.lsp.buf.remove_workspace_folder() -end) - -vim.keymap.set('n', 'wl', function() - local dir = vim.lsp.buf.list_workspace_folders() - vim.ui.select(dir, { - prompt = 'Workspace Dir: ', - }, function(result) - if result then - vim.api.nvim_set_current_dir(result) - end - end) -end) - -vim.api.nvim_create_user_command("Symbols", function(args) - if args.args == "" - then - vim.lsp.buf.workspace_symbol() - else - vim.lsp.buf.workspace_symbol(args.args) - end -end, { nargs = "?" }) - vim.api.nvim_create_autocmd('LspAttach', { callback = function(ev) - local opts = { buffer = ev.buf } local client = vim.lsp.get_client_by_id(ev.data.client_id) if not client then return end - if client:supports_method('textDocument/inlayHint') then - vim.lsp.inlay_hint.enable() - end - - if client:supports_method('textDocument/completion') then - local chars = {} - for i = 32, 126 do - table.insert(chars, string.char(i)) - end - client.server_capabilities.completionProvider.triggerCharacters = chars - vim.lsp.completion.enable(true, client.id, ev.buf, { autotrigger = true }) - end - - if client:supports_method('textDocument/documentHighlight') then - local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', - { clear = false }) - vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { - buffer = ev.buf, - group = highlight_augroup, - callback = vim.lsp.buf.document_highlight, - }) - - vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { - buffer = ev.buf, - group = highlight_augroup, - callback = vim.lsp.buf.clear_references, - }) - - vim.api.nvim_create_autocmd('LspDetach', { - callback = function(event) - vim.lsp.buf.clear_references() - vim.api.nvim_clear_autocmds { - group = highlight_augroup, - buffer = event.buf - } - end, - }) - end - - if client:supports_method('textDocument/foldingRange') then - local win = vim.api.nvim_get_current_win() - vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()' - end - - if client:supports_method('textDocument/codelens') then - vim.lsp.codelens.refresh(opts) - vim.api.nvim_create_autocmd({ 'CursorHold', 'InsertLeave' }, { - buffer = ev.buf, - callback = function() - vim.lsp.codelens.refresh(opts) - end, - }) - end + require 'lsp' (client, ev.buf) end, }) @@ -214,5 +119,6 @@ vim.lsp.enable { "cssls", "jsonls", "ruff", - -- "pyright", + "marksman", + "pyright", } diff --git a/.config/nvim/lua/lsp.lua b/.config/nvim/lua/lsp.lua new file mode 100644 index 0000000..4b5fe02 --- /dev/null +++ b/.config/nvim/lua/lsp.lua @@ -0,0 +1,114 @@ +---LSP OnAttach +---@param client vim.lsp.Client +---@param buf integer +function Lsp(client, buf) + vim.keymap.set('n', 'f', function() + vim.lsp.buf.format { async = true } + end, { buffer = buf }) + + vim.api.nvim_buf_create_user_command(buf, "Format", function(args) + local range = nil + if args.count ~= -1 then + local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] + range = { + start = { args.line1, 0 }, + ["end"] = { args.line2, end_line:len() }, + } + end + vim.lsp.buf.format { async = true, range = range, bufnr = buf } + end, { range = true }) + + vim.keymap.set('n', 'wa', function() + vim.lsp.buf.add_workspace_folder() + end, { buffer = buf }) + + vim.keymap.set('n', 'wr', function() + vim.lsp.buf.remove_workspace_folder() + end, { buffer = buf }) + + vim.keymap.set('n', 'wl', function() + local dir = vim.lsp.buf.list_workspace_folders() + vim.ui.select(dir, { + prompt = 'Workspace Dir: ', + }, function(result) + if result then + vim.api.nvim_set_current_dir(result) + end + end) + end, { buffer = buf }) + + vim.api.nvim_buf_create_user_command(buf, "Symbols", function(args) + if args.args == "" + then + vim.lsp.buf.workspace_symbol() + else + vim.lsp.buf.workspace_symbol(args.args) + end + end, { nargs = "?" }) + + + if client:supports_method('textDocument/inlayHint') then + vim.lsp.inlay_hint.enable() + + vim.keymap.set('n', 'ih', function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) + end, { buffer = buf }) + end + + if client:supports_method('textDocument/completion') then + local chars = {} + for i = 32, 126 do + table.insert(chars, string.char(i)) + end + client.server_capabilities.completionProvider.triggerCharacters = chars + vim.lsp.completion.enable(true, client.id, buf, { autotrigger = true }) + end + + if client:supports_method('textDocument/documentHighlight') then + local highlight_augroup = vim.api.nvim_create_augroup('lsp-highlight', + { clear = false }) + vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, { + buffer = buf, + group = highlight_augroup, + callback = vim.lsp.buf.document_highlight, + }) + + vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, { + buffer = buf, + group = highlight_augroup, + callback = vim.lsp.buf.clear_references, + }) + + vim.api.nvim_create_autocmd('LspDetach', { + callback = function(event) + vim.lsp.buf.clear_references() + vim.api.nvim_clear_autocmds { + group = highlight_augroup, + buffer = event.buf + } + end, + }) + end + + if client:supports_method('textDocument/foldingRange') then + local win = vim.api.nvim_get_current_win() + + vim.wo[win][0].foldmethod = "expr" + vim.wo[win][0].foldexpr = 'v:lua.vim.lsp.foldexpr()' + end + + if client:supports_method('textDocument/codelens') then + vim.keymap.set({ 'n', 'v' }, 'grl', function() + vim.lsp.codelens.run() + end, { buffer = buf }) + vim.lsp.codelens.refresh { bufnr = buf } + vim.api.nvim_create_autocmd({ 'CursorHold', 'InsertLeave' }, { + buffer = buf, + callback = function() + vim.lsp.codelens.refresh { bufnr = buf } + end, + }) + end +end + +return Lsp diff --git a/.gitmodules b/.gitmodules index d4277e3..e1fb32f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,24 +1,14 @@ [submodule "nvim-treesitter"] path = .local/share/nvim/site/pack/plugins/start/nvim-treesitter url = https://github.com/nvim-treesitter/nvim-treesitter.git -[submodule "clang_extensions.nvim"] - path = .local/share/nvim/site/pack/plugins/start/clang_extensions - url = https://github.com/p00f/clangd_extensions.nvim -[submodule "lazydev.nvim"] - path = .local/share/nvim/site/pack/plugins/start/lazydev.nvim - url = https://github.com/folke/lazydev.nvim -[submodule "rustaceanvim"] - path = .local/share/nvim/site/pack/plugins/start/rustaceanvim - url = https://github.com/mrcjkb/rustaceanvim -[submodule "conform"] - path = .local/share/nvim/site/pack/plugins/start/conform - url = https://github.com/stevearc/conform.nvim + branch = main [submodule "mason"] path = .local/share/nvim/site/pack/plugins/start/mason url = https://github.com/williamboman/mason.nvim -[submodule "zsh-completions"] - path = .zfunc/zsh-completions - url = https://github.com/zsh-users/zsh-completions.git [submodule "nvim-lspconfig"] path = .local/share/nvim/site/pack/plugins/start/nvim-lspconfig url = https://github.com/neovim/nvim-lspconfig +[submodule "zsh-completions"] + path = .zfunc/zsh-completions + url = https://github.com/zsh-users/zsh-completions.git + diff --git a/.local/share/nvim/site/pack/plugins/start/conform b/.local/share/nvim/site/pack/plugins/start/conform deleted file mode 160000 index 8132ec7..0000000 --- a/.local/share/nvim/site/pack/plugins/start/conform +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8132ec733eed3bf415b97b76797ca41b59f51d7d diff --git a/.local/share/nvim/site/pack/plugins/start/nvim-lspconfig b/.local/share/nvim/site/pack/plugins/start/nvim-lspconfig index 77d3fdf..7fac902 160000 --- a/.local/share/nvim/site/pack/plugins/start/nvim-lspconfig +++ b/.local/share/nvim/site/pack/plugins/start/nvim-lspconfig @@ -1 +1 @@ -Subproject commit 77d3fdfb3554632c7a3b101ded643d422de7626f +Subproject commit 7fac9025a967a4d0846660f751cd392fac6bb788 diff --git a/.local/share/nvim/site/pack/plugins/start/nvim-treesitter b/.local/share/nvim/site/pack/plugins/start/nvim-treesitter index 42fc28b..4400990 160000 --- a/.local/share/nvim/site/pack/plugins/start/nvim-treesitter +++ b/.local/share/nvim/site/pack/plugins/start/nvim-treesitter @@ -1 +1 @@ -Subproject commit 42fc28ba918343ebfd5565147a42a26580579482 +Subproject commit 4400990e7362e2769bb1ff96895f623deb0380fa diff --git a/.zfunc/zsh-completions b/.zfunc/zsh-completions index c29efd0..e07f6fb 160000 --- a/.zfunc/zsh-completions +++ b/.zfunc/zsh-completions @@ -1 +1 @@ -Subproject commit c29efd0bc3927ab25dc93ad4085d7143881b73f0 +Subproject commit e07f6fb780725e9c0f50a7666700cf91ded30222 -- cgit v1.2.3-70-g09d2