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" >> .envrc
Next, enable direnv for this project:
direnv allow
Run:
nix develop
Inside 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 show
To build e.g. server
you can then run:
nix build .#server
To run all the "checks" of this project, like formatting, lint, audit, etc. checks, run:
nix flake check
To run a single check e.g. the format check, run:
nix build .#checks.<system>.treefmt
Code 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.