diff --git a/web/content/_index.md b/web/content/_index.md index 4a2b6ceb5..133486ab2 100644 --- a/web/content/_index.md +++ b/web/content/_index.md @@ -1,13 +1,13 @@ ---- -title: "Snix" -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." -date: 2023-09-07T16:33:54+02:00 -lastmod: 2023-09-07T16:33:54+02:00 -draft: false -seo: - title: "" # custom title (optional) - description: "" # custom description (recommended) - canonical: "" # custom canonical URL (optional) - robots: "" # custom robot tags (optional) ---- +--- +title: "Snix" +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." +date: 2023-09-07T16:33:54+02:00 +lastmod: 2023-09-07T16:33:54+02:00 +draft: false +seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/web/content/about.md b/web/content/about.md index 5f7782862..7e982f4ca 100644 --- a/web/content/about.md +++ b/web/content/about.md @@ -1,57 +1,57 @@ ---- -title: "About Snix" -slug: about -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 999 -toc: false ---- - -
-{{< inline-svg src="snix-logo.svg" width="200px" height="200px" class="svg-inline-custom svg-monochrome" >}} -
- +--- +title: "About Snix" +slug: about +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 999 +toc: false +--- + +
+{{< inline-svg src="snix-logo.svg" width="200px" height="200px" class="svg-inline-custom svg-monochrome" >}} +
+ Snix is a modern Rust re-implementation of the components of the Nix package manager. - + 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, Snix aims to produce a Nixpkgs-compatible alternative to [NixOS/nix][] with 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. -{{}} - -Snix already provides a few binaries / tools exposing some usecases, such as: - - * A `snix-store` binary, providing access to `snix-[ca]store` - * run a gRPC daemon exposing contents to other parties - * import local files or copy store paths into `snix-store` - * provide FUSE or virtiofs views into `snix-store`. - * `nar-bridge`, a Nix HTTP Binary Cache frontend for `snix-store`. - It allows Nix to interact with `snix-store`, both to substitute from as well - as copy into. - * `snix-boot`, tooling to boot microVMs off of `snix-store` (using virtiofs) - * `snix-cli`, combining various components together to provide a Nix evaluator - CLI and REPL. - * `snixbolt`, a version of the Snix evaluator running in your browser (using - WASM) - -{{}} +{{< 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. +{{}} + +Snix already provides a few binaries / tools exposing some usecases, such as: + + * A `snix-store` binary, providing access to `snix-[ca]store` + * run a gRPC daemon exposing contents to other parties + * import local files or copy store paths into `snix-store` + * provide FUSE or virtiofs views into `snix-store`. + * `nar-bridge`, a Nix HTTP Binary Cache frontend for `snix-store`. + It allows Nix to interact with `snix-store`, both to substitute from as well + as copy into. + * `snix-boot`, tooling to boot microVMs off of `snix-store` (using virtiofs) + * `snix-cli`, combining various components together to provide a Nix evaluator + CLI and REPL. + * `snixbolt`, a version of the Snix evaluator running in your browser (using + WASM) + +{{}} Early adopters are encouraged to use (and extend) Snix to solve their -own usecases. -If you're missing certain functionality, or run into bugs, [reach out](), +own usecases. +If you're missing certain functionality, or run into bugs, [reach out](), so we can coordinate how to add/fix it. -{{}} - +{{}} + 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 diff --git a/web/content/blog/_index.md b/web/content/blog/_index.md index 3f73849c3..3ddcfbbb7 100644 --- a/web/content/blog/_index.md +++ b/web/content/blog/_index.md @@ -1,14 +1,14 @@ ---- -title: "Blog" -description: "" -summary: "" -date: 2023-09-07T16:21:44+02:00 -lastmod: 2023-09-07T16:21:44+02:00 -draft: false -weight: 50 -categories: [] -tags: [] -contributors: [] -pinned: false -homepage: false ---- +--- +title: "Blog" +description: "" +summary: "" +date: 2023-09-07T16:21:44+02:00 +lastmod: 2023-09-07T16:21:44+02:00 +draft: false +weight: 50 +categories: [] +tags: [] +contributors: [] +pinned: false +homepage: false +--- diff --git a/web/content/contact.md b/web/content/contact.md index 714174f68..6e9941d1c 100644 --- a/web/content/contact.md +++ b/web/content/contact.md @@ -1,44 +1,44 @@ ---- -title: "Contact" -slug: contact -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 1000 -toc: false ---- - -## IRC -Discussion on Snix primarily happens on IRC. We're on the [Hackint][hackint] network. +--- +title: "Contact" +slug: contact +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 1000 +toc: false +--- + +## IRC +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 [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 [Matrix][hackint-matrix] ([link][snix-matrix]), though the bridges sometimes -don't work reliably, which is outside our control. - -## Issue tracking +don't work reliably, which is outside our control. + +## Issue tracking 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 make sure noone is already working on this and to exchange ideas on how to solve it. - -## Contributing -Please also check out our [Contribution Guide]({{< ref "/docs/guides/contributing" >}}), -which describes how to send changes. - - -[^1]: please be patient, it might take a while to get a response. - -[hackint]: https://hackint.org/ -[hackint-matrix]: https://hackint.org/transport/matrix -[hackint-xmpp]: https://hackint.org/transport/xmpp -[snix-xmpp]: xmpp:#snix@irc.hackint.org?join -[snix-matrix]: https://matrix.to/#/#snix:hackint.org -[snix-webchat]: https://chat.hackint.org/?join=snix -[issues]: https://git.snix.dev/snix/snix/issues -[code]: https://git.snix.dev/snix/snix + +## Contributing +Please also check out our [Contribution Guide]({{< ref "/docs/guides/contributing" >}}), +which describes how to send changes. + + +[^1]: please be patient, it might take a while to get a response. + +[hackint]: https://hackint.org/ +[hackint-matrix]: https://hackint.org/transport/matrix +[hackint-xmpp]: https://hackint.org/transport/xmpp +[snix-xmpp]: xmpp:#snix@irc.hackint.org?join +[snix-matrix]: https://matrix.to/#/#snix:hackint.org +[snix-webchat]: https://chat.hackint.org/?join=snix +[issues]: https://git.snix.dev/snix/snix/issues +[code]: https://git.snix.dev/snix/snix diff --git a/web/content/docs/_index.md b/web/content/docs/_index.md index 13fc93846..c97e96432 100644 --- a/web/content/docs/_index.md +++ b/web/content/docs/_index.md @@ -1,11 +1,11 @@ ---- -title: "Docs" -description: "" -summary: "" -date: 2023-09-07T16:12:03+02:00 -lastmod: 2023-09-07T16:12:03+02:00 -draft: false -weight: 999 -toc: true ---- - +--- +title: "Docs" +description: "" +summary: "" +date: 2023-09-07T16:12:03+02:00 +lastmod: 2023-09-07T16:12:03+02:00 +draft: false +weight: 999 +toc: true +--- + diff --git a/web/content/docs/components/_index.md b/web/content/docs/components/_index.md index 40926c921..6be1de543 100644 --- a/web/content/docs/components/_index.md +++ b/web/content/docs/components/_index.md @@ -1,12 +1,12 @@ ---- -title: "Components" -description: "" -summary: "" -date: 2023-09-07T16:12:37+02:00 -lastmod: 2023-09-07T16:12:37+02:00 -draft: false -weight: 30 -toc: true -sidebar: - collapsed: false ---- +--- +title: "Components" +description: "" +summary: "" +date: 2023-09-07T16:12:37+02:00 +lastmod: 2023-09-07T16:12:37+02:00 +draft: false +weight: 30 +toc: true +sidebar: + collapsed: false +--- diff --git a/web/content/docs/components/architecture.md b/web/content/docs/components/architecture.md index 1c0300f0d..e9cbef1db 100644 --- a/web/content/docs/components/architecture.md +++ b/web/content/docs/components/architecture.md @@ -1,26 +1,26 @@ ---- -title: "Architecture" -slug: architecture -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 31 -toc: true ---- - -Snix is more decoupled than the existing, monolithic Nix implementation. +--- +title: "Architecture" +slug: architecture +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 31 +toc: true +--- + +Snix is more decoupled than the existing, monolithic Nix implementation. In practice, we expect to gain several benefits from this, such as: - - * Ability to use different builders - * Ability to use different store implementations + + * Ability to use different builders + * Ability to use different store implementations * No monopolisation of the implementation, allowing users to replace components that they are unhappy with (up to and including the language evaluator) * Less hidden intra-dependencies between tools due to explicit RPC/IPC - boundaries - + boundaries + In addition to many individual backend implementations, Builders and Store backends also provide a gRPC server and clients, allowing to plug in your own -implementation. +implementation. diff --git a/web/content/docs/components/build/protocol.md b/web/content/docs/components/build/protocol.md index b0a976ba2..fe66eb76b 100644 --- a/web/content/docs/components/build/protocol.md +++ b/web/content/docs/components/build/protocol.md @@ -1,35 +1,35 @@ ---- -title: "Protocol" -slug: protocol -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 41 -toc: true ---- - +--- +title: "Protocol" +slug: protocol +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 41 +toc: true +--- + 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. - -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". - -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. - -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 castore root nodes to be present in a specified - `inputs_dir`. - - specifying which paths are write-able during build. - -In case all specified paths are produced, and the command specified in -`command_args` succeeds, the build is considered to be successful. - -This happens to be sufficient to *also* express how Nix builds works. - -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. + +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". + +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. + +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 castore root nodes to be present in a specified + `inputs_dir`. + - specifying which paths are write-able during build. + +In case all specified paths are produced, and the command specified in +`command_args` succeeds, the build is considered to be successful. + +This happens to be sufficient to *also* express how Nix builds works. + +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. diff --git a/web/content/docs/components/overview.md b/web/content/docs/components/overview.md index 84088297e..402f435e2 100644 --- a/web/content/docs/components/overview.md +++ b/web/content/docs/components/overview.md @@ -1,98 +1,98 @@ ---- -title: "Component Overview" -slug: overview -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 32 -toc: true ---- - +--- +title: "Component Overview" +slug: overview +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 32 +toc: true +--- + This diagram gives an overview over the different crates in the repository, the -different contained components and the dependencies in between them. - -If you scroll further down, you find a textual description of what each component does. -Check the individual documentation pages for more details. - -{{< inline-svg src="crate-diagram.svg" width="800px" height="800px" class="svg-inline-custom" >}} - - -## Castore -`snix-castore` is a content-addressed data storage / syncing engine. - +different contained components and the dependencies in between them. + +If you scroll further down, you find a textual description of what each component does. +Check the individual documentation pages for more details. + +{{< inline-svg src="crate-diagram.svg" width="800px" height="800px" class="svg-inline-custom" >}} + + +## Castore +`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 -storage for individual file contents. - -It is not Nix-specific. - - -## Store +storage for individual file contents. + +It is not Nix-specific. + + +## Store `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, 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, 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 and concepts of Nix. - + 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 in there - new formats etc. are usually "factored out into nix-compat". - -## Builder -The builder consumes build requests from a client, runs builds and sends -logs/telemetry to the 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. - -## Eval + +## Builder +The builder consumes build requests from a client, runs builds and sends +logs/telemetry to the 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. + +## Eval `snix-eval` is a bytecode interpreter evaluator. It knows about basic Nix 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 -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 of it, which is how the evaluator does do IO. - - -## Glue + + +## Glue `snix-glue` provides some more builtins (those interacting with the Builder and -Store mostly). - -It allows keeping `snix-eval` relatively simple. - -## CLI +Store mostly). + +It allows keeping `snix-eval` relatively simple. + +## CLI `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 -check for differences. - -## Serde +check for differences. + +## Serde `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 -in/for your application. - -## Tracing +in/for your application. + +## Tracing `snix-tracing` contains some common tracing / logging / progress reporting code -that's used in various CLI entrypoints. - -## Nar-Bridge +that's used in various CLI entrypoints. + +## Nar-Bridge `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 -own binary cache that Nix can talk to. - -## Snixbolt +own binary cache that Nix can talk to. + +## Snixbolt This uses `snix-eval`, providing a WASM bytecode explorer running in your browser. diff --git a/web/content/docs/guides/_index.md b/web/content/docs/guides/_index.md index 81238ac2d..836b6c0b4 100644 --- a/web/content/docs/guides/_index.md +++ b/web/content/docs/guides/_index.md @@ -1,10 +1,10 @@ ---- -title: "Guides" -description: "" -summary: "" -date: 2023-09-07T16:06:50+02:00 -lastmod: 2023-09-07T16:06:50+02:00 -draft: false -weight: 10 -toc: true ---- +--- +title: "Guides" +description: "" +summary: "" +date: 2023-09-07T16:06:50+02:00 +lastmod: 2023-09-07T16:06:50+02:00 +draft: false +weight: 10 +toc: true +--- diff --git a/web/content/docs/guides/building.md b/web/content/docs/guides/building.md index 2c0f34469..6e3161273 100644 --- a/web/content/docs/guides/building.md +++ b/web/content/docs/guides/building.md @@ -1,73 +1,73 @@ ---- -title: "Building Snix" -slug: building -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 11 -toc: true ---- - +--- +title: "Building Snix" +slug: building +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 11 +toc: true +--- + 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 its binaries on your machine). - -{{}} + +{{}} Please check the [Contribution Guide]({{< relref "contributing" >}}) on how to contribute after following this guide. -{{}} - -### Requirements - - Ensure you have [Direnv][] installed and [hooked into your shell][direnv-inst]. - - Ensure you have [Nix][] installed. - -### Getting the sources -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). - -Check out the source code as follows: - -```console -$ git clone https://git.snix.dev/snix/snix.git -``` - -### Interactive development -```console -$ direnv allow -$ mg shell //snix:shell -``` - +{{}} + +### Requirements + - Ensure you have [Direnv][] installed and [hooked into your shell][direnv-inst]. + - Ensure you have [Nix][] installed. + +### Getting the sources +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). + +Check out the source code as follows: + +```console +$ git clone https://git.snix.dev/snix/snix.git +``` + +### Interactive development +```console +$ direnv allow +$ mg shell //snix:shell +``` + This provides all the necessary tools and dependencies to interactively build -the source code, using `cargo build` etc. - -### Building only - -It is also possible to build the different Snix crates with Nix, -in which you don't need to enter the shell. -From the root of the repository, you can build as follows: - -```console -$ nix-build -A snix.cli -``` - -Alternatively, you can use the `mg` wrapper from anywhere in the repository (requires the direnv setup from above): - -```console -$ mg build //snix:cli -``` - -This uses [crate2nix][] to build each crate dependency individually. - -Checkout the [Component Overview]({{< ref "/docs/components/overview" >}}) +the source code, using `cargo build` etc. + +### Building only + +It is also possible to build the different Snix crates with Nix, +in which you don't need to enter the shell. +From the root of the repository, you can build as follows: + +```console +$ nix-build -A snix.cli +``` + +Alternatively, you can use the `mg` wrapper from anywhere in the repository (requires the direnv setup from above): + +```console +$ mg build //snix:cli +``` + +This uses [crate2nix][] to build each crate dependency individually. + +Checkout the [Component Overview]({{< ref "/docs/components/overview" >}}) to learn more about the project structure. - - -[Direnv]: https://direnv.net -[direnv-inst]: https://direnv.net/docs/installation.html -[Nix]: https://nixos.org/nix/ -[mg]: https://code.tvl.fyi/tree/tools/magrathea -[crate2nix]: https://github.com/nix-community/crate2nix/ - - + + +[Direnv]: https://direnv.net +[direnv-inst]: https://direnv.net/docs/installation.html +[Nix]: https://nixos.org/nix/ +[mg]: https://code.tvl.fyi/tree/tools/magrathea +[crate2nix]: https://github.com/nix-community/crate2nix/ + + diff --git a/web/content/docs/guides/contributing.md b/web/content/docs/guides/contributing.md index 95b50b534..56a777f76 100644 --- a/web/content/docs/guides/contributing.md +++ b/web/content/docs/guides/contributing.md @@ -1,126 +1,126 @@ ---- -title: "Contributing" -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 12 -toc: true ---- - -You want to start contributing? Nice! - -We do use [Gerrit](https://www.gerritcodereview.com) for Code Review. +--- +title: "Contributing" +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 12 +toc: true +--- + +You want to start contributing? Nice! + +We do use [Gerrit](https://www.gerritcodereview.com) for Code Review. 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 contributions. - + 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. + + +{{}} This assumes you have the repo already cloned and the necessary tools installed as described in [Building Snix]({{< relref "./building" >}}), so make sure you -went through these instructions first. -{{}} - -### Creating a Gerrit account +went through these instructions first. +{{}} + +### Creating a Gerrit account - 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" - button. [^1] + button. [^1] - Alternatively, you can also create "HTTP Credentials" (though saving the HTTP 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 interact with Gerrit directly. - + Replace `$USER` with your `Username` shown in the Gerrit settings. - -#### If using SSH authentication: -```console -$ git remote set-url origin "ssh://$USER@cl.snix.dev:29418/snix" -``` - - -#### If using HTTP authentication: -```console -$ git remote set-url origin "https://$USER@cl.snix.dev/a/snix" -``` - + +#### If using SSH authentication: +```console +$ git remote set-url origin "ssh://$USER@cl.snix.dev:29418/snix" +``` + + +#### If using HTTP authentication: +```console +$ git remote set-url origin "https://$USER@cl.snix.dev/a/snix" +``` + - -### 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 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]. - -To install the commit-msg hook, run the following from the repo root: - -```console -mkdir -p .git/hooks -curl -Lo .git/hooks/commit-msg https://cl.snix.dev/tools/hooks/commit-msg -chmod +x .git/hooks/commit-msg -``` - -{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}} -Gerrit refuses receiving commits without these `Change-Id: …` fields. - +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: + +```console +mkdir -p .git/hooks +curl -Lo .git/hooks/commit-msg https://cl.snix.dev/tools/hooks/commit-msg +chmod +x .git/hooks/commit-msg +``` + +{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}} +Gerrit refuses receiving commits without these `Change-Id: …` fields. + If you already have some local commits without `Change-Id` field, `git commit --amend` them after installing the `commit-msg` hook to add them. -{{< /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. +{{< /callout >}} -### The Gerrit model -If do not have experience with the Gerrit, consider reading the -[Working with Gerrit: An example][Gerrit Walkthrough] or -[Basic Gerrit Walkthrough — For GitHub Users][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. +### 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 +If do not have experience with the Gerrit, consider reading the +[Working with Gerrit: An example][Gerrit Walkthrough] or +[Basic Gerrit Walkthrough — For GitHub Users][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. 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 - reviewer. + reviewer. If you want a bot to automatically submit in this case, you can add the `Autosubmit+1` label. * Rebase on `origin/canon` regularly. You cannot push if you still have an old - version of a now-submitted CL in your git log. - -{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}} -You can immediately assign reviewers and other fields while pushing a -new/updated change, by adding it to the push URL. - -```console -$ git push origin HEAD:refs/for/canon%r=alice,cc=bob,l=Autosubmit+1,publish-comments -``` - * will set `alice` as a reviewer - * will set `bob` as CC - * adds the `Autosubmit+1` label - * publishes any outstanding draft comments -{{< /callout >}} - - -[snix-gerrit]: https://cl.snix.dev -[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 -[^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. + version of a now-submitted CL in your git log. + +{{< callout context="tip" title="Did you know?" icon="outline/rocket" >}} +You can immediately assign reviewers and other fields while pushing a +new/updated change, by adding it to the push URL. + +```console +$ git push origin HEAD:refs/for/canon%r=alice,cc=bob,l=Autosubmit+1,publish-comments +``` + * will set `alice` as a reviewer + * will set `bob` as CC + * adds the `Autosubmit+1` label + * publishes any outstanding draft comments +{{< /callout >}} + + +[snix-gerrit]: https://cl.snix.dev +[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 +[^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. diff --git a/web/content/docs/guides/use-as-library.md b/web/content/docs/guides/use-as-library.md index 9e2001b81..0180a76a4 100644 --- a/web/content/docs/guides/use-as-library.md +++ b/web/content/docs/guides/use-as-library.md @@ -1,37 +1,37 @@ ---- -title: "Use as a library" -slug: use-as-library -description: "" -summary: "" -date: 2025-03-14T14:14:35+01:00 -lastmod: 2025-03-14T14:14:35+01:00 -draft: false -weight: 13 -toc: true ---- - +--- +title: "Use as a library" +slug: use-as-library +description: "" +summary: "" +date: 2025-03-14T14:14:35+01:00 +lastmod: 2025-03-14T14:14:35+01:00 +draft: false +weight: 13 +toc: true +--- + 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 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 -in flux. - +in flux. + 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]`': - - -```toml -nix-compat = { git = "https://git.snix.dev/snix/snix.git" } -``` - - -{{}} -Keep in mind some crates have additional requirements on their environment. - + + +```toml +nix-compat = { git = "https://git.snix.dev/snix/snix.git" } +``` + + +{{}} +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` 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. -{{}} +{{}} diff --git a/web/content/docs/reference/_index.md b/web/content/docs/reference/_index.md index 910b2b03b..428e4a65c 100644 --- a/web/content/docs/reference/_index.md +++ b/web/content/docs/reference/_index.md @@ -1,17 +1,17 @@ ---- -title: "Reference" -description: "" -summary: "" -date: 2023-09-07T16:12:37+02:00 -lastmod: 2023-09-07T16:12:37+02:00 -draft: false -weight: 900 -toc: true -sidebar: - collapsed: true -seo: - title: "" # custom title (optional) - description: "" # custom description (recommended) - canonical: "" # custom canonical URL (optional) - robots: "" # custom robot tags (optional) ---- +--- +title: "Reference" +description: "" +summary: "" +date: 2023-09-07T16:12:37+02:00 +lastmod: 2023-09-07T16:12:37+02:00 +draft: false +weight: 900 +toc: true +sidebar: + collapsed: true +seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/web/content/docs/reference/component-overview.md b/web/content/docs/reference/component-overview.md index 80735c0ad..1b8f52a20 100644 --- a/web/content/docs/reference/component-overview.md +++ b/web/content/docs/reference/component-overview.md @@ -1,18 +1,18 @@ ---- -title: "Component Overview" -slug: component-overview -description: "" -summary: "" -date: 2023-09-07T16:12:37+02:00 -lastmod: 2023-09-07T16:12:37+02:00 -draft: false -weight: 900 -toc: true -sidebar: - collapsed: true -seo: - title: "" # custom title (optional) - description: "" # custom description (recommended) - canonical: "" # custom canonical URL (optional) - robots: "" # custom robot tags (optional) ---- +--- +title: "Component Overview" +slug: component-overview +description: "" +summary: "" +date: 2023-09-07T16:12:37+02:00 +lastmod: 2023-09-07T16:12:37+02:00 +draft: false +weight: 900 +toc: true +sidebar: + collapsed: true +seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- diff --git a/web/content/docs/reference/example.md b/web/content/docs/reference/example.md index a52208ff3..f920508c9 100644 --- a/web/content/docs/reference/example.md +++ b/web/content/docs/reference/example.md @@ -1,21 +1,21 @@ ---- -title: "Example Reference" -description: "Reference pages are ideal for outlining how things work in terse and clear terms." -summary: "" -date: 2023-09-07T16:13:18+02:00 -lastmod: 2023-09-07T16:13:18+02:00 -draft: false -weight: 910 -toc: true -seo: - title: "" # custom title (optional) - description: "" # custom description (recommended) - canonical: "" # custom canonical URL (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. - -## Further reading - -- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework +--- +title: "Example Reference" +description: "Reference pages are ideal for outlining how things work in terse and clear terms." +summary: "" +date: 2023-09-07T16:13:18+02:00 +lastmod: 2023-09-07T16:13:18+02:00 +draft: false +weight: 910 +toc: true +seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (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. + +## Further reading + +- Read [about reference](https://diataxis.fr/reference/) in the Diátaxis framework diff --git a/web/content/docs/resources.md b/web/content/docs/resources.md index afa3ab27a..ca9144f47 100644 --- a/web/content/docs/resources.md +++ b/web/content/docs/resources.md @@ -1,17 +1,17 @@ ---- -title: "Resources" -description: "" -summary: "" -date: 2024-02-27T09:30:56+01:00 -lastmod: 2024-02-27T09:30:56+01:00 -draft: false -weight: 999 -toc: true -seo: - title: "" # custom title (optional) - description: "" # custom description (recommended) - canonical: "" # custom canonical URL (optional) - robots: "" # custom robot tags (optional) ---- - -Link to valuable, relevant resources. +--- +title: "Resources" +description: "" +summary: "" +date: 2024-02-27T09:30:56+01:00 +lastmod: 2024-02-27T09:30:56+01:00 +draft: false +weight: 999 +toc: true +seo: + title: "" # custom title (optional) + description: "" # custom description (recommended) + canonical: "" # custom canonical URL (optional) + robots: "" # custom robot tags (optional) +--- + +Link to valuable, relevant resources.