Fil-C on Nix

Filnix wiki

mbrock/filnix

demo.nix

λpkgs, pkgsFilc, filcc, filc-emacs, libei
let
9libei-ping-cnode=
pkgsFilc.callPackage./demo/libei/cnode.nix inherit libei;
in
14lighttpd-demo=
pkgs.callPackage./httpd inherit filcc; ports = pkgsFilc;.overrideAttrs_: meta.mainProgram = "lighttpd-demo";
23ttyd-emacs-demo=
pkgs.callPackage./ttyd-demo ports = pkgsFilc; inherit filc-emacs;.overrideAttrs_: meta.mainProgram = "ttyd-emacs-demo";
32lua-with-stuff=
pkgsFilc.lua5.withPackagesps: with ps; lpeg luafilesystem luabitop luadbi luadbi-sqlite3 luaffi lua-ffi-zlib luaposix lua-pam
46python-with-stuff=
pkgsFilc.python3.withPackagesps: with ps; lxml.overrideAttrs_: env.CFLAGS = "-O0"; uvicorn starlette msgspec tagflow pycairo rich python-multipart
61python-web-demo=
pkgsFilc.callPackage./demo demo-src = ./demo;.overrideAttrs_: meta.mainProgram = "python-web-demo";
69perl-demos=
pkgsFilc.callPackage./demo/perl { }
71libei-ping-demo=
pkgs.callPackage./demo/libei
73erlang=
pkgs.erlang
74runnerName=
"libei-ping-demo"
75alive=
"filc_libei_ping"
76description=

End-to-end ping demo proving Fil-C libei can talk to an Erlang node

79perl-with-stuff=
pkgsFilc.perl.withPackages
λps
with ps
InlineC

JSONXS
YAMLLibYAML
DBI
DBDSQLite

ack

Sinatra + Puma web demo
NOTE: Currently crashes due to rb_define_finalizer_no_check null pointer in gc.c The finalizer code needs porting to Fil-C (null object pointer at 0x8)

93sinatra-demo=
let
95ruby=
pkgsFilc.ruby_3_3
used by gems rubyEnv
96gems=
ruby.gems
uses ruby used by rubyEnv
97rubyEnv=
pkgsFilc.buildEnv
98name=
"sinatra-env"
99paths=
ruby gems.sinatra gems.puma gems.rack
uses gems ruby
in
pkgs.writeShellScriptBin"sinatra-demo"
export GEM_PATH="${rubyEnv}/lib/ruby/gems/3.3.0"
export GEM_HOME="${rubyEnv}/lib/ruby/gems/3.3.0"
cd "$(mktemp -d)"
cat > app.rb << 'EOF'
require 'sinatra/base'
class App < Sinatra::Base
get '/' do
'Hello from Sinatra on Fil-C!'
end
get '/time' do
"The time is: #{Time.now}"
end
get '/hello/:name' do
"Hello, #{params[:name]}!"
end
end
EOF
cat > config.ru << 'EOF'
require './app'
run App
EOF
echo "Starting Sinatra on http://127.0.0.1:9292"
exec ${rubyEnv}/bin/puma -b tcp://127.0.0.1:9292 config.ru