Installing Packages from Nix Flakes
Devbox supports installing packages with Nix Flakes.
Devbox currently provides two ways to use Flakes to install packages in your project:
- You can reference a Flake hosted in Github using the
github:
reference - You can reference a local Flake using the
path:
reference
What are Flakes?
Flakes are a new feature in the Nix language that lets us package software and create development shells in a declarative, fully reproducible way. You can use Nix Flakes to define packages, apps, templates, and dev environments.
Flakes are defined as a directory with a flake.nix
and a flake.lock
file. You import flakes to your project using a flake reference, which describes where to find the Flake, and what version or revision to use
Using a Flake from Github
You can add a Flake hosted on Github using the following string in your packages list:
"packages": [
"github:<org>/<repo>/<ref>#<optional_flake_attr>"
]
The Ref and Flake Attribute is optional and will default to the main branch and packages.default|defaultPackage
attribute, respectively.
For example, to install Process Compose from its repository using Nix Flakes, you can use the following string in your packages list. This will install the latest version of Process Compose from the main
branch.
github:F1bonacc1/process-compose
Installing a Flake from a specific branch or tag
You can install a specific release or branch by adding it to your flake reference. The following example will install Process Compose version 0.40.2 from the v0.40.2
tag.
github:F1bonacc1/process-compose/v0.40.2
Installing a specific attribute or package from a Flake
You can also install a specific attribute or package from a Flake by adding a #
and the attribute name to the end of the package string. If you don't specify an attribute, Devbox will use default
or defaultPackage
For example, if you want to use Fenix to install a specific version of Nix, you can use the following string in your packages list. This example will install the stable.toolchain
packages from the fenix
package.
github:nix-community/fenix#stable.toolchain
Using Flakes with Nixpkgs
The Nixpkgs repo on Github also provides a Flake for installing packages. You can use the following flake reference to install packages from a specific Nixpkgs commit or reference:
github:NixOS/nixpkgs/<ref>#<package>
For example, if you want to install the hello
package from the nixos-20.09
branch, you can use the following string in your packages list:
github:NixOS/nixpkgs/nixos-20.09#hello
Using a Local Flake
You can also use a local Flake using the path
attribute in your package list. Using a local flake can be helpful if you want to install your custom packages with Nix, or if you need to modify packages before using them in your Devbox project
Your flake reference should point to a directory that contains a flake.nix
file.
path:<path_to_flake>#<optional_flake_attr>
For example, if you have a local Flake in the ./my-flake
directory, you can use the following string in your packages
list. This example will install all the packages under the my-package
attribute.
path:./my-flake#my-package
Examples
For more examples of using Nix Flakes with Devbox, check out the examples in our Devbox Repo: