liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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   }