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 stable branch for the latest stable release 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#castFlags are passed after the command is terminated with --:
$ nix run github:shazow/foundry.nix#forge -- buildWe can enter a shell with all of the foundry binaries injected:
$ nix develop github:shazow/foundry.nixMake 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/stable"; # Use stable 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 initAdd this repo as an input in the devenv.yaml with the following shell command:
$ devenv inputs add foundry github:shazow/foundry.nix/stable --follows nixpkgsAnd 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