{ stdenvNoCC, lib, kubernetes-helm, cacert }:

let
  cleanName = name: lib.replaceStrings ["/"] ["-"] name;

in {
  # name of the chart
  chart

  # chart url to fetch from custom location
, chartUrl ? null

  # version of the chart
, version ? null

# chart hash
, sha256

# whether to extract chart
, untar ? true

# use custom charts repo
, repo ? null

# pass --verify to helm chart
, verify ? false

# pass --devel to helm chart
, devel ? false }: stdenvNoCC.mkDerivation {
  name = "${cleanName chart}-${if version == null then "dev" else version}";

  buildCommand = ''
    export HOME="$PWD"
    echo "adding helm repo"
    ${if repo == null then "" else "helm repo add repository ${repo}"}
    echo "fetching helm chart"
    helm fetch -d ./chart \
      ${if untar then "--untar" else ""} \
      ${if version == null then "" else "--version ${version}"} \
      ${if devel then "--devel" else ""} \
      ${if verify then "--verify" else ""} \
      ${if chartUrl == null then (if repo == null then chart else "repository/${chart}") else chartUrl}
    cp -r chart/*/ $out
  '';
  outputHashMode = "recursive";
  outputHashAlgo = "sha256";
  outputHash = sha256;
  nativeBuildInputs = [ kubernetes-helm cacert ];
}
