diff --git a/modules/performance.nix b/modules/performance.nix index c12c7226..88f1ad15 100644 --- a/modules/performance.nix +++ b/modules/performance.nix @@ -60,6 +60,17 @@ in luaLib = lib.mkEnableOption "luaLib" // { description = "Whether to byte compile lua library."; }; + excludedPlugins = lib.mkOption { + type = with types; listOf (either str package); + default = [ ]; + example = lib.literalExpression '' + [ + "faster.nvim" + pkgs.vimPlugins.conform-nvim + ]; + ''; + description = "List of plugins (names or packages) to exclude from byte compilation."; + }; }; combinePlugins = { diff --git a/modules/top-level/plugins/byte-compile-plugins.nix b/modules/top-level/plugins/byte-compile-plugins.nix index 10c62df6..eba2b2af 100644 --- a/modules/top-level/plugins/byte-compile-plugins.nix +++ b/modules/top-level/plugins/byte-compile-plugins.nix @@ -4,15 +4,25 @@ Inputs: List of normalized plugins Outputs: List of normalized (compiled) plugins */ -{ lib, pkgs }: +{ + lib, + pkgs, + excludedPlugins, +}: +normalizedPlugins: let builders = lib.nixvim.builders.withPkgs pkgs; inherit (import ./utils.nix lib) mapNormalizedPlugins; + excludedNames = map (p: if builtins.isString p then p else lib.getName p) excludedPlugins; + isExcluded = p: builtins.elem (lib.getName p.plugin) excludedNames; + + partitionedPlugins = builtins.partition isExcluded normalizedPlugins; + byteCompile = p: (builders.byteCompileLuaDrv p).overrideAttrs ( prev: lib.optionalAttrs (prev ? dependencies) { dependencies = map byteCompile prev.dependencies; } ); in -mapNormalizedPlugins byteCompile +(mapNormalizedPlugins byteCompile partitionedPlugins.wrong) ++ partitionedPlugins.right diff --git a/modules/top-level/plugins/default.nix b/modules/top-level/plugins/default.nix index 64f0be40..f7acaf89 100644 --- a/modules/top-level/plugins/default.nix +++ b/modules/top-level/plugins/default.nix @@ -32,7 +32,10 @@ in build.plugins = let shouldCompilePlugins = byteCompileCfg.enable && byteCompileCfg.plugins; - byteCompilePlugins = pkgs.callPackage ./byte-compile-plugins.nix { inherit lib; }; + byteCompilePlugins = pkgs.callPackage ./byte-compile-plugins.nix { + inherit lib; + inherit (config.performance.byteCompileLua) excludedPlugins; + }; shouldCompileLuaLib = byteCompileCfg.enable && byteCompileCfg.luaLib; inherit (pkgs.callPackage ./byte-compile-lua-lib.nix { inherit lib; }) byteCompilePluginDeps;