let
  mozillaOverlay = import (builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz);
in
with import <nixpkgs> { overlays = [ mozillaOverlay ]; };
let
  rustPlatform = recurseIntoAttrs (callPackage (import ./nix/rustPlatform.nix) {});
  adc2tcp = callPackage (import ./nix/adc2tcp.nix) { inherit rustPlatform; };
  openocd = callPackage (import ./nix/openocd.nix) {};
in
stdenv.mkDerivation {
  name = "adc2tcp-dist";
  buildInputs = [
    adc2tcp
    openocd
  ];
  src = ./.;
  dontBuild = true;

  installPhase = ''
    mkdir -p $out/bin $out/lib

    BIN=$out/lib/adc2tcp
    ln -s ${adc2tcp}/lib/adc2tcp $BIN
    cat >> $out/bin/flash-adc2tcp <<EOF
    #!/usr/bin/env bash
    ${openocd}/bin/openocd-nucleo-f429zi \
      -c "reset halt" \
      -c "flash write_image erase $BIN" \
      -c "verify_image $BIN" \
      -c "reset run" \
      -c "shutdown"
    EOF
    chmod +x $out/bin/flash-adc2tcp
  '';
}