{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; rust-overlay.url = "github:oxalica/rust-overlay"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, rust-overlay, nixpkgs, flake-utils, }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [rust-overlay.overlays.default]; }; osxDependencies = with pkgs; lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security darwin.apple_sdk.frameworks.CoreServices darwin.apple_sdk.frameworks.SystemConfiguration ]; cargoTomlContents = builtins.readFile ./crates/aiken/Cargo.toml; version = (builtins.fromTOML cargoTomlContents).package.version; aiken = pkgs.rustPlatform.buildRustPackage { inherit version; name = "aiken"; buildInputs = with pkgs; [openssl] ++ osxDependencies; nativeBuildInputs = with pkgs; [pkg-config openssl.dev]; src = pkgs.lib.cleanSourceWith {src = self;}; cargoLock.lockFile = ./Cargo.lock; cargoLock.outputHashes = { "textplots-0.9.6" = "sha256-Bx3zFEOnvqT7ZVfO5T8ii5u+3cPBeQTmw0F6CHQimao="; }; GIT_COMMIT_HASH_SHORT = self.shortRev or "unknown"; postPatch = '' substituteInPlace crates/aiken-lang/src/version.rs \ --replace "built_info::GIT_COMMIT_HASH_SHORT" \ "Some(\"$GIT_COMMIT_HASH_SHORT\")" ''; postInstall = '' mkdir -p $out/share/zsh/site-functions $out/bin/aiken completion zsh > $out/share/zsh/site-functions/_aiken mkdir -p $out/share/bash-completion/completions $out/bin/aiken completion bash > $out/share/bash-completion/completions/aiken mkdir -p $out/share/fish/vendor_completions.d $out/bin/aiken completion fish > $out/share/fish/vendor_completions.d/aiken.fish ''; meta = with pkgs.lib; { description = "Cardano smart contract language and toolchain"; homepage = "https://github.com/aiken-lang/aiken"; license = licenses.asl20; mainProgram = "aiken"; }; }; packages = { aiken = aiken; default = packages.aiken; }; overlays.default = final: prev: {aiken = packages.aiken;}; gitRev = if (builtins.hasAttr "rev" self) then self.rev else "dirty"; in { inherit packages overlays; devShell = pkgs.mkShell { buildInputs = with pkgs; [ pkg-config openssl cargo-insta (pkgs.rust-bin.stable.latest.default.override { extensions = ["rust-src" "clippy" "rustfmt" "rust-analyzer"]; }) ] ++ osxDependencies; shellHook = '' export GIT_REVISION=${gitRev} ''; }; }); }