nix-evaluator-stats/docs/README.md
NotAShelf 6484ded3d7
docs: improve 'usage instructions' for the web component
Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Ib70b7d5101bb0e2b103e96770965570f6a6a6964
2026-04-16 09:40:28 +03:00

112 lines
3.8 KiB
Markdown

<!-- markdownlint-disable MD033 MD041 -->
<div align="center">
<h1 id="header">nix-evaluator-stats</h1>
<a alt="CI Status" href="https://github.com/NotAShelf/nix-evaluator-stats">
<img
src="https://github.com/NotAShelf/nix-evaluator-stats/actions/workflows/check.yml/badge.svg"
alt="Lints & Formatting"
/>
</a>
<a alt="Build & Deploy" href="https://notashelf.github.io/nix-evaluator-stats/">
<img
src="https://github.com/NotAShelf/nix-evaluator-stats/actions/workflows/deploy.yml/badge.svg"
alt="License"
/>
</a>
</div>
<!-- markdownlint-enable MD033 -->
![Demo](./assets/ns-demo.png)
`nix-evaluator-stats`, or "`ns`", is a pretty visualiser for the Nix evaluator
stats export from `NIX_SHOW_STATS` and `NIX_COUNT_CALLS` invocations. It takes
the resulting JSON data from your Nix invocation with the relevant variables,
and provides a ✨ pretty ✨ dashboard-like visual with the ability to compare
your "snapshots" of benchmarks. Besides looking nice, it is helpful in
collecting statistics about your Nix commands and tracking performance
regressions in subsequent exports with the comparison feature with snapshot of
your analyses.
## Usage
NS is primarily a web application for pretty visuals, with a terminal client
(both a CLI and a TUI) planned for rendering statistics or sharing your analyses
with others.
### Web
<!--markdownlint-disable MD059-->
You can find the site [here](https://notashelf.github.io/nix-evaluator-stats/).
<!--markdownlint-enable MD059-->
Usage instructions are provided in the initial page. Simply navigate to the site
and provide the JSON export (or a file) to render the statistics. The number of
rendered fields might differ based on your Nix version or implementation (Lix,
Snix, etc.) The classic usage looks like this:
<!-- markdownlint-disable MD013 -->
```bash
# Invoke a Nix command with NIX_SHOW_STATS=1
$ NIX_SHOW_STATS=1 nix eval nixpkgs#hello -- --option eval-cache false # disable eval-cache for accuracy
# Or write to a file directly
$ NIX_SHOW_STATS_PATH=stats.json nix eval nixpkgs#hello -- --option eval-cache false
```
<!-- markdownlint-enable MD013 -->
1. Create the JSON export
2. Copy it if printed to stdout
3. Paste or upload it in the input field that appears the first time you visit
the site
Once you hit "Load", the JSON will be parsed and you'll be looking at a dash
board of your export. By using the snapshot feature, i.e., saving a particular
analysis you may compare two _named_ analyses at a time.
#### Snapshots
Snapshots are a new feature that lets you save an analysis in your browser
storage with a name to be used later on in the comparison view. At least two
**named** analyses (i.e., snapshots) are required for an analysis.
You can save can analysis as a snapshot from the save button on the bottom
right. Alternatively, you can visit the "compare" page and paste your JSON
directly.
## Hacking
This project is built with various web technologies. Namely we use Vite,
Typescript-React (`.tsx`) and SolidJS for most of our user interfaces.
The recommended approach for resolving dependencies is using Nix; a Nix shell is
provided, and dependencies can be fetched with `pnpm` while inside the dev
shell.
```bash
# Run the live server
$ pnpm run dev
# Build a static site
$ pnpm run build
```
If submitting pull requests, please ensure that format (`pnpm run fmt`) and lint
(`pnpm run lint`) tasks are ran beforehand. The automated CI will tell you
whether your code matches the requirements, but it's a good rule of thumb to do
this before submitting your PR.
## License
<!-- markdownlint-disable MD059 -->
This project is made available under Mozilla Public License (MPL) version 2.0.
See [LICENSE](LICENSE) for more details on the exact conditions. An online copy
is provided [here](https://www.mozilla.org/en-US/MPL/2.0/).
<!-- markdownlint-enable MD059 -->