{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = (import nixpkgs) { inherit system; }; rustPlatform = pkgs.makeRustPlatform { cargo = pkgs.cargo; rustc = pkgs.rustc; }; cargoMetadata = builtins.fromTOML (builtins.readFile ./Cargo.toml); name = cargoMetadata.package.name; version = cargoMetadata.package.version; nativeBuildInputs = with pkgs; [pkg-config]; buildInputs = with pkgs; [openssl]; in { devShell = pkgs.mkShell { nativeBuildInputs = nativeBuildInputs; buildInputs = buildInputs; packages = with pkgs; [ # Rust toolchain cargo rustc # Code analysis tools clippy rust-analyzer # Code formatting tools treefmt alejandra rustfmt # Rust dependency linting cargo-deny ]; RUSTFLAGS = "-D unused-crate-dependencies"; }; packages = { default = rustPlatform.buildRustPackage { pname = name; version = version; src = ./.; cargoLock.lockFile = ./Cargo.lock; nativeBuildInputs = nativeBuildInputs; buildInputs = buildInputs; }; }; } ); }