commit c3bb33c9ce9f1e337ae48eec4c6d345d83418787
parent 24befe6bf7c3f9de277d118aae905d5b14a3e0eb
Author: Daniel Barlow <dan@telent.net>
Date: Tue, 4 Jul 2023 22:58:51 +0100
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
Diffstat:
3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/default.nix b/default.nix
@@ -58,6 +58,7 @@ in {
borderVm.build.vm
go-l2tp
min-copy-closure
+ fennelrepl
];
};
}
diff --git a/pkgs/default.nix b/pkgs/default.nix
@@ -57,4 +57,5 @@
kernel-modules = callPackage ./kernel-modules {};
odhcp-script = callPackage ./odhcp-script {};
fennel = callPackage ./fennel {};
+ fennelrepl = callPackage ./fennelrepl {};
}
diff --git a/pkgs/fennelrepl/default.nix b/pkgs/fennelrepl/default.nix
@@ -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()
+ ''