Goal is to improve separation between packages and utilities. Can help with autocompletion/navigate nixpkgs faster. Also it will help standardize how LUA_PATH is exported across packages, so that one can more easily make lua changes across nixpkgs (for instance changing where lua modules are installed).mullvad-ns
parent
0b6d33c2ed
commit
88842910b5
@ -0,0 +1,63 @@ |
||||
{ pkgs, lib, lua }: |
||||
let |
||||
requiredLuaModules = drvs: with lib; let |
||||
modules = filter hasLuaModule drvs; |
||||
in unique ([lua] ++ modules ++ concatLists (catAttrs "requiredLuaModules" modules)); |
||||
# Check whether a derivation provides a lua module. |
||||
hasLuaModule = drv: drv ? luaModule; |
||||
in |
||||
rec { |
||||
inherit hasLuaModule requiredLuaModules; |
||||
|
||||
luaPathList = [ |
||||
"share/lua/${lua.luaversion}/?.lua" |
||||
"share/lua/${lua.luaversion}/?/init.lua" |
||||
]; |
||||
luaCPathList = [ |
||||
"lib/lua/${lua.luaversion}/?.so" |
||||
]; |
||||
|
||||
/* generate paths without a prefix |
||||
*/ |
||||
luaPathRelStr = lib.concatStringsSep ";" luaPathList; |
||||
luaCPathRelStr = lib.concatStringsSep ";" luaCPathList; |
||||
|
||||
/* generate LUA_(C)PATH value for a specific derivation, i.e., with absolute paths |
||||
*/ |
||||
genLuaPathAbsStr = drv: lib.concatMapStringsSep ";" (x: "${drv}/${x}") luaPathList; |
||||
genLuaCPathAbsStr = drv: lib.concatMapStringsSep ";" (x: "${drv}/${x}") luaCPathList; |
||||
|
||||
/* Generate a LUA_PATH with absolute paths |
||||
*/ |
||||
# genLuaPathAbs = drv: |
||||
# lib.concatStringsSep ";" (map (x: "${drv}/x") luaPathList); |
||||
|
||||
luaAtLeast = lib.versionAtLeast lua.luaversion; |
||||
luaOlder = lib.versionOlder lua.luaversion; |
||||
isLua51 = (lib.versions.majorMinor lua.version) == "5.1"; |
||||
isLua52 = (lib.versions.majorMinor lua.version) == "5.2"; |
||||
isLua53 = lua.luaversion == "5.3"; |
||||
isLuaJIT = lib.getName lua == "luajit"; |
||||
|
||||
/* generates the relative path towards the folder where |
||||
seems stable even when using lua_modules_path = "" |
||||
|
||||
Example: |
||||
getDataFolder luaPackages.stdlib |
||||
=> stdlib-41.2.2-1-rocks/stdlib/41.2.2-1/doc |
||||
*/ |
||||
getDataFolder = drv: |
||||
"${drv.pname}-${drv.version}-rocks/${drv.pname}/${drv.version}"; |
||||
|
||||
/* Convert derivation to a lua module. |
||||
so that luaRequireModules can be run later |
||||
*/ |
||||
toLuaModule = drv: |
||||
drv.overrideAttrs( oldAttrs: { |
||||
# Use passthru in order to prevent rebuilds when possible. |
||||
passthru = (oldAttrs.passthru or {})// { |
||||
luaModule = lua; |
||||
requiredLuaModules = requiredLuaModules drv.propagatedBuildInputs; |
||||
}; |
||||
}); |
||||
} |
Loading…
Reference in new issue