From ee6974510f250861194e8f3462868897b1a1ecab Mon Sep 17 00:00:00 2001 From: Prabhat Maurya Date: Sun, 12 Jul 2026 20:10:04 +0530 Subject: [PATCH] update --- init.lua | 48 ++++++++++++++++++------------ lua/user/autopairs.lua | 7 ++++- lua/user/cmp.lua | 6 +++- lua/user/files_utils.lua | 7 +++++ lua/user/gruvbox.lua | 7 ++++- lua/user/java.lua | 6 +++- lua/user/keymaps.lua | 10 +++---- lua/user/lsp.lua | 2 +- lua/user/lsp_servers/golang.lua | 5 +++- lua/user/lsp_servers/jdtls.lua | 10 +++---- lua/user/lsp_servers/kotlin_ls.lua | 3 +- lua/user/lsp_servers/svelte.lua | 5 +++- lua/user/lsp_servers/ts_ls.lua | 5 +++- lua/user/null-ls.lua | 8 +++-- lua/user/options.lua | 4 +++ lua/user/telescope.lua | 6 +++- lua/user/treesitter.lua | 7 ++++- lua/user/typescript-tools.lua | 25 ++++++++++++++++ 18 files changed, 129 insertions(+), 42 deletions(-) create mode 100644 lua/user/typescript-tools.lua diff --git a/init.lua b/init.lua index 5ca0efd..d361fe8 100644 --- a/init.lua +++ b/init.lua @@ -1,12 +1,27 @@ +-- Bootstrap packer.nvim if not already installed +local ensure_packer = function() + local fn = vim.fn + local install_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" + if fn.empty(fn.glob(install_path)) > 0 then + fn.system({ "git", "clone", "--depth", "1", "https://github.com/wbthomason/packer.nvim", install_path }) + vim.cmd([[packadd packer.nvim]]) + return true + end + return false +end + +local packer_bootstrap = ensure_packer() + -- Load user configuration files require("user.options") require("user.keymaps") require("user.cmp") -require("user.java") require("user.autopairs") require("user.telescope") require("user.gruvbox") require("user.lsp") +require("user.typescript-tools") +require("user.null-ls") require("user.treesitter") require("user.terminal") require("user.markdown") @@ -37,11 +52,14 @@ return require("packer").startup(function(use) -- NERDTree plugin use("preservim/nerdtree") - -- Plugin for integrating formatters/linters - use("jose-elias-alvarez/null-ls.nvim") + -- Plugin for integrating formatters/linters (community fork of archived null-ls) + use("nvimtools/none-ls.nvim") - -- -- TS Server - use("jose-elias-alvarez/nvim-lsp-ts-utils") + -- Modern TypeScript integration (replaces archived nvim-lsp-ts-utils) + use({ + "pmizio/typescript-tools.nvim", + requires = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" }, + }) -- Treesitter use("nvim-treesitter/nvim-treesitter") @@ -96,18 +114,10 @@ return require("packer").startup(function(use) }) -- Mason LSPConfig for integrating Mason with nvim-lspconfig - use({ - "williamboman/mason-lspconfig.nvim", - config = function() - require("mason-lspconfig").setup({ - ensure_installed = { - "pyright", - "ts_ls", - "jdtls", - "marksman", - "kotlin_language_server", - }, - }) - end, - }) + use("williamboman/mason-lspconfig.nvim") + + -- Automatically install plugins on first run + if packer_bootstrap then + require("packer").sync() + end end) diff --git a/lua/user/autopairs.lua b/lua/user/autopairs.lua index 27b50d5..d49a5b8 100644 --- a/lua/user/autopairs.lua +++ b/lua/user/autopairs.lua @@ -1,5 +1,10 @@ -- lua/user/autopairs.lua -require('nvim-autopairs').setup{ +local status_ok, autopairs = pcall(require, 'nvim-autopairs') +if not status_ok then + vim.notify("nvim-autopairs not found — run :PackerSync", vim.log.levels.WARN) + return +end +autopairs.setup{ disable_filetype = { "TelescopePrompt", "vim" }, check_ts = true, -- Enable Treesitter integration ts_config = { diff --git a/lua/user/cmp.lua b/lua/user/cmp.lua index 598257e..581465f 100644 --- a/lua/user/cmp.lua +++ b/lua/user/cmp.lua @@ -1,6 +1,10 @@ -- ~/.config/nvim/lua/user/cmp.lua -local cmp = require("cmp") +local status_ok, cmp = pcall(require, "cmp") +if not status_ok then + vim.notify("nvim-cmp not found — run :PackerSync", vim.log.levels.WARN) + return +end cmp.setup({ -- Throttle LSP completion requests. diff --git a/lua/user/files_utils.lua b/lua/user/files_utils.lua index 43cf869..53c2b3d 100644 --- a/lua/user/files_utils.lua +++ b/lua/user/files_utils.lua @@ -12,4 +12,11 @@ function M.create_file(filename) end end +function M.prompt_create_file() + local filename = vim.fn.input("Filename: ") + if filename and filename ~= "" then + M.create_file(filename) + end +end + return M diff --git a/lua/user/gruvbox.lua b/lua/user/gruvbox.lua index 467ad32..0e158d5 100644 --- a/lua/user/gruvbox.lua +++ b/lua/user/gruvbox.lua @@ -1,5 +1,10 @@ -- Default options: -require("gruvbox").setup({ +local status_ok, gruvbox = pcall(require, "gruvbox") +if not status_ok then + vim.notify("gruvbox.nvim not found — run :PackerSync", vim.log.levels.WARN) + return +end +gruvbox.setup({ terminal_colors = true, -- add neovim terminal colors undercurl = true, underline = true, diff --git a/lua/user/java.lua b/lua/user/java.lua index 4bf45af..15733b1 100644 --- a/lua/user/java.lua +++ b/lua/user/java.lua @@ -1,4 +1,8 @@ -local jdtls = require('jdtls') +local status_ok, jdtls = pcall(require, 'jdtls') +if not status_ok then + vim.notify("nvim-jdtls not found — run :PackerSync", vim.log.levels.WARN) + return +end vim.api.nvim_create_autocmd("FileType", { pattern = "java", diff --git a/lua/user/keymaps.lua b/lua/user/keymaps.lua index 706a455..39b95da 100644 --- a/lua/user/keymaps.lua +++ b/lua/user/keymaps.lua @@ -7,7 +7,7 @@ local search_replace = require("user.search_replace") vim.g.mapleader = " " -- Set Space as leader key -- Keybinding to format the current buffer -vim.api.nvim_set_keymap('n', 'f', ':lua vim.lsp.buf.format({ async = true })', { noremap = true, silent = true }) +vim.api.nvim_set_keymap('n', 'f', ':lua vim.lsp.buf.format()', { noremap = true, silent = true }) -- Save file map("n", "w", ":w", default_opts) @@ -97,8 +97,8 @@ map("n", "mf", ":MarkdownPreviewFollow", { noremap = true, silent = -- Optional: Key binding to toggle Markdown preview map("n", "mt", ":call ToggleMarkdownPreview()", { noremap = true, silent = true }) --- java at key binding -map("n", "jf", ":lua vim.lsp.buf.at()", { noremap = true, silent = true }) +-- Java: organize imports +map("n", "jo", ":lua vim.lsp.buf.code_action({ context = { only = { 'source.organizeImports' } }, apply = true })", { noremap = true, silent = true }) -- search and replace function map("n", "sr", ':lua require("user.search_replace").search_replace()', { noremap = true, silent = true }) @@ -106,11 +106,11 @@ map("n", "sr", ':lua require("user.search_replace").search_replace() -- Key mapping to trigger LSP rename vim.api.nvim_set_keymap("n", "rn", ":lua vim.lsp.buf.rename()", { noremap = true, silent = true }) --- In init.lua or lua/user/keymaps.lua +-- Create a new file (prompts for filename) vim.api.nvim_set_keymap( "n", "cf", - ":lua require('user.files_utils').create_file('NewFile.java')", + ":lua require('user.files_utils').prompt_create_file()", { noremap = true, silent = true } ) diff --git a/lua/user/lsp.lua b/lua/user/lsp.lua index d8cd0fa..eba334f 100644 --- a/lua/user/lsp.lua +++ b/lua/user/lsp.lua @@ -28,7 +28,7 @@ vim.api.nvim_create_autocmd('LspAttach', { -- These files should now use vim.lsp.config and vim.lsp.enable require("user.lsp_servers.pyright") require("user.lsp_servers.ts_ls") --- require("user.lsp_servers.jdtls") +require("user.lsp_servers.jdtls") require("user.lsp_servers.marksman") require("user.lsp_servers.kotlin_ls") require("user.lsp_servers.dartls") diff --git a/lua/user/lsp_servers/golang.lua b/lua/user/lsp_servers/golang.lua index bbf9324..fbdbe73 100644 --- a/lua/user/lsp_servers/golang.lua +++ b/lua/user/lsp_servers/golang.lua @@ -1,7 +1,10 @@ -- Go LSP configuration -- Uses gopls installed via Mason -local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) +local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") +local capabilities = status_ok + and cmp_nvim_lsp.default_capabilities(vim.lsp.protocol.make_client_capabilities()) + or vim.lsp.protocol.make_client_capabilities() vim.lsp.config("gopls", { cmd = { "gopls" }, diff --git a/lua/user/lsp_servers/jdtls.lua b/lua/user/lsp_servers/jdtls.lua index ab412e4..d328093 100644 --- a/lua/user/lsp_servers/jdtls.lua +++ b/lua/user/lsp_servers/jdtls.lua @@ -1,6 +1,9 @@ -- 1. Setup paths and capabilities -local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) -local java_bin = "/usr/lib/jvm/java-21-openjdk-amd64/bin/java" +local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") +local capabilities = status_ok + and cmp_nvim_lsp.default_capabilities(vim.lsp.protocol.make_client_capabilities()) + or vim.lsp.protocol.make_client_capabilities() +local java_bin = "java" -- use java from PATH local jdtls_path = vim.fn.stdpath("data") .. "/mason/packages/jdtls" local jdtls_launcher_jar = vim.fn.glob(jdtls_path .. "/plugins/org.eclipse.equinox.launcher_*.jar") local lombok_jar = jdtls_path .. "/lombok.jar" @@ -56,9 +59,6 @@ vim.lsp.config('jdtls', { }, format = { enabled = true, - settings = { - url = jdtls_path .. "/eclipse-formatter.xml", - }, }, }, }, diff --git a/lua/user/lsp_servers/kotlin_ls.lua b/lua/user/lsp_servers/kotlin_ls.lua index 534c79e..fd77285 100644 --- a/lua/user/lsp_servers/kotlin_ls.lua +++ b/lua/user/lsp_servers/kotlin_ls.lua @@ -24,7 +24,8 @@ if vim.fn.executable(bin) == 0 then end -- Build capabilities, then strip formatting to prevent ktfmt OOMs. -local capabilities = require("cmp_nvim_lsp").default_capabilities() +local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") +local capabilities = status_ok and cmp_nvim_lsp.default_capabilities() or vim.lsp.protocol.make_client_capabilities() capabilities.textDocument.formatting = nil capabilities.textDocument.rangeFormatting = nil capabilities.textDocument.onTypeFormatting = nil diff --git a/lua/user/lsp_servers/svelte.lua b/lua/user/lsp_servers/svelte.lua index c283bbb..f16ea84 100644 --- a/lua/user/lsp_servers/svelte.lua +++ b/lua/user/lsp_servers/svelte.lua @@ -1,7 +1,10 @@ -- Svelte LSP configuration -- Uses svelte-language-server installed via Mason -local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) +local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") +local capabilities = status_ok + and cmp_nvim_lsp.default_capabilities(vim.lsp.protocol.make_client_capabilities()) + or vim.lsp.protocol.make_client_capabilities() vim.lsp.config("svelte", { cmd = { "svelteserver", "--stdio" }, diff --git a/lua/user/lsp_servers/ts_ls.lua b/lua/user/lsp_servers/ts_ls.lua index 1a00812..6498a49 100644 --- a/lua/user/lsp_servers/ts_ls.lua +++ b/lua/user/lsp_servers/ts_ls.lua @@ -1,7 +1,10 @@ -- TypeScript/JavaScript LSP configuration -- Uses typescript-language-server installed via Mason -local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) +local status_ok, cmp_nvim_lsp = pcall(require, "cmp_nvim_lsp") +local capabilities = status_ok + and cmp_nvim_lsp.default_capabilities(vim.lsp.protocol.make_client_capabilities()) + or vim.lsp.protocol.make_client_capabilities() vim.lsp.config("ts_ls", { cmd = { "typescript-language-server", "--stdio" }, diff --git a/lua/user/null-ls.lua b/lua/user/null-ls.lua index ff343ae..05e1275 100644 --- a/lua/user/null-ls.lua +++ b/lua/user/null-ls.lua @@ -1,6 +1,10 @@ -- File: lua/user/null-ls.lua -local null_ls = require("null-ls") +local status_ok, null_ls = pcall(require, "null-ls") +if not status_ok then + vim.notify("null-ls.nvim not found — run :PackerSync", vim.log.levels.WARN) + return +end -- Define builtins for formatting local formatting = null_ls.builtins.formatting @@ -47,7 +51,7 @@ null_ls.setup({ buffer = bufnr, callback = function() local view = vim.fn.winsaveview() - vim.lsp.buf.format({ async = true }) + vim.lsp.buf.format() vim.fn.winrestview(view) end, }) diff --git a/lua/user/options.lua b/lua/user/options.lua index 917313d..9730a90 100644 --- a/lua/user/options.lua +++ b/lua/user/options.lua @@ -1,5 +1,9 @@ local opt = vim.opt +-- Suppress vim.tbl_islist deprecation (from packer.nvim / older plugins on Neovim 0.10+) +vim.deprecated = vim.deprecated or {} +vim.deprecated.tbl_islist = false + -- Line numbers opt.number = true opt.relativenumber = true diff --git a/lua/user/telescope.lua b/lua/user/telescope.lua index 3b001db..fd80169 100644 --- a/lua/user/telescope.lua +++ b/lua/user/telescope.lua @@ -1,6 +1,10 @@ -- lua/user/telescope.lua -local telescope = require('telescope') +local status_ok, telescope = pcall(require, 'telescope') +if not status_ok then + vim.notify("telescope.nvim not found — run :PackerSync", vim.log.levels.WARN) + return +end local actions = require('telescope.actions') telescope.setup{ diff --git a/lua/user/treesitter.lua b/lua/user/treesitter.lua index 1c9deb1..c75d131 100644 --- a/lua/user/treesitter.lua +++ b/lua/user/treesitter.lua @@ -1,4 +1,9 @@ -require("nvim-treesitter").setup({ +local status_ok, ts = pcall(require, "nvim-treesitter") +if not status_ok then + vim.notify("nvim-treesitter not found — run :PackerSync", vim.log.levels.WARN) + return +end +ts.setup({ ensure_installed = { "markdown", "markdown_inline", diff --git a/lua/user/typescript-tools.lua b/lua/user/typescript-tools.lua new file mode 100644 index 0000000..85e5691 --- /dev/null +++ b/lua/user/typescript-tools.lua @@ -0,0 +1,25 @@ +-- TypeScript tools configuration (replaces nvim-lsp-ts-utils) + +local status_ok, ts_tools = pcall(require, "typescript-tools") +if not status_ok then + vim.notify("typescript-tools.nvim not found — run :PackerSync", vim.log.levels.WARN) + return +end + +ts_tools.setup({ + on_attach = function(client, bufnr) + -- Disable formatting via tsserver, use none-ls instead + client.server_capabilities.documentFormattingProvider = false + client.server_capabilities.documentRangeFormattingProvider = false + end, + settings = { + -- Import on completion + complete_function_calls = true, + -- Include "this" in auto-imports + include_completions_with_insert_text = true, + -- Enable/disable spawning of tsserver instances + separate_diagnostic_server = true, + -- Path to tsserver (auto-detected from Mason if not set) + tsserver_path = nil, + }, +})