return {
	{
		"williamboman/mason.nvim",
		config = function()
			require("mason").setup()
		end,
	},
	{
		"williamboman/mason-lspconfig.nvim",
		config = function()
			require("mason-lspconfig").setup({
				ensure_installed = {
					"lua_ls",
					"rust_analyzer",
					"tsserver",
					"typst_lsp",
					"html",
					"r_language_server", --[[ "vscode-html-language-server" ]]
				},
			})
		end,
	},
	{
		"neovim/nvim-lspconfig",
		config = function()
			local capabilities = require("cmp_nvim_lsp").default_capabilities()

			-- After setting up mason-lspconfig you may set up servers via lspconfig
			require("lspconfig").lua_ls.setup({ capabilities = capabilities })
			-- require("lspconfig").rust_analyzer.setup({capabilities = capabilities})
			require("lspconfig").r_language_server.setup({ capabilities = capabilities })
			require("lspconfig").html.setup({ capabilities = capabilities })
			require("lspconfig").typst_lsp.setup({
				capabilities = capabilities,
				settings = {
					exportPdf = "onType", -- Choose onType, onSave or never.
					-- serverPath = "" -- Normally, there is no need to uncomment it.
				},
			})
			require("lspconfig").tsserver.setup({
				capabilities = capabilities,
				init_options = {
					plugins = {},
				},
				filetypes = {
					"javascript",
					"typescript",
				},
			})

			-- You must make sure volar is setup
			-- e.g. require'lspconfig'.volar.setup{}
			-- See volar's section for more information
		end,
	},
}
