nix-dylint/README.md
Marcel Müller c936e67000 Add crane as prereq
Signed-off-by: Marcel Müller <neikos@neikos.email>
2025-03-04 11:17:27 +01:00

53 lines
1.7 KiB
Markdown

# Dylint as a nix library
This repository contains a nix library that allows easy access to the
[dylint](https://github.com/trailofbits/dylint) project in a reproducible way.
**Current State**
⚠️⚠️⚠️
This repo is still evolving, and as such might break your evaluation on update.
Input to the design and structure are welcome!
⚠️⚠️⚠️
## How to use
Dylint has some [great
documentation](https://github.com/trailofbits/dylint/blob/f4cdda1d071022a2bb846b810333544d1238559b/docs/2024-10-11%20Linting%20with%20Dylint%20(EuroRust).pdf)
on how Dylint itself works.
This library then compiles and assembles the different parts you need to get it
working inside nix.
### Prerequisites
Using `nix-dylint` requires the following:
- A `nixpkgs` instance with the `rust-overlay` applied from
[`oxalica/rust-overlay`](https://github.com/oxalica/rust-overlay/tree/master).
- `crane` from [`ipetkov/crane`](https://github.com/ipetkov/crane)
- A list of lints and their nightly toolchains, formatted as e.g.
`nightly-{date}`
### Building a dylint instance
Dylint tries its best to do everything for you, but this clashes with the way
`nix`-users generally use their software. So this library generates a
`cargo-dylint` wrapper with the relevant env variables set such that it should
not build anything.
Assembling it all, it might look like this:
```nix
dylintLib = inputs.nix-dylint.mkLib { inherit pkgs crane; };
dylint = dylintLib.mkDylint { lints = [
{
toolchain = "nightly-2025-01-09";
package = dylintLib.cargo-dylint-general;
}
]; }
```
`dylint` is then a derivation that provides the `cargo-dylint` executable. One
can then use it as usual.