- Typst 45.4%
- Shell 41.9%
- Nix 8.6%
- Makefile 1.8%
- Rust 1.7%
- Other 0.6%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
All checks were successful
Report PDF / Build PDF (push) Successful in 1m8s
Expose packages.report (nix build .#report). CI on ubuntu-latest installs vanilla Nix as nixuser with flakes enabled, builds the PDF, and uploads the system-benchmark-report artifact. |
||
| .forgejo/workflows | ||
| examples | ||
| fixtures | ||
| raw | ||
| report | ||
| results | ||
| scripts | ||
| .envrc | ||
| .gitignore | ||
| AGENTS.md | ||
| COOKBOOK.md | ||
| flake.lock | ||
| flake.nix | ||
| Makefile | ||
| README.md | ||
pc-bench
Small, reproducible, privacy-friendly benchmarks for a Linux PC — aimed at people who care about Nix rebuilds, Rust/cargo, and Go compile times, plus simple CPU / RAM / disk baselines.
No accounts, no cloud upload. Tools come from a Nix flake (nixos-26.05).
Requirements
- Nix with flakes enabled
- Linux x86_64 (the flake targets
x86_64-linux) - Optional: NVIDIA driver tools on
PATHfor GPU identity lines
Quick start
git clone https://git.zoppelt.net/mz/pc-bench.git
cd pc-bench
nix develop
./scripts/suite.sh # → raw/<host>-<timestamp>/summary.json
# edit report/data.typ from the summary (see below)
make report # → results/system-benchmark-report.pdf
What you get
| Piece | Role |
|---|---|
scripts/suite.sh |
~2–5 min suite → stable summary.json keys |
fixtures/ |
Pinned Rust crate versions + C TU source |
report/ |
Typst → PDF (suite numbers + optional narrative interpretation) |
examples/ |
Checked-in sample summary.json runs |
COOKBOOK.md |
Metrics, env knobs, comparing two machines |
Suite metrics (short)
- sysbench CPU (multi + single), memory
- 7-Zip integer throughput
- fio sequential read/write on a temp file (root FS)
go build std(CGO off)- cargo release on a pinned fixture (cold / recompile / incremental)
- 96×
gcc -O2 -cserial vs parallel (nix-style many-TU proxy) - nix eval micro (single-thread leaning)
Your machine, your preferences
The suite is the same for everyone. The PDF’s opinion layer is yours:
nix develop
./scripts/suite.sh
# copy raw/latest/summary.json numbers → report/data.typ (suite + hardware)
# set meta.preference (e.g. "wait for next CPU gen" / "max battery")
# fill narrative.* or set narrative.enabled: false for numbers-only
make report
Field in report/data.typ |
Role |
|---|---|
meta.preference |
Cover chip — the question you care about |
suite / hardware |
Measured facts from the run |
market |
Optional external CPU/GPU reference scores |
narrative |
Headline, workload notes, default path, “if it hurts now” |
Draft narrative by hand or with an LLM (prompt in COOKBOOK.md). Keep personal verdicts out of main.typ so the template stays reusable. Publish a run as examples/<label>/summary.json if you want.
Example baseline
From examples/ryzen9-3900x-rtx3080/:
| Metric | Value |
|---|---|
| CPU | Ryzen 9 3900X (24 threads) |
| go build std cold | 5.98 s |
| cargo release recompile | 10.17 s |
| gcc 96 TU parallel | 0.29 s (15.7× vs serial) |
| nix eval foldl 500k | 0.115 s |
| fio root seq R/W | 2207 / 1934 MiB/s |
Treat these as relative anchors, not absolute lab scores (fio defaults to
portable psync + direct=1; LUKS/FS overhead and turbo/thermals vary).
Project layout
scripts/suite.sh # canonical entrypoint
fixtures/ # reproducible compile inputs
report/ # Typst report sources (main.typ + data.typ)
examples/ # sample summary.json files
raw/ # local runs (gitignored)
results/ # local PDF (gitignored)
flake.nix # dev shell + tools
CI PDF (Forgejo Actions)
Workflow: .forgejo/workflows/report.yml
Runner: ubuntu-latest (node:22-bookworm) + Nix install → nix build .#report
Artifact: system-benchmark-report (download from the Actions run).
Triggers: push to main, PRs, Run workflow. Enable Actions on the repo if needed.
Local: nix build .#report → ./result (PDF).
See also
- COOKBOOK.md — full operator guide
- AGENTS.md — notes for coding agents
- examples/ — sample suite results