Compare commits

..

33 commits

Author SHA1 Message Date
Ching Pei Yang
78203a1bce add TODO 2024-08-13 00:41:29 +02:00
Ching Pei Yang
0976df3a2e lib: allow luaInline in lz.n map action 2024-08-13 00:41:29 +02:00
Ching Pei Yang
44e16dc3fc flake: update lzn-auto-require 2024-08-13 00:41:29 +02:00
Ching Pei Yang
09b89c809a fixup! wrapper: use lzn-auto-require loader 2024-08-13 00:41:29 +02:00
Ching Pei Yang
d8f3b73b2c lib: add mkSetLuaBinding 2024-08-13 00:41:29 +02:00
Ching Pei Yang
fcc360c3ce wrapper: use lzn-auto-require loader 2024-08-13 00:41:29 +02:00
Ching Pei Yang
324cfed759 flake: add plugin lzn-auto-require 2024-08-13 00:34:51 +02:00
Ching Pei Yang
1eae8c8d55 lz.n: generate less code 2024-08-13 00:34:51 +02:00
Ching Pei Yang
11dca73b37 lz.n: wrap lua code in function 2024-08-13 00:34:51 +02:00
Ching Pei Yang
88de04e94c lib: add mkLznBinding 2024-08-13 00:34:51 +02:00
Ching Pei Yang
5ba5fa29ff nvim-tree: load nvim-tree if openOnSetup 2024-08-13 00:34:51 +02:00
Ching Pei Yang
1781b6d8c3 nvim-tree: move to lz.n keymaps 2024-08-13 00:34:51 +02:00
Ching Pei Yang
cdda400905 lib: add mkLznBinding 2024-08-13 00:34:51 +02:00
Ching Pei Yang
a0f4e6a942 lib: change lz.n spec "inlineLua" types to str 2024-08-13 00:28:09 +02:00
Ching Pei Yang
c49f0c25c5 lz.n: missing type check 2024-08-13 00:28:09 +02:00
Ching Pei Yang
b5d2a10d25 lib: add lznKeySpec example 2024-08-13 00:28:09 +02:00
Ching Pei Yang
5ed6f11880 lz.n: process key maps 2024-08-13 00:28:09 +02:00
Ching Pei Yang
ce10162f17 remove unused 2024-08-13 00:28:09 +02:00
Pei Yang Ching
bcd5ab38d7 lib: fix lz.n map type 2024-08-13 00:28:09 +02:00
Ching Pei Yang
91e2df6a93 lib: add lz.n KeySpec 2024-08-13 00:28:09 +02:00
Pei Yang Ching
054e60edf0 nvim-tree: use lazy 2024-08-13 00:28:09 +02:00
Pei Yang Ching
06f11946fd lazy: add setupOpts support 2024-08-13 00:28:09 +02:00
Pei Yang Ching
fab27790ea fix: broken optPlugins 2024-08-13 00:28:09 +02:00
Pei Yang Ching
bbec94cf77 switch to other hacky array-table syntax 2024-08-13 00:28:09 +02:00
Pei Yang Ching
7910f87811 wrap lazy init code in function 2024-08-13 00:28:09 +02:00
Ching Pei Yang
f280ca9e76 flake: update lz.n 2024-08-13 00:28:09 +02:00
Ching Pei Yang
703aaecbde lib: add lznPluginTableType 2024-08-13 00:28:09 +02:00
Ching Pei Yang
f05411c4e0 lib: export lznPluginType 2024-08-13 00:28:09 +02:00
Ching Pei Yang
5f517cae34 lz.n: load lz.n 2024-08-13 00:28:09 +02:00
Ching Pei Yang
45d8a9ec13 lz.n: add basic lazy.plugins option 2024-08-13 00:28:09 +02:00
Pei Yang Ching
a586c7cba6 lib: add basic lz.n plugin spec type 2024-08-13 00:28:09 +02:00
Pei Yang Ching
a3379d8fe8 add lazy module skeleton 2024-08-13 00:28:09 +02:00
Pei Yang Ching
ecf1ae31f2 flake: add lz.n plugin 2024-08-13 00:28:09 +02:00
4 changed files with 69 additions and 121 deletions

View file

@ -4,7 +4,7 @@ Release notes for release 0.7
## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide-0-7} ## Breaking Changes and Migration Guide {#sec-breaking-changes-and-migration-guide-0-7}
### `vim.configRC` removed {#sec-vim-configrc-removed} ### `vim.configRC` removed
In v0.7 we are removing `vim.configRC` in favor of making `vim.luaConfigRC` the In v0.7 we are removing `vim.configRC` in favor of making `vim.luaConfigRC` the
top-level DAG, and thereby making the entire configuration Lua based. This top-level DAG, and thereby making the entire configuration Lua based. This
@ -26,7 +26,7 @@ making good use of its extensive Lua API. Additionally, Vimscript is slow and
brings unnecessary performance overhead while working with different brings unnecessary performance overhead while working with different
configuration formats. configuration formats.
### `vim.maps` rewrite {#sec-vim-maps-rewrite} ### `vim.maps` rewrite
Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new Instead of specifying map modes using submodules (eg.: `vim.maps.normal`), a new
`mode` option has mode has been introduced. It can be either a string, or a list `mode` option has mode has been introduced. It can be either a string, or a list

View file

@ -5,39 +5,66 @@
inherit (lib.attrsets) isAttrs mapAttrs; inherit (lib.attrsets) isAttrs mapAttrs;
inherit (lib.generators) mkLuaInline; inherit (lib.generators) mkLuaInline;
binds = rec { mkLuaBinding = mode: key: action: desc:
mkLuaBinding = key: action: desc: mkIf (key != null) {
mkIf (key != null) { ${key} = {
"${key}" = { inherit mode action desc;
inherit action desc; lua = true;
lua = true; silent = true;
silent = true;
};
}; };
};
mkExprBinding = key: action: desc: mkExprBinding = mode: key: action: desc:
mkIf (key != null) { mkIf (key != null) {
"${key}" = { ${key} = {
inherit action desc; inherit mode action desc;
lua = true; lua = true;
silent = true; silent = true;
expr = true; expr = true;
};
}; };
};
mkBinding = key: action: desc: mkBinding = mode: key: action: desc:
mkIf (key != null) { mkIf (key != null) {
"${key}" = { ${key} = {
inherit action desc; inherit mode action desc;
silent = true; silent = true;
};
}; };
};
mkMappingOption = description: default: mkMappingOption = description: default:
mkOption { mkOption {
type = nullOr str; type = nullOr str;
inherit default description; inherit default description;
}; };
# Utility function that takes two attrsets:
# { someKey = "some_value" } and
# { someKey = { description = "Some Description"; }; }
# and merges them into
# { someKey = { value = "some_value"; description = "Some Description"; }; }
addDescriptionsToMappings = actualMappings: mappingDefinitions:
mapAttrs (name: value: let
isNested = isAttrs value;
returnedValue =
if isNested
then addDescriptionsToMappings actualMappings.${name} mappingDefinitions.${name}
else {
inherit value;
inherit (mappingDefinitions.${name}) description;
};
in
returnedValue)
actualMappings;
mkSetBinding = mode: binding: action:
mkBinding mode binding.value action binding.description;
mkSetExprBinding = mode: binding: action:
mkExprBinding mode binding.value action binding.description;
mkSetLuaBinding = mode: binding: action:
mkLuaBinding mode binding.value action binding.description;
# Utility function that takes two attrsets: # Utility function that takes two attrsets:
# { someKey = "some_value" } and # { someKey = "some_value" } and

View file

@ -1,9 +1,17 @@
{lib, ...}: let {lib, ...}: let
inherit (lib.options) mkOption; inherit (lib.options) mkOption;
inherit (lib.types) either str listOf attrsOf nullOr submodule bool; inherit (lib.types) either str listOf attrsOf nullOr submodule;
inherit (lib.nvim.config) mkBool; inherit (lib.nvim.config) mkBool;
mapConfigOptions = { mapType = submodule {
mode = mkOption {
type = either str (listOf str);
description = ''
The short-name of the mode to set the keymapping for. Passing an empty string is the equivalent of `:map`.
See `:help map-modes` for a list of modes.
'';
};
desc = mkOption { desc = mkOption {
type = nullOr str; type = nullOr str;
default = null; default = null;
@ -26,69 +34,10 @@
unique = mkBool false "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map."; unique = mkBool false "Whether to fail if the map is already defined. Equivalent to adding <unique> to a map.";
noremap = mkBool true "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default."; noremap = mkBool true "Whether to use the 'noremap' variant of the command, ignoring any custom mappings on the defined action. It is highly advised to keep this on, which is the default.";
}; };
mapType = submodule {
options =
mapConfigOptions
// {
mode = mkOption {
type = either str (listOf str);
description = ''
The short-name of the mode to set the keymapping for. Passing an empty string is the equivalent of `:map`.
See `:help map-modes` for a list of modes.
'';
};
};
};
# legacy stuff
mapOption = submodule {
options =
mapConfigOptions
// {
action = mkOption {
type = str;
description = "The action to execute.";
};
lua = mkOption {
type = bool;
description = ''
If true, `action` is considered to be lua code.
Thus, it will not be wrapped in `""`.
'';
default = false;
};
};
};
mapOptions = mode:
mkOption {
description = "Mappings for ${mode} mode";
type = attrsOf mapOption;
default = {};
};
in { in {
options.vim = { options.vim = {
maps = mkOption { maps = mkOption {
type = submodule { type = attrsOf mapType;
freeformType = attrsOf mapType;
options = {
normal = mapOptions "normal";
insert = mapOptions "insert";
select = mapOptions "select";
visual = mapOptions "visual and select";
terminal = mapOptions "terminal";
normalVisualOp = mapOptions "normal, visual, select and operator-pending (same as plain 'map')";
visualOnly = mapOptions "visual only";
operator = mapOptions "operator-pending";
insertCommand = mapOptions "insert and command-line";
lang = mapOptions "insert, command-line and lang-arg";
command = mapOptions "command-line";
};
};
default = {}; default = {};
description = "Custom keybindings."; description = "Custom keybindings.";
example = '' example = ''

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) map mapAttrs filter removeAttrs attrNames; inherit (builtins) map mapAttrs filter;
inherit (lib.attrsets) mapAttrsToList filterAttrs attrsToList; inherit (lib.attrsets) mapAttrsToList filterAttrs attrsToList;
inherit (lib.strings) concatLines concatMapStringsSep optionalString; inherit (lib.strings) concatLines concatMapStringsSep optionalString;
inherit (lib.trivial) showWarnings; inherit (lib.trivial) showWarnings;
@ -45,35 +45,7 @@ in {
value, value,
}: "vim.keymap.set(${toLuaObject value.mode}, ${toLuaObject name}, ${toLuaObject (getAction value)}, ${toLuaObject (getOpts value)})"; }: "vim.keymap.set(${toLuaObject value.mode}, ${toLuaObject name}, ${toLuaObject (getAction value)}, ${toLuaObject (getOpts value)})";
namedModes = { keymaps = concatLines (map toLuaKeymap (attrsToList (filterNonNull config.maps)));
"normal" = ["n"];
"insert" = ["i"];
"select" = ["s"];
"visual" = ["v"];
"terminal" = ["t"];
"normalVisualOp" = ["n" "v" "o"];
"visualOnly" = ["n" "x"];
"operator" = ["o"];
"insertCommand" = ["i" "c"];
"lang" = ["l"];
"command" = ["c"];
};
maps =
removeAttrs cfg.maps (attrNames namedModes)
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.normal;}) cfg.maps.normal
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.insert;}) cfg.maps.insert
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.select;}) cfg.maps.select
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.visual;}) cfg.maps.visual
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.terminal;}) cfg.maps.terminal
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.normalVisualOp;}) cfg.maps.normalVisualOp
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.visualOnly;}) cfg.maps.visualOnly
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.operator;}) cfg.maps.operator
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.insertCommand;}) cfg.maps.insertCommand
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.lang;}) cfg.maps.lang
// mapAttrs (_: legacyMap: legacyMap // {mode = namedModes.command;}) cfg.maps.command;
keymaps = concatLines (map toLuaKeymap (attrsToList (filterNonNull maps)));
in { in {
vim = { vim = {
luaConfigRC = { luaConfigRC = {