fix(website): remove all windows line endings
Change-Id: I340486d90a1fb74e26b31f1f330f61ee2b570c43 Reviewed-on: https://cl.snix.dev/c/snix/+/30139 Autosubmit: Paul Meyer <katexochen0@gmail.com> Reviewed-by: Florian Klink <flokli@flokli.de> Tested-by: besadii
This commit is contained in:
parent
dd1ba855e2
commit
0b717258f0
17 changed files with 532 additions and 532 deletions
|
|
@ -1,13 +1,13 @@
|
||||||
---
|
---
|
||||||
title: "Snix"
|
title: "Snix"
|
||||||
description: "A modern Rust re-implementation of the components of the Nix package manager."
|
description: "A modern Rust re-implementation of the components of the Nix package manager."
|
||||||
lead: "A modern Rust re-implementation of the components of the Nix package manager."
|
lead: "A modern Rust re-implementation of the components of the Nix package manager."
|
||||||
date: 2023-09-07T16:33:54+02:00
|
date: 2023-09-07T16:33:54+02:00
|
||||||
lastmod: 2023-09-07T16:33:54+02:00
|
lastmod: 2023-09-07T16:33:54+02:00
|
||||||
draft: false
|
draft: false
|
||||||
seo:
|
seo:
|
||||||
title: "" # custom title (optional)
|
title: "" # custom title (optional)
|
||||||
description: "" # custom description (recommended)
|
description: "" # custom description (recommended)
|
||||||
canonical: "" # custom canonical URL (optional)
|
canonical: "" # custom canonical URL (optional)
|
||||||
robots: "" # custom robot tags (optional)
|
robots: "" # custom robot tags (optional)
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,57 +1,57 @@
|
||||||
---
|
---
|
||||||
title: "About Snix"
|
title: "About Snix"
|
||||||
slug: about
|
slug: about
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 999
|
weight: 999
|
||||||
toc: false
|
toc: false
|
||||||
---
|
---
|
||||||
|
|
||||||
<center>
|
<center>
|
||||||
{{< inline-svg src="snix-logo.svg" width="200px" height="200px" class="svg-inline-custom svg-monochrome" >}}
|
{{< inline-svg src="snix-logo.svg" width="200px" height="200px" class="svg-inline-custom svg-monochrome" >}}
|
||||||
</center>
|
</center>
|
||||||
|
|
||||||
Snix is a modern Rust re-implementation of the components of the Nix package
|
Snix is a modern Rust re-implementation of the components of the Nix package
|
||||||
manager.
|
manager.
|
||||||
|
|
||||||
Snix modularity & composability allows recombining its parts in novel ways. It
|
Snix modularity & composability allows recombining its parts in novel ways. It
|
||||||
also provides library access to Nix data formats and concepts. In the long-run,
|
also provides library access to Nix data formats and concepts. In the long-run,
|
||||||
Snix aims to produce a Nixpkgs-compatible alternative to [NixOS/nix][] with
|
Snix aims to produce a Nixpkgs-compatible alternative to [NixOS/nix][] with
|
||||||
respects to evaluation and building Nix expressions & systems.
|
respects to evaluation and building Nix expressions & systems.
|
||||||
|
|
||||||
{{< callout >}}
|
|
||||||
Snix still is in its early stages of development. None of our current APIs
|
|
||||||
should be considered stable in any way.
|
|
||||||
|
|
||||||
There is no full-featured drop-in replacement for Nix on your machine yet.
|
{{< callout >}}
|
||||||
{{</callout>}}
|
Snix still is in its early stages of development. None of our current APIs
|
||||||
|
should be considered stable in any way.
|
||||||
Snix already provides a few binaries / tools exposing some usecases, such as:
|
|
||||||
|
There is no full-featured drop-in replacement for Nix on your machine yet.
|
||||||
* A `snix-store` binary, providing access to `snix-[ca]store`
|
{{</callout>}}
|
||||||
* run a gRPC daemon exposing contents to other parties
|
|
||||||
* import local files or copy store paths into `snix-store`
|
Snix already provides a few binaries / tools exposing some usecases, such as:
|
||||||
* provide FUSE or virtiofs views into `snix-store`.
|
|
||||||
* `nar-bridge`, a Nix HTTP Binary Cache frontend for `snix-store`.
|
* A `snix-store` binary, providing access to `snix-[ca]store`
|
||||||
It allows Nix to interact with `snix-store`, both to substitute from as well
|
* run a gRPC daemon exposing contents to other parties
|
||||||
as copy into.
|
* import local files or copy store paths into `snix-store`
|
||||||
* `snix-boot`, tooling to boot microVMs off of `snix-store` (using virtiofs)
|
* provide FUSE or virtiofs views into `snix-store`.
|
||||||
* `snix-cli`, combining various components together to provide a Nix evaluator
|
* `nar-bridge`, a Nix HTTP Binary Cache frontend for `snix-store`.
|
||||||
CLI and REPL.
|
It allows Nix to interact with `snix-store`, both to substitute from as well
|
||||||
* `snixbolt`, a version of the Snix evaluator running in your browser (using
|
as copy into.
|
||||||
WASM)
|
* `snix-boot`, tooling to boot microVMs off of `snix-store` (using virtiofs)
|
||||||
|
* `snix-cli`, combining various components together to provide a Nix evaluator
|
||||||
{{<callout>}}
|
CLI and REPL.
|
||||||
|
* `snixbolt`, a version of the Snix evaluator running in your browser (using
|
||||||
|
WASM)
|
||||||
|
|
||||||
|
{{<callout>}}
|
||||||
Early adopters are encouraged to use (and extend) Snix to solve their
|
Early adopters are encouraged to use (and extend) Snix to solve their
|
||||||
own usecases.
|
own usecases.
|
||||||
If you're missing certain functionality, or run into bugs, [reach out](),
|
If you're missing certain functionality, or run into bugs, [reach out](),
|
||||||
so we can coordinate how to add/fix it.
|
so we can coordinate how to add/fix it.
|
||||||
{{</callout>}}
|
{{</callout>}}
|
||||||
|
|
||||||
Snix is developed as a GPLv3-licensed free software project with source code
|
Snix is developed as a GPLv3-licensed free software project with source code
|
||||||
available on [our own Forgejo](https://git.snix.dev/) instance.
|
available on [our own Forgejo](https://git.snix.dev/) instance.
|
||||||
|
|
||||||
[NixOS/nix]: https://github.com/NixOS/nix
|
[NixOS/nix]: https://github.com/NixOS/nix
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
---
|
---
|
||||||
title: "Blog"
|
title: "Blog"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:21:44+02:00
|
date: 2023-09-07T16:21:44+02:00
|
||||||
lastmod: 2023-09-07T16:21:44+02:00
|
lastmod: 2023-09-07T16:21:44+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 50
|
weight: 50
|
||||||
categories: []
|
categories: []
|
||||||
tags: []
|
tags: []
|
||||||
contributors: []
|
contributors: []
|
||||||
pinned: false
|
pinned: false
|
||||||
homepage: false
|
homepage: false
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,44 +1,44 @@
|
||||||
---
|
---
|
||||||
title: "Contact"
|
title: "Contact"
|
||||||
slug: contact
|
slug: contact
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 1000
|
weight: 1000
|
||||||
toc: false
|
toc: false
|
||||||
---
|
---
|
||||||
|
|
||||||
## IRC
|
## IRC
|
||||||
Discussion on Snix primarily happens on IRC. We're on the [Hackint][hackint] network.
|
Discussion on Snix primarily happens on IRC. We're on the [Hackint][hackint] network.
|
||||||
Feel free to join the `#snix` channel, best through your IRC client or via the
|
Feel free to join the `#snix` channel, best through your IRC client or via the
|
||||||
[Webchat][snix-webchat] [^1].
|
[Webchat][snix-webchat] [^1].
|
||||||
|
|
||||||
### Bridges to Matrix and XMPP
|
### Bridges to Matrix and XMPP
|
||||||
Hackint also bridges to [XMPP][hackint-xmpp] ([link][snix-xmpp]) and
|
Hackint also bridges to [XMPP][hackint-xmpp] ([link][snix-xmpp]) and
|
||||||
[Matrix][hackint-matrix] ([link][snix-matrix]), though the bridges sometimes
|
[Matrix][hackint-matrix] ([link][snix-matrix]), though the bridges sometimes
|
||||||
don't work reliably, which is outside our control.
|
don't work reliably, which is outside our control.
|
||||||
|
|
||||||
## Issue tracking
|
## Issue tracking
|
||||||
We use the [Issue Tracker][issues] on our [Forgejo Instance][code] to track
|
We use the [Issue Tracker][issues] on our [Forgejo Instance][code] to track
|
||||||
issues.
|
issues.
|
||||||
If you want to work on some of these issues, it's best to reach out first, to
|
If you want to work on some of these issues, it's best to reach out first, to
|
||||||
make sure noone is already working on this and to exchange ideas on how to solve
|
make sure noone is already working on this and to exchange ideas on how to solve
|
||||||
it.
|
it.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
Please also check out our [Contribution Guide]({{< ref "/docs/guides/contributing" >}}),
|
Please also check out our [Contribution Guide]({{< ref "/docs/guides/contributing" >}}),
|
||||||
which describes how to send changes.
|
which describes how to send changes.
|
||||||
|
|
||||||
|
|
||||||
[^1]: please be patient, it might take a while to get a response.
|
[^1]: please be patient, it might take a while to get a response.
|
||||||
|
|
||||||
[hackint]: https://hackint.org/
|
[hackint]: https://hackint.org/
|
||||||
[hackint-matrix]: https://hackint.org/transport/matrix
|
[hackint-matrix]: https://hackint.org/transport/matrix
|
||||||
[hackint-xmpp]: https://hackint.org/transport/xmpp
|
[hackint-xmpp]: https://hackint.org/transport/xmpp
|
||||||
[snix-xmpp]: xmpp:#snix@irc.hackint.org?join
|
[snix-xmpp]: xmpp:#snix@irc.hackint.org?join
|
||||||
[snix-matrix]: https://matrix.to/#/#snix:hackint.org
|
[snix-matrix]: https://matrix.to/#/#snix:hackint.org
|
||||||
[snix-webchat]: https://chat.hackint.org/?join=snix
|
[snix-webchat]: https://chat.hackint.org/?join=snix
|
||||||
[issues]: https://git.snix.dev/snix/snix/issues
|
[issues]: https://git.snix.dev/snix/snix/issues
|
||||||
[code]: https://git.snix.dev/snix/snix
|
[code]: https://git.snix.dev/snix/snix
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
---
|
---
|
||||||
title: "Docs"
|
title: "Docs"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:12:03+02:00
|
date: 2023-09-07T16:12:03+02:00
|
||||||
lastmod: 2023-09-07T16:12:03+02:00
|
lastmod: 2023-09-07T16:12:03+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 999
|
weight: 999
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
---
|
---
|
||||||
title: "Components"
|
title: "Components"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:12:37+02:00
|
date: 2023-09-07T16:12:37+02:00
|
||||||
lastmod: 2023-09-07T16:12:37+02:00
|
lastmod: 2023-09-07T16:12:37+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 30
|
weight: 30
|
||||||
toc: true
|
toc: true
|
||||||
sidebar:
|
sidebar:
|
||||||
collapsed: false
|
collapsed: false
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,26 @@
|
||||||
---
|
---
|
||||||
title: "Architecture"
|
title: "Architecture"
|
||||||
slug: architecture
|
slug: architecture
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 31
|
weight: 31
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
Snix is more decoupled than the existing, monolithic Nix implementation.
|
Snix is more decoupled than the existing, monolithic Nix implementation.
|
||||||
|
|
||||||
In practice, we expect to gain several benefits from this, such as:
|
In practice, we expect to gain several benefits from this, such as:
|
||||||
|
|
||||||
* Ability to use different builders
|
* Ability to use different builders
|
||||||
* Ability to use different store implementations
|
* Ability to use different store implementations
|
||||||
* No monopolisation of the implementation, allowing users to replace components
|
* No monopolisation of the implementation, allowing users to replace components
|
||||||
that they are unhappy with (up to and including the language evaluator)
|
that they are unhappy with (up to and including the language evaluator)
|
||||||
* Less hidden intra-dependencies between tools due to explicit RPC/IPC
|
* Less hidden intra-dependencies between tools due to explicit RPC/IPC
|
||||||
boundaries
|
boundaries
|
||||||
|
|
||||||
In addition to many individual backend implementations, Builders and Store
|
In addition to many individual backend implementations, Builders and Store
|
||||||
backends also provide a gRPC server and clients, allowing to plug in your own
|
backends also provide a gRPC server and clients, allowing to plug in your own
|
||||||
implementation.
|
implementation.
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,35 @@
|
||||||
---
|
---
|
||||||
title: "Protocol"
|
title: "Protocol"
|
||||||
slug: protocol
|
slug: protocol
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 41
|
weight: 41
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
One goal of the builder protocol is to not be too tied to the Nix implementation
|
One goal of the builder protocol is to not be too tied to the Nix implementation
|
||||||
itself, allowing it to be used for other builds/workloads in the future.
|
itself, allowing it to be used for other builds/workloads in the future.
|
||||||
|
|
||||||
This means the builder protocol is versatile enough to express the environment a
|
This means the builder protocol is versatile enough to express the environment a
|
||||||
Nix build expects, while not being aware of "what any of this means".
|
Nix build expects, while not being aware of "what any of this means".
|
||||||
|
|
||||||
For example, it is not aware of how certain environment variables are set in a
|
For example, it is not aware of how certain environment variables are set in a
|
||||||
nix build, but allows specifying environment variables that should be set.
|
nix build, but allows specifying environment variables that should be set.
|
||||||
|
|
||||||
It's also not aware of what nix store paths are. Instead, it allows:
|
It's also not aware of what nix store paths are. Instead, it allows:
|
||||||
|
|
||||||
- specifying a list of paths expected to be produced during the build
|
- specifying a list of paths expected to be produced during the build
|
||||||
- specifying a list of castore root nodes to be present in a specified
|
- specifying a list of castore root nodes to be present in a specified
|
||||||
`inputs_dir`.
|
`inputs_dir`.
|
||||||
- specifying which paths are write-able during build.
|
- specifying which paths are write-able during build.
|
||||||
|
|
||||||
In case all specified paths are produced, and the command specified in
|
In case all specified paths are produced, and the command specified in
|
||||||
`command_args` succeeds, the build is considered to be successful.
|
`command_args` succeeds, the build is considered to be successful.
|
||||||
|
|
||||||
This happens to be sufficient to *also* express how Nix builds works.
|
This happens to be sufficient to *also* express how Nix builds works.
|
||||||
|
|
||||||
Check `build/protos/build.proto` for a detailed description of the individual
|
Check `build/protos/build.proto` for a detailed description of the individual
|
||||||
fields, and the tests in `glue/src/tvix_build.rs` for some examples.
|
fields, and the tests in `glue/src/tvix_build.rs` for some examples.
|
||||||
|
|
|
||||||
|
|
@ -1,98 +1,98 @@
|
||||||
---
|
---
|
||||||
title: "Component Overview"
|
title: "Component Overview"
|
||||||
slug: overview
|
slug: overview
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 32
|
weight: 32
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
This diagram gives an overview over the different crates in the repository, the
|
This diagram gives an overview over the different crates in the repository, the
|
||||||
different contained components and the dependencies in between them.
|
different contained components and the dependencies in between them.
|
||||||
|
|
||||||
If you scroll further down, you find a textual description of what each component does.
|
If you scroll further down, you find a textual description of what each component does.
|
||||||
Check the individual documentation pages for more details.
|
Check the individual documentation pages for more details.
|
||||||
|
|
||||||
{{< inline-svg src="crate-diagram.svg" width="800px" height="800px" class="svg-inline-custom" >}}
|
{{< inline-svg src="crate-diagram.svg" width="800px" height="800px" class="svg-inline-custom" >}}
|
||||||
|
|
||||||
|
|
||||||
## Castore
|
## Castore
|
||||||
`snix-castore` is a content-addressed data storage / syncing engine.
|
`snix-castore` is a content-addressed data storage / syncing engine.
|
||||||
|
|
||||||
It uses a merkle structure to store filesystem trees, as well as a chunked blob
|
It uses a merkle structure to store filesystem trees, as well as a chunked blob
|
||||||
storage for individual file contents.
|
storage for individual file contents.
|
||||||
|
|
||||||
It is not Nix-specific.
|
It is not Nix-specific.
|
||||||
|
|
||||||
|
|
||||||
## Store
|
## Store
|
||||||
`snix-store` is a Nix store implementation using `snix-castore` for the
|
`snix-store` is a Nix store implementation using `snix-castore` for the
|
||||||
underlying data structure.
|
underlying data structure.
|
||||||
|
|
||||||
It only stores metadata like store path names, nar hashes, references,
|
It only stores metadata like store path names, nar hashes, references,
|
||||||
signatures etc, and offloads content storage to `snix-castore`, by storing the
|
signatures etc, and offloads content storage to `snix-castore`, by storing the
|
||||||
root node describing the contents.
|
root node describing the contents.
|
||||||
|
|
||||||
There's also a CLI entrypoint that can be used to host a gRPC server endpoint,
|
There's also a CLI entrypoint that can be used to host a gRPC server endpoint,
|
||||||
copy into a store, or mount a store as a FUSE/virtiofs.
|
copy into a store, or mount a store as a FUSE/virtiofs.
|
||||||
|
|
||||||
## Nix-Compat
|
## Nix-Compat
|
||||||
`nix-compat` is a library providing access to various data formats, protocols
|
`nix-compat` is a library providing access to various data formats, protocols
|
||||||
and concepts of Nix.
|
and concepts of Nix.
|
||||||
|
|
||||||
It does not depend on other Snix crates, making it a low-dependency crate to
|
It does not depend on other Snix crates, making it a low-dependency crate to
|
||||||
include in other (non-snix) projects as well.
|
include in other (non-snix) projects as well.
|
||||||
|
|
||||||
Other snix crates are usually the primary consumers and drive new functionality
|
Other snix crates are usually the primary consumers and drive new functionality
|
||||||
in there - new formats etc. are usually "factored out into nix-compat".
|
in there - new formats etc. are usually "factored out into nix-compat".
|
||||||
|
|
||||||
## Builder
|
## Builder
|
||||||
The builder consumes build requests from a client, runs builds and sends
|
The builder consumes build requests from a client, runs builds and sends
|
||||||
logs/telemetry to the client.
|
logs/telemetry to the client.
|
||||||
|
|
||||||
There currently exists an OCI builder, as well as gRPC server adapter and client
|
There currently exists an OCI builder, as well as gRPC server adapter and client
|
||||||
implementations, allowing to run the builder both locally or remotely.
|
implementations, allowing to run the builder both locally or remotely.
|
||||||
|
|
||||||
## Eval
|
## Eval
|
||||||
`snix-eval` is a bytecode interpreter evaluator. It knows about basic Nix
|
`snix-eval` is a bytecode interpreter evaluator. It knows about basic Nix
|
||||||
language data structures and semantics, constructs bytecode and provides a VM
|
language data structures and semantics, constructs bytecode and provides a VM
|
||||||
executing this bytecode.
|
executing this bytecode.
|
||||||
|
|
||||||
It also provides some "core" builtins, though builtins are pluggable - you can
|
It also provides some "core" builtins, though builtins are pluggable - you can
|
||||||
construct an evaluator and bring your own builtins.
|
construct an evaluator and bring your own builtins.
|
||||||
|
|
||||||
It also defines the `EvalIO` trait and provides some very simple implementations
|
It also defines the `EvalIO` trait and provides some very simple implementations
|
||||||
of it, which is how the evaluator does do IO.
|
of it, which is how the evaluator does do IO.
|
||||||
|
|
||||||
|
|
||||||
## Glue
|
## Glue
|
||||||
`snix-glue` provides some more builtins (those interacting with the Builder and
|
`snix-glue` provides some more builtins (those interacting with the Builder and
|
||||||
Store mostly).
|
Store mostly).
|
||||||
|
|
||||||
It allows keeping `snix-eval` relatively simple.
|
It allows keeping `snix-eval` relatively simple.
|
||||||
|
|
||||||
## CLI
|
## CLI
|
||||||
`snix-cli` is a REPL interface, constructing an Evaluator and populating it with
|
`snix-cli` is a REPL interface, constructing an Evaluator and populating it with
|
||||||
most builtins present in Nix. It is our main vehicle to evaluate Nixpkgs and
|
most builtins present in Nix. It is our main vehicle to evaluate Nixpkgs and
|
||||||
check for differences.
|
check for differences.
|
||||||
|
|
||||||
## Serde
|
## Serde
|
||||||
`snix-serde` is a crate allowing (de)-serialisation of Rust data structures
|
`snix-serde` is a crate allowing (de)-serialisation of Rust data structures
|
||||||
to/from Nix. It allows you to use (a subset of) Nix as a configuration language
|
to/from Nix. It allows you to use (a subset of) Nix as a configuration language
|
||||||
in/for your application.
|
in/for your application.
|
||||||
|
|
||||||
## Tracing
|
## Tracing
|
||||||
`snix-tracing` contains some common tracing / logging / progress reporting code
|
`snix-tracing` contains some common tracing / logging / progress reporting code
|
||||||
that's used in various CLI entrypoints.
|
that's used in various CLI entrypoints.
|
||||||
|
|
||||||
## Nar-Bridge
|
## Nar-Bridge
|
||||||
`nar-bridge` provides a Nix HTTP Binary cache server endpoint (read-write),
|
`nar-bridge` provides a Nix HTTP Binary cache server endpoint (read-write),
|
||||||
using `snix-[ca]store` to store the underlying data. It allows you to host your
|
using `snix-[ca]store` to store the underlying data. It allows you to host your
|
||||||
own binary cache that Nix can talk to.
|
own binary cache that Nix can talk to.
|
||||||
|
|
||||||
## Snixbolt
|
## Snixbolt
|
||||||
This uses `snix-eval`, providing a WASM bytecode explorer running in your
|
This uses `snix-eval`, providing a WASM bytecode explorer running in your
|
||||||
browser.
|
browser.
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
---
|
---
|
||||||
title: "Guides"
|
title: "Guides"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:06:50+02:00
|
date: 2023-09-07T16:06:50+02:00
|
||||||
lastmod: 2023-09-07T16:06:50+02:00
|
lastmod: 2023-09-07T16:06:50+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 10
|
weight: 10
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,73 +1,73 @@
|
||||||
---
|
---
|
||||||
title: "Building Snix"
|
title: "Building Snix"
|
||||||
slug: building
|
slug: building
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 11
|
weight: 11
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
This document describes how to build the project locally, both for interactive
|
This document describes how to build the project locally, both for interactive
|
||||||
development as well as referring to it from Nix code (for example, to run one of
|
development as well as referring to it from Nix code (for example, to run one of
|
||||||
its binaries on your machine).
|
its binaries on your machine).
|
||||||
|
|
||||||
{{<callout>}}
|
{{<callout>}}
|
||||||
Please check the [Contribution Guide]({{< relref "contributing" >}}) on how to
|
Please check the [Contribution Guide]({{< relref "contributing" >}}) on how to
|
||||||
contribute after following this guide.
|
contribute after following this guide.
|
||||||
{{</callout>}}
|
{{</callout>}}
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
- Ensure you have [Direnv][] installed and [hooked into your shell][direnv-inst].
|
- Ensure you have [Direnv][] installed and [hooked into your shell][direnv-inst].
|
||||||
- Ensure you have [Nix][] installed.
|
- Ensure you have [Nix][] installed.
|
||||||
|
|
||||||
### Getting the sources
|
### Getting the sources
|
||||||
Snix is hosted in its own Forgejo instance, hosted on [git.snix.dev](https://git.snix.dev/snix/snix), and a
|
Snix is hosted in its own Forgejo instance, hosted on [git.snix.dev](https://git.snix.dev/snix/snix), and a
|
||||||
(read-only) mirror on [GitHub](https://github.com/snix-project/snix).
|
(read-only) mirror on [GitHub](https://github.com/snix-project/snix).
|
||||||
|
|
||||||
Check out the source code as follows:
|
Check out the source code as follows:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ git clone https://git.snix.dev/snix/snix.git
|
$ git clone https://git.snix.dev/snix/snix.git
|
||||||
```
|
```
|
||||||
|
|
||||||
### Interactive development
|
### Interactive development
|
||||||
```console
|
```console
|
||||||
$ direnv allow
|
$ direnv allow
|
||||||
$ mg shell //snix:shell
|
$ mg shell //snix:shell
|
||||||
```
|
```
|
||||||
|
|
||||||
This provides all the necessary tools and dependencies to interactively build
|
This provides all the necessary tools and dependencies to interactively build
|
||||||
the source code, using `cargo build` etc.
|
the source code, using `cargo build` etc.
|
||||||
|
|
||||||
### Building only
|
### Building only
|
||||||
|
|
||||||
It is also possible to build the different Snix crates with Nix,
|
It is also possible to build the different Snix crates with Nix,
|
||||||
in which you don't need to enter the shell.
|
in which you don't need to enter the shell.
|
||||||
From the root of the repository, you can build as follows:
|
From the root of the repository, you can build as follows:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ nix-build -A snix.cli
|
$ nix-build -A snix.cli
|
||||||
```
|
```
|
||||||
|
|
||||||
Alternatively, you can use the `mg` wrapper from anywhere in the repository (requires the direnv setup from above):
|
Alternatively, you can use the `mg` wrapper from anywhere in the repository (requires the direnv setup from above):
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ mg build //snix:cli
|
$ mg build //snix:cli
|
||||||
```
|
```
|
||||||
|
|
||||||
This uses [crate2nix][] to build each crate dependency individually.
|
This uses [crate2nix][] to build each crate dependency individually.
|
||||||
|
|
||||||
Checkout the [Component Overview]({{< ref "/docs/components/overview" >}})
|
Checkout the [Component Overview]({{< ref "/docs/components/overview" >}})
|
||||||
to learn more about the project structure.
|
to learn more about the project structure.
|
||||||
|
|
||||||
|
|
||||||
[Direnv]: https://direnv.net
|
[Direnv]: https://direnv.net
|
||||||
[direnv-inst]: https://direnv.net/docs/installation.html
|
[direnv-inst]: https://direnv.net/docs/installation.html
|
||||||
[Nix]: https://nixos.org/nix/
|
[Nix]: https://nixos.org/nix/
|
||||||
[mg]: https://code.tvl.fyi/tree/tools/magrathea
|
[mg]: https://code.tvl.fyi/tree/tools/magrathea
|
||||||
[crate2nix]: https://github.com/nix-community/crate2nix/
|
[crate2nix]: https://github.com/nix-community/crate2nix/
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,126 +1,126 @@
|
||||||
---
|
---
|
||||||
title: "Contributing"
|
title: "Contributing"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 12
|
weight: 12
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
You want to start contributing? Nice!
|
You want to start contributing? Nice!
|
||||||
|
|
||||||
We do use [Gerrit](https://www.gerritcodereview.com) for Code Review.
|
We do use [Gerrit](https://www.gerritcodereview.com) for Code Review.
|
||||||
It allows a more granular review (per-commit granularity rather than PR
|
It allows a more granular review (per-commit granularity rather than PR
|
||||||
granularity), as well as keeping track as how commits change over time.
|
granularity), as well as keeping track as how commits change over time.
|
||||||
It greatly simplifies the review process, and leads to overall more high-quality
|
It greatly simplifies the review process, and leads to overall more high-quality
|
||||||
contributions.
|
contributions.
|
||||||
|
|
||||||
While it might initially look a bit intimidating, you hopefully will spend less
|
While it might initially look a bit intimidating, you hopefully will spend less
|
||||||
time learning its workflow than writing actual Snix code.
|
time learning its workflow than writing actual Snix code.
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mood-wink-2"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 21a9 9 0 1 1 0 -18a9 9 0 0 1 0 18z" /><path d="M9 10h-.01" /><path d="M14.5 15a3.5 3.5 0 0 1 -5 0" /><path d="M15.5 8.5l-1.5 1.5l1.5 1.5" /></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-mood-wink-2"><path stroke="none" d="M0 0h24v24H0z" fill="none"/><path d="M12 21a9 9 0 1 1 0 -18a9 9 0 0 1 0 18z" /><path d="M9 10h-.01" /><path d="M14.5 15a3.5 3.5 0 0 1 -5 0" /><path d="M15.5 8.5l-1.5 1.5l1.5 1.5" /></svg>
|
||||||
|
|
||||||
{{<callout>}}
|
{{<callout>}}
|
||||||
This assumes you have the repo already cloned and the necessary tools installed
|
This assumes you have the repo already cloned and the necessary tools installed
|
||||||
as described in [Building Snix]({{< relref "./building" >}}), so make sure you
|
as described in [Building Snix]({{< relref "./building" >}}), so make sure you
|
||||||
went through these instructions first.
|
went through these instructions first.
|
||||||
{{</callout>}}
|
{{</callout>}}
|
||||||
|
|
||||||
### Creating a Gerrit account
|
### Creating a Gerrit account
|
||||||
- Navigate to [our Gerrit instance][snix-gerrit]. Hit the "Sign in" button
|
- Navigate to [our Gerrit instance][snix-gerrit]. Hit the "Sign in" button
|
||||||
(which allows SSO with some common IdPs)
|
(which allows SSO with some common IdPs)
|
||||||
- In the User settings, paste an SSH public key and hit the "Add New SSH key"
|
- In the User settings, paste an SSH public key and hit the "Add New SSH key"
|
||||||
button. [^1]
|
button. [^1]
|
||||||
- Alternatively, you can also create "HTTP Credentials" (though saving the HTTP
|
- Alternatively, you can also create "HTTP Credentials" (though saving the HTTP
|
||||||
password is messy).
|
password is messy).
|
||||||
|
|
||||||
### Update your git remote URL
|
### Update your git remote URL
|
||||||
Instead of trying to push to Forgejo, reconfigure your git remote URL to
|
Instead of trying to push to Forgejo, reconfigure your git remote URL to
|
||||||
interact with Gerrit directly.
|
interact with Gerrit directly.
|
||||||
|
|
||||||
Replace `$USER` with your `Username` shown in the Gerrit settings.
|
Replace `$USER` with your `Username` shown in the Gerrit settings.
|
||||||
|
|
||||||
#### If using SSH authentication:
|
#### If using SSH authentication:
|
||||||
```console
|
```console
|
||||||
$ git remote set-url origin "ssh://$USER@cl.snix.dev:29418/snix"
|
$ git remote set-url origin "ssh://$USER@cl.snix.dev:29418/snix"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
#### If using HTTP authentication:
|
#### If using HTTP authentication:
|
||||||
```console
|
```console
|
||||||
$ git remote set-url origin "https://$USER@cl.snix.dev/a/snix"
|
$ git remote set-url origin "https://$USER@cl.snix.dev/a/snix"
|
||||||
```
|
```
|
||||||
|
|
||||||
<!-- TODO: fix replication to include refs/changes/… etc, and ensure it
|
<!-- TODO: fix replication to include refs/changes/… etc, and ensure it
|
||||||
replicates fast enough, then update to --push only -->
|
replicates fast enough, then update to --push only -->
|
||||||
|
|
||||||
### Install the commit-msg hook
|
### Install the commit-msg hook
|
||||||
Gerrit uses a `commit-msg` hook to add a `Change-Id: …` field to each commit
|
Gerrit uses a `commit-msg` hook to add a `Change-Id: …` field to each commit
|
||||||
message if not present already. This allows Gerrit to identify new revisions /
|
message if not present already. This allows Gerrit to identify new revisions /
|
||||||
updates of old commits, and track them as new revisions of the same "CL" [^2].
|
updates of old commits, and track them as new revisions of the same "CL" [^2].
|
||||||
|
|
||||||
To install the commit-msg hook, run the following from the repo root:
|
To install the commit-msg hook, run the following from the repo root:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
mkdir -p .git/hooks
|
mkdir -p .git/hooks
|
||||||
curl -Lo .git/hooks/commit-msg https://cl.snix.dev/tools/hooks/commit-msg
|
curl -Lo .git/hooks/commit-msg https://cl.snix.dev/tools/hooks/commit-msg
|
||||||
chmod +x .git/hooks/commit-msg
|
chmod +x .git/hooks/commit-msg
|
||||||
```
|
```
|
||||||
|
|
||||||
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
|
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
|
||||||
Gerrit refuses receiving commits without these `Change-Id: …` fields.
|
Gerrit refuses receiving commits without these `Change-Id: …` fields.
|
||||||
|
|
||||||
If you already have some local commits without `Change-Id` field, `git commit
|
If you already have some local commits without `Change-Id` field, `git commit
|
||||||
--amend` them after installing the `commit-msg` hook to add them.
|
--amend` them after installing the `commit-msg` hook to add them.
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
### Push your changes
|
|
||||||
Do some local changes, and push them to Gerrit as follows:
|
|
||||||
|
|
||||||
```console
|
|
||||||
$ git push origin HEAD:refs/for/canon
|
|
||||||
```
|
|
||||||
|
|
||||||
Gerrit will print links to newly created CLs to your terminal.
|
|
||||||
|
|
||||||
If you want to update/edit your CL, simply squash these changes into your local
|
|
||||||
commit and push again.
|
|
||||||
|
|
||||||
### The Gerrit model
|
### Push your changes
|
||||||
If do not have experience with the Gerrit, consider reading the
|
Do some local changes, and push them to Gerrit as follows:
|
||||||
[<cite>Working with Gerrit: An example</cite>][Gerrit Walkthrough] or
|
|
||||||
[<cite>Basic Gerrit Walkthrough — For GitHub Users</cite>][gerrit-for-github-users].
|
```console
|
||||||
|
$ git push origin HEAD:refs/for/canon
|
||||||
Some more tips:
|
```
|
||||||
|
|
||||||
* Assign a reviewer to review your changes.
|
Gerrit will print links to newly created CLs to your terminal.
|
||||||
* React on comments and mark them as resolved once you did.
|
|
||||||
|
If you want to update/edit your CL, simply squash these changes into your local
|
||||||
|
commit and push again.
|
||||||
|
|
||||||
|
### The Gerrit model
|
||||||
|
If do not have experience with the Gerrit, consider reading the
|
||||||
|
[<cite>Working with Gerrit: An example</cite>][Gerrit Walkthrough] or
|
||||||
|
[<cite>Basic Gerrit Walkthrough — For GitHub Users</cite>][gerrit-for-github-users].
|
||||||
|
|
||||||
|
Some more tips:
|
||||||
|
|
||||||
|
* Assign a reviewer to review your changes.
|
||||||
|
* React on comments and mark them as resolved once you did.
|
||||||
* Comments are only "Drafts" (stored server-side) until you send them off.
|
* Comments are only "Drafts" (stored server-side) until you send them off.
|
||||||
This can be done by the `Reply` button on the top, for example.
|
This can be done by the `Reply` button on the top, for example.
|
||||||
* Once CI is green, it's up to the *Author* of the CL to submit, not the
|
* Once CI is green, it's up to the *Author* of the CL to submit, not the
|
||||||
reviewer.
|
reviewer.
|
||||||
If you want a bot to automatically submit in this case, you can add the
|
If you want a bot to automatically submit in this case, you can add the
|
||||||
`Autosubmit+1` label.
|
`Autosubmit+1` label.
|
||||||
* Rebase on `origin/canon` regularly. You cannot push if you still have an old
|
* Rebase on `origin/canon` regularly. You cannot push if you still have an old
|
||||||
version of a now-submitted CL in your git log.
|
version of a now-submitted CL in your git log.
|
||||||
|
|
||||||
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
|
{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}}
|
||||||
You can immediately assign reviewers and other fields while pushing a
|
You can immediately assign reviewers and other fields while pushing a
|
||||||
new/updated change, by adding it to the push URL.
|
new/updated change, by adding it to the push URL.
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ git push origin HEAD:refs/for/canon%r=alice,cc=bob,l=Autosubmit+1,publish-comments
|
$ git push origin HEAD:refs/for/canon%r=alice,cc=bob,l=Autosubmit+1,publish-comments
|
||||||
```
|
```
|
||||||
* will set `alice` as a reviewer
|
* will set `alice` as a reviewer
|
||||||
* will set `bob` as CC
|
* will set `bob` as CC
|
||||||
* adds the `Autosubmit+1` label
|
* adds the `Autosubmit+1` label
|
||||||
* publishes any outstanding draft comments
|
* publishes any outstanding draft comments
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
|
|
||||||
[snix-gerrit]: https://cl.snix.dev
|
[snix-gerrit]: https://cl.snix.dev
|
||||||
[Gerrit walkthrough]: https://gerrit-review.googlesource.com/Documentation/intro-gerrit-walkthrough.html
|
[Gerrit walkthrough]: https://gerrit-review.googlesource.com/Documentation/intro-gerrit-walkthrough.html
|
||||||
[gerrit-for-github-users]: https://gerrit.wikimedia.org/r/Documentation/intro-gerrit-walkthrough-github.html
|
[gerrit-for-github-users]: https://gerrit.wikimedia.org/r/Documentation/intro-gerrit-walkthrough-github.html
|
||||||
[^1]: currently, `ssh-*-sk` keytypes are not supported, so use an `ssh-ed25519` key.
|
[^1]: currently, `ssh-*-sk` keytypes are not supported, so use an `ssh-ed25519` key.
|
||||||
[^2]: abbreviation for "change list", and the review unit in Gerrit.
|
[^2]: abbreviation for "change list", and the review unit in Gerrit.
|
||||||
|
|
|
||||||
|
|
@ -1,37 +1,37 @@
|
||||||
---
|
---
|
||||||
title: "Use as a library"
|
title: "Use as a library"
|
||||||
slug: use-as-library
|
slug: use-as-library
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2025-03-14T14:14:35+01:00
|
date: 2025-03-14T14:14:35+01:00
|
||||||
lastmod: 2025-03-14T14:14:35+01:00
|
lastmod: 2025-03-14T14:14:35+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 13
|
weight: 13
|
||||||
toc: true
|
toc: true
|
||||||
---
|
---
|
||||||
|
|
||||||
If you want to use (parts of) Snix in your own project, you can simply refer to
|
If you want to use (parts of) Snix in your own project, you can simply refer to
|
||||||
it using cargo and specifying the git sources. `cargo` will pin the exact rev
|
it using cargo and specifying the git sources. `cargo` will pin the exact rev
|
||||||
in `Cargo.lock`. See [The Cargo Book](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories) for details.
|
in `Cargo.lock`. See [The Cargo Book](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#specifying-dependencies-from-git-repositories) for details.
|
||||||
|
|
||||||
We do not publish to crates.io yet, due to the interfaces still being a bit
|
We do not publish to crates.io yet, due to the interfaces still being a bit
|
||||||
in flux.
|
in flux.
|
||||||
|
|
||||||
For example, to add `nix-compat`, exposing a lot of Nix data types and formats,
|
For example, to add `nix-compat`, exposing a lot of Nix data types and formats,
|
||||||
add the following line to your `Cargo.toml`'s `[dependencies]`':
|
add the following line to your `Cargo.toml`'s `[dependencies]`':
|
||||||
|
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
nix-compat = { git = "https://git.snix.dev/snix/snix.git" }
|
nix-compat = { git = "https://git.snix.dev/snix/snix.git" }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
{{<callout>}}
|
{{<callout>}}
|
||||||
Keep in mind some crates have additional requirements on their environment.
|
Keep in mind some crates have additional requirements on their environment.
|
||||||
|
|
||||||
For example, `snix-castore` and `snix-store` need to have access to a `protobuf`
|
For example, `snix-castore` and `snix-store` need to have access to a `protobuf`
|
||||||
compiler and the proto defintions (setting `PROTO_ROOT` usually).
|
compiler and the proto defintions (setting `PROTO_ROOT` usually).
|
||||||
`tvix-build` wants `TVIX_BUILD_SANDBOX_SHELL` to be set, etc.
|
`tvix-build` wants `TVIX_BUILD_SANDBOX_SHELL` to be set, etc.
|
||||||
|
|
||||||
Check each crates' `build.rs` scripts for details.
|
Check each crates' `build.rs` scripts for details.
|
||||||
{{</callout>}}
|
{{</callout>}}
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
---
|
---
|
||||||
title: "Reference"
|
title: "Reference"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:12:37+02:00
|
date: 2023-09-07T16:12:37+02:00
|
||||||
lastmod: 2023-09-07T16:12:37+02:00
|
lastmod: 2023-09-07T16:12:37+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 900
|
weight: 900
|
||||||
toc: true
|
toc: true
|
||||||
sidebar:
|
sidebar:
|
||||||
collapsed: true
|
collapsed: true
|
||||||
seo:
|
seo:
|
||||||
title: "" # custom title (optional)
|
title: "" # custom title (optional)
|
||||||
description: "" # custom description (recommended)
|
description: "" # custom description (recommended)
|
||||||
canonical: "" # custom canonical URL (optional)
|
canonical: "" # custom canonical URL (optional)
|
||||||
robots: "" # custom robot tags (optional)
|
robots: "" # custom robot tags (optional)
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
---
|
---
|
||||||
title: "Component Overview"
|
title: "Component Overview"
|
||||||
slug: component-overview
|
slug: component-overview
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:12:37+02:00
|
date: 2023-09-07T16:12:37+02:00
|
||||||
lastmod: 2023-09-07T16:12:37+02:00
|
lastmod: 2023-09-07T16:12:37+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 900
|
weight: 900
|
||||||
toc: true
|
toc: true
|
||||||
sidebar:
|
sidebar:
|
||||||
collapsed: true
|
collapsed: true
|
||||||
seo:
|
seo:
|
||||||
title: "" # custom title (optional)
|
title: "" # custom title (optional)
|
||||||
description: "" # custom description (recommended)
|
description: "" # custom description (recommended)
|
||||||
canonical: "" # custom canonical URL (optional)
|
canonical: "" # custom canonical URL (optional)
|
||||||
robots: "" # custom robot tags (optional)
|
robots: "" # custom robot tags (optional)
|
||||||
---
|
---
|
||||||
|
|
|
||||||
|
|
@ -1,21 +1,21 @@
|
||||||
---
|
---
|
||||||
title: "Example Reference"
|
title: "Example Reference"
|
||||||
description: "Reference pages are ideal for outlining how things work in terse and clear terms."
|
description: "Reference pages are ideal for outlining how things work in terse and clear terms."
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2023-09-07T16:13:18+02:00
|
date: 2023-09-07T16:13:18+02:00
|
||||||
lastmod: 2023-09-07T16:13:18+02:00
|
lastmod: 2023-09-07T16:13:18+02:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 910
|
weight: 910
|
||||||
toc: true
|
toc: true
|
||||||
seo:
|
seo:
|
||||||
title: "" # custom title (optional)
|
title: "" # custom title (optional)
|
||||||
description: "" # custom description (recommended)
|
description: "" # custom description (recommended)
|
||||||
canonical: "" # custom canonical URL (optional)
|
canonical: "" # custom canonical URL (optional)
|
||||||
robots: "" # custom robot tags (optional)
|
robots: "" # custom robot tags (optional)
|
||||||
---
|
---
|
||||||
|
|
||||||
Reference pages are ideal for outlining how things work in terse and clear terms. Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what your documenting.
|
Reference pages are ideal for outlining how things work in terse and clear terms. Less concerned with telling a story or addressing a specific use case, they should give a comprehensive outline of what your documenting.
|
||||||
|
|
||||||
## Further reading
|
## Further reading
|
||||||
|
|
||||||
- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework
|
- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,17 @@
|
||||||
---
|
---
|
||||||
title: "Resources"
|
title: "Resources"
|
||||||
description: ""
|
description: ""
|
||||||
summary: ""
|
summary: ""
|
||||||
date: 2024-02-27T09:30:56+01:00
|
date: 2024-02-27T09:30:56+01:00
|
||||||
lastmod: 2024-02-27T09:30:56+01:00
|
lastmod: 2024-02-27T09:30:56+01:00
|
||||||
draft: false
|
draft: false
|
||||||
weight: 999
|
weight: 999
|
||||||
toc: true
|
toc: true
|
||||||
seo:
|
seo:
|
||||||
title: "" # custom title (optional)
|
title: "" # custom title (optional)
|
||||||
description: "" # custom description (recommended)
|
description: "" # custom description (recommended)
|
||||||
canonical: "" # custom canonical URL (optional)
|
canonical: "" # custom canonical URL (optional)
|
||||||
robots: "" # custom robot tags (optional)
|
robots: "" # custom robot tags (optional)
|
||||||
---
|
---
|
||||||
|
|
||||||
Link to valuable, relevant resources.
|
Link to valuable, relevant resources.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue