Improve option formatting.

This commit is contained in:
Kevin Baensch 2025-05-03 21:18:54 +02:00
parent 9bceefd156
commit dd0500a269
Signed by: derped
GPG key ID: C0F1D326C7626543

View file

@ -1,74 +1,115 @@
{ lib, pkgs, ... }: {
lib,
pkgs,
...
}:
let let
mkOption = lib.mkOption; mkOption = lib.mkOption;
types = lib.types; types = lib.types;
vPlugFunctionType = types.mkOptionType { vPlugFunctionType = types.mkOptionType {
name = "vPlugFunction"; name = "vPlugFunction";
description = "function taking vimPlugins and returning plugin or plugin list"; description = "function taking vimPlugins and returning plugin or plugin list";
check = builtins.isFunction; check = builtins.isFunction;
merge = lib.mergeOneOption; merge = lib.mergeOneOption;
}; };
keyBind = ( keyBind = (
{ ... }: { ... }:
{ {
options = { options = {
bind = mkOption { bind = mkOption {
type = types.str; type = types.str;
default = ""; default = "";
description = ''The keys to bind.''; description = ''
The keys to bind.
'';
}; };
cmd = mkOption { cmd = mkOption {
type = with types; nullOr str; type = with types; nullOr str;
default = null; default = null;
description = ''The command to execute. If this is a lua function set cmdIsFunction to true.''; description = ''
The command to execute. If this is a lua function set cmdIsFunction to true.
'';
}; };
cmdIsFunction = mkOption { cmdIsFunction = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = ''Needs to be set to true if cmd is a lua function.''; description = ''
Needs to be set to true if cmd is a lua function.
'';
}; };
opts = mkOption { opts = mkOption {
type = with types; nullOr attrs; type = with types; nullOr attrs;
default = null; default = null;
description = ''Additional named parameters passed to the keybind function.''; description = ''
Additional named parameters passed to the keybind function.
'';
}; };
}; };
} }
); );
plugin = ( plugin = (
{ ... }: { ... }:
{ {
options = { options = {
short = mkOption { short = mkOption {
type = with types; nullOr str; type = with types; nullOr str;
default = null; default = null;
description = ''Short plugin url. (installation is handled by lazy.nvim)''; description = ''
Short plugin url. (installation is handled by lazy.nvim)
'';
}; };
dir = mkOption { dir = mkOption {
type = types.nullOr (vPlugFunctionType); type = types.nullOr (vPlugFunctionType);
default = null; default = null;
description = ''A vim plugin package or a path pointing to a local plugin.''; description = ''
A vim plugin package or a path pointing to a local plugin.
'';
}; };
url = mkOption { url = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''A custom git url where the plugin is hosted. (installation is handled by lazy.nvim)''; description = ''
A custom git url where the plugin is hosted. (installation is handled by lazy.nvim)
'';
}; };
name = mkOption { name = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''A custom name for the plugin used for the local plugin directory and as the display name.''; description = ''
A custom name for the plugin used for the local plugin directory and as the display name.
'';
}; };
dev = mkOption { dev = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = ''When `true`, a local plugin directory will be used instead. See config.dev.''; description = ''
When `true`, a local plugin directory will be used instead. See config.dev.
'';
}; };
lazy = mkOption { lazy = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = ''When true, the plugin will only be loaded when needed. Lazy-loaded plugins are automatically loaded when their Lua modules are required, or when one of the lazy-loading handlers trigger''; description = ''
When `true`, the plugin will only be loaded when needed.
Lazy-loaded plugins are automatically loaded when their Lua modules are required,
or when one of the lazy-loading handlers trigger
'';
}; };
enabled = mkOption { enabled = mkOption {
type = type =
with types; with types;
@ -77,8 +118,11 @@ let
str str
]); ]);
default = null; default = null;
description = ''When false, or if the function returns false, then this plugin will not be included in the spec.''; description = ''
When false, or if the function returns false, then this plugin will not be included in the spec.
'';
}; };
cond = mkOption { cond = mkOption {
type = type =
with types; with types;
@ -87,23 +131,36 @@ let
str str
]); ]);
default = null; default = null;
description = ''When false, or if the function returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example.''; description = ''
When false, or if the function returns false, then this plugin will not be loaded. Useful to disable some plugins in vscode, or firenvim for example.
'';
}; };
dependencies = mkOption { dependencies = mkOption {
type = types.nullOr (vPlugFunctionType); type = types.nullOr (vPlugFunctionType);
default = null; default = null;
description = ''A list of plugin names or plugin specs that should be loaded when the plugin loads. Dependencies are always lazy-loaded unless specified otherwise. When specifying a name, make sure the plugin spec has been defined somewhere else.''; description = ''
A list of plugin names or plugin specs that should be loaded when the plugin loads.
Dependencies are always lazy-loaded unless specified otherwise.
When specifying a name, make sure the plugin spec has been defined somewhere else.
'';
}; };
init = mkOption { init = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''init functions are always executed during startup''; description = ''init functions are always executed during startup'';
}; };
opts = mkOption { opts = mkOption {
type = types.nullOr types.attrs; type = types.nullOr types.attrs;
default = null; default = null;
description = ''opts should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table. The table will be passed to the Plugin.config() function. Setting this value will imply Plugin.config()''; description = ''
opts should be a table (will be merged with parent specs), return a table (replaces parent specs) or should change a table.
The table will be passed to the Plugin.config() function. Setting this value will imply Plugin.config()
'';
}; };
config = mkOption { config = mkOption {
type = type =
with types; with types;
@ -112,83 +169,140 @@ let
str str
]); ]);
default = null; default = null;
description = ''config is executed when the plugin loads. The default implementation will automatically run require(MAIN).setup(opts). Lazy uses several heuristics to determine the plugin's MAIN module automatically based on the plugin's name. See also opts. To use the default implementation without opts set config to true.''; description = ''
config is executed when the plugin loads.
The default implementation will automatically run require(MAIN).setup(opts).
Lazy uses several heuristics to determine the plugin's MAIN module automatically based on the plugin's name.
See also opts. To use the default implementation without opts set config to true.
'';
}; };
main = mkOption { main = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''You can specify the main module to use for config() and opts(), in case it can not be determined automatically. See config()''; description = ''
You can specify the main module to use for config() and opts(), in case it can not be determined automatically. See config()
'';
}; };
build = mkOption { build = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''build is executed when a plugin is installed or updated. Before running build, a plugin is first loaded. If it's a string it will be ran as a shell command. When prefixed with : it is a Neovim command. You can also specify a list to executed multiple build commands. Some plugins provide their own build.lua which is automatically used by lazy. So no need to specify a build step for those plugins.''; description = ''
Build is executed when a plugin is installed or updated.
Before running build, a plugin is first loaded.
If it's a string it will be ran as a shell command.
When prefixed with : it is a Neovim command.
You can also specify a list to executed multiple build commands.
Some plugins provide their own build.lua which is automatically used by lazy.
So no need to specify a build step for those plugins.
'';
}; };
branch = mkOption { branch = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''Branch of the repository''; description = ''
Branch of the repository
'';
}; };
tag = mkOption { tag = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''Tag of the repository''; description = ''
Tag of the repository
'';
}; };
commit = mkOption { commit = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''Commit of the repository''; description = ''
Commit of the repository
'';
}; };
version = mkOption { version = mkOption {
type = types.nullOr types.str; type = types.nullOr types.str;
default = null; default = null;
description = ''Version to use from the repository. Full Semver ranges are supported.''; description = ''
Version to use from the repository. Full Semver ranges are supported.
'';
}; };
pin = mkOption { pin = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = ''When true, this plugin will not be included in updates.''; description = ''
When true, this plugin will not be included in updates.
'';
}; };
submodules = mkOption { submodules = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = ''When false, git submodules will not be fetched. Defaults to true if unset/null.''; description = ''
When false, git submodules will not be fetched. Defaults to true if unset/null.
'';
}; };
event = mkOption { event = mkOption {
type = with types; nullOr (listOf str); type = with types; nullOr (listOf str);
default = null; default = null;
description = ''Lazy-load on event. Events can be specified as BufEnter or with a pattern like BufEnter *.lua''; description = ''
Lazy-load on event. Events can be specified as BufEnter or with a pattern like BufEnter *.lua
'';
}; };
cmd = mkOption { cmd = mkOption {
type = with types; nullOr (listOf str); type = with types; nullOr (listOf str);
default = null; default = null;
description = ''Lazy-load on command''; description = ''
Lazy-load on command
'';
}; };
ft = mkOption { ft = mkOption {
type = with types; nullOr (listOf str); type = with types; nullOr (listOf str);
default = null; default = null;
description = ''Lazy-load on filetype''; description = ''
Lazy-load on filetype
'';
}; };
keys = mkOption { keys = mkOption {
# TODO: update; # TODO: update;
type = with types; nullOr (listOf (submodule keyBind)); type = with types; nullOr (listOf (submodule keyBind));
default = null; default = null;
description = ''Lazy-load on key mapping.''; description = ''
Lazy-load on key mapping.
'';
}; };
module = mkOption { module = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = ''Do not automatically load this Lua module when it's required somewhere''; description = ''
Do not automatically load this Lua module when it's required somewhere
'';
}; };
priority = mkOption { priority = mkOption {
type = types.nullOr types.number; type = types.nullOr types.number;
default = null; default = null;
description = ''Only useful for start plugins (lazy=false) to force loading certain plugins first. Default priority is 50. It's recommended to set this to a high number for colorschemes.''; description = ''
Only useful for start plugins (lazy=false) to force loading certain plugins first. Default priority is 50. It's recommended to set this to a high number for colorschemes.
'';
}; };
optional = mkOption { optional = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = null; default = null;
description = ''When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without optional. This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins''; description = ''
When a spec is tagged optional, it will only be included in the final spec, when the same plugin has been specified at least once somewhere else without optional.
This is mainly useful for Neovim distros, to allow setting options on plugins that may/may not be part of the user's plugins
'';
}; };
}; };
} }
@ -199,10 +313,14 @@ in
enable = mkOption { enable = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
description = ''If set to true nvim will be installed with the plugins defined in programs.nvim-lazy.plugins.''; description = ''
If set to true nvim will be installed with the plugins defined in programs.nvim-lazy.plugins.
'';
package = lib.mkPackageOption pkgs "neovim" { package = lib.mkPackageOption pkgs "neovim" {
default = "neovim-unwrapped"; default = "neovim-unwrapped";
}; };
}; };
defaultEditor = mkOption { defaultEditor = mkOption {
type = types.bool; type = types.bool;
@ -211,21 +329,29 @@ in
Sets `EDITOR` environment variable to `nvim`. Sets `EDITOR` environment variable to `nvim`.
''; '';
}; };
vPlug = mkOption { vPlug = mkOption {
type = with types; lazyAttrsOf anything; type = with types; lazyAttrsOf anything;
default = pkgs.vimPlugins; default = pkgs.vimPlugins;
description = ''The vimPlugins attrs to use.''; description = ''
The vimPlugins attrs to use.
'';
}; };
luaRcContent = mkOption { luaRcContent = mkOption {
type = types.str; type = types.str;
default = ""; default = "";
}; };
# TODO: Map options from lazy.nvim # TODO: Map options from lazy.nvim
lazyConfig = mkOption { lazyConfig = mkOption {
type = types.attrs; type = types.attrs;
default = { }; default = { };
description = ''Lazy configuration. See: https://lazy.folke.io/configuration''; description = ''
Lazy configuration. See: https://lazy.folke.io/configuration
'';
}; };
lazyPlugins = mkOption { lazyPlugins = mkOption {
type = type =
with types; with types;
@ -234,8 +360,11 @@ in
(submodule plugin) (submodule plugin)
]); ]);
default = [ ]; default = [ ];
description = ''List of plugins to be installed with neovim.''; description = ''
List of plugins to be installed with neovim.
'';
}; };
viAlias = mkOption { viAlias = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
@ -243,6 +372,7 @@ in
Add `vi` symlink to build output. Add `vi` symlink to build output.
''; '';
}; };
vimAlias = mkOption { vimAlias = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
@ -250,6 +380,7 @@ in
Add `vim` symlink to build output. Add `vim` symlink to build output.
''; '';
}; };
withNodeJs = mkOption { withNodeJs = mkOption {
type = types.bool; type = types.bool;
default = false; default = false;
@ -257,6 +388,7 @@ in
Enable node support. Enable node support.
''; '';
}; };
withRuby = mkOption { withRuby = mkOption {
type = types.nullOr types.bool; type = types.nullOr types.bool;
default = true; default = true;
@ -264,6 +396,7 @@ in
Enable ruby support. Enable ruby support.
''; '';
}; };
withPython3 = mkOption { withPython3 = mkOption {
type = types.bool; type = types.bool;
default = true; default = true;
@ -271,6 +404,7 @@ in
Enable Python 3 support. Enable Python 3 support.
''; '';
}; };
extraPython3Packages = mkOption { extraPython3Packages = mkOption {
type = with types; functionTo (listOf package); type = with types; functionTo (listOf package);
default = _: [ ]; default = _: [ ];
@ -282,6 +416,7 @@ in
Same usage as python3.withPackages. Same usage as python3.withPackages.
''; '';
}; };
extraLuaPackages = mkOption { extraLuaPackages = mkOption {
type = with types; functionTo (listOf package); type = with types; functionTo (listOf package);
default = _: [ ]; default = _: [ ];