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:
Paul Meyer 2025-03-19 12:00:09 +01:00 committed by clbot
parent dd1ba855e2
commit 0b717258f0
17 changed files with 532 additions and 532 deletions

View file

@ -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)
--- ---

View file

@ -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

View file

@ -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
--- ---

View file

@ -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

View file

@ -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
--- ---

View file

@ -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
--- ---

View file

@ -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.

View file

@ -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.

View file

@ -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.

View file

@ -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
--- ---

View file

@ -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/

View file

@ -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 WalkthroughFor 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 WalkthroughFor 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.

View file

@ -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>}}

View file

@ -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)
--- ---

View file

@ -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)
--- ---

View file

@ -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

View file

@ -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.