nix-rust-template

A Rust project template using flake-parts, crane, fenix.

MIT License

Stars
0

A Rust project template packaged with Nix.

Technologies/ Dependencies

Development

The following sections explain how to obtain a development shell, what tools to use during development, and lastly what to run before committing.

Development Shell

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.

Automatic Development Shell using direnv

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

Obtaining a Development Shell Manually

Run:

nix develop

Inside a Development Shell

Inside the development shell, you can use cargo as usual during development.

Before you Commit

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.

Build

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

Run the Checks

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

Format

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.