return { -- Autoformat "stevearc/conform.nvim", event = { "BufWritePre" }, cmd = { "ConformInfo" }, keys = { { "f", function() require("conform").format({ async = true, lsp_format = "fallback" }) end, mode = "", desc = "[F]ormat buffer", }, }, opts = { notify_on_error = false, format_on_save = function(bufnr) local disable_filetypes = { c = true, cpp = true } local lsp_format_opt if disable_filetypes[vim.bo[bufnr].filetype] then lsp_format_opt = "never" else lsp_format_opt = "fallback" end return { timeout_ms = 500, lsp_format = lsp_format_opt, } end, formatters_by_ft = { lua = { "stylua" }, sh = { "shfmt" }, swift = { "swift_format" }, python = { "isort", "black", stop_after_first = true }, javascript = { "prettierd", "prettier", stop_after_first = true }, javascriptreact = { "prettierd", "prettier", stop_after_first = true }, typescript = { "prettierd", "prettier", stop_after_first = true }, typescriptreact = { "prettierd", "prettier", stop_after_first = true }, }, formatters = { shfmt = { prepend_args = { "-i", "4", "-ci" }, -- 4 spaces, indent cases }, }, }, }