diff --git a/pkgs/applications/networking/cluster/terragrunt/default.nix b/pkgs/applications/networking/cluster/terragrunt/default.nix
new file mode 100644
index 000000000000..e4a267ec1b5f
--- /dev/null
+++ b/pkgs/applications/networking/cluster/terragrunt/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, lib, buildGoPackage, fetchFromGitHub, terraform, makeWrapper }:
+
+buildGoPackage rec {
+  name = "terragrunt-${version}";
+  version = "0.8.0";
+  rev = "v${version}";
+
+  goPackagePath = "github.com/gruntwork-io/terragrunt";
+
+  src = fetchFromGitHub {
+    inherit rev;
+    owner  = "gruntwork-io";
+    repo   = "terragrunt";
+    sha256 = "1d035p2r6d8c1crxvpi5ayb9jx6f2pdgzw2197zhllavyi8n8dw1";
+  };
+
+  goDeps = ./deps.nix;
+
+  buildInputs = [ makeWrapper terraform ];
+
+  postInstall = ''
+    wrapProgram $bin/bin/terragrunt \
+      --suffix PATH : ${lib.makeBinPath [ terraform ]}
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A thin wrapper for Terraform that supports locking for Terraform state and enforces best practices.";
+    homepage = https://github.com/gruntwork-io/terragrunt/;
+    license = licenses.mit;
+    maintainers = with maintainers; [ peterhoeg ];
+  };
+}
diff --git a/pkgs/applications/networking/cluster/terragrunt/deps.nix b/pkgs/applications/networking/cluster/terragrunt/deps.nix
new file mode 100644
index 000000000000..ba1ac2b6a1ef
--- /dev/null
+++ b/pkgs/applications/networking/cluster/terragrunt/deps.nix
@@ -0,0 +1,66 @@
+# This file was generated by go2nix.
+[
+  {
+    goPackagePath = "github.com/aws/aws-sdk-go";
+    fetch = {
+      type = "git";
+      url = "https://github.com/aws/aws-sdk-go";
+      rev = "8649d278323ebf6bd20c9cd56ecb152b1c617375";
+      sha256 = "0m2nxdlvi90vw68ds9qby291skc5d0dgqi3pkalr8ma3kd9r9khv";
+    };
+  }
+  {
+    goPackagePath = "github.com/go-errors/errors";
+    fetch = {
+      type = "git";
+      url = "https://github.com/go-errors/errors";
+      rev = "8fa88b06e5974e97fbf9899a7f86a344bfd1f105";
+      sha256 = "02mvb2clbmfcqb4yclv5zhs4clkk9jxi2hiawsynl5fwmgn0d3xa";
+    };
+  }
+  {
+    goPackagePath = "github.com/hashicorp/hcl";
+    fetch = {
+      type = "git";
+      url = "https://github.com/hashicorp/hcl";
+      rev = "eb6f65b2d77ed5078887f960ff570fbddbbeb49d";
+      sha256 = "1wx6hpxmq5sby54025j9hliz10gv5v0bq6q1z2cd0asznj154ij1";
+    };
+  }
+  {
+    goPackagePath = "github.com/mattn/go-zglob";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mattn/go-zglob";
+      rev = "0b24567ec079616e9897f635f542e3bf56abb3d0";
+      sha256 = "0380dqsy0qdjranl5qfmmcr6a4g7sw4z26g1bld9y1s66madl03l";
+    };
+  }
+  {
+    goPackagePath = "github.com/mitchellh/mapstructure";
+    fetch = {
+      type = "git";
+      url = "https://github.com/mitchellh/mapstructure";
+      rev = "bfdb1a85537d60bc7e954e600c250219ea497417";
+      sha256 = "141kkh801jyp1r6hba14krydqg1iivp13j12is70j0g05z9fbji8";
+    };
+  }
+  {
+    goPackagePath = "github.com/stretchr/testify";
+    fetch = {
+      type = "git";
+      url = "https://github.com/stretchr/testify";
+      rev = "2402e8e7a02fc811447d11f881aa9746cdc57983";
+      sha256 = "01qaz781cvrv3h1428xqq8knf5ahdcj93m5k9dnivg2hcrlnqibj";
+    };
+  }
+  {
+    goPackagePath = "github.com/urfave/cli";
+    fetch = {
+      type = "git";
+      url = "https://github.com/urfave/cli";
+      rev = "8ef3805c9de2519805c3f060524b695bba2cd715";
+      sha256 = "0680rd87skmz8p8s3cwy55siz4bgjls314agfi03d7640gz7mp24";
+    };
+  }
+]
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 0d976ebd8398..f3a321c9065d 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -17708,6 +17708,8 @@ in
 
   terraform = callPackage ../applications/networking/cluster/terraform {};
 
+  terragrunt = callPackage ../applications/networking/cluster/terragrunt {};
+
   tetex = callPackage ../tools/typesetting/tex/tetex { libpng = libpng12; };
 
   tewi-font = callPackage ../data/fonts/tewi  {};