{ helpers, pkgs, ... }: { plugins.conform-nvim = { enable = true; settings = { format_after_save = '' function(bufnr) if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then return end if not slow_format_filetypes[vim.bo[bufnr].filetype] then return end return { lsp_fallback = true } end ''; formatters_by_ft = { python = [ "black" ]; c = [ "clang-format" ]; cpp = [ "clang-format" ]; cmake = [ "cmake_format" ]; nix = [ "nixfmt" ]; # Standalone scalafmt is too slow, so we use it as a fallback scala = helpers.mkRaw '' { scalafmt, lsp_format = "prefer" } ''; toml = [ "taplo" ]; yaml = [ "yq" ]; json = [ "jq" ]; }; }; }; extraPackages = with pkgs; [ black clang-tools cmake-format jq nixfmt-rfc-style scalafmt taplo yq ]; }