[Nix-dev] nix-bundle: Bundle Nix derivations to run anywhere

Matthew Bauer mjbauer95 at gmail.com
Tue Feb 7 01:33:19 CET 2017


GitHub page: https://github.com/matthewbauer/nix-bundle

I just wanted to post about a little project I've been working on. I'm
calling it "nix-bundle".

Basically, what it does is: take a Nix closure, compress it into a
tarball, and turn that tarball into an executable using "Arx". The
final result looks like a plain shell script, but actually has a
tarball closure appended to it. When you run that script, Arx will
execute "nix-user-chroot" (which is included in the closure) which
will setup a /nix/ directory, then execute a target executable. All of
this should work "out of the box" for any Nix derivation folder with a
valid executable.

For example, to generate a "hello" bundle:

./nix-bundle.sh hello /bin/hello

"hello" specifies pkgs.hello and /bin/hello specifies the file
${pkgs.helloi}/bin/hello to be executed. The output file will just be
called "hello".

The result is a "bundle" that can run without Nix being installed! No
external dependencies are needed because they are all contained within
the Nix closure.

There are two main drawbacks: slow startup and large file size.
Extracting the tarball takes time and this adds on to startup times.
Also, because everything is included from the Nix closure, complicated
apps tend to be much larger because of the dependency tree.

I've been experimenting with using AppImage as a format to package
them in, but it is not currently ready yet.


More information about the nix-dev mailing list