Nix overlay for foundry-rs/foundry (including forge
, cast
, anvil
and chisel
)
This repository is auto-updated daily with the latest nightly binary release, which are pruned from upstream regularly. We also maintain a monthly
branch for permanent releases that are not pruned.
If we have nix v2.4 or newer, we run this repo and get forge
is the default app target:
$ nix run github:shazow/foundry.nix
forge 0.1.0 (691c814 2022-02-11T00:23:35.582887615+00:00)
Build, test, fuzz, formally verify, debug & deploy solidity contracts.
...
We can also specify a target, such as cast
:
$ nix run github:shazow/foundry.nix#cast
Flags are passed after the command is terminated with --
:
$ nix run github:shazow/foundry.nix#forge -- build
We can enter a shell with all of the foundry binaries injected:
$ nix develop github:shazow/foundry.nix
Make a flake.nix
in your solidity project directory:
# flake.nix
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
utils.url = "github:numtide/flake-utils";
foundry.url = "github:shazow/foundry.nix/monthly"; # Use monthly branch for permanent releases
};
outputs = { self, nixpkgs, utils, foundry }:
utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ foundry.overlay ];
};
in {
devShell = with pkgs; mkShell {
buildInputs = [
# From the foundry overlay
# Note: Can also be referenced without overlaying as: foundry.defaultPackage.${system}
foundry-bin
# ... any other dependencies we need
solc
];
# Decorative prompt override so we know when we're in a dev shell
shellHook = ''
export PS1="[dev] $PS1"
'';
};
});
}
Then run nix develop
to enter a shell with foundry binaries (forge
, cast
, anvil
and chisel
) present.
Running nix flake update
will repin to the latest foundry release from this repo (auto-updates daily).
Usage: devenv
Initialize devenv in your solidity project directory:
$ devenv init
Add this repo as an input in the devenv.yaml
with the following shell command:
$ devenv inputs add foundry github:shazow/foundry.nix --follows nixpkgs
And edit the devenv.nix
:
{ ... }:
{
languages.solidity.enable = true;
languages.solidity.foundry.enable = true;
}
Then run devenv shell
to enter a shell with foundry binaries present.
Running devenv update
will repin to the latest foundry release from this repo.
You can run direnv allow
to automatically enter a shell with foundry binaries everytime you cd to this directory, if you have direnv installed.
The foundry forge
and cast
binaries are auto-ELF-patched to work on NixOS, but by default forge
will attempt to fetch solc
binaries which are not patched. To avoid this, --no-auto-detect
must be used with a locally-installed solc
. See: foundry#545