nvf/modules/wrapper/lazy/config.nix

79 lines
1.8 KiB
Nix
Raw Normal View History

2024-06-25 15:16:49 +00:00
{
lib,
config,
...
}: let
2024-08-03 16:01:34 +00:00
inherit (builtins) toJSON typeOf head length;
2024-06-25 15:16:49 +00:00
inherit (lib.modules) mkIf;
2024-07-09 22:28:18 +00:00
inherit (lib.attrsets) mapAttrsToList;
2024-07-24 10:52:47 +00:00
inherit (lib.generators) mkLuaInline;
inherit (lib.strings) optionalString;
2024-07-09 22:28:18 +00:00
inherit (lib.nvim.lua) toLuaObject;
inherit (lib.nvim.dag) entryBefore;
2024-06-25 15:16:49 +00:00
cfg = config.vim.lazy;
2024-07-09 22:28:18 +00:00
2024-08-03 12:45:48 +00:00
toLuzLznKeySpec = {
desc,
noremap,
expr,
nowait,
ft,
2024-08-24 10:30:20 +00:00
key,
action,
lua,
2024-08-03 12:45:48 +00:00
mode,
}: {
2024-08-24 10:30:20 +00:00
"@1" = key;
"@2" =
if lua
then mkLuaInline action
else action;
2024-08-03 12:45:48 +00:00
inherit desc noremap expr nowait ft mode;
};
2024-07-24 10:52:47 +00:00
toLuaLznSpec = name: spec:
2024-08-03 12:45:48 +00:00
(removeAttrs spec ["package" "setupModule" "setupOpts" "keys"])
2024-07-24 10:52:47 +00:00
// {
"@1" = name;
2024-08-03 17:46:52 +00:00
before =
if spec.before != null
then
mkLuaInline ''
function()
${spec.before}
end
''
else null;
2024-08-03 17:48:13 +00:00
after =
if spec.setupModule == null && spec.after == null
then null
else
mkLuaInline ''
function()
${
optionalString (spec.setupModule != null)
"require(${toJSON spec.setupModule}).setup(${toLuaObject spec.setupOpts})"
}
${optionalString (spec.after != null) spec.after}
end
'';
2024-08-03 16:01:34 +00:00
keys =
if typeOf spec.keys == "list" && length spec.keys > 0 && typeOf (head spec.keys) == "set"
then map toLuzLznKeySpec spec.keys
else spec.keys;
2024-07-24 10:52:47 +00:00
};
lznSpecs = mapAttrsToList toLuaLznSpec cfg.plugins;
2024-06-25 15:16:49 +00:00
in {
config.vim = mkIf cfg.enable {
startPlugins = ["lz-n" "lzn-auto-require"];
2024-06-25 15:16:49 +00:00
2024-07-09 22:28:18 +00:00
optPlugins = mapAttrsToList (_: plugin: plugin.package) cfg.plugins;
luaConfigRC.lzn-load = entryBefore ["pluginConfigs"] ''
2024-07-09 22:28:18 +00:00
require('lz.n').load(${toLuaObject lznSpecs})
'';
2024-06-25 15:16:49 +00:00
};
}