From 283c46624ce411b7b39369c7ff34daa90073af6f Mon Sep 17 00:00:00 2001 From: Maximilian Ehlers <2843450+b-m-f@users.noreply.github.com> Date: Sat, 28 Oct 2023 15:47:36 +0200 Subject: [PATCH] [luasnip] adds support for loading lua snippets and setting extra config (#660) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Maximilian Ehlers Co-authored-by: Maximilian Ehlers Co-authored-by: GaƩtan Lepage <33058747+GaetanLepage@users.noreply.github.com> --- plugins/snippets/luasnip/default.nix | 79 +++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 2 deletions(-) diff --git a/plugins/snippets/luasnip/default.nix b/plugins/snippets/luasnip/default.nix index 0c5bdd22..17493c3e 100644 --- a/plugins/snippets/luasnip/default.nix +++ b/plugins/snippets/luasnip/default.nix @@ -13,6 +13,20 @@ in { package = helpers.mkPackageOption "luasnip" pkgs.vimPlugins.luasnip; + extraConfig = mkOption { + type = types.attrsOf types.anything; + description = '' + Extra config options for luasnip. + + Example: + { + enable_autosnippets = true, + store_selection_keys = "", + } + ''; + default = {}; + }; + fromVscode = mkOption { default = []; example = '' @@ -76,7 +90,53 @@ in { }; # TODO: add support for snipmate - # TODO: add support for lua + fromLua = mkOption { + default = []; + description = '' + Load lua snippets with the lua loader. + Check https://github.com/L3MON4D3/LuaSnip/blob/master/DOC.md#lua for the necessary file structure. + ''; + example = '' + [ + {} + { + paths = ./path/to/snippets; + } + ] + ''; + type = types.listOf (types.submodule { + options = { + lazyLoad = mkOption { + type = types.bool; + default = true; + description = '' + Whether or not to lazy load the snippets + ''; + }; + paths = + helpers.defaultNullOpts.mkNullable + ( + with types; + nullOr ( + oneOf + [ + str + path + helpers.rawType + (listOf (oneOf + [ + str + path + helpers.rawType + ])) + ] + ) + ) + "" + "Paths with snippets specified with native lua"; + }; + }); + }; }; config = let @@ -88,10 +148,25 @@ in { require("luasnip.loaders.from_vscode").${optionalString loader.lazyLoad "lazy_"}load(${helpers.toLuaObject options}) '') cfg.fromVscode; + fromLuaLoaders = + lists.map + ( + loader: let + options = attrsets.getAttrs ["paths"] loader; + in '' + require("luasnip.loaders.from_lua").${optionalString loader.lazyLoad "lazy_"}load(${helpers.toLuaObject options}) + '' + ) + cfg.fromLua; + extraConfig = [ + '' + require("luasnip").config.set_config(${helpers.toLuaObject cfg.extraConfig}) + '' + ]; in mkIf cfg.enable { extraPlugins = [cfg.package]; extraLuaPackages = ps: [ps.jsregexp]; - extraConfigLua = concatStringsSep "\n" fromVscodeLoaders; + extraConfigLua = concatStringsSep "\n" (extraConfig ++ fromVscodeLoaders ++ fromLuaLoaders); }; }