nix bundle

Warning: This program is experimental and its interface is subject to change.

# Name

`nix bundle` - bundle an application so that it works outside of the Nix store

# Synopsis

`nix bundle` [option...] installable

# Examples

- Bundle Hello:

      # nix bundle nixpkgs#hello
      # ./hello
      Hello, world!

- Bundle a specific version of Nix:

      # nix bundle github:NixOS/nix/e3ddffb27e5fc37a209cfd843c6f7f6a9460a8ec
      # ./nix --version
      nix (Nix) 2.4pre20201215_e3ddffb

- Bundle a Hello using a specific bundler:

      # nix bundle --bundler github:NixOS/bundlers#toDockerImage nixpkgs#hello
      # docker load < hello-2.10.tar.gz
      # docker run hello-2.10:latest hello
      Hello, world!

# Description

`nix bundle`, by default, packs the closure of the installable into a single self-extracting executable. See the `bundlers` homepage for more details.

> Note

> This command only works on Linux.

# Flake output attributes

If no flake output attribute is given, `nix bundle` tries the following flake output attributes:

- `bundlers.<system>.default`

If an attribute name is given, `nix run` tries the following flake output attributes:

- `bundlers.<system>.<name>`

# Bundlers

A bundler is specified by a flake output attribute named `bundlers.<system>.<name>`. It looks like this:

    bundlers.x86_64-linux = rec {
      identity = drv: drv;

      blender_2_79 = drv: self.packages.x86_64-linux.blender_2_79;

      default = identity;
    };

A bundler must be a function that accepts an arbitrary value (typically a derivation or app definition) and returns a derivation.

# Options

- `--bundler` flake-url
  Use a custom bundler instead of the default (`github:NixOS/bundlers`).

- `--out-link` / `-o` path
  Override the name of the symlink to the build result. It defaults to the base name of the app.

Common evaluation options:

- `--arg` name expr
  Pass the value expr as the argument name to Nix functions.

- `--argstr` name string
  Pass the string string as the argument name to Nix functions.

- `--eval-store` store-url
  The Nix store to use for evaluations.

- `--impure`
  Allow access to mutable paths and repositories.

- `--include` / `-I` path
  Add path to the list of locations used to look up `<...>` file names.

- `--override-flake` original-ref resolved-ref
  Override the flake registries, redirecting original-ref to resolved-ref.

Common flake-related options:

- `--commit-lock-file`
  Commit changes to the flake's lock file.

- `--inputs-from` flake-url
  Use the inputs of the specified flake as registry entries.

- `--no-registries`
  Don't allow lookups in the flake registries. This option is deprecated; use `--no-use-registries`.

- `--no-update-lock-file`
  Do not allow any updates to the flake's lock file.

- `--no-write-lock-file`
  Do not write the flake's newly generated lock file.

- `--override-input` input-path flake-url
  Override a specific flake input (e.g. `dwarffs/nixpkgs`). This implies `--no-write-lock-file`.

- `--recreate-lock-file`
  Recreate the flake's lock file from scratch.

- `--update-input` input-path
  Update a specific flake input (ignoring its previous entry in the lock file).

Options that change the interpretation of installables:

- `--derivation`
  Operate on the store derivation rather than its outputs.

- `--expr` expr
  Interpret installables as attribute paths relative to the Nix expression expr.

- `--file` / `-f` file
  Interpret installables as attribute paths relative to the Nix expression stored in file. If file is the character -, then a Nix expression will be read from standard input.