lib/plugins: extract common logic for package options

Adds `mkPluginPackageModule`.
This commit is contained in:
Matt Sturgeon 2024-12-18 22:29:47 +00:00
parent 896f6be694
commit 690fc895b5
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
3 changed files with 58 additions and 72 deletions

View file

@ -45,12 +45,7 @@ let
]; ];
module = module =
{ { config, options, ... }:
config,
options,
pkgs,
...
}:
let let
cfg = lib.getAttrFromPath loc config; cfg = lib.getAttrFromPath loc config;
opts = lib.getAttrFromPath loc options; opts = lib.getAttrFromPath loc options;
@ -77,30 +72,6 @@ let
{ {
enable = lib.mkEnableOption packPathName; enable = lib.mkEnableOption packPathName;
lazyLoad = lib.nixvim.mkLazyLoadOption packPathName; lazyLoad = lib.nixvim.mkLazyLoadOption packPathName;
package =
if lib.isOption package then
package
else
lib.mkPackageOption pkgs packPathName {
default =
if builtins.isList package then
package
else
[
"vimPlugins"
package
];
};
packageDecorator = lib.mkOption {
type = lib.types.functionTo lib.types.package;
default = lib.id;
defaultText = lib.literalExpression "x: x";
description = ''
Additional transformations to apply to the final installed package.
The result of these transformations is **not** visible in the `package` option's value.
'';
internal = true;
};
} }
// lib.optionalAttrs hasSettings { // lib.optionalAttrs hasSettings {
settings = lib.nixvim.mkSettingsOption { settings = lib.nixvim.mkSettingsOption {
@ -126,12 +97,7 @@ let
lib.mkIf cfg.enable ( lib.mkIf cfg.enable (
lib.mkMerge ( lib.mkMerge (
[ [
{ { inherit extraPackages extraPlugins; }
inherit extraPackages;
extraPlugins = extraPlugins ++ [
(cfg.packageDecorator cfg.package)
];
}
(lib.optionalAttrs (isColorscheme && colorscheme != null) { (lib.optionalAttrs (isColorscheme && colorscheme != null) {
colorscheme = lib.mkDefault colorscheme; colorscheme = lib.mkDefault colorscheme;
@ -194,7 +160,10 @@ in
settingsPath = loc ++ [ "settings" ]; settingsPath = loc ++ [ "settings" ];
in in
imports imports
++ [ module ] ++ [
module
(lib.nixvim.plugins.utils.mkPluginPackageModule { inherit loc packPathName package; })
]
++ lib.optional deprecateExtraOptions ( ++ lib.optional deprecateExtraOptions (
lib.mkRenamedOptionModule (loc ++ [ "extraOptions" ]) settingsPath lib.mkRenamedOptionModule (loc ++ [ "extraOptions" ]) settingsPath
) )

View file

@ -51,12 +51,7 @@ let
}; };
module = module =
{ { config, options, ... }:
config,
options,
pkgs,
...
}:
let let
cfg = lib.getAttrFromPath loc config; cfg = lib.getAttrFromPath loc config;
opts = lib.getAttrFromPath loc options; opts = lib.getAttrFromPath loc options;
@ -74,30 +69,6 @@ let
options = lib.setAttrByPath loc ( options = lib.setAttrByPath loc (
{ {
enable = lib.mkEnableOption packPathName; enable = lib.mkEnableOption packPathName;
package =
if lib.isOption package then
package
else
lib.mkPackageOption pkgs packPathName {
default =
if builtins.isList package then
package
else
[
"vimPlugins"
package
];
};
packageDecorator = lib.mkOption {
type = lib.types.functionTo lib.types.package;
default = lib.id;
defaultText = lib.literalExpression "x: x";
description = ''
Additional transformations to apply to the final installed package.
The result of these transformations is **not** visible in the `package` option's value.
'';
internal = true;
};
} }
// settingsOption // settingsOption
// extraOptions // extraOptions
@ -106,10 +77,7 @@ let
config = lib.mkIf cfg.enable ( config = lib.mkIf cfg.enable (
lib.mkMerge [ lib.mkMerge [
{ {
inherit extraPackages; inherit extraPackages extraPlugins;
extraPlugins = extraPlugins ++ [
(cfg.packageDecorator cfg.package)
];
globals = lib.nixvim.applyPrefixToAttrs globalPrefix (cfg.settings or { }); globals = lib.nixvim.applyPrefixToAttrs globalPrefix (cfg.settings or { });
} }
(lib.optionalAttrs (isColorscheme && colorscheme != null) { (lib.optionalAttrs (isColorscheme && colorscheme != null) {
@ -130,7 +98,10 @@ in
settingsPath = loc ++ [ "settings" ]; settingsPath = loc ++ [ "settings" ];
in in
imports imports
++ [ module ] ++ [
module
(lib.nixvim.plugins.utils.mkPluginPackageModule { inherit loc packPathName package; })
]
++ lib.optional (deprecateExtraConfig && createSettingsOption) ( ++ lib.optional (deprecateExtraConfig && createSettingsOption) (
lib.mkRenamedOptionModule (loc ++ [ "extraConfig" ]) settingsPath lib.mkRenamedOptionModule (loc ++ [ "extraConfig" ]) settingsPath
) )

View file

@ -31,4 +31,50 @@
loc' = lib.toList (if isOrder then loc.content else loc); loc' = lib.toList (if isOrder then loc.content else loc);
in in
lib.setAttrByPath loc' (withOrder def); lib.setAttrByPath loc' (withOrder def);
mkPluginPackageModule =
{
loc,
packPathName,
package,
}:
# Return a module
{ config, pkgs, ... }:
let
cfg = lib.getAttrFromPath loc config;
in
{
options = lib.setAttrByPath loc {
package =
if lib.isOption package then
package
else
lib.mkPackageOption pkgs packPathName {
default =
if builtins.isList package then
package
else if builtins.isString package then
[
"vimPlugins"
package
]
else
throw "Unexpected `package` type for `${lib.showOption loc}` expected (option, list, or string), but found: ${builtins.typeOf package}";
};
packageDecorator = lib.mkOption {
type = lib.types.functionTo lib.types.package;
default = lib.id;
defaultText = lib.literalExpression "x: x";
description = ''
Additional transformations to apply to the final installed package.
The result of these transformations is **not** visible in the `package` option's value.
'';
internal = true;
};
};
config = lib.mkIf cfg.enable {
extraPlugins = [ (cfg.packageDecorator cfg.package) ];
};
};
} }