1
0
Fork 0
mirror of https://github.com/nix-community/nixvim.git synced 2025-11-09 03:56:05 +01:00

plugins/lazy: migrate to mkNeovimPlugin

This commit is contained in:
Gaetan Lepage 2025-10-19 10:52:51 +02:00 committed by Gaétan Lepage
parent 429dc19c28
commit 9a057ef01a

View file

@ -1,161 +1,134 @@
{ {
lib, lib,
helpers,
config,
pkgs, pkgs,
... ...
}: }:
with lib; lib.nixvim.plugins.mkNeovimPlugin {
let name = "lazy";
cfg = config.plugins.lazy; package = "lazy-nvim";
lazyPlugins = cfg.plugins; maintainers = [ ];
processPlugin = hasSettings = false;
plugin: callSetup = false;
dependencies = [
"git"
];
extraOptions =
let let
mkEntryFromDrv = inherit (lib.nixvim) defaultNullOpts;
p:
if lib.isDerivation p then
{
name = "${lib.getName p}";
path = p;
}
else
{
name = "${lib.getName p.pkg}";
path = p.pkg;
};
processDependencies =
if plugin ? dependencies && plugin.dependencies != null then
builtins.concatMap processPlugin plugin.dependencies
else
[ ];
in in
[ (mkEntryFromDrv plugin) ] ++ processDependencies; {
processedPlugins = builtins.concatLists (builtins.map processPlugin lazyPlugins);
lazyPath = pkgs.linkFarm "lazy-plugins" processedPlugins;
in
{
options = {
plugins.lazy = {
enable = mkEnableOption "lazy.nvim";
package = lib.mkPackageOption pkgs [
"vimPlugins"
"lazy-nvim"
] { };
performance.rtp = { performance.rtp = {
reset = helpers.defaultNullOpts.mkBool true '' reset = defaultNullOpts.mkBool true ''
reset the runtime path to $VIMRUNTIME and your config directory. reset the runtime path to $VIMRUNTIME and your config directory.
''; '';
paths = helpers.defaultNullOpts.mkListOf lib.types.str [ ] '' paths = defaultNullOpts.mkListOf lib.types.str [ ] ''
add any custom paths here that you want to includes in the rtp add any custom paths here that you want to includes in the rtp
''; '';
disabled_plugins = helpers.defaultNullOpts.mkListOf lib.types.str [ ] '' disabled_plugins = defaultNullOpts.mkListOf lib.types.str [ ] ''
list any plugins you want to disable here list any plugins you want to disable here
''; '';
}; };
plugins = plugins =
with types;
let let
pluginType = either package (submodule { inherit (lib) mkOption types;
options = { inherit (lib.nixvim)
dir = helpers.mkNullOrOption str "A directory pointing to a local plugin"; mkNullOrOption
mkNullOrLuaFn
mkNullOrStrLuaFnOr
;
pluginType =
with types;
either package (submodule {
options = {
dir = mkNullOrOption str "A directory pointing to a local plugin";
pkg = mkOption { pkg = mkOption {
type = package; type = package;
description = "Vim plugin to install"; description = "Vim plugin to install";
}; };
name = helpers.mkNullOrOption str "Name of the plugin to install"; name = mkNullOrOption str "Name of the plugin to install";
dev = helpers.defaultNullOpts.mkBool false '' dev = defaultNullOpts.mkBool false ''
When true, a local plugin directory will be used instead. When true, a local plugin directory will be used instead.
See config.dev See config.dev
''; '';
lazy = helpers.defaultNullOpts.mkBool true '' lazy = defaultNullOpts.mkBool true ''
When true, the plugin will only be loaded when needed. When true, the plugin will only be loaded when needed.
Lazy-loaded plugins are automatically loaded when their Lua modules are required, Lazy-loaded plugins are automatically loaded when their Lua modules are required,
or when one of the lazy-loading handlers triggers or when one of the lazy-loading handlers triggers
''; '';
enabled = helpers.defaultNullOpts.mkStrLuaFnOr types.bool "`true`" '' enabled = defaultNullOpts.mkStrLuaFnOr bool "`true`" ''
When false then this plugin will not be included in the spec. (accepts fun():boolean) When false then this plugin will not be included in the spec. (accepts fun():boolean)
''; '';
cond = helpers.defaultNullOpts.mkStrLuaFnOr types.bool "`true`" '' cond = defaultNullOpts.mkStrLuaFnOr bool "`true`" ''
When false, or if the function returns false, When false, or if the function returns false,
then this plugin will not be loaded. Useful to disable some plugins in vscode, then this plugin will not be loaded. Useful to disable some plugins in vscode,
or firenvim for example. (accepts fun(LazyPlugin):boolean) or firenvim for example. (accepts fun(LazyPlugin):boolean)
''; '';
dependencies = helpers.mkNullOrOption (eitherRecursive str listOfPlugins) "Plugin dependencies"; dependencies = mkNullOrOption (eitherRecursive str listOfPlugins) "Plugin dependencies";
init = helpers.mkNullOrLuaFn "init functions are always executed during startup"; init = mkNullOrLuaFn "init functions are always executed during startup";
config = helpers.mkNullOrStrLuaFnOr (types.enum [ true ]) '' config = mkNullOrStrLuaFnOr (enum [ true ]) ''
config is executed when the plugin loads. config is executed when the plugin loads.
The default implementation will automatically run require(MAIN).setup(opts). The default implementation will automatically run require(MAIN).setup(opts).
Lazy uses several heuristics to determine the plugin's MAIN module automatically based on the plugin's name. Lazy uses several heuristics to determine the plugin's MAIN module automatically based on the plugin's name.
See also opts. To use the default implementation without opts set config to true. See also opts. To use the default implementation without opts set config to true.
''; '';
main = helpers.mkNullOrOption str '' main = mkNullOrOption str ''
You can specify the main module to use for config() and opts(), You can specify the main module to use for config() and opts(),
in case it can not be determined automatically. See config() in case it can not be determined automatically. See config()
''; '';
submodules = helpers.defaultNullOpts.mkBool true '' submodules = defaultNullOpts.mkBool true ''
When false, git submodules will not be fetched. When false, git submodules will not be fetched.
Defaults to true Defaults to true
''; '';
event = event = mkNullOrOption (maybeRaw (either str (listOf str))) ''
with lib.types; Lazy-load on event. Events can be specified as BufEnter or with a pattern like BufEnter *.lua"
helpers.mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on event. Events can be specified as BufEnter or with a pattern like BufEnter *.lua"; '';
cmd = cmd = mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on command";
with lib.types;
helpers.mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on command";
ft = ft = mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on filetype";
with lib.types;
helpers.mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on filetype";
keys = keys = mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on key mapping";
with lib.types;
helpers.mkNullOrOption (maybeRaw (either str (listOf str))) "Lazy-load on key mapping";
module = helpers.mkNullOrOption (enum [ false ]) '' module = mkNullOrOption (enum [ false ]) ''
Do not automatically load this Lua module when it's required somewhere Do not automatically load this Lua module when it's required somewhere
''; '';
priority = helpers.mkNullOrOption number '' priority = mkNullOrOption number ''
Only useful for start plugins (lazy=false) to force loading certain plugins first. Only useful for start plugins (lazy=false) to force loading certain plugins first.
Default priority is 50. It's recommended to set this to a high number for colorschemes. Default priority is 50. It's recommended to set this to a high number for colorschemes.
''; '';
optional = helpers.defaultNullOpts.mkBool false '' optional = defaultNullOpts.mkBool false ''
When a spec is tagged optional, it will only be included in the final spec, When a spec is tagged optional, it will only be included in the final spec,
when the same plugin has been specified at least once somewhere else without optional. when the same plugin has been specified at least once somewhere else without optional.
This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part
of the user's plugins of the user's plugins
''; '';
opts = opts = mkNullOrOption (maybeRaw (attrsOf anything)) ''
with lib.types;
helpers.mkNullOrOption (maybeRaw (attrsOf anything)) ''
opts should be a table (will be merged with parent specs), opts should be a table (will be merged with parent specs),
return a table (replaces parent specs) or should change a table. return a table (replaces parent specs) or should change a table.
The table will be passed to the Plugin.config() function. The table will be passed to the Plugin.config() function.
Setting this value will imply Plugin.config() Setting this value will imply Plugin.config()
''; '';
}; };
}); });
listOfPlugins = types.listOf pluginType; listOfPlugins = types.listOf pluginType;
in in
@ -165,18 +138,39 @@ in
description = "List of plugins"; description = "List of plugins";
}; };
}; };
};
config = mkIf cfg.enable { extraConfig = cfg: {
extraPlugins = [ cfg.package ]; plugins.lazy.luaConfig.content =
dependencies.git.enable = lib.mkDefault true;
extraConfigLua =
let let
processPlugin =
plugin:
let
mkEntryFromDrv =
p:
if lib.isDerivation p then
{
name = "${lib.getName p}";
path = p;
}
else
{
name = "${lib.getName p.pkg}";
path = p.pkg;
};
processDependencies =
if plugin ? dependencies && plugin.dependencies != null then
builtins.concatMap processPlugin plugin.dependencies
else
[ ];
in
[ (mkEntryFromDrv plugin) ] ++ processDependencies;
processedPlugins = builtins.concatLists (builtins.map processPlugin cfg.plugins);
lazyPath = pkgs.linkFarm "lazy-plugins" processedPlugins;
pluginToLua = pluginToLua =
plugin: plugin:
if isDerivation plugin then if lib.isDerivation plugin then
{ dir = "${lazyPath}/${lib.getName plugin}"; } { dir = "${lazyPath}/${lib.getName plugin}"; }
else else
{ {
@ -202,8 +196,11 @@ in
submodules submodules
; ;
dependencies = helpers.ifNonNull' plugin.dependencies ( dependencies = lib.nixvim.ifNonNull' plugin.dependencies (
if isList plugin.dependencies then (pluginListToLua plugin.dependencies) else plugin.dependencies if lib.isList plugin.dependencies then
(pluginListToLua plugin.dependencies)
else
plugin.dependencies
); );
dir = dir =
@ -214,9 +211,9 @@ in
plugins = pluginListToLua cfg.plugins; plugins = pluginListToLua cfg.plugins;
packedPlugins = if length plugins == 1 then head plugins else plugins; packedPlugins = if lib.length plugins == 1 then lib.head plugins else plugins;
in in
mkIf (cfg.plugins != [ ]) '' lib.mkIf (cfg.plugins != [ ]) ''
require('lazy').setup( require('lazy').setup(
{ {
dev = { dev = {