nix-community.nixvim/modules/top-level/plugins/byte-compile-lua-lib.nix
Stanislav Asunkin 9474ce916a modules/performance: ensure all lua dependencies are byte-compiled
This commit replaces custom lua plugins in tests with shared stub
plugins from utils module.
After this change the test has started to fail. Debugging this issue
I found out that dependencies of plugins weren't processed.
This commit improves the test assertion to detect duplicated
dependencies in this case and fixes the underlying issue by also
processing dependencies.
2025-05-12 17:39:01 +03:00

43 lines
1.4 KiB
Nix

/*
Byte compiling of lua dependencies of normalized plugin list
Inputs: List of normalized plugins
Outputs: List of normalized plugins with all the propagatedBuildInputs byte-compiled
*/
{ lib, pkgs }:
let
builders = lib.nixvim.builders.withPkgs pkgs;
inherit (import ./utils.nix lib) mapNormalizedPlugins;
luaPackages = pkgs.neovim-unwrapped.lua.pkgs;
# Applies a function to the derivation, but only if it's a lua module,
# otherwise returns it as is
mapLuaModule = f: drv: if luaPackages.luaLib.hasLuaModule drv then f drv else drv;
# Byte-compile only lua dependencies
byteCompileDeps =
drv:
lib.pipe drv [
(
drv:
if drv.dependencies or [ ] != [ ] then
drv.overrideAttrs { dependencies = map byteCompileDeps drv.dependencies; }
else
drv
)
(
drv:
if drv.propagatedBuildInputs or [ ] != [ ] then
drv.overrideAttrs { propagatedBuildInputs = map byteCompile drv.propagatedBuildInputs; }
else
drv
)
# 'toLuaModule' updates requiredLuaModules attr
# It works without it, but update it anyway for consistency
(mapLuaModule luaPackages.toLuaModule)
];
# Byte-compile derivation (but only if it's a lua module) and its dependencies
byteCompile = drv: byteCompileDeps (mapLuaModule builders.byteCompileLuaDrv drv);
in
mapNormalizedPlugins byteCompileDeps