A Rust project template packaged with Nix.
- Rust
- axum-server
- clap
- tokio
- tracing
- Nix
The following sections explain how to obtain a development shell, what tools to use during development, and lastly what to run before committing.
There are two to obtain a development shell: you can configure direnv to be dropped in a development shell automatically when you enter the directory (recommended) or do it manually.
First, you will have to install direnv, by adding it to your Nix/NixOS configuration or using your package manager.
Afterward, add a .envrc file to the root of the project:
touch .envrc
echo "use flake" >> .envrcNext, enable direnv for this project:
direnv allowRun:
nix developInside the development shell, you can use cargo as usual during development.
Because Nix gives us gives us a high degree of reproducibility, by building our project and running the checks locally and making them succeed, we can be very certain it will pass the pipeline too.
You can explore the buildable outputs of any flake project by running:
nix flake showTo build e.g. server you can then run:
nix build .#serverTo run all the "checks" of this project, like formatting, lint, audit, etc. checks, run:
nix flake checkTo run a single check e.g. the format check, run:
nix build .#checks.<system>.treefmtCode for the whole project tree can be formatted by running nix fmt from the project's root or anywhere in the tree, but be warned that it will only format code inside the sub-tree.
The nix fmt command currently formats all the Rust and Nix code in the tree. To add support for more languages you'll have to adjust the treefmt attribute-set in the flake.nix accordingly. A list of already supported formatters can be found here.