return { { "stevearc/conform.nvim", event = { "BufWritePre" }, cmd = { "ConformInfo" }, keys = { { "cf", function() require("conform").format({ async = true, lsp_fallback = true }) end, mode = { "n", "v" }, desc = "Format buffer", }, }, opts = { formatters_by_ft = { lua = { "stylua" }, nix = { "nixfmt" }, python = { "ruff_format", "ruff_organize_imports" }, javascript = { "prettierd", "prettier", stop_after_first = true }, typescript = { "prettierd", "prettier", stop_after_first = true }, javascriptreact = { "prettierd", "prettier", stop_after_first = true }, typescriptreact = { "prettierd", "prettier", stop_after_first = true }, json = { "prettierd", "prettier", stop_after_first = true }, jsonc = { "prettierd", "prettier", stop_after_first = true }, yaml = { "prettierd", "prettier", stop_after_first = true }, markdown = { "prettierd", "prettier", stop_after_first = true }, mdx = { "prettierd", "prettier", stop_after_first = true }, html = { "prettierd", "prettier", stop_after_first = true }, css = { "prettierd", "prettier", stop_after_first = true }, scss = { "prettierd", "prettier", stop_after_first = true }, rust = { "rustfmt" }, go = { "gofumpt" }, sh = { "shfmt" }, bash = { "shfmt" }, zsh = { "shfmt" }, }, -- Format on save format_on_save = { timeout_ms = 500, lsp_fallback = true, }, -- Customize formatters formatters = { shfmt = { prepend_args = { "-i", "2" }, -- 2 space indent }, ruff_format = { command = "ruff", args = { "format", "--stdin-filename", "$FILENAME" }, }, ruff_organize_imports = { command = "ruff", args = { "check", "--select", "I", "--fix", "--stdin-filename", "$FILENAME" }, }, }, }, }, }