mirror of
https://github.com/NotAShelf/nvf.git
synced 2026-06-24 13:24:39 +00:00
wrapper/lazy: allow conditionally calling setup() for plugins
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I644a46924f6a7fbb46e507d2599f03b06a6a6964
This commit is contained in:
parent
fc0ec55fc1
commit
bf7fd28d79
2 changed files with 60 additions and 18 deletions
|
|
@ -29,7 +29,7 @@
|
||||||
then spec.package.pname
|
then spec.package.pname
|
||||||
else spec.package.name;
|
else spec.package.name;
|
||||||
in
|
in
|
||||||
(removeAttrs spec ["package" "setupModule" "setupOpts" "keys"])
|
(removeAttrs spec ["package" "setupModule" "setupOpts" "setupCond" "keys"])
|
||||||
// {
|
// {
|
||||||
"@1" =
|
"@1" =
|
||||||
if spec.package != null && packageName != name && spec.load == null
|
if spec.package != null && packageName != name && spec.load == null
|
||||||
|
|
@ -73,14 +73,20 @@
|
||||||
after =
|
after =
|
||||||
if spec.setupModule == null && spec.after == null
|
if spec.setupModule == null && spec.after == null
|
||||||
then null
|
then null
|
||||||
else
|
else let
|
||||||
|
setupCall = "require(${toJSON spec.setupModule}).setup(${toLuaObject spec.setupOpts})";
|
||||||
|
conditionalSetup =
|
||||||
|
if spec.setupCond != null
|
||||||
|
then ''
|
||||||
|
if (${spec.setupCond}) then
|
||||||
|
${setupCall}
|
||||||
|
end''
|
||||||
|
else setupCall;
|
||||||
|
in
|
||||||
mkLuaInline ''
|
mkLuaInline ''
|
||||||
function()
|
function()
|
||||||
${optionalString (spec.beforeSetup != null) spec.beforeSetup}
|
${optionalString (spec.beforeSetup != null) spec.beforeSetup}
|
||||||
${
|
${optionalString (spec.setupModule != null) conditionalSetup}
|
||||||
optionalString (spec.setupModule != null)
|
|
||||||
"require(${toJSON spec.setupModule}).setup(${toLuaObject spec.setupOpts})"
|
|
||||||
}
|
|
||||||
${optionalString (spec.after != null) spec.after}
|
${optionalString (spec.after != null) spec.after}
|
||||||
end
|
end
|
||||||
'';
|
'';
|
||||||
|
|
@ -105,11 +111,19 @@
|
||||||
|
|
||||||
pluginPackages = filter (x: x != null) (mapAttrsToList (_: plugin: plugin.package) cfg.plugins);
|
pluginPackages = filter (x: x != null) (mapAttrsToList (_: plugin: plugin.package) cfg.plugins);
|
||||||
|
|
||||||
specToNotLazyConfig = _: spec: ''
|
specToNotLazyConfig = _: spec: let
|
||||||
|
setupCall = "require(${toJSON spec.setupModule}).setup(${toLuaObject spec.setupOpts})";
|
||||||
|
conditionalSetup =
|
||||||
|
if spec.setupCond != null
|
||||||
|
then ''
|
||||||
|
if (${spec.setupCond}) then
|
||||||
|
${setupCall}
|
||||||
|
end''
|
||||||
|
else setupCall;
|
||||||
|
in ''
|
||||||
do
|
do
|
||||||
${optionalString (spec.before != null) spec.before}
|
${optionalString (spec.before != null) spec.before}
|
||||||
${optionalString (spec.setupModule != null)
|
${optionalString (spec.setupModule != null) conditionalSetup}
|
||||||
"require(${toJSON spec.setupModule}).setup(${toLuaObject spec.setupOpts})"}
|
|
||||||
${optionalString (spec.after != null) spec.after}
|
${optionalString (spec.after != null) spec.after}
|
||||||
end
|
end
|
||||||
'';
|
'';
|
||||||
|
|
|
||||||
|
|
@ -16,9 +16,10 @@
|
||||||
default = null;
|
default = null;
|
||||||
description = "Action to trigger.";
|
description = "Action to trigger.";
|
||||||
};
|
};
|
||||||
|
|
||||||
lua = mkBool false ''
|
lua = mkBool false ''
|
||||||
If true, `action` is considered to be lua code.
|
If true, `action` is considered to be lua code. Thus, it will not be
|
||||||
Thus, it will not be wrapped in `""`.
|
wrapped in `""`.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
desc = mkOption {
|
desc = mkOption {
|
||||||
|
|
@ -70,7 +71,7 @@
|
||||||
description = ''
|
description = ''
|
||||||
Plugin package.
|
Plugin package.
|
||||||
|
|
||||||
If null, a custom load function must be provided
|
If `null`, a custom load function must be provided
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -90,29 +91,56 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
setupOpts = mkOption {
|
setupOpts = mkOption {
|
||||||
type = attrsOf anything;
|
type = either (attrsOf anything) luaInline;
|
||||||
default = {};
|
default = {};
|
||||||
description = "Options to pass to the setup function";
|
description = ''
|
||||||
|
Options to pass to the setup function.
|
||||||
|
|
||||||
|
Accepts either an attribute set or a raw Lua expression via
|
||||||
|
`lib.mkLuaInline`. When set to a `luaInline` value, the expression
|
||||||
|
is passed verbatim as the argument to `setup()`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
setupCond = mkOption {
|
||||||
|
type = nullOr lines;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
A Lua expression used as the condition for calling setup. When set,
|
||||||
|
the setup call is wrapped as `if (condition) then ... end`, allowing
|
||||||
|
runtime-conditional plugin initialization.
|
||||||
|
|
||||||
|
For example, `"not vim.g.vscode"` will only call setup when not running
|
||||||
|
inside VSCode with vscode-neovim.
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# lz.n options
|
# lz.n options
|
||||||
|
|
||||||
enabled = mkOption {
|
enabled = mkOption {
|
||||||
type = nullOr (either bool luaInline);
|
type = nullOr (either bool luaInline);
|
||||||
default = null;
|
default = null;
|
||||||
description = "When false, or if the lua function returns false, this plugin will not be included in the spec";
|
description = ''
|
||||||
|
When `false`, or if the Lua function returns false, this plugin will
|
||||||
|
not be included in the spec.
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeAll = mkOption {
|
beforeAll = mkOption {
|
||||||
type = nullOr lines;
|
type = nullOr lines;
|
||||||
default = null;
|
default = null;
|
||||||
description = "Lua code to run before any plugins are loaded. This will be wrapped in a function.";
|
description = ''
|
||||||
|
Lua code to run before any plugins are loaded. This will be wrapped
|
||||||
|
in a function.
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
before = mkOption {
|
before = mkOption {
|
||||||
type = nullOr lines;
|
type = nullOr lines;
|
||||||
default = null;
|
default = null;
|
||||||
description = "Lua code to run before plugin is loaded. This will be wrapped in a function.";
|
description = ''
|
||||||
|
Lua code to run before plugin is loaded. This will be wrapped in a
|
||||||
|
function.
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
after = mkOption {
|
after = mkOption {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue