:icons: font

= My Rust Project

[link=https://ci.patagia.dev/repos/7,window=_blank]
image::https://ci.patagia.dev/api/badges/7/status.svg[Build Status]

This is an opinionated template for rust projects using Nix.

:toc: left

== Template features

- CI template for Woodpecker.
- Forgejo commit message templates.
- Linting and formatting.
- Nix-centered development environment.
- Include language servers and all tooling in Nix dev shell.

=== Rust Opinions

- https://github.com/oxalica/rust-overlay[rust-overlay] to manage rust version.
- https://nexte.st[nextest] for running tests.
- https://github.com/rui314/mold[mold] for faster linking.
- https://github.com/rust-lang/rustfmt[rustfmt] for code formatting.
- https://github.com/rust-lang/rust-clippy[clippy] for linting.

== Dev tools by default

- https://direnv.net[direnv] for automatic dev shell activation.
- https://dystroy.org/bacon/[Bacon] - automatic and minimal interaction code checker.
- https://github.com/bnjbvr/cargo-machete[cargo-machete] for removing unused dependencies.
- https://github.com/sharkdp/hyperfine[hyperfine] for simple benchmarking.
- https://just.systems/man/en/[just] for running things and discovery.
- https://github.com/watchexec/watchexec[watchexec] (and https://github.com/watchexec/cargo-watch[cargo-watch]) for watching files and running commands.

=== Nix opinions

- https://github.com/ipetkov/crane[Crane] for incremental artifact builds and nice set of checks.
- https://github.com/rustsec/advisory-db[Advisory-db]
  for automatic checking of vulnerabilities of dependencies.
- https://github.com/numtide/nix-filter[nix-filter] allows filtering out files from the source input for a project.
- https://github.com/numtide/treefmt-nix[treefmt] supports automatic code formatting of all kinds of source code.