nix-community.nixvim/plugins/by-name/package-info/default.nix
2025-01-20 14:23:55 +01:00

122 lines
3.3 KiB
Nix

{
lib,
pkgs,
config,
...
}:
let
inherit (lib.nixvim) defaultNullOpts;
in
lib.nixvim.plugins.mkNeovimPlugin {
name = "package-info";
packPathName = "package-info.nvim";
package = "package-info-nvim";
maintainers = [ lib.maintainers.khaneliman ];
settingsOptions = {
autostart = defaultNullOpts.mkBool true ''
Whether to autostart when `package.json` is opened.
'';
hide_up_to_date = defaultNullOpts.mkBool false ''
It hides up to date versions when displaying virtual text.
'';
hide_unstable_versions = defaultNullOpts.mkBool false ''
It hides unstable versions from version list e.g `next-11.1.3-canary3`.
'';
package_manager = defaultNullOpts.mkStr "npm" ''
Can be `npm`, `yarn`, or `pnpm`.
The plugin will try to auto-detect the package manager based on
`yarn.lock` or `package-lock.json`.
If none are found it will use the provided one, if nothing is provided it will use `npm`
'';
colors =
defaultNullOpts.mkNullableWithRaw
(
with lib.types;
submodule {
freeformType = with types; attrsOf anything;
options = {
up_to_date = defaultNullOpts.mkStr "#3C4048" ''
Text color for up to date dependency virtual text.
'';
outdated = defaultNullOpts.mkStr "#d19a66" ''
Text color for outdated dependency virtual text.
'';
invalid = defaultNullOpts.mkStr "#ee4b2b" ''
Text color for invalid dependency virtual text.
'';
};
}
)
{
up_to_date = "#3C4048";
outdated = "#d19a66";
invalid = "#ee4b2b";
}
"Colors of virtual text.";
icons =
defaultNullOpts.mkNullableWithRaw
(
with lib.types;
either anything (submodule {
freeformType = with types; attrsOf anything;
options = {
enable = defaultNullOpts.mkBool true ''
Whether to display icons.
'';
style = defaultNullOpts.mkAttrsOf anything {
up_to_date = "| ";
outdated = "| ";
invalid = "| ";
} "Icons for different dependency states.";
};
})
)
{
enable = true;
style = {
up_to_date = "| ";
outdated = "| ";
invalid = "| ";
};
}
"Icons for virtual text.";
};
extraOptions = {
enableTelescope = lib.mkEnableOption "the `package_info` telescope picker.";
packageManagerPackage =
lib.mkPackageOption pkgs
[
"nodePackages"
"npm"
]
{
nullable = true;
default = null;
example = "pkgs.nodePackages.npm";
};
};
extraConfig = cfg: {
assertions = lib.nixvim.mkAssertions "plugins.package-info" {
assertion = cfg.enableTelescope -> config.plugins.telescope.enable;
message = ''
The telescope integration needs telescope to function as intended.
'';
};
extraPackages = [ cfg.packageManagerPackage ];
plugins.telescope.enabledExtensions = lib.mkIf cfg.enableTelescope [ "package_info" ];
};
}