{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; systems.url = "github:nix-systems/default"; }; outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } { systems = import inputs.systems; perSystem = { config, self', pkgs, lib, system, ... }: let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); nonRustDeps = with pkgs; [ libiconv pkg-config openssl ]; rust-toolchain = pkgs.symlinkJoin { name = "rust-toolchain"; paths = [ pkgs.rustc pkgs.cargo pkgs.cargo-watch pkgs.rust-analyzer pkgs.rustPlatform.rustcSrc ]; }; in { # Rust package packages.default = pkgs.rustPlatform.buildRustPackage { inherit (cargoToml.package) name version; src = ./.; cargoLock.lockFile = ./Cargo.lock; }; # Rust dev environment devShells.default = pkgs.mkShell { shellHook = '' export RUST_SRC_PATH=${pkgs.rustPlatform.rustLibSrc} ''; buildInputs = nonRustDeps; nativeBuildInputs = with pkgs; [ just rust-toolchain ]; RUST_BACKTRACE = 1; }; }; }; }