015b88e0

Your first flake

Adds a `flake.nix` so the project can be built, tested and checked with Nix (and run on NixCI).

It provides:

* `packages.default` — builds the dspy wheel (`python -m build`).
* `packages.test-env` — the full test virtualenv, resolved from `uv.lock` via uv2nix.
* `devShells.default` — python + uv + ruff + pre-commit development environment.
* `checks` — the package, the devShell, a ruff lint gate mirroring the existing CI,
  and **`pytest`, which runs the offline test suite (984 tests) entirely inside `nix build`**.
* `packages.impure-test` + `nix-ci.nix` — runs the *full* suite (991 tests, including
  the few that fetch real URLs) as a NixCI impure `test` job.

`nix flake check` builds every package/devShell and runs the offline test suite.

Passing NixCI: https://staging.nix-ci.com/gh:NorfairKing:dspy/your-first-flake/453ecf257a343742170b3e1cef20271508c3e6a4

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 8s 8s 8s 0s
Eval 8s 19s 19s 28s 0s
Build 17s 25s 9s 26s 0s
Suite 0s 54s 28s 28s 0s

Timeline

0s10s20s