Common Lisp FUSE (file system in user space) bindings. (Currently well-tested with SBCL; needs CFFI capable of callbacks with "long long" argument/return value type - CCL works at least for CL-FUSE, ECL 12.7.1 and lower is known not to work; Clisp somehow botches execution of fusermount as setuid executable)
Common Lisp bindings for FUSE (file system in user space). Lisp LGPL.
A paper describing a short demo session of QueryFS Currently work only with SBCL, patches welcome. Seems to work with CCL. Theoretically, it could work with anything that supports CFFI and :long-long type for callback arguments and return value.
Running Monotone checkout version is recommended (source browser can give you a tarball if you do not have Monotone on your computer)
CL-FUSE bindings themselves just wrap FUSE (just as API and also provide a GC-compatible main loop with interfaces translated from C to Lisp).
CL-FUSE-Meta-FS allow you to write an s-expression specifying basic layout of your FS and generators for more content deeper in it (and callbacks for modification system calls)
Query-FS is an example FS that allows you to write Lisp code defining DSLs and queries in these DSLs.
Query-FS-example-queries provide some examples of the queries (examples of DSL parsers are included in Query-FS)
You can use self-sufficient download. You will need to install SBCL, go into the unpacked directory, run ./bin/launch.sh script (generic virtualenv launcher), require :query-fs and run query-fs::run-fs (don't forget target parameter - defaults to ~/mnt/query-fs). In ~/mnt/query-fs you will need some subdirectories: results/ (actual mountpoint), plugins/ (Query parsers and helper functions - lib/query-fs/example-plugins provides some) and queries/ (actual layout described in some DSL - there are examples in lib/query-fs-example-queries).
CL-FUSE in itself is just another binding with reimplementation of FUSE event loop and possibility to provide callbacks for threaded responses. Thanks to fuserl author, Paul Mineiro, for the code to Erlang-friendly FUSE event loop being a better explanation of what goes on than libfuse code.
CL-FUSE-Meta-FS is about writing
(mk-dir "a-directory" :just (mk-file "INFO" "An example directory"))
and getting file a-directory/INFO with "An example directory" inside. Of course, you can write some code instead of constants and have file creation/removal, file write and directory creation handlers.
Query-FS is about writing
transient *master-password* ""
setter "::password" *master-password*
for p from
("select username || '@' || service, password from passwords where username is not null and ~a <> ''" *master-password*)
encrypted with *master-password* file name (p 1)
create-dir name ("insert into passwords (service) values (~a)" name)
with srv from
("select distinct service from passwords where ~a <> ''" *master-password*)
create name ("insert into passwords (service, username) values (~a, ~a)" (srv 0) name)
sink data "::remove::" "" ("delete from passwords where service = ~a" (srv 0))
for un from ("select username, password from passwords where service = ~a and username is not null" (srv 0))
encrypted with *master-password*
sink-removable data name (un 1)
("update passwords set password = ~a where username = ~a and service = ~a" data name (srv 0))
("delete from passwords where username = ~a and service = ~a" name (srv 0))
to get encrypted password storage with file interface.
You can contact me via email if you have questions about CL-FUSE. I am Michael Raskin; for this project I use public mail service rambler.ru and username fb08af68 .
This project has released the following files: