docs: specify that flake.lock files are JSON (#11594)

* docs: specify that flake.lock files are JSON

Recently, I decided that I was going to write some code that would parse
flake.lock files. I went to the Nix Reference Manual in order to look up
information on the format of flake.lock files, and I realized that a key
detail was missing from the Nix Reference Manual: it never says that
flake.lock files are JSON files. This commit fixes that issue.

This commit makes sure to specify that flake.lock files are encoded in
UTF-8. Confusingly, there’s multiple different JSON standards. Neither
ECMA-404, 2nd Edition [1] nor ISO/IEC 21778:2017 [2] mention UTF-8. RFC
8259 requires UTF-8, but only sometimes [3]. I chose to explicitly
specify that flake.lock files are UTF-8 in order to avoid any possible
ambiguities from the JSON standards.

[1]: <https://ecma-international.org/publications-and-standards/standards/ecma-404>
[2]: <https://www.iso.org/standard/71616.html>
[3]: <https://www.rfc-editor.org/rfc/rfc8259.html#section-8.1>
This commit is contained in:
Jason Yundt 2024-09-25 20:21:33 -04:00 committed by GitHub
parent 4dc4e81b1e
commit a5959aa121
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -565,8 +565,9 @@ or NixOS modules, which are composed into the top-level flake's
Inputs specified in `flake.nix` are typically "unlocked" in the sense Inputs specified in `flake.nix` are typically "unlocked" in the sense
that they don't specify an exact revision. To ensure reproducibility, that they don't specify an exact revision. To ensure reproducibility,
Nix will automatically generate and use a *lock file* called Nix will automatically generate and use a *lock file* called
`flake.lock` in the flake's directory. The lock file contains a graph `flake.lock` in the flake's directory.
structure isomorphic to the graph of dependencies of the root The lock file is a UTF-8 JSON file.
It contains a graph structure isomorphic to the graph of dependencies of the root
flake. Each node in the graph (except the root node) maps the flake. Each node in the graph (except the root node) maps the
(usually) unlocked input specifications in `flake.nix` to locked input (usually) unlocked input specifications in `flake.nix` to locked input
specifications. Each node also contains some metadata, such as the specifications. Each node also contains some metadata, such as the