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 an rc and stable branch for the latest release from that stream which is 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