mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
lib/plugins: extract common logic for package
options
Adds `mkPluginPackageModule`.
This commit is contained in:
parent
896f6be694
commit
690fc895b5
3 changed files with 58 additions and 72 deletions
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
@ -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
|
||||||
)
|
)
|
||||||
|
|
|
@ -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) ];
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue