require("lsp-format").setup {} local on_attach = function(client, bufnr) local bufmap = function(keys, func) vim.keymap.set('n', keys, func, {buffer = bufnr}) end bufmap('r', vim.lsp.buf.rename) bufmap('a', vim.lsp.buf.code_action) bufmap('gd', vim.lsp.buf.definition) bufmap('gD', vim.lsp.buf.declaration) bufmap('gI', vim.lsp.buf.implementation) bufmap('D', vim.lsp.buf.type_definition) bufmap('gr', require('telescope.builtin').lsp_references) bufmap('s', require('telescope.builtin').lsp_document_symbols) bufmap('S', require('telescope.builtin').lsp_dynamic_workspace_symbols) bufmap('K', vim.lsp.buf.hover) vim.api.nvim_buf_create_user_command(bufnr, 'Format', function(_) vim.lsp.buf.format() end, {}) end local capabilities = vim.lsp.protocol.make_client_capabilities() capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) require('neodev').setup() require'lspconfig'.nil_ls.setup { on_attach = on_attach, capabilities = capabilities } require'lspconfig'.pyright.setup { on_attach = on_attach, capabilities = capabilities } require'lspconfig'.gopls.setup { on_attach = on_attach, capabilities = capabilities } require'lspconfig'.terraformls.setup { on_attach = on_attach, capabilities = capabilities } require'lspconfig'.efm.setup { on_attach = require("lsp-format").on_attach, init_options = {documentFormatting = true}, settings = { languages = { lua = {{formatCommand = "lua-format -i", formatStdin = true}}, nix = {{formatCommand = "nixfmt", formatStdin = true}} } }, filetypes = {"lua", "nix"} }