{
  stdenvNoCC,
  lib,
  kubernetes-helm,
  cacert,
}: let
  cleanName = lib.replaceStrings ["/"] ["-"];
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];
    }
