{ description = "..."; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; crate2nix = { url = "github:kolloch/crate2nix"; flake = false; }; alejandra.url = "github:kamadorueda/alejandra/3.0.0"; alejandra.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = { self, nixpkgs, flake-utils, rust-overlay, crate2nix, alejandra, ... }: let name = "mops"; in flake-utils.lib.eachDefaultSystem ( system: let # Overlay some stuff to secure the versions we want overlays = [ (import rust-overlay) (self: super: { # rustc = super.latest.rustChannels.stable.rust; # inherit (super.latest.rustChannels.stable) cargo rust rust-fmt rust-std clippy; rustc = self.rust-bin.stable.latest.default.override {extensions = ["llvm-tools-preview"];}; cargo = self.rust-bin.stable.latest.default.override {extensions = ["llvm-tools-preview"];}; }) ]; pkgs = import nixpkgs { inherit system overlays; }; # Configuration for the non-Rust dependencies buildInputs = with pkgs; [] ++ pkgs.lib.optionals pkgs.stdenv.targetPlatform.isDarwin [pkgs.darwin.apple_sdk.frameworks.Security]; nativeBuildInputs = with pkgs; [ pkg-config openssl # For Rust rustc cargo # For coverage checks & test reports grcov cargo2junit # Bloat checks cargo-bloat # Nix tooling rnix-lsp # For Prusti # jdk11 # rustup # Compliance checks cargo-deny # misc tooling jq skopeo cocogitto cargo-edit ] ++ pkgs.lib.optionals pkgs.stdenv.targetPlatform.isDarwin [pkgs.darwin.apple_sdk.frameworks.Security]; buildEnvVars = { }; in { # `nix develop` devShell = pkgs.mkShell { inherit buildInputs nativeBuildInputs; RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; } // buildEnvVars; formatter = alejandra.defaultPackage.${system}; } ); }