liminix

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

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:
Mdefault.nix | 1+
Mpkgs/default.nix | 1+
Apkgs/fennelrepl/default.nix | 34++++++++++++++++++++++++++++++++++
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() + ''