{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; treefmt-nix.url = "github:numtide/treefmt-nix"; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { systems = import inputs.systems; imports = [ inputs.treefmt-nix.flakeModule ]; perSystem = { config, self', pkgs, lib, system, ... }: let nonRustDeps = [ pkgs.libiconv ]; in { _module.args.pkgs = import inputs.nixpkgs { inherit system; overlays = [inputs.fenix.overlays.default]; }; # Rust dev environment devShells.default = pkgs.mkShell { inputsFrom = [config.treefmt.build.devShell]; buildInputs = nonRustDeps; nativeBuildInputs = with pkgs; [ (fenix.complete.withComponents [ "cargo" "clippy" "rust-src" "rustc" "rustfmt" ]) cargo-flamegraph rust-analyzer-nightly ]; }; # Add your auto-formatters here. # cf. https://numtide.github.io/treefmt/ treefmt.config = { projectRootFile = "flake.nix"; programs = { nixpkgs-fmt.enable = true; rustfmt.enable = true; }; }; }; }; }