mirror of
https://github.com/nix-community/nixvim.git
synced 2025-06-20 16:15:43 +02:00
66 lines
1.3 KiB
Nix
66 lines
1.3 KiB
Nix
{ lib }:
|
|
let
|
|
inherit (lib) types;
|
|
inherit (lib.nixvim) lua-types;
|
|
|
|
# Primitive types that can be represented in lua
|
|
primitives = {
|
|
inherit (types)
|
|
bool
|
|
float
|
|
int
|
|
path
|
|
str
|
|
;
|
|
};
|
|
in
|
|
{
|
|
anything = types.either lua-types.primitive (lua-types.tableOf lua-types.anything) // {
|
|
description = "lua value";
|
|
descriptionClass = "noun";
|
|
};
|
|
|
|
# TODO: support merging list+attrs -> unkeyedAttrs
|
|
tableOf =
|
|
elemType:
|
|
assert lib.strings.hasPrefix "lua" elemType.description;
|
|
types.oneOf [
|
|
(types.listOf elemType)
|
|
(types.attrsOf elemType)
|
|
types.luaInline
|
|
types.rawLua
|
|
]
|
|
// {
|
|
description = "lua table of ${
|
|
lib.types.optionDescriptionPhrase (class: class == "noun" || class == "composite") elemType
|
|
}";
|
|
descriptionClass = "composite";
|
|
};
|
|
|
|
primitive =
|
|
types.nullOr (
|
|
types.oneOf (
|
|
[
|
|
types.luaInline
|
|
types.rawLua
|
|
]
|
|
++ builtins.attrValues primitives
|
|
)
|
|
)
|
|
// {
|
|
description = "lua primitive";
|
|
descriptionClass = "noun";
|
|
};
|
|
}
|
|
// builtins.mapAttrs (
|
|
_: wrappedType:
|
|
types.oneOf [
|
|
wrappedType
|
|
types.luaInline
|
|
types.rawLua
|
|
]
|
|
// {
|
|
description = "lua ${wrappedType.description}";
|
|
descriptionClass = "noun";
|
|
}
|
|
) primitives
|