I have a very WIP branch adding search paths to Lua. https://git.sr.ht/~raingloom/guix-source/tree/raingloom/lua The problem is that Lua uses a different path format compared to most packages. Instead of a list of directories, it is a list of path patterns, each potentially containing a question mark ('?'), which gets substituted for the module being searched. For pure Lua modules, this basically means /lib/lua/5.3/?.lua and /lib/lua/5.3/?/init.lua. I am not aware of any practical use of paths that do not contain a '?', so there is a relatively easy solution here: use the string.gsub function to expand every path component that does not contain a '?' into two components, the ?.lua and the ?/init.lua one. This means externally defined components are not expanded, only the ones defined by Guix. For C modules, it's a bit trickier, because there is a special component that looks into loadall.so, which I must admit I'm not familiar with. As far as I know, popular modules all define their own shared object file, never a loadall.so. Also, the path is separated by semicolons, not colons, but I think Guix can already handle that. The approaches I see: - patch loadlib.c in Lua to expand LUA_PATH and LUA_CPATH according to the above mentioned heuristics, or - patch Guix to support paths of this format - define something like GUIX_LUA_PATH that gets expanded on its own and only contains Lua modules defined in Guix, and then gets appended to package.path (and do the same for package.path) Solving this would open up access to the huge variety of Lua modules and make things like game development in LÖVE much better integrated. Its users could even use `guix pack` to distribute their games.