2024-07-28 22:30:11 +01:00
|
|
|
{ lib, helpers }:
|
2024-01-31 08:51:39 +01:00
|
|
|
with lib;
|
2024-06-21 15:52:58 +01:00
|
|
|
{
|
2024-02-12 16:13:44 +01:00
|
|
|
# TODO: DEPRECATED: use the `settings` option instead
|
2024-01-25 16:15:55 +01:00
|
|
|
extraOptionsOptions = {
|
|
|
|
extraOptions = mkOption {
|
|
|
|
default = { };
|
|
|
|
type = with types; attrsOf anything;
|
|
|
|
description = ''
|
|
|
|
These attributes will be added to the table parameter for the setup function.
|
2024-02-11 12:51:34 +00:00
|
|
|
Typically, it can override NixVim's default settings.
|
2024-01-25 16:15:55 +01:00
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
2024-01-31 08:51:39 +01:00
|
|
|
|
|
|
|
mkNeovimPlugin =
|
|
|
|
config:
|
|
|
|
{
|
|
|
|
name,
|
|
|
|
maintainers,
|
2024-02-20 21:20:59 +01:00
|
|
|
url ? defaultPackage.meta.homepage,
|
2024-01-31 08:51:39 +01:00
|
|
|
imports ? [ ],
|
2024-03-21 12:04:09 +01:00
|
|
|
description ? null,
|
2024-02-16 18:36:44 +01:00
|
|
|
# deprecations
|
2024-02-19 00:24:10 +01:00
|
|
|
deprecateExtraOptions ? false,
|
2024-02-16 18:36:44 +01:00
|
|
|
optionsRenamedToSettings ? [ ],
|
2024-03-12 22:30:45 +01:00
|
|
|
# colorscheme
|
|
|
|
isColorscheme ? false,
|
|
|
|
colorscheme ? name,
|
2024-01-31 08:51:39 +01:00
|
|
|
# options
|
|
|
|
originalName ? name,
|
|
|
|
defaultPackage,
|
|
|
|
settingsOptions ? { },
|
|
|
|
settingsExample ? null,
|
2024-06-21 15:52:58 +01:00
|
|
|
settingsDescription ? "Options provided to the `require('${luaName}')${setup}` function.",
|
2024-06-25 22:17:45 +01:00
|
|
|
hasSettings ? true,
|
2024-01-31 08:51:39 +01:00
|
|
|
extraOptions ? { },
|
|
|
|
# config
|
|
|
|
luaName ? name,
|
2024-06-21 15:52:58 +01:00
|
|
|
setup ? ".setup",
|
2024-01-31 08:51:39 +01:00
|
|
|
extraConfig ? cfg: { },
|
|
|
|
extraPlugins ? [ ],
|
|
|
|
extraPackages ? [ ],
|
2024-02-16 18:36:33 +01:00
|
|
|
callSetup ? true,
|
2024-07-06 12:32:54 +01:00
|
|
|
installPackage ? true,
|
2024-03-08 11:44:10 +01:00
|
|
|
}:
|
|
|
|
let
|
|
|
|
namespace = if isColorscheme then "colorschemes" else "plugins";
|
|
|
|
in
|
|
|
|
{
|
2024-02-20 21:20:59 +01:00
|
|
|
meta = {
|
|
|
|
inherit maintainers;
|
|
|
|
nixvimInfo = {
|
2024-06-07 21:30:00 +01:00
|
|
|
inherit description url;
|
|
|
|
path = [
|
|
|
|
namespace
|
|
|
|
name
|
|
|
|
];
|
2024-05-05 19:39:35 +02:00
|
|
|
};
|
2024-02-20 21:20:59 +01:00
|
|
|
};
|
2024-01-31 08:51:39 +01:00
|
|
|
|
2024-02-16 18:36:44 +01:00
|
|
|
imports =
|
|
|
|
let
|
|
|
|
basePluginPath = [
|
|
|
|
namespace
|
|
|
|
name
|
|
|
|
];
|
2024-02-19 10:59:18 +01:00
|
|
|
settingsPath = basePluginPath ++ [ "settings" ];
|
2024-02-16 18:36:44 +01:00
|
|
|
in
|
|
|
|
imports
|
2024-02-19 00:24:10 +01:00
|
|
|
++ (optional deprecateExtraOptions (
|
|
|
|
mkRenamedOptionModule (basePluginPath ++ [ "extraOptions" ]) settingsPath
|
2024-02-16 18:36:44 +01:00
|
|
|
))
|
2024-08-13 09:23:17 -05:00
|
|
|
++ (nixvim.mkSettingsRenamedOptionModules basePluginPath settingsPath optionsRenamedToSettings);
|
2024-01-31 08:51:39 +01:00
|
|
|
|
2024-06-25 22:17:45 +01:00
|
|
|
options.${namespace}.${name} =
|
|
|
|
{
|
|
|
|
enable = mkEnableOption originalName;
|
2024-06-21 15:52:58 +01:00
|
|
|
|
2024-07-28 22:30:11 +01:00
|
|
|
package = helpers.mkPluginPackageOption originalName defaultPackage;
|
2024-06-25 22:17:45 +01:00
|
|
|
}
|
|
|
|
// optionalAttrs hasSettings {
|
2024-07-28 22:30:11 +01:00
|
|
|
settings = helpers.mkSettingsOption {
|
2024-06-21 15:52:58 +01:00
|
|
|
description = settingsDescription;
|
2024-06-25 22:17:45 +01:00
|
|
|
options = settingsOptions;
|
|
|
|
example = settingsExample;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
// extraOptions;
|
2024-01-31 08:51:39 +01:00
|
|
|
|
|
|
|
config =
|
|
|
|
let
|
|
|
|
cfg = config.${namespace}.${name};
|
2024-03-08 11:44:10 +01:00
|
|
|
extraConfigNamespace = if isColorscheme then "extraConfigLuaPre" else "extraConfigLua";
|
2024-01-31 08:51:39 +01:00
|
|
|
in
|
|
|
|
mkIf cfg.enable (mkMerge [
|
|
|
|
{
|
2024-07-06 12:32:54 +01:00
|
|
|
extraPlugins = (optional installPackage cfg.package) ++ extraPlugins;
|
2024-01-31 08:51:39 +01:00
|
|
|
inherit extraPackages;
|
2024-07-21 20:59:16 +03:00
|
|
|
}
|
|
|
|
(optionalAttrs callSetup {
|
|
|
|
${extraConfigNamespace} = ''
|
2024-07-28 22:30:11 +01:00
|
|
|
require('${luaName}')${setup}(${optionalString (cfg ? settings) (helpers.toLuaObject cfg.settings)})
|
2024-01-31 08:51:39 +01:00
|
|
|
'';
|
2024-07-21 20:59:16 +03:00
|
|
|
})
|
2024-05-28 21:22:35 +02:00
|
|
|
(optionalAttrs (isColorscheme && (colorscheme != null)) { colorscheme = mkDefault colorscheme; })
|
2024-01-31 08:51:39 +01:00
|
|
|
(extraConfig cfg)
|
|
|
|
]);
|
|
|
|
};
|
2024-01-25 16:15:55 +01:00
|
|
|
}
|