Nix supports a number of hash algorithms:
-
MD5 (deprecated) -
SHA-1 (deprecated) -
SHA-256 (default)
-
SHA-512
-
BLAKE3 (experimental)
BLAKE3 support requires Nix version 2.31+ & enabling the blake3-hashes experimental feature. This algorithm is very good with tree-like structures — like the file system, which is what Nix is often hashing. BLAKE3 offers faster hashing & is more secure which makes it a good choice for new setups that can afford to try it out. At the time of writing, Nix flakes does not & cannot support changing the hash algorithm away from SHA-256 for input pinning requiring an input pinner like Nixtamal to automate it.
How to use the BLAKE3 hash algorithm with Nix + Nixtamal
Let’s show the way using the WhisperFish repository’s latest commit, but you can use any input kind.
Using BLAKE3 on a single input
// manifest.kdl inputs { whisperfish { archive { url "https://gitlab.com/whisperfish/whisperfish/-/archive/{{fresh-value}}/whisperfish-{{fresh-value}}.tar.bz2" } hash algorithm=BLAKE3 } fresh-cmd { $ git ls-remote --branches main "https://gitlab.com/whisperfish/whisperfish.git" | cut -f1 } }
Additionally, you can set BLAKE3 to be the default in the manifest file’s top level.
Project-wide default
// manifest.kdl version "1.0.0" default-hash-algorithm BLAKE3