+
+ return {
+ diagnostics = {
+ underline = true,
+ update_in_insert = false,
+ virtual_text = {
+ spacing = 4,
+ source = "if_mani",
+ prefix = "●",
+ },
+ severity_sort = true,
+ signs = {
+ text = {
+ [vim.diagnostic.severity.ERROR] = " ",
+ [vim.diagnostic.severity.WARN] = " ",
+ [vim.diagnostic.severity.HINT] = " ",
+ [vim.diagnostic.severity.INFO] = " ",
+ },
+ },
+ },
+ inlay_hints = { enabled = false, },
+ codelens = { enabled = false, },
+ document_highlight = { enabled = true, },
+ capabilities = {
+ workspace = {
+ fileOperations = {
+ didRename = true,
+ willRename = true,
+ },
+ },
+ },
+ format = {
+ formatting_options = nil,
+ timeout_ms = nil,
+ },
+ -- Automatically format on save
+ -- autoformat = false,
+ -- LSP Server Settings
+ ---@type lspconfig.options
+ servers = {
+ lua_ls = {
+ settings = {
+ Lua = {
+ workspace = { checkThirdParty = false, },
+ codeLens = { enable = true, },
+ completion = { callSnippet = "Replace", },
+ doc = { privateName = { "^_" }, },
+ hint = {
+ enable = true,
+ setType = false,
+ paramType = true,
+ paramName = "Disable",
+ semicolon = "Disable",
+ arrayIndex = "Disable",
+ },
+ 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,
+ },
+ }
+ 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