{ pkgs ? import <nixpkgs> { } }:
let

  #terranix = pkgs.callPackage (pkgs.fetchgit {
  #  url = "https://github.com/mrVanDalo/terranix.git";
  #  rev = "2.3.0";
  #  sha256 = "030067h3gjc02llaa7rx5iml0ikvw6szadm0nrss2sqzshsfimm4";
  #}) { };
  terranix = pkgs.terranix;

  terraform = pkgs.writers.writeBashBin "terraform" ''
    export TF_VAR_hcloud_api_token=`${pkgs.pass}/bin/pass development/hetzner.com/api-token`
    ${pkgs.terraform_0_12}/bin/terraform "$@"
  '';

in
pkgs.mkShell {

  buildInputs = [

    terranix
    terraform

    (pkgs.writers.writeBashBin "terraform-prepare" ''
      ${pkgs.openssh}/bin/ssh-keygen -P "" -f ${toString ./.}/sshkey
    '')

    (pkgs.writers.writeBashBin "terraform-build" ''
      set -e
      set -o pipefail
      ${terranix}/bin/terranix | ${pkgs.jq}/bin/jq '.' > config.tf.json
      ${terraform}/bin/terraform init
      ${terraform}/bin/terraform apply
    '')

    (pkgs.writers.writeBashBin "terraform-destroy" ''
      ${terraform}/bin/terraform destroy
      rm ${toString ./.}/config.tf.json
    '')

    (pkgs.writers.writeBashBin "terraform-cleanup" ''
      rm ${toString ./.}/sshkey
      rm ${toString ./.}/sshkey.pub
      rm ${toString ./.}/terraform.tfstate*
    '')

  ];
}