diff --git a/.gitmodules b/.gitmodules index b5aa499..4a3d765 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,7 +7,7 @@ url = https://github.com/rktjmp/lush.nvim branch = main [submodule "pack/general/start/nvim-lspconfig"] - path = pack/general/start/nvim-lspconfig + path = pack/general/opt/nvim-lspconfig url = https://github.com/neovim/nvim-lspconfig branch = master [submodule "pack/general/start/nvim-treesitter"] @@ -111,15 +111,15 @@ url = https://github.com/Saecki/crates.nvim branch = main [submodule "pack/general/start/neotest"] - path = pack/general/start/neotest + path = pack/general/opt/neotest url = https://github.com/nvim-neotest/neotest branch = master [submodule "pack/general/start/neotest-rust"] - path = pack/general/start/neotest-rust + path = pack/general/opt/neotest-rust url = https://github.com/rouge8/neotest-rust branch = main [submodule "pack/general/start/lsp_lines.nvim"] - path = pack/general/start/lsp_lines.nvim + path = pack/general/opt/lsp_lines.nvim url = https://git.sr.ht/~whynothugo/lsp_lines.nvim [submodule "pack/general/opt/crates.nvim"] path = pack/general/opt/crates.nvim @@ -132,3 +132,6 @@ path = pack/general/start/nvim-spider url = https://github.com/chrisgrieser/nvim-spider branch = main +[submodule "pack/general/opt/lsp_lines.nvim"] + path = pack/general/opt/lsp_lines.nvim + url = https://git.sr.ht/~whynothugo/lsp_lines.nvim diff --git a/init.lua b/init.lua index b224d78..01cb543 100644 --- a/init.lua +++ b/init.lua @@ -1,47 +1,41 @@ vim.loader.enable() ----- Aliases ---- -local cmd = vim.cmd -local g = vim.g -local opt = vim.opt -local opt_local = vim.opt_local - ---- General Config ---- -opt.mouse = "a" -opt.tabstop = 2 -opt.shiftwidth = 2 -opt.number = true -opt.breakindent = true -opt.showmatch = true -opt.ignorecase = true -opt.smartcase = true -opt.joinspaces = false -opt.showmode = false -opt.hidden = true -opt.backup = false -opt.writebackup = false -opt.swapfile = false -opt.shortmess:append({ I = true }) +vim.opt.mouse = "a" +vim.opt.tabstop = 2 +vim.opt.shiftwidth = 2 +vim.opt.number = true +vim.opt.breakindent = true +vim.opt.showmatch = true +vim.opt.ignorecase = true +vim.opt.smartcase = true +vim.opt.joinspaces = false +vim.opt.showmode = false +vim.opt.hidden = true +vim.opt.backup = false +vim.opt.writebackup = false +vim.opt.swapfile = false +vim.opt.shortmess:append({ I = true }) -- whichwrap -- left/right keys can traverse up/down -opt.whichwrap:append("<,>,[,]") -opt.cmdheight = 2 -opt.showcmd = true -opt.splitright = true -opt.splitbelow = true -g.mapleader = " " +vim.opt.whichwrap:append("<,>,[,]") +vim.opt.cmdheight = 2 +vim.opt.showcmd = true +vim.opt.splitright = true +vim.opt.splitbelow = true +vim.g.mapleader = " " ---- Terminal ---- vim.api.nvim_create_autocmd({ "TermOpen" }, { callback = function() - opt_local.number = false + vim.opt_local.number = false end, }) ---- Theming ---- -opt.termguicolors = true -opt.background = "dark" -g.gruvbox_italic = true -cmd.colorscheme("gruvbox") -opt.listchars = { +vim.opt.termguicolors = true +vim.opt.background = "dark" +vim.g.gruvbox_italic = true +vim.cmd.colorscheme("gruvbox") +vim.opt.listchars = { eol = "↲", tab = "▶▹", nbsp = "␣", @@ -188,17 +182,17 @@ vim.filetype.add({ extension = { kdl = "kdl" } }) vim.api.nvim_create_autocmd({ "FileType" }, { pattern = "markdown", callback = function() - opt_local.textwidth = 85 - opt_local.spell = true + vim.opt_local.textwidth = 85 + vim.opt_local.spell = true end, }) -- YAML -- vim.api.nvim_create_autocmd({ "FileType" }, { pattern = "yaml", callback = function() - opt_local.softtabstop = 2 - opt_local.expandtab = true - opt_local.foldmethod = "indent" + vim.opt_local.softtabstop = 2 + vim.opt_local.expandtab = true + vim.opt_local.foldmethod = "indent" end, }) @@ -271,77 +265,112 @@ cmp.setup({ }), }) ---- LSP ---- -local lsp = require("lspconfig") - --- Use an on_attach function to only map the following keys --- after the language server attaches to the current buffer -local on_lsp_attach = function(_client, _bufnr) - vim.keymap.set("n", "gD", vim.lsp.buf.declaration) - vim.keymap.set("n", "gd", vim.lsp.buf.definition) - vim.keymap.set("n", "K", vim.lsp.buf.hover) - vim.keymap.set("n", "gi", vim.lsp.buf.implementation) - vim.keymap.set("n", "", vim.lsp.buf.signature_help) - vim.keymap.set("n", "D", vim.lsp.buf.type_definition) - vim.keymap.set("n", "rn", vim.lsp.buf.rename) - vim.keymap.set("n", "ca", vim.lsp.buf.code_action) - vim.keymap.set("n", "gr", vim.lsp.buf.references) - vim.keymap.set("n", "e", vim.diagnostic.open_float) - vim.keymap.set("n", "[d", vim.diagnostic.goto_prev) - vim.keymap.set("n", "]d", vim.diagnostic.goto_next) - vim.keymap.set("n", "q", vim.diagnostic.setloclist) - vim.keymap.set("n", "", function() - vim.lsp.buf.format({ async = true }) - end) -end - --- Use a loop to conveniently call 'setup' on multiple servers and --- map buffer local keybindings when the language server attaches -local servers = { - clangd = {}, - dotls = {}, - eslint = {}, - gopls = {}, - jsonls = {}, - kotlin_language_server = {}, - lua_ls = { - settings = { - Lua = { - runtime = { version = "LuaJIT" }, - diagnostics = { - globals = { "vim" }, - unusedLocalExclude = { "_*" }, - }, - workspace = { - checkThirdParty = false, - library = vim.api.nvim_get_runtime_file("", true), - }, - telemetry = { enable = false }, - }, - }, +vim.g.lsp_loaded = false +vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = { + "c", + "cpp", + "dot", + "go", + "javascript", + "json", + "latex", + "lua", + "markdown", + "python", + "rust", + "terraform", + "tex", + "toml", + "typescript", }, - marksman = {}, - pylsp = {}, - rust_analyzer = {}, - taplo = {}, - texlab = {}, - tflint = {}, - tsserver = {}, -} + callback = function() + if vim.g.lsp_loaded == true then + return + end + vim.g.lsp_loaded = true + vim.cmd("packadd nvim-lspconfig") + vim.cmd("packadd lsp_lines.nvim") -local capabilities = require('cmp_nvim_lsp').default_capabilities() -lsp.util.default_config = vim.tbl_deep_extend("force", lsp.util.default_config, { capabilities = capabilities }) -for server, add_to_config in pairs(servers) do - local config = { - on_attach = on_lsp_attach, - flags = { - debounce_text_changes = 150, - }, - } - for k, v in pairs(add_to_config) do - config[k] = v + local lsp = require("lspconfig") + -- Use an on_attach function to only map the following keys + -- after the language server attaches to the current buffer + local on_lsp_attach = function(_client, _bufnr) + vim.keymap.set("n", "gD", vim.lsp.buf.declaration) + vim.keymap.set("n", "gd", vim.lsp.buf.definition) + vim.keymap.set("n", "K", vim.lsp.buf.hover) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation) + vim.keymap.set("n", "", vim.lsp.buf.signature_help) + vim.keymap.set("n", "D", vim.lsp.buf.type_definition) + vim.keymap.set("n", "rn", vim.lsp.buf.rename) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action) + vim.keymap.set("n", "gr", vim.lsp.buf.references) + vim.keymap.set("n", "e", vim.diagnostic.open_float) + vim.keymap.set("n", "[d", vim.diagnostic.goto_prev) + vim.keymap.set("n", "]d", vim.diagnostic.goto_next) + vim.keymap.set("n", "q", vim.diagnostic.setloclist) + vim.keymap.set("n", "", function() + vim.lsp.buf.format({ async = true }) + end) + end + + -- Use a loop to conveniently call 'setup' on multiple servers and + -- map buffer local keybindings when the language server attaches + local servers = { + clangd = {}, + dotls = {}, + eslint = {}, + gopls = {}, + jsonls = {}, + kotlin_language_server = {}, + lua_ls = { + settings = { + Lua = { + runtime = { version = "LuaJIT" }, + diagnostics = { + globals = { "vim" }, + unusedLocalExclude = { "_*" }, + }, + workspace = { + checkThirdParty = false, + library = vim.api.nvim_get_runtime_file("", true), + }, + telemetry = { enable = false }, + }, + }, + }, + marksman = {}, + pylsp = {}, + rust_analyzer = {}, + taplo = {}, + texlab = {}, + tflint = {}, + tsserver = {}, + } + + local capabilities = require('cmp_nvim_lsp').default_capabilities() + lsp.util.default_config = vim.tbl_deep_extend("force", lsp.util.default_config, { capabilities = capabilities }) + for server, add_to_config in pairs(servers) do + local config = { + on_attach = on_lsp_attach, + flags = { + debounce_text_changes = 150, + }, + } + for k, v in pairs(add_to_config) do + config[k] = v + end + lsp[server].setup(config) + end + + ---- lsp_lines + require("lsp_lines").setup() + -- Disable virtual_text since it's redundant due to lsp_lines. + vim.diagnostic.config({ + virtual_text = false, + }) end - lsp[server].setup(config) -end +}) -- Auto format on save vim.api.nvim_create_autocmd({ "BufWritePre" }, { @@ -356,7 +385,7 @@ vim.api.nvim_create_autocmd({ "BufWritePre" }, { if lsp_format then vim.lsp.buf.format({ async = false }) else - cmd("Format") + vim.cmd("Format") end end, }) @@ -485,9 +514,9 @@ require("gitsigns").setup({ ---- Comment.nvim require("Comment").setup() ---- vim-markdown -g.vim_markdown_no_default_key_mappings = 1 -g.vim_markdown_folding_disabled = 1 -g.vim_markdown_toml_frontmatter = 1 +vim.g.vim_markdown_no_default_key_mappings = 1 +vim.g.vim_markdown_folding_disabled = 1 +vim.g.vim_markdown_toml_frontmatter = 1 ---- Telescope local telescope = require("telescope") telescope.setup({ @@ -603,13 +632,6 @@ vim.api.nvim_create_autocmd({ "FileType" }, { end }) ----- lsp_lines -require("lsp_lines").setup() --- Disable virtual_text since it's redundant due to lsp_lines. -vim.diagnostic.config({ - virtual_text = false, -}) - ---- nvim-surround require("nvim-surround").setup() diff --git a/pack/general/start/lsp_lines.nvim b/pack/general/opt/lsp_lines.nvim similarity index 100% rename from pack/general/start/lsp_lines.nvim rename to pack/general/opt/lsp_lines.nvim diff --git a/pack/general/start/neotest b/pack/general/opt/neotest similarity index 100% rename from pack/general/start/neotest rename to pack/general/opt/neotest diff --git a/pack/general/start/neotest-rust b/pack/general/opt/neotest-rust similarity index 100% rename from pack/general/start/neotest-rust rename to pack/general/opt/neotest-rust diff --git a/pack/general/start/nvim-lspconfig b/pack/general/opt/nvim-lspconfig similarity index 100% rename from pack/general/start/nvim-lspconfig rename to pack/general/opt/nvim-lspconfig