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

View file

@ -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
---
<center>
{{< inline-svg src="snix-logo.svg" width="200px" height="200px" class="svg-inline-custom svg-monochrome" >}}
</center>
---
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
---
<center>
{{< inline-svg src="snix-logo.svg" width="200px" height="200px" class="svg-inline-custom svg-monochrome" >}}
</center>
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.
{{</callout>}}
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>}}
{{< 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>}}
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>}}
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.
{{</callout>}}
{{</callout>}}
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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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).
{{<callout>}}
{{<callout>}}
Please check the [Contribution Guide]({{< relref "contributing" >}}) on how to
contribute after following this guide.
{{</callout>}}
### 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
```
{{</callout>}}
### 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/

View file

@ -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.
<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>}}
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>
{{<callout>}}
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.
{{</callout>}}
### Creating a Gerrit account
went through these instructions first.
{{</callout>}}
### 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"
```
<!-- TODO: fix replication to include refs/changes/… etc, and ensure it
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
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
[<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.
### 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
[<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.
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.

View file

@ -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" }
```
{{<callout>}}
Keep in mind some crates have additional requirements on their environment.
```toml
nix-compat = { git = "https://git.snix.dev/snix/snix.git" }
```
{{<callout>}}
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.
{{</callout>}}
{{</callout>}}

View file

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

View file

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

View file

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

View file

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