add fennelrepl package

Runs fennel using a Lua compiled with the same options as the
host system, and with packages set up so it can find all the local
Lua packages

To shorten the dev feedback loop further, allows FENNEL_PATH to be set
on the command line so you can point directly it at the Fennel sources
for some library you're working against instead of having to run
nix-build and compile them to Lua
This commit is contained in:
Daniel Barlow 2023-07-04 22:58:51 +01:00
parent 24befe6bf7
commit c3bb33c9ce
3 changed files with 36 additions and 0 deletions

View file

@ -58,6 +58,7 @@ in {
borderVm.build.vm
go-l2tp
min-copy-closure
fennelrepl
];
};
}

View file

@ -57,4 +57,5 @@
kernel-modules = callPackage ./kernel-modules {};
odhcp-script = callPackage ./odhcp-script {};
fennel = callPackage ./fennel {};
fennelrepl = callPackage ./fennelrepl {};
}

View file

@ -0,0 +1,34 @@
{
runCommand
, runtimeShell
, fetchurl
, lib
, luaPackages
, lua
, writeScriptBin
, linotify
, anoia
, fennel
}:
let packages = [
linotify
anoia
fennel
];
join = ps: builtins.concatStringsSep ";" ps;
luapath = join (builtins.map (f: "${f}/share/lua/${lua.luaversion}/?.lua") packages);
luacpath = join (builtins.map (f: "${f}/lib/lua/${lua.luaversion}/?.so") packages);
in writeScriptBin "fennelrepl" ''
#!${lua}/bin/lua
package.path = ${lib.strings.escapeShellArg luapath} .. ";" .. package.path
package.cpath = ${lib.strings.escapeShellArg luacpath} .. ";" .. (package.cpath or "")
local fennel = require "fennel"
fennel.install()
local more_fennel = os.getenv("FENNEL_PATH")
if more_fennel then
fennel.path = more_fennel .. ";" .. fennel.path
end
print("path", fennel.path)
fennel.repl()
''