My simple neovim config
1vim.o.completeopt = "menuone,noinsert,noselect"
2-- local lspkind = require("lspkind")
3-- A table of servers used for setting up LSP
4local servers = {
5 -- "bashls",
6 "superhtml",
7 -- "pyright",
8 "nixd",
9 "zls",
10 "ruff",
11 "tflint",
12 "just",
13 "ty",
14 -- {
15 -- "harper_ls",
16 -- exec = "harper-ls",
17 -- },
18 {
19 "terraformls",
20 exec = "terraform-ls",
21 },
22 {
23 "eslint",
24 exec = "vscode-eslint-language-server",
25 },
26 {
27 "nil_ls",
28 exec = "nil",
29 },
30 -- {
31 -- "ltex",
32 -- exec = "ltex-ls",
33 -- },
34 {
35 "ts_ls",
36 exec = "typescript-language-server",
37 },
38 {
39 "astro",
40 exec = "astro-ls",
41 },
42 {
43 "lua_ls",
44 exec = "lua-language-server",
45 },
46 "gopls",
47 {
48 "gh_actions_ls",
49 exec = "gh-actions-language-server",
50 },
51 {
52 "yamlls",
53 exec = "yaml-language-server",
54 },
55}
56
57-- Only install servers that exist + use custom options
58-- We may be able to potentially remove this
59for _, server in ipairs(servers) do
60 local exec = ""
61 local lsp = ""
62 if type(server) == "table" then
63 lsp = server[1]
64 if server.enable ~= nil and server.continue then
65 goto continue
66 end
67 if server.exec ~= nil then
68 exec = server.exec
69 else
70 exec = lsp
71 end
72 else
73 lsp = server
74 exec = server
75 end
76
77 local command = [[echo executable("]] .. exec .. [[")]]
78 local out = vim.api.nvim_exec2(command, { output = true })
79 local result = tonumber(out.output)
80 if result ~= 0 then
81 vim.lsp.enable(lsp)
82 -- nvim_lsp[lsp].setup(setup)
83 end
84 ::continue::
85end
86
87vim.lsp.enable("biome-custom")
88
89vim.g.rustaceanvim = {
90 server = {
91 on_attach = function(client, _)
92 client.server_capabilities.workspace.didChangeWatchedFiles = {
93 dynamicRegistration = false,
94 }
95 end,
96 default_settings = {
97 ["rust-analyzer"] = {
98 files = {
99 watcherExclude = {
100 "**/.direnv/**",
101 },
102 excludeDirs = {
103 ".direnv",
104 ".github",
105 },
106 },
107 cargo = {
108 features = "all",
109 },
110 },
111 },
112 },
113}
114
115vim.api.nvim_create_augroup("LspAttach_inlayhints", {})
116vim.api.nvim_create_autocmd("LspAttach", {
117 group = "LspAttach_inlayhints",
118 callback = function(event)
119 local client = vim.lsp.get_client_by_id(event.data.client_id)
120 -- Enable for all clients except for lua_ls
121 if client and client.name ~= "lua_ls" then
122 vim.lsp.inlay_hint.enable(true)
123 end
124 end,
125})