mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-21 08:35:43 +02:00
265 lines
6.3 KiB
Nix
265 lines
6.3 KiB
Nix
{
|
|
lib,
|
|
nixvimTypes,
|
|
nixvimUtils,
|
|
}:
|
|
with lib;
|
|
with nixvimUtils; rec {
|
|
# Creates an option with a nullable type that defaults to null.
|
|
mkNullOrOption = type: desc:
|
|
lib.mkOption {
|
|
type = lib.types.nullOr type;
|
|
default = null;
|
|
description = desc;
|
|
};
|
|
|
|
mkCompositeOption = desc: options:
|
|
mkNullOrOption (types.submodule {inherit options;}) desc;
|
|
|
|
mkNullOrStr = mkNullOrOption (with nixvimTypes; maybeRaw str);
|
|
|
|
mkNullOrLua = desc:
|
|
lib.mkOption {
|
|
type = lib.types.nullOr nixvimTypes.strLua;
|
|
default = null;
|
|
description = desc;
|
|
apply = mkRaw;
|
|
};
|
|
|
|
mkNullOrLuaFn = desc:
|
|
lib.mkOption {
|
|
type = lib.types.nullOr nixvimTypes.strLuaFn;
|
|
default = null;
|
|
description = desc;
|
|
apply = mkRaw;
|
|
};
|
|
|
|
mkNullOrStrLuaOr = ty: desc:
|
|
lib.mkOption {
|
|
type = lib.types.nullOr (types.either nixvimTypes.strLua ty);
|
|
default = null;
|
|
description = desc;
|
|
apply = v:
|
|
if builtins.isString v
|
|
then mkRaw v
|
|
else v;
|
|
};
|
|
|
|
mkNullOrStrLuaFnOr = ty: desc:
|
|
lib.mkOption {
|
|
type = lib.types.nullOr (types.either nixvimTypes.strLuaFn ty);
|
|
default = null;
|
|
description = desc;
|
|
apply = v:
|
|
if builtins.isString v
|
|
then mkRaw v
|
|
else v;
|
|
};
|
|
|
|
defaultNullOpts = rec {
|
|
mkNullable = type: default: desc:
|
|
mkNullOrOption type (
|
|
let
|
|
defaultDesc = "default: `${default}`";
|
|
in
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
|
|
${defaultDesc}
|
|
''
|
|
);
|
|
|
|
mkNullableWithRaw = type: mkNullable (maybeRaw type);
|
|
|
|
mkStrLuaOr = type: default: desc:
|
|
mkNullOrStrLuaOr type (let
|
|
defaultDesc = "default: `${default}`";
|
|
in
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
|
|
${defaultDesc}
|
|
'');
|
|
|
|
mkStrLuaFnOr = type: default: desc:
|
|
mkNullOrStrLuaFnOr type (let
|
|
defaultDesc = "default: `${default}`";
|
|
in
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
|
|
${defaultDesc}
|
|
'');
|
|
|
|
mkLua = default: desc:
|
|
mkNullOrLua
|
|
(
|
|
(optionalString (desc != "") ''
|
|
${desc}
|
|
|
|
'')
|
|
+ ''
|
|
default: `${default}`
|
|
''
|
|
);
|
|
|
|
mkLuaFn = default: desc: let
|
|
defaultDesc = "default: `${default}`";
|
|
in
|
|
mkNullOrLuaFn
|
|
(
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
|
|
${defaultDesc}
|
|
''
|
|
);
|
|
|
|
mkNum = default: mkNullable (with nixvimTypes; maybeRaw number) (toString default);
|
|
mkInt = default: mkNullable (with nixvimTypes; maybeRaw int) (toString default);
|
|
# Positive: >0
|
|
mkPositiveInt = default: mkNullable (with nixvimTypes; maybeRaw ints.positive) (toString default);
|
|
# Unsigned: >=0
|
|
mkUnsignedInt = default: mkNullable (with nixvimTypes; maybeRaw ints.unsigned) (toString default);
|
|
mkBool = default:
|
|
mkNullable (with nixvimTypes; maybeRaw bool) (
|
|
if default
|
|
then "true"
|
|
else "false"
|
|
);
|
|
mkStr = default: mkNullable (with nixvimTypes; maybeRaw str) ''${builtins.toString default}'';
|
|
mkAttributeSet = default: mkNullable nixvimTypes.attrs ''${default}'';
|
|
mkListOf = ty: default: mkNullable (with nixvimTypes; listOf (maybeRaw ty)) default;
|
|
mkAttrsOf = ty: default: mkNullable (with nixvimTypes; attrsOf (maybeRaw ty)) default;
|
|
mkEnum = enumValues: default: mkNullable (with nixvimTypes; maybeRaw (enum enumValues)) ''"${default}"'';
|
|
mkEnumFirstDefault = enumValues: mkEnum enumValues (head enumValues);
|
|
mkBorder = default: name: desc:
|
|
mkNullable
|
|
(with nixvimTypes; maybeRaw border)
|
|
default
|
|
(let
|
|
defaultDesc = ''
|
|
Defines the border to use for ${name}.
|
|
Accepts same border values as `nvim_open_win()`. See `:help nvim_open_win()` for more info.
|
|
'';
|
|
in
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
${defaultDesc}
|
|
'');
|
|
mkSeverity = default: desc:
|
|
mkOption {
|
|
type = with types;
|
|
nullOr
|
|
(
|
|
either ints.unsigned
|
|
(
|
|
enum
|
|
["error" "warn" "info" "hint"]
|
|
)
|
|
);
|
|
default = null;
|
|
apply =
|
|
mapNullable
|
|
(
|
|
value:
|
|
if isInt value
|
|
then value
|
|
else mkRaw "vim.diagnostic.severity.${strings.toUpper value}"
|
|
);
|
|
description = let
|
|
defaultDesc = "default: `${toString default}`";
|
|
in
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
|
|
${defaultDesc}
|
|
'';
|
|
};
|
|
mkLogLevel = default: desc:
|
|
mkOption {
|
|
type = with types;
|
|
nullOr
|
|
(
|
|
either
|
|
ints.unsigned
|
|
nixvimTypes.logLevel
|
|
);
|
|
default = null;
|
|
apply =
|
|
mapNullable
|
|
(
|
|
value:
|
|
if isInt value
|
|
then value
|
|
else mkRaw "vim.log.levels.${strings.toUpper value}"
|
|
);
|
|
description = let
|
|
defaultDesc = "default: `${toString default}`";
|
|
in
|
|
if desc == ""
|
|
then defaultDesc
|
|
else ''
|
|
${desc}
|
|
|
|
${defaultDesc}
|
|
'';
|
|
};
|
|
|
|
mkHighlight = default: name: desc:
|
|
mkNullable
|
|
nixvimTypes.highlight
|
|
default
|
|
(
|
|
if desc == ""
|
|
then "Highlight settings."
|
|
else desc
|
|
);
|
|
};
|
|
|
|
mkPackageOption = name: default:
|
|
mkOption {
|
|
type = types.package;
|
|
inherit default;
|
|
description = "Plugin to use for ${name}";
|
|
};
|
|
|
|
mkSettingsOption = {
|
|
options ? {},
|
|
description,
|
|
example ? null,
|
|
}:
|
|
mkOption {
|
|
type = with types;
|
|
submodule {
|
|
freeformType = attrsOf anything;
|
|
inherit options;
|
|
};
|
|
default = {};
|
|
inherit description;
|
|
example =
|
|
if example == null
|
|
then {
|
|
foo_bar = 42;
|
|
hostname = "localhost:8080";
|
|
callback.__raw = ''
|
|
function()
|
|
print('nixvim')
|
|
end
|
|
'';
|
|
}
|
|
else example;
|
|
};
|
|
}
|