liminix

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

default.nix (1498B)


      1 {
      2   lib,
      3   lua,
      4   lualinux,
      5   writeScriptBin,
      6   linotify,
      7   anoia,
      8   netlink-lua,
      9   fennel,
     10 }:
     11 let
     12   packages = [
     13     linotify
     14     anoia
     15     fennel
     16     lualinux
     17     netlink-lua
     18     lua.pkgs.readline
     19   ];
     20   join = ps: builtins.concatStringsSep ";" ps;
     21   luapath = join (
     22     builtins.map (
     23       f: "${f}/share/lua/${lua.luaversion}/?.lua;" + "${f}/share/lua/${lua.luaversion}/?/init.lua"
     24     ) packages
     25   );
     26   luacpath = join (builtins.map (f: "${f}/lib/lua/${lua.luaversion}/?.so") packages);
     27 
     28 in
     29 writeScriptBin "fennelrepl" ''
     30   #!${lua}/bin/lua
     31   package.path = ${lib.strings.escapeShellArg luapath} .. ";" .. package.path
     32   package.cpath = ${lib.strings.escapeShellArg luacpath} .. ";" .. (package.cpath or "")
     33   local fennel = require "fennel"
     34   local specials = require("fennel.specials")
     35   table.insert(package.loaders or package.searchers,1, fennel.searcher)
     36   fennel['macro-path'] = "${anoia.dev}/share/lua/${lua.luaversion}/?.fnl;" .. fennel['macro-path']
     37 
     38   local function eval_as_test(f)
     39     local g = (specials["make-compiler-env"]())._G
     40     g["RUNNING_TESTS"] = true
     41     return fennel.dofile(f, {correlate = true, compilerEnv = g})
     42   end
     43 
     44   local more_fennel = os.getenv("FENNEL_PATH")
     45   if more_fennel then
     46     fennel.path = more_fennel .. ";" .. fennel.path
     47   end
     48   if #arg > 0 then
     49     if arg[1] == '--test' then
     50       eval_as_test(arg[2])
     51     else
     52       script = table.remove(arg, 1)
     53       fennel.dofile(script, {correlate = true},  arg)
     54     end
     55   else
     56     fennel.repl()
     57   end
     58 ''