0001
June 24, 2026 · View on GitHub
Status: Accepted (spago pin superseded by 0008: spago 0.21.0 → 1.x; the purs 0.15.16 and Lua 5.1 pins stand)
Context
Each fork needs a reproducible PureScript toolchain (purs, spago) and a Lua 5.1
runtime for the FFI checks. Early forks pinned their tools through
easy-purescript-nix, which tracked purs 0.15.15 and pulled an unpinned spago.
The compiler and the later forks moved to thomashoneyman/purescript-overlay,
which packages exact purs and spago releases as nix attributes.
Decision
Every fork pins its toolchain through purescript-overlay: purs 0.15.16
(purs-bin.purs-0_15_16), spago 0.21.0 (spago-bin.spago-0_21_0), and a Lua 5.1
toolchain (lua51Packages). The dev shell also carries dhall, luacheck,
luaformatter, nixfmt, and treefmt. The pslua compiler is a flake input tracking
github:purescript-lua/purescript-lua.
Consequences
- One flake.nix shape across the set. Converting a fork is copying the canonical
flake.nix and running
nix flake update. - purs and spago versions are exact and shared through the binary caches.
- Keep flake.lock reasonably current. A long-stale pslua pin predates the output-directory and codegen fixes and breaks CI (see 0002, 0003).