+ opts = {
+ -- Automatically format on save
+ -- autoformat = false,
+ -- LSP Server Settings
+ ---@type lspconfig.options
+ servers = {
+ lua_ls = {
+ settings = {
+ Lua = {
+ diagnostics = {
+ disable = { "missing-fields", },
+ },
+ },
+ },
+ },
+ -- Add clangd extensions
+ -- https://github.com/p00f/clangd_extensions.nvim
+ },
+ -- you can do any additional lsp server setup here
+ -- return true if you don't want this server to be setup with lspconfig
+ ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?>
+ setup = {
+ -- example to setup with typescript.nvim
+ -- tsserver = function(_, opts)
+ -- require("typescript").setup({ server = opts })
+ -- return true
+ -- end,
+ -- Specify * to use this function as a fallback for any server
+ -- ["*"] = function(server, opts) end,
+ },
+ },
+ },
+
+ -- cmdline tools and lsp servers
+ {
+
+ "williamboman/mason.nvim",
+ cmd = "Mason",
+ keys = { { "<leader>cm", "<cmd>Mason<cr>", desc = "Mason" } },
+ opts = {
+ ensure_installed = {
+ "stylua",
+ "shfmt",
+ -- "flake8",
+ },
+ },
+ ---@param opts MasonSettings | {ensure_installed: string[]}
+ config = function(_, opts)
+ require("mason").setup(opts)
+ local mr = require("mason-registry")
+ local function ensure_installed()
+ for _, tool in ipairs(opts.ensure_installed) do
+ local p = mr.get_package(tool)
+ if not p:is_installed() then
+ p:install()
+ end
+ end
+ end
+ if mr.refresh then
+ mr.refresh(ensure_installed)
+ else
+ ensure_installed()
+ end
+ end,
+ },