{ inputs = { nixpkgs.url = "github:nixos/nixpkgs"; 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 ]; 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; 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" ]; }) ] ++ osxDependencies; shellHook = '' export GIT_REVISION=${gitRev} ''; }; }); }