# Development setup
## Linux
### Manual install
- `rustup`: see [install Rust](https://www.rust-lang.org/tools/install)
- `cargo-readme`: install with `cargo install cargo-readme`
- Install the following packages on your distro:
- `coreutils`
- `diffutils`
- `gcc`
- `just`
- `openssl`
- `protobuf`
- `pkg-config`
- `bash`
- Optional:
- `docker` in case you need to debug issues with the CI's container.
### Using `nix`
In case you want to use `nix`, it is possible to get all of the above system
dependencies automatically installed in your *developer environment* sandbox
without polluting your system.
1. [Install `nix`](https://nixos.org/download).
2. Enable flakes support either [temporarily][tempflakes] or [permanently][permflakes].
3. Invoke `$ nix develop` from a terminal, at the root of this repository.
- All required commands should now be available from your terminal.
- *Pro tip*: Launch your editor from this terminal session (e.g.: `$
code`). This will ensure that you editor and all of its extension have
access to the required tools.
- *Pro tip*: It is even possible to skip the `nix develop` command if you
[install `direnv`](https://direnv.net/#getting-started) and
[extend it with `nix-direnv`](https://github.com/nix-community/nix-direnv#installation).
We will however leave this as an exercise for the reader.
[tempflakes]: https://nixos.wiki/wiki/Flakes#Enable_flakes_temporarily
[permflakes]: https://nixos.wiki/wiki/Flakes#Enable_flakes_permanently_in_NixOS
## Generating documentation for this package
It is possible to generate all documentation by running:
```bash
$ just doc
# ..
```
### Package
To generate only the package documentation (i.e.: without its dependencies),
run:
```bash
$ just doc-package-only
# ..
```
### Readme
The `README.md` file for this project is generated from the crate's `lib.rs`
comment.
To only re-generate the readme file, run:
```bash
$ just doc-readme
# ..
```
Note that running `just check` will also validate that the `README.md` file is
up to date with the package sources and fail if not.
Please make sure to always commit the resulting `README.md` file to version
control.