return { "stevearc/conform.nvim", event = { "BufReadPre", "BufNewFile" }, config = function() local conform = require("conform") conform.setup({ formatters_by_ft = { javascript = { "prettierd" }, typescript = { "prettierd" }, javascriptreact = { "prettierd" }, typescriptreact = { "prettierd" }, svelte = { "prettierd" }, vue = { "prettierd" }, css = { "prettierd" }, html = { "prettierd" }, json = { "prettierd" }, yaml = { "prettierd" }, markdown = { "prettierd" }, graphql = { "prettierd" }, lua = { "stylua" }, python = { "isort", "black" }, astro = { "prettierd" }, nix = { "alejandra" }, }, format_on_save = function(bufnr) -- Disable with a global or buffer-local variable if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then return end return { timeout_ms = 1000, lsp_format = "fallback" } end, }) vim.api.nvim_create_user_command("Format", function(args) local range = nil if args.count ~= -1 then local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1] range = { start = { args.line1, 0 }, ["end"] = { args.line2, end_line:len() }, } end require("conform").format({ async = true, lsp_fallback = true, range = range }) end, { range = true }) vim.api.nvim_create_user_command("FormatDisable", function(args) if args.bang then -- FormatDisable! will disable formatting just for this buffer vim.b.disable_autoformat = true else vim.g.disable_autoformat = true end end, { desc = "Disable autoformat-on-save", bang = true, }) vim.api.nvim_create_user_command("FormatEnable", function() vim.b.disable_autoformat = false vim.g.disable_autoformat = false end, { desc = "Re-enable autoformat-on-save", }) end, }