repos / dotfiles

my dotfiles

commit
7c2d70e
parent
1ec081d
author
Eric Bower
date
2025-07-22 23:17:45 -0400 EDT
refactor(nvim): use `vim.lsp.enable`
2 files changed,  +44, -48
M dot_config/nvim/init.lua
+40, -48
  1@@ -36,6 +36,7 @@ map({ "n", "v", "i", "t" }, "<C-space><C-d>", function()
  2 end)
  3 
  4 local autocmd = vim.api.nvim_create_autocmd
  5+local augroup = vim.api.nvim_create_augroup
  6 autocmd("Filetype", { pattern = { "qf" }, command = "setlocal wrap" })
  7 autocmd("Filetype", { pattern = { "make" }, command = "setlocal tabstop=4 shiftwidth=4 softtabstop=4" })
  8 autocmd("Filetype", {
  9@@ -43,7 +44,7 @@ autocmd("Filetype", {
 10 	command = "setlocal wrap tw=79 formatoptions+=t tabstop=2 shiftwidth=2 softtabstop=2",
 11 })
 12 autocmd("FileType", {
 13-	group = vim.api.nvim_create_augroup("close_with_q", { clear = true }),
 14+	group = augroup("my.close_with_q", { clear = true }),
 15 	pattern = { "help", "man", "qf", "scratch", "fugitive", "nvim-pack" },
 16 	callback = function(args)
 17 		map("n", "q", "<cmd>quit<cr>", { buffer = args.buf })
 18@@ -54,57 +55,46 @@ function setup_lsp()
 19 	map("n", "<leader>e", vim.diagnostic.open_float, opts)
 20 	map("n", "<leader>q", vim.diagnostic.setloclist, opts)
 21 
 22-	local on_attach = function(client, bufnr)
 23-		local chars = {}
 24-		for i = 32, 126 do
 25-			table.insert(chars, string.char(i))
 26-		end
 27-		-- auto-complete for any char
 28-		client.server_capabilities.completionProvider.triggerCharacters = chars
 29-		vim.lsp.completion.enable(true, client.id, bufnr, { -- built-in auto-complete
 30-			autotrigger = true,
 31-			convert = function(item)
 32-				return { abbr = item.label:gsub("%b()", "") }
 33-			end,
 34-		})
 35-		local bufopts = { noremap = true, silent = true, buffer = bufnr }
 36+	local cfg = vim.lsp.enable
 37+	-- npm i -g vscode-langservers-extracted
 38+	cfg("cssls")
 39+	cfg("denols")
 40+	cfg("gopls")
 41+	cfg("html")
 42+	cfg("jsonls")
 43+	-- npm i -g pyright
 44+	cfg("pyright")
 45+	-- npm i -g typescript typescript-language-server
 46+	cfg("ts_ls")
 47+	cfg("zls")
 48+	-- os package mgr: lua-language-server
 49+	cfg("lua_ls")
 50 
 51-		-- See `:help vim.lsp.*` for documentation on any of the below functions
 52-		map("n", "<leader>d", vim.lsp.buf.definition, bufopts)
 53-		map("n", "<leader>D", vim.lsp.buf.type_definition, bufopts)
 54-		map("n", "<leader>h", vim.lsp.buf.hover, bufopts)
 55-		map("n", "<leader>r", vim.lsp.buf.references, bufopts)
 56-		map("n", "<leader>i", vim.lsp.buf.implementation, bufopts)
 57-		map("i", "<C-k>", vim.lsp.completion.get, bufopts) -- open completion menu manually
 58+	local chars = {} -- trigger autocompletion on EVERY keypress
 59+	for i = 32, 126 do
 60+		table.insert(chars, string.char(i))
 61 	end
 62 
 63-	local nvim_lsp = require("lspconfig")
 64-	function handler(server_name)
 65-		local opts = {
 66-			capabilities = capabilities,
 67-			on_attach = on_attach,
 68-		}
 69-		if server_name == "denols" then
 70-			opts.root_dir = nvim_lsp.util.root_pattern("deno.json", "deno.jsonc")
 71-		elseif server_name == "ts_ls" then
 72-			opts.root_dir = nvim_lsp.util.root_pattern("package.json")
 73-			-- https://github.com/neovim/nvim-lspconfig/issues/2507#issuecomment-1471438640
 74-			opts.single_file_support = false
 75-		end
 76-		nvim_lsp[server_name].setup(opts)
 77-	end
 78+	autocmd("LspAttach", {
 79+		group = augroup("my.lsp", {}),
 80+		callback = function(args)
 81+			local client = assert(vim.lsp.get_client_by_id(args.data.client_id))
 82+			if client:supports_method("textDocument/implementation") then
 83+				local bufopts = { noremap = true, silent = true, buffer = args.buf }
 84+				map("n", "<leader>d", vim.lsp.buf.definition, bufopts)
 85+				map("n", "<leader>D", vim.lsp.buf.type_definition, bufopts)
 86+				map("n", "<leader>h", vim.lsp.buf.hover, bufopts)
 87+				map("n", "<leader>r", vim.lsp.buf.references, bufopts)
 88+				map("n", "<leader>i", vim.lsp.buf.implementation, bufopts)
 89+				map("i", "<C-k>", vim.lsp.completion.get, bufopts) -- open completion menu manually
 90+			end
 91 
 92-	-- npm i -g vscode-langservers-extracted
 93-	handler("cssls")
 94-	handler("denols")
 95-	handler("gopls")
 96-	handler("html")
 97-	handler("jsonls")
 98-	-- npm i -g pyright
 99-	handler("pyright")
100-	-- npm i -g typescript typescript-language-server
101-	handler("ts_ls")
102-	handler("zls")
103+			if client:supports_method("textDocument/completion") then
104+				client.server_capabilities.completionProvider.triggerCharacters = chars
105+				vim.lsp.completion.enable(true, client.id, args.buf, { autotrigger = true })
106+			end
107+		end,
108+	})
109 end
110 
111 function setup_fzf()
112@@ -169,6 +159,7 @@ local ts_parsers = {
113 local nts = require("nvim-treesitter")
114 nts.install(ts_parsers)
115 autocmd("PackChanged", {
116+	group = augroup("my.pack", {}),
117 	callback = function(args)
118 		local spec = args.data.spec
119 		if spec and spec.name == "nvim-treesitter" and args.data.kind == "update" then
120@@ -193,6 +184,7 @@ require("neoscroll").setup({ duration_multiplier = 0.4 })
121 require("gitlinker").setup({})
122 
123 autocmd("FileType", { -- enable treesitter highlighting and indents
124+	group = augroup("my.treesitter", {}),
125 	callback = function(args)
126 		local filetype = args.match
127 		local lang = vim.treesitter.language.get_lang(filetype)
M dot_ssh/config
+4, -0
 1@@ -97,6 +97,10 @@ Host ppico
 2     IdentitiesOnly yes
 3     IdentityFile ~/.ssh/id_ed25519_pico
 4 
 5+    ControlPath ~/.ssh/cm-%r@%h:%p
 6+    ControlMaster auto
 7+    ControlPersist 10m
 8+
 9 Host pipe
10     HostName pipe.pico.sh
11     IdentitiesOnly yes