1
0
Fork 0
mirror of https://github.com/nix-community/nixvim.git synced 2025-11-08 19:46:06 +01:00
nixvim/plugins/by-name/conform-nvim/auto-install.nix
saygo-png fd0c423550 plugins/conform-nvim: add automatic installation of formatters
Signed-off-by: saygo-png <saygo.mail@proton.me>
2025-09-20 21:58:47 +00:00

78 lines
2.1 KiB
Nix

{
pkgs,
lib,
...
}:
let
inherit (lib) elem throwIfNot;
inherit (builtins)
filter
isString
isAttrs
attrValues
attrNames
concatMap
partition
;
inherit (import ./formatter-packages.nix { inherit pkgs lib; }) sType formatter-packages;
sTypeList = attrValues sType;
isSTypeAttrSet = x: lib.elem (x.mark or null) sTypeList;
in
rec {
cleanMaybePackageList = filter (x: !isSTypeAttrSet x);
getPackageByName =
{ configuredFormatters, overrides }:
name:
let
permittedNames = attrNames configuredFormatters;
isSType = x: elem x sTypeList;
notFoundMsg = ''
A package for the conform-nvim formatter '${name}' could not be found.
It is not a user defined formatter. Is the formatter name correct?
'';
maybePackage =
overrides.${name} or formatter-packages.${name} or pkgs.${name}
or (throwIfNot (elem name permittedNames) notFoundMsg null);
in
if isSType maybePackage then
{
inherit name;
mark = maybePackage;
}
else
maybePackage;
mkWarnsFromMaybePackageList =
opts: list:
let
mkWarn =
{ name, mark }:
lib.nixvim.mkWarnings "conform-nvim" [
{
when = true;
message = ''
You have enabled the '${name}' formatter that relies on a package marked '${mark}'.
Because of that it will not be installed. To disable this warning, explicitly disable installing the package
by setting the '${opts.autoInstall.overrides}.${name}' option to 'null'. You can also disable
all warnings related to packages not installed by 'autoInstall' with '${opts.autoInstall.enableWarnings}'.
'';
}
];
in
concatMap mkWarn (filter isSTypeAttrSet list);
collectFormatters =
formatters:
let
partitioned = lib.pipe formatters [
lib.flatten
(filter (x: isString x || isAttrs x))
(partition isString)
];
in
lib.optionals (formatters != [ ]) (
partitioned.right ++ concatMap (fmts: collectFormatters (attrValues fmts)) partitioned.wrong
);
}