{ nixpkgs ? import <nixpkgs> {} }:

let
  inherit (nixpkgs) pkgs;

  # esp-idf as of Nov 2019 requires pyparsing < 2.4
  python2 = let
    packageOverrides = self: super: {
            pyparsing = super.pyparsing.overridePythonAttrs( old: rec {
                version = "2.3.1";
                src = super.fetchPypi {
                    pname="pyparsing";
                    inherit version;
                    sha256="66c9268862641abcac4a96ba74506e594c884e3f57690a696d21ad8210ed667a";
                };
        });
    };
    in pkgs.python2.override{inherit packageOverrides; self=python2;};

in

pkgs.stdenv.mkDerivation {
  name = "esp-idf-env";
  buildInputs = with pkgs; [
    gawk gperf gettext automake bison flex texinfo help2man libtool autoconf ncurses5 bash
    (python2.withPackages (ppkgs: with ppkgs; [ pyserial future cryptography pyelftools click ]))
    (python3.withPackages (ppkgs: with ppkgs; [ paho-mqtt ]))
    (pkgs.callPackage ./esp32-toolchain.nix {})
  ];
  shellHook = ''
    export NIX_CFLAGS_LINK=-lncurses
    export IDF_PATH=./esp-idf
    export IDF_TOOLS_PATH=$IDF_PATH/tools
  '';
}