update
This commit is contained in:
parent
8b868ed944
commit
978519200a
10 changed files with 166 additions and 210 deletions
217
init.lua
217
init.lua
|
|
@ -1,18 +1,18 @@
|
|||
-- 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
|
||||
-- Bootstrap lazy.nvim (the modern, maintained plugin manager)
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not (vim.uv or vim.loop).fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git",
|
||||
"clone",
|
||||
"--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable",
|
||||
lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
local packer_bootstrap = ensure_packer()
|
||||
|
||||
-- Load user configuration files
|
||||
-- ── Core configuration (no plugins needed) ───────────────────────────
|
||||
require("user.options")
|
||||
require("user.keymaps")
|
||||
require("user.autocmds")
|
||||
|
|
@ -21,105 +21,130 @@ require("user.files_utils")
|
|||
require("user.terminal")
|
||||
require("user.android")
|
||||
require("user.flutter")
|
||||
-- Plugin-dependent modules — wrapped in pcall so init doesn't crash when
|
||||
-- plugins aren't installed yet (e.g. during :PackerSync on a fresh setup).
|
||||
pcall(require, "user.cmp")
|
||||
pcall(require, "user.autopairs")
|
||||
pcall(require, "user.telescope")
|
||||
pcall(require, "user.gruvbox")
|
||||
pcall(require, "user.lsp")
|
||||
pcall(require, "user.typescript-tools")
|
||||
pcall(require, "user.null-ls")
|
||||
pcall(require, "user.treesitter")
|
||||
pcall(require, "user.markdown")
|
||||
pcall(require, "user.comment")
|
||||
pcall(require, "user.trouble")
|
||||
|
||||
return require("packer").startup(function(use)
|
||||
-- Let packer manage itself
|
||||
use("wbthomason/packer.nvim")
|
||||
-- Build plugin list — user modules can contribute additional specs
|
||||
local test_plugins = require("user.test")
|
||||
|
||||
-- ── Plugin specifications ────────────────────────────────────────────
|
||||
require("lazy").setup(vim.list_extend({
|
||||
|
||||
-- Colorscheme (high priority — loads before anything else)
|
||||
{
|
||||
"ellisonleao/gruvbox.nvim",
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require("user.gruvbox")
|
||||
end,
|
||||
},
|
||||
|
||||
-- LSP + Mason (LSP servers, formatters, linters, debuggers)
|
||||
{
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
dependencies = {
|
||||
{ "williamboman/mason.nvim", build = ":MasonUpdate" },
|
||||
"neovim/nvim-lspconfig",
|
||||
"hrsh7th/cmp-nvim-lsp", -- ensure cmp capabilities are available
|
||||
},
|
||||
config = function()
|
||||
require("user.lsp")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Completion framework
|
||||
use("hrsh7th/nvim-cmp")
|
||||
use("hrsh7th/cmp-buffer")
|
||||
use("hrsh7th/cmp-path")
|
||||
use("hrsh7th/cmp-nvim-lsp")
|
||||
use("hrsh7th/cmp-nvim-lua")
|
||||
use("saadparwaiz1/cmp_luasnip")
|
||||
use("L3MON4D3/LuaSnip")
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
dependencies = {
|
||||
"hrsh7th/cmp-buffer",
|
||||
"hrsh7th/cmp-path",
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
"hrsh7th/cmp-nvim-lua",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
"L3MON4D3/LuaSnip",
|
||||
},
|
||||
config = function()
|
||||
require("user.cmp")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Load test plugin configuration
|
||||
require("user.test")(use)
|
||||
-- Treesitter (syntax highlighting, folding, incremental selection)
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
build = ":TSUpdate",
|
||||
config = function()
|
||||
require("user.treesitter")
|
||||
end,
|
||||
},
|
||||
|
||||
-- NERDTree plugin
|
||||
use("preservim/nerdtree")
|
||||
-- Telescope (fuzzy finder — files, grep, buffers, help)
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
tag = "v0.1.9",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
{
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
build = "make",
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
require("user.telescope")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Plugin for integrating formatters/linters (community fork of archived null-ls)
|
||||
use("nvimtools/none-ls.nvim")
|
||||
-- Auto pairs (automatically close brackets, quotes, etc.)
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
config = function()
|
||||
require("user.autopairs")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Modern TypeScript integration (replaces archived nvim-lsp-ts-utils)
|
||||
use({
|
||||
-- TypeScript / JavaScript LSP enhancements (organize imports, etc.)
|
||||
{
|
||||
"pmizio/typescript-tools.nvim",
|
||||
requires = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" },
|
||||
})
|
||||
dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" },
|
||||
config = function()
|
||||
require("user.typescript-tools")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Treesitter
|
||||
use("nvim-treesitter/nvim-treesitter")
|
||||
-- Formatters & linters (community fork of archived null-ls)
|
||||
{
|
||||
"nvimtools/none-ls.nvim",
|
||||
config = function()
|
||||
require("user.null-ls")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Auto pairs
|
||||
use("windwp/nvim-autopairs")
|
||||
-- Java LSP (eclipse.jdt.ls integration)
|
||||
"mfussenegger/nvim-jdtls",
|
||||
|
||||
-- LSP Configuration
|
||||
use("neovim/nvim-lspconfig")
|
||||
|
||||
-- Java Language Server support
|
||||
use("mfussenegger/nvim-jdtls")
|
||||
|
||||
-- Markdown Preview (optional)
|
||||
use({
|
||||
-- Markdown preview (live preview in browser)
|
||||
{
|
||||
"iamcco/markdown-preview.nvim",
|
||||
run = function()
|
||||
build = function()
|
||||
vim.fn["mkdp#util#install"]()
|
||||
end,
|
||||
})
|
||||
},
|
||||
|
||||
use({
|
||||
"nvim-telescope/telescope.nvim",
|
||||
tag = "0.1.8",
|
||||
-- or , branch = '0.1.x',
|
||||
requires = { { "nvim-lua/plenary.nvim" } },
|
||||
})
|
||||
|
||||
-- Comment
|
||||
use 'numToStr/Comment.nvim'
|
||||
|
||||
-- Trouble: workspace diagnostics panel
|
||||
use {
|
||||
"folke/trouble.nvim",
|
||||
requires = { "nvim-tree/nvim-web-devicons" },
|
||||
}
|
||||
|
||||
|
||||
-- Telescope FZF native
|
||||
use({
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
run = "make",
|
||||
})
|
||||
|
||||
use({ "ellisonleao/gruvbox.nvim" })
|
||||
|
||||
use({
|
||||
"williamboman/mason.nvim",
|
||||
-- Comment (gc / gb to toggle comments in any language)
|
||||
{
|
||||
"numToStr/Comment.nvim",
|
||||
config = function()
|
||||
require("mason").setup()
|
||||
require("user.comment")
|
||||
end,
|
||||
})
|
||||
},
|
||||
|
||||
-- Mason LSPConfig for integrating Mason with nvim-lspconfig
|
||||
use("williamboman/mason-lspconfig.nvim")
|
||||
-- Trouble (pretty diagnostics, references, quickfix panel)
|
||||
{
|
||||
"folke/trouble.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
config = function()
|
||||
require("user.trouble")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Automatically install plugins on first run
|
||||
if packer_bootstrap then
|
||||
require("packer").sync()
|
||||
end
|
||||
end)
|
||||
-- NERDTree (file explorer sidebar)
|
||||
"preservim/nerdtree",
|
||||
|
||||
}, test_plugins))
|
||||
|
|
|
|||
BIN
jars/ktfmt.jar
BIN
jars/ktfmt.jar
Binary file not shown.
28
lazy-lock.json
Normal file
28
lazy-lock.json
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||
"LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
|
||||
"cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" },
|
||||
"cmp-nvim-lsp": { "branch": "main", "commit": "cbc7b02bb99fae35cb42f514762b89b5126651ef" },
|
||||
"cmp-nvim-lua": { "branch": "main", "commit": "e3a22cb071eb9d6508a156306b102c45cd2d573d" },
|
||||
"cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" },
|
||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||
"gruvbox.nvim": { "branch": "main", "commit": "154eb5ff5b96d0641307113fa385eaf0d36d9796" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||
"markdown-preview.nvim": { "branch": "master", "commit": "a923f5fc5ba36a3b17e289dc35dc17f66d0548ee" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "67029ccdac1ef8941e13b826417bc0ffac24cc86" },
|
||||
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
|
||||
"nerdtree": { "branch": "master", "commit": "690d061b591525890f1471c6675bcb5bdc8cdff9" },
|
||||
"none-ls.nvim": { "branch": "main", "commit": "01f8e62ea11603e59ad9ff7afcfa94fd183f76d6" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
|
||||
"nvim-cmp": { "branch": "main", "commit": "2ffe79f1f021def8dd1fcd81deb16f1bb0d989f3" },
|
||||
"nvim-jdtls": { "branch": "master", "commit": "6e9d953f0b82bccdb834cfde0e893f3119c22592" },
|
||||
"nvim-lspconfig": { "branch": "master", "commit": "1c0d8f70dbc8827263eedc3cf7021ceba0f68689" },
|
||||
"nvim-treesitter": { "branch": "main", "commit": "7b6cc8949f9999c5ed91436cbe24aa5f99c42025" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "2ae6958df7ced50baac5035cec0c15799eedfbf7" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "b25b749b9db64d375d782094e2b9dce53ad53a40" },
|
||||
"telescope.nvim": { "branch": "master", "commit": "84b9ba066d1860f7a586ce9cd732fd6c4f77d1d9" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
|
||||
"typescript-tools.nvim": { "branch": "master", "commit": "c2f5910074103705661e9651aa841e0d7eea9932" },
|
||||
"vim-test": { "branch": "master", "commit": "2676d84c6901e484df00b5d728bd6a345d47ee12" }
|
||||
}
|
||||
|
|
@ -17,10 +17,10 @@ require("mason-lspconfig").setup({
|
|||
-- Remove "jdtls" from here to prevent the 'enable' (nil value) crash
|
||||
ensure_installed = {
|
||||
"pyright",
|
||||
"typescript-language-server",
|
||||
"ts_ls",
|
||||
"marksman",
|
||||
"kotlin-language-server",
|
||||
"svelte-language-server",
|
||||
|
||||
"svelte",
|
||||
"gopls",
|
||||
},
|
||||
})
|
||||
|
|
@ -43,7 +43,7 @@ require("user.lsp_servers.pyright")
|
|||
require("user.lsp_servers.ts_ls")
|
||||
require("user.lsp_servers.jdtls")
|
||||
require("user.lsp_servers.marksman")
|
||||
require("user.lsp_servers.kotlin_ls")
|
||||
|
||||
require("user.lsp_servers.dartls")
|
||||
require("user.lsp_servers.svelte")
|
||||
require("user.lsp_servers.golang")
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
local function get_dart_sdk_path()
|
||||
-- Try Flutter's bundled Dart SDK first
|
||||
local flutter_dart = vim.fn.expand("~/flutter/bin/cache/dart-sdk/bin/dart")
|
||||
local flutter_dart = vim.fn.expand("~/development/flutter/bin/cache/dart-sdk/bin/dart")
|
||||
if vim.fn.executable(flutter_dart) == 1 then
|
||||
return flutter_dart
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ 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 java_bin = "/usr/lib/jvm/java-21-openjdk-amd64/bin/java" -- jdtls requires Java 21+
|
||||
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"
|
||||
|
|
@ -29,6 +29,7 @@ vim.lsp.config('jdtls', {
|
|||
},
|
||||
capabilities = capabilities,
|
||||
-- In 0.11, use root_markers instead of a root_dir function
|
||||
filetypes = { "java" },
|
||||
root_markers = { ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" },
|
||||
settings = {
|
||||
java = {
|
||||
|
|
|
|||
|
|
@ -1,87 +0,0 @@
|
|||
-- Kotlin LSP = fwcd kotlin-language-server (installed via Mason).
|
||||
--
|
||||
-- NOTE: the JetBrains `kotlin-lsp` (intellij-server) was tried but it imports
|
||||
-- Android Gradle modules with an EMPTY set of source sets, so it resolves
|
||||
-- nothing for Android (hover/definition/references all return empty). fwcd
|
||||
-- resolves the Gradle compile classpath itself and DOES navigate Android
|
||||
-- projects, so we use it here. (kotlin-lsp remains fine for plain Kotlin/JVM.)
|
||||
--
|
||||
-- CPU/Memory notes for Android projects:
|
||||
-- - Formatting disabled in LSP capabilities — ktfmt in-process spawns a SECOND
|
||||
-- Kotlin compiler, doubling memory (OOMs even at 4GB). Formatting is handled
|
||||
-- externally by null-ls running ktfmt as a separate process.
|
||||
-- - Linting enabled — runs on the same compiler already loaded for completions,
|
||||
-- so no extra memory cost. Provides error diagnostics (red squiggles).
|
||||
-- - Semantic tokens disabled — extra compilation passes, not worth the CPU.
|
||||
-- - 500ms debounce reduces compilation frequency during typing.
|
||||
-- - Persistent tmpdir so the SQLite compilation cache survives across sessions.
|
||||
local bin = vim.fn.expand("~/.local/share/nvim/mason/bin/kotlin-language-server")
|
||||
|
||||
if vim.fn.executable(bin) == 0 then
|
||||
vim.notify("kotlin-language-server not found — run :MasonInstall kotlin-language-server",
|
||||
vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
|
||||
-- Build capabilities, then strip formatting to prevent ktfmt OOMs.
|
||||
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
|
||||
|
||||
-- 1. Configuration
|
||||
vim.lsp.config('kotlin_language_server', {
|
||||
cmd = { bin },
|
||||
filetypes = { "kotlin" },
|
||||
|
||||
-- Kotlin/Android projects are rooted at a Gradle build file or git repo.
|
||||
-- vim.lsp.config expects callback form: function(bufnr, on_dir).
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local fname = vim.api.nvim_buf_get_name(bufnr)
|
||||
local root = vim.fs.root(fname, {
|
||||
"settings.gradle.kts",
|
||||
"settings.gradle",
|
||||
"build.gradle.kts",
|
||||
"build.gradle",
|
||||
"pom.xml",
|
||||
".git",
|
||||
})
|
||||
on_dir(root or vim.fs.dirname(fname))
|
||||
end,
|
||||
|
||||
capabilities = capabilities,
|
||||
|
||||
-- Strip formatting from the server's advertised capabilities.
|
||||
-- client-side capabilities only prevent the server from expecting format
|
||||
-- requests; server-side capabilities are what vim.lsp.buf.format() actually
|
||||
-- checks. Without this, format-on-save routes through the LSP's ktfmt →
|
||||
-- second Kotlin compiler → OOM.
|
||||
on_attach = function(client)
|
||||
client.server_capabilities.documentFormattingProvider = false
|
||||
client.server_capabilities.documentRangeFormattingProvider = false
|
||||
end,
|
||||
|
||||
-- 6GB heap — Android classpath is large (163 deps + 320 source files).
|
||||
-- Persistent tmpdir so the compilation cache survives across sessions.
|
||||
-- Use Android Studio's JBR 21 — optimised GC/JIT for Kotlin workloads.
|
||||
cmd_env = {
|
||||
KOTLIN_LANGUAGE_SERVER_OPTS = "-Xmx6G -Xms512m -Djava.io.tmpdir=/home/prabhat/.cache/kotlin-ls-fwcd",
|
||||
JAVA_HOME = "/opt/android-studio/jbr",
|
||||
},
|
||||
|
||||
init_options = {
|
||||
debounceTextChanges = 500,
|
||||
},
|
||||
|
||||
settings = {
|
||||
kotlin = {
|
||||
linting = { enabled = true },
|
||||
completion = { enabled = true },
|
||||
semanticTokens = { enabled = false },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- 2. Enable the server
|
||||
vim.lsp.enable('kotlin_language_server')
|
||||
|
|
@ -22,18 +22,6 @@ local sources = {
|
|||
extra_args = { "--aosp" }, -- optional: use AOSP style formatting
|
||||
--command = "google-java-format", -- specify command if not in PATH
|
||||
}),
|
||||
-- Kotlin formatting via ktfmt — runs as separate JVM, no OOM risk.
|
||||
-- Custom formatter (not in null-ls builtins for this version).
|
||||
{
|
||||
name = "ktfmt",
|
||||
method = null_ls.methods.FORMATTING,
|
||||
filetypes = { "kotlin" },
|
||||
generator = null_ls.generator({
|
||||
command = "java",
|
||||
args = { "-jar", "/home/prabhat/.config/nvim/jars/ktfmt.jar", "-" },
|
||||
to_stdin = true,
|
||||
}),
|
||||
},
|
||||
-- YAML formatting via yamlfmt (Mason: yamlfmt)
|
||||
formatting.yamlfmt,
|
||||
-- XML formatting via xmllint (system package: libxml2-utils)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
-- lua/user/test.lua
|
||||
return function()
|
||||
-- Set up vim-test plugin
|
||||
require("packer").use({
|
||||
-- Returns vim-test plugin spec for lazy.nvim
|
||||
|
||||
return {
|
||||
{
|
||||
"vim-test/vim-test",
|
||||
config = function()
|
||||
vim.cmd([[
|
||||
|
|
@ -14,5 +15,5 @@ return function()
|
|||
nmap <silent> t<C-g> :TestVisit<CR>
|
||||
]])
|
||||
end,
|
||||
})
|
||||
end
|
||||
},
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ ts.setup({
|
|||
"c",
|
||||
"cpp",
|
||||
"javascript",
|
||||
"kotlin",
|
||||
|
||||
"go",
|
||||
"dart",
|
||||
"typescript",
|
||||
|
|
|
|||
Loading…
Reference in a new issue