2023-11-03 20:18:24 +05:30
|
|
|
{
|
|
|
|
lib,
|
2023-11-06 15:04:08 +01:00
|
|
|
helpers,
|
|
|
|
config,
|
|
|
|
pkgs,
|
2023-11-03 20:18:24 +05:30
|
|
|
...
|
|
|
|
}:
|
|
|
|
with lib; let
|
|
|
|
cfg = config.plugins.conform-nvim;
|
|
|
|
in {
|
|
|
|
options.plugins.conform-nvim =
|
|
|
|
helpers.extraOptionsOptions
|
|
|
|
// {
|
|
|
|
enable = mkEnableOption "conform-nvim";
|
|
|
|
|
|
|
|
package = helpers.mkPackageOption "conform-nvim" pkgs.vimPlugins.conform-nvim;
|
|
|
|
|
|
|
|
formattersByFt =
|
|
|
|
helpers.defaultNullOpts.mkNullable (types.attrsOf types.anything)
|
|
|
|
"see documentation"
|
|
|
|
''
|
|
|
|
```nix
|
|
|
|
# Map of filetype to formatters
|
|
|
|
formattersByFt =
|
|
|
|
{
|
|
|
|
lua = [ "stylua" ];
|
|
|
|
# Conform will run multiple formatters sequentially
|
|
|
|
python = [ "isort" "black" ];
|
|
|
|
# Use a sub-list to run only the first available formatter
|
|
|
|
javascript = [ [ "prettierd" "prettier" ] ];
|
|
|
|
# Use the "*" filetype to run formatters on all filetypes.
|
|
|
|
"*" = [ "codespell" ];
|
|
|
|
# Use the "_" filetype to run formatters on filetypes that don't
|
|
|
|
# have other formatters configured.
|
|
|
|
"_" = [ "trim_whitespace" ];
|
|
|
|
};
|
|
|
|
```
|
|
|
|
'';
|
|
|
|
|
|
|
|
formatOnSave =
|
|
|
|
helpers.defaultNullOpts.mkNullable (types.submodule {
|
|
|
|
options = {
|
|
|
|
lspFallback = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = true;
|
|
|
|
description = "See :help conform.format for details.";
|
|
|
|
};
|
|
|
|
timeoutMs = mkOption {
|
|
|
|
type = types.int;
|
|
|
|
default = 500;
|
|
|
|
description = "See :help conform.format for details.";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
})
|
|
|
|
"see documentation"
|
|
|
|
''
|
|
|
|
If this is set, Conform will run the formatter on save.
|
|
|
|
It will pass the table to conform.format().
|
|
|
|
This can also be a function that returns the table.
|
|
|
|
See :help conform.format for details.
|
|
|
|
'';
|
|
|
|
|
|
|
|
formatAfterSave =
|
|
|
|
helpers.defaultNullOpts.mkNullable (types.submodule {
|
|
|
|
options = {
|
|
|
|
lspFallback = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = true;
|
|
|
|
description = "See :help conform.format for details.";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
})
|
|
|
|
"see documentation"
|
|
|
|
''
|
|
|
|
If this is set, Conform will run the formatter asynchronously after save.
|
|
|
|
It will pass the table to conform.format().
|
|
|
|
This can also be a function that returns the table.
|
|
|
|
'';
|
|
|
|
|
|
|
|
logLevel =
|
|
|
|
helpers.defaultNullOpts.mkEnumFirstDefault
|
|
|
|
["ERROR" "DEBUG" "INFO" "TRACE" "WARN" "OFF"]
|
|
|
|
"Set the log level. Use `:ConformInfo` to see the location of the log file.";
|
|
|
|
|
|
|
|
notifyOnError =
|
|
|
|
helpers.defaultNullOpts.mkBool true
|
|
|
|
"Conform will notify you when a formatter errors";
|
|
|
|
|
|
|
|
formatters =
|
|
|
|
helpers.defaultNullOpts.mkNullable (types.attrsOf types.anything)
|
|
|
|
"see documentation"
|
|
|
|
"Custom formatters and changes to built-in formatters";
|
|
|
|
};
|
|
|
|
|
|
|
|
config = let
|
|
|
|
setupOptions = with cfg;
|
|
|
|
{
|
|
|
|
formatters_by_ft = formattersByFt;
|
|
|
|
format_on_save = helpers.ifNonNull' formatOnSave {
|
|
|
|
lsp_fallback = formatOnSave.lspFallback;
|
|
|
|
timeout_ms = formatOnSave.timeoutMs;
|
|
|
|
};
|
|
|
|
format_after_save = helpers.ifNonNull' formatOnSave {
|
|
|
|
lsp_fallback = formatOnSave.lspFallback;
|
|
|
|
};
|
|
|
|
log_level = helpers.ifNonNull' logLevel (helpers.mkRaw "vim.log.levels.${logLevel}");
|
|
|
|
notify_on_error = notifyOnError;
|
|
|
|
inherit formatters;
|
|
|
|
}
|
|
|
|
// cfg.extraOptions;
|
|
|
|
in
|
|
|
|
mkIf cfg.enable {
|
|
|
|
extraPlugins = [cfg.package];
|
|
|
|
|
|
|
|
extraConfigLua = ''
|
|
|
|
require("conform").setup(${helpers.toLuaObject setupOptions})
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
}
|