{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; }; outputs = { self , nixpkgs , flake-utils , rust-overlay }: let inherit (builtins) fromTOML readFile substring; cargoToml = fromTOML (readFile ./Cargo.toml); version = "${cargoToml.package.version}+${substring 0 8 self.lastModifiedDate}_${self.shortRev or "dirty"}"; mkFimt = { lib, rustPlatform, ... }: rustPlatform.buildRustPackage { pname = cargoToml.package.name; inherit version; src = lib.cleanSource ./.; cargoLock.lockFile = ./Cargo.lock; doCheck = true; }; in { overlays.fimt = final: prev: { fimt = prev.callPackage mkFimt; }; overlays.default = self.overlays.fimt; } // flake-utils.lib.eachDefaultSystem (system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; fimt = pkgs.callPackage mkFimt { }; in { packages = { inherit fimt; default = fimt; }; apps = let fimtApp = flake-utils.lib.mkApp { drv = fimt; }; in { fimt = fimtApp; default = fimtApp; }; devShell = pkgs.mkShell { nativeBuildInputs = [ ]; buildInputs = [ pkgs.rust-bin.stable.latest.default ]; packages = with pkgs; [ rust-analyzer ]; RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc; }; }); }