default.nix (1237B)
1 { 2 lua 3 , lib 4 , fennel 5 , stdenv 6 }: 7 name : 8 { 9 packages ? [], 10 correlate ? false, 11 mainFunction ? null 12 } @ options : source : 13 let 14 luapath = builtins.map 15 (f: 16 "${f}/share/lua/${lua.luaversion}/?.lua;" + 17 "${f}/share/lua/${lua.luaversion}/?/init.lua;") 18 packages; 19 luacpath = builtins.map (f: "${f}/lib/lua/${lua.luaversion}/?.so;") packages; 20 luaFlags = lib.optionalString (mainFunction !=null) "-e dofile(arg[0]).${mainFunction}()"; 21 in stdenv.mkDerivation { 22 inherit name; 23 src = ./.; 24 nativeBuildInputs = [ fennel ]; 25 buildPhase = '' 26 ( 27 echo "#!${lua}/bin/lua ${luaFlags}" 28 echo "package.path = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luapath)} .. package.path" 29 echo "package.cpath = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luacpath)} .. package.cpath" 30 echo "local ok, stdlib = pcall(require,'posix.stdlib'); if ok then stdlib.setenv('PATH',${lib.escapeShellArg (lib.makeBinPath packages)} .. \":\" .. os.getenv('PATH')) end" 31 fennel ${if correlate then "--correlate" else ""} --compile ${source} 32 ) > ${name}.lua 33 ''; 34 installPhase = '' 35 cp ${name}.lua $out 36 chmod +x $out 37 ''; 38 }