summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2019-07-02T11·48+0100
committerVincent Ambo <tazjin@google.com>2019-07-02T11·48+0100
commite03f0630523d708e144cf340bb00dfd957e167b6 (patch)
tree6041b0ac0ddab2028488d6abf117bb783bae78ca
parent915a2f8464348e024e7d802b63d9f18eabd828e3 (diff)
parenta131b3051428d3abe220d172f93d09880b96222f (diff)
merge(infra): Embed infrastructure configuration into monorepo r/9
This contains DNS and NixOS module configuration.
-rwxr-xr-xinfra/dns/import11
-rw-r--r--infra/dns/kontemplate-works15
-rw-r--r--infra/dns/oslo-pub8
-rw-r--r--infra/dns/root-tazj-in28
-rw-r--r--infra/nixos/configuration.nix53
-rw-r--r--infra/nixos/gemma-config.lisp19
-rw-r--r--infra/nixos/glesys.nix18
-rw-r--r--infra/nixos/pkgs/gemma.nix54
-rw-r--r--infra/nixos/tazblog/configuration-packages.nix44
-rw-r--r--infra/nixos/tazblog/default.nix125
-rw-r--r--infra/nixos/tazblog/packages.nix3391
-rw-r--r--infra/nixos/tazserve.nix106
12 files changed, 3872 insertions, 0 deletions
diff --git a/infra/dns/import b/infra/dns/import
new file mode 100755
index 0000000000..e79e426b55
--- /dev/null
+++ b/infra/dns/import
@@ -0,0 +1,11 @@
+#!/bin/sh
+set -ue
+
+# Imports a zone file into a Google Cloud DNS zone of the same name
+readonly ZONE="${1}"
+
+gcloud dns record-sets import "${ZONE}" \
+       --project composite-watch-759 \
+       --zone-file-format \
+       --delete-all-existing \
+       --zone "${ZONE}"
diff --git a/infra/dns/kontemplate-works b/infra/dns/kontemplate-works
new file mode 100644
index 0000000000..326a129d21
--- /dev/null
+++ b/infra/dns/kontemplate-works
@@ -0,0 +1,15 @@
+;;  -*- mode: zone; -*-
+;; Do not delete these
+kontemplate.works. 21600 IN NS ns-cloud-d1.googledomains.com.
+kontemplate.works. 21600 IN NS ns-cloud-d2.googledomains.com.
+kontemplate.works. 21600 IN NS ns-cloud-d3.googledomains.com.
+kontemplate.works. 21600 IN NS ns-cloud-d4.googledomains.com.
+kontemplate.works. 21600 IN SOA ns-cloud-d1.googledomains.com. cloud-dns-hostmaster.google.com. 4 21600 3600 259200 300
+
+;; Github site setup
+kontemplate.works. 60 IN A 185.199.108.153
+kontemplate.works. 60 IN A 185.199.109.153
+kontemplate.works. 60 IN A 185.199.110.153
+kontemplate.works. 60 IN A 185.199.111.153
+
+www.kontemplate.works. 60 IN CNAME tazjin.github.io.
diff --git a/infra/dns/oslo-pub b/infra/dns/oslo-pub
new file mode 100644
index 0000000000..674687484b
--- /dev/null
+++ b/infra/dns/oslo-pub
@@ -0,0 +1,8 @@
+;; Do not delete these
+oslo.pub. 21600 IN NS ns-cloud-c1.googledomains.com.
+oslo.pub. 21600 IN NS ns-cloud-c2.googledomains.com.
+oslo.pub. 21600 IN NS ns-cloud-c3.googledomains.com.
+oslo.pub. 21600 IN NS ns-cloud-c4.googledomains.com.
+oslo.pub. 21600 IN SOA ns-cloud-c1.googledomains.com. cloud-dns-hostmaster.google.com. 4 21600 3600 1209600 300
+
+oslo.pub. 60 IN A 46.21.106.241
diff --git a/infra/dns/root-tazj-in b/infra/dns/root-tazj-in
new file mode 100644
index 0000000000..80ea9e298e
--- /dev/null
+++ b/infra/dns/root-tazj-in
@@ -0,0 +1,28 @@
+;; Do not delete these
+tazj.in. 21600 IN NS ns-cloud-a1.googledomains.com.
+tazj.in. 21600 IN NS ns-cloud-a2.googledomains.com.
+tazj.in. 21600 IN NS ns-cloud-a3.googledomains.com.
+tazj.in. 21600 IN NS ns-cloud-a4.googledomains.com.
+tazj.in. 21600 IN SOA ns-cloud-a1.googledomains.com. cloud-dns-hostmaster.google.com. 109 21600 3600 1209600 300
+
+;; Email setup
+tazj.in. 300 IN MX 10 mx.runbox.com.
+tazj.in. 300 IN TXT "v=spf1 redirect=spf.runbox.com"
+
+;; Site verifications
+tazj.in. 3600 IN TXT "keybase-site-verification=gC4kzEmnLzY7F669PjN-pw2Cf__xHqcxQ08Gb-W9dhE"
+tazj.in. 3600 IN TXT "google-site-verification=8ila9SmLtwSOlciHpmst-RG_Z-peiV5PevEVyaeL0Z0"
+tazj.in. 3600 IN TXT "detectify-verification=b2eab87b05e615c13d8907d47eddfcad"
+www.tazj.in. 3600 IN TXT "keybase-site-verification=ER8m_byyqAhzeIy9TyzkAU1H2p2yHtpvImuB_XrRF2U"
+
+;; Webpage records setup
+tazj.in. 300 IN A 46.21.106.241
+www.tazj.in. 300 IN A 46.21.106.241
+git.tazj.in. 300 IN A 46.21.106.241
+gemma.tazj.in. 300 IN A 46.21.106.241
+
+files.tazj.in. 300 IN CNAME c.storage.googleapis.com.
+ip.tazj.in. 300 IN A 104.155.119.229
+
+;; GleSYS machines
+sto-tazserve-1.tazj.in. 300 IN A 46.21.106.241
diff --git a/infra/nixos/configuration.nix b/infra/nixos/configuration.nix
new file mode 100644
index 0000000000..1de11a16f9
--- /dev/null
+++ b/infra/nixos/configuration.nix
@@ -0,0 +1,53 @@
+# This file contains basic configuration for all *.tazj.in Nix machines.
+
+{ config, pkgs, ... }:
+
+{
+  boot.loader.grub.enable = true;
+  boot.loader.grub.version = 2;
+  boot.loader.grub.device = "/dev/sda";
+
+  boot.initrd.availableKernelModules = [
+    "ata_piix"
+    "mptspi"
+    "sd_mod"
+    "sr_mod"
+  ];
+
+  # Configure root disk
+  fileSystems."/" = {
+    device = "/dev/disk/by-label/nixos";
+    fsType = "ext4";
+  };
+
+  services.vmwareGuest.enable = true;
+  services.vmwareGuest.headless = true;
+
+  time.timeZone = "Europe/Oslo";
+
+  environment.systemPackages = with pkgs; [
+    curl emacs htop
+  ];
+
+  services.openssh.enable = true;
+
+  networking.firewall.enable = true;
+  networking.firewall.allowedTCPPorts = [ 22 80 443 ];
+
+  users.extraUsers.vincent = {
+    isNormalUser = true;
+    uid = 1000;
+    extraGroups = [ "wheel" ];
+  };
+
+  security.sudo = {
+    enable = true;
+    extraConfig = "%wheel ALL=(ALL) NOPASSWD: ALL";
+  };
+
+  # This value determines the NixOS release with which your system is to be
+  # compatible, in order to avoid breaking some software such as database
+  # servers. You should change this only after NixOS release notes say you
+  # should.
+  system.stateVersion = "17.09"; # Did you read the comment?
+}
diff --git a/infra/nixos/gemma-config.lisp b/infra/nixos/gemma-config.lisp
new file mode 100644
index 0000000000..517a658cf1
--- /dev/null
+++ b/infra/nixos/gemma-config.lisp
@@ -0,0 +1,19 @@
+(config :port 4242
+        :data-dir "/var/lib/gemma/")
+
+(deftask bathroom/wipe-mirror 7)
+(deftask bathroom/wipe-counter 7)
+
+;; Bedroom tasks
+(deftask bedroom/change-sheets 7)
+(deftask bedroom/vacuum 10)
+
+;; Kitchen tasks
+(deftask kitchen/normal-trash 3)
+(deftask kitchen/green-trash 5)
+(deftask kitchen/blue-trash 5)
+(deftask kitchen/wipe-counters 3)
+(deftask kitchen/vacuum 5 "Kitchen has more crumbs and such!")
+
+;; Entire place
+(deftask clean-windows 60)
diff --git a/infra/nixos/glesys.nix b/infra/nixos/glesys.nix
new file mode 100644
index 0000000000..4cd66cb195
--- /dev/null
+++ b/infra/nixos/glesys.nix
@@ -0,0 +1,18 @@
+{
+  sto-tazserve-1 = { pkgs, config, ... }: {
+    deployment.targetHost = "46.21.106.241";
+
+    # Configure network
+    networking.hostName = "sto-tazserve-1";
+    networking.interfaces.ens32.ip4 = [
+      { address = "46.21.106.241"; prefixLength = 23; }
+    ];
+    networking.defaultGateway = "46.21.106.1";
+    networking.nameservers = [ "195.20.206.80" "195.20.206.81" ];
+
+    imports = [
+      ./configuration.nix
+      ./tazserve.nix
+    ];
+  };
+}
diff --git a/infra/nixos/pkgs/gemma.nix b/infra/nixos/pkgs/gemma.nix
new file mode 100644
index 0000000000..4e96734794
--- /dev/null
+++ b/infra/nixos/pkgs/gemma.nix
@@ -0,0 +1,54 @@
+{ pkgs ? import <nixpkgs> {} }:
+
+with pkgs; stdenv.mkDerivation rec {
+  name = "gemma";
+
+  src = fetchFromGitHub {
+    owner  = "tazjin";
+    repo   = "gemma";
+    rev    = "61be253d6baa99f0a2208425b8a03b444bb1b184";
+    sha256 = "0vbmz2aphcida728rc0z3k7gychs4w1778vsjbrs0ljk9qgbmyr5";
+  };
+
+  buildInputs = with lispPackages; [
+    sbcl
+    quicklisp
+    hunchentoot
+    cl-json
+    local-time
+    elmPackages.elm
+    pkgconfig
+  ];
+
+  # The build phase has three distinct things it needs to do:
+  #
+  # 1. "Compile" the Elm source into something useful to browsers.
+  #
+  # 2. Configure the Lisp part of the application to serve the compiled Elm
+  #
+  # 3. Build (and don't strip!) an executable out of the Lisp backend.
+  buildPhase = ''
+    mkdir -p $out/share/gemma $out/bin
+    mkdir .home && export HOME="$PWD/.home"
+
+    # Build Elm
+    cd frontend
+    elm-make --yes Main.elm --output $out/share/gemma/index.html
+
+    # Build Lisp
+    cd $src
+    quicklisp init
+    env GEMMA_BIN_TARGET=$out/bin/gemma sbcl --load build.lisp
+  '';
+
+  installPhase = "true";
+
+  # Stripping an SBCL executable removes the application, which is unfortunate.
+  dontStrip = true;
+
+  meta = with stdenv.lib; {
+    description = "Tool for tracking recurring tasks";
+    homepage    = "https://github.com/tazjin/gemma";
+    license     = licenses.gpl3;
+  };
+}
diff --git a/infra/nixos/tazblog/configuration-packages.nix b/infra/nixos/tazblog/configuration-packages.nix
new file mode 100644
index 0000000000..d27d68b6d6
--- /dev/null
+++ b/infra/nixos/tazblog/configuration-packages.nix
@@ -0,0 +1,44 @@
+# Generated by stackage2nix 0.4.0 from "/nix/store/848g1i6w075hdan5w0i4zjc2vgrhig7f-stackage-all/lts-9.20.yaml"
+{ pkgs, haskellLib }:
+
+with haskellLib; self: super: {
+
+  # core packages
+  "array" = null;
+  "base" = null;
+  "binary" = null;
+  "bytestring" = null;
+  "containers" = null;
+  "deepseq" = null;
+  "directory" = null;
+  "filepath" = null;
+  "ghc-boot" = null;
+  "ghc-boot-th" = null;
+  "ghc-prim" = null;
+  "ghci" = null;
+  "hoopl" = null;
+  "hpc" = null;
+  "integer-gmp" = null;
+  "pretty" = null;
+  "process" = null;
+  "rts" = null;
+  "template-haskell" = null;
+  "time" = null;
+  "transformers" = null;
+  "unix" = null;
+  # break cycle: HUnit call-stack nanospec hspec QuickCheck test-framework xml text quickcheck-unicode test-framework-hunit test-framework-quickcheck2 hspec-core async hspec-expectations hspec-meta quickcheck-io silently temporary base-compat exceptions tasty clock tasty-quickcheck tasty-hunit optparse-applicative regex-tdfa parsec hspec-discover stringbuilder
+  "stringbuilder" = dontCheck super.stringbuilder;
+  "hspec-discover" = dontCheck super.hspec-discover;
+  "optparse-applicative" = dontCheck super.optparse-applicative;
+  "clock" = dontCheck super.clock;
+  "exceptions" = dontCheck super.exceptions;
+  "base-compat" = dontCheck super.base-compat;
+  "temporary" = dontCheck super.temporary;
+  "silently" = dontCheck super.silently;
+  "async" = dontCheck super.async;
+  "text" = dontCheck super.text;
+  "nanospec" = dontCheck super.nanospec;
+  # break cycle: statistics monad-par mwc-random vector-algorithms
+  "mwc-random" = dontCheck super.mwc-random;
+
+}
diff --git a/infra/nixos/tazblog/default.nix b/infra/nixos/tazblog/default.nix
new file mode 100644
index 0000000000..2598be1ea0
--- /dev/null
+++ b/infra/nixos/tazblog/default.nix
@@ -0,0 +1,125 @@
+# Generated by stackage2nix 0.4.0 from "./stack.yaml"
+{ blogSource ? ./.
+, nixpkgs ? import <nixpkgs> {} }:
+
+with nixpkgs;
+let
+  inherit (stdenv.lib) extends;
+  haskellLib = callPackage (nixpkgs.path + "/pkgs/development/haskell-modules/lib.nix") {};
+  stackagePackages = import ./packages.nix;
+  stackageConfig = import  ./configuration-packages.nix { inherit pkgs haskellLib; };
+  stackPackages =
+    { pkgs, stdenv, callPackage }:
+    
+    self: {
+      "acid-state" = callPackage
+        ({ mkDerivation, array, base, bytestring, cereal, containers
+         , criterion, directory, extensible-exceptions, filepath, mtl
+         , network, random, safecopy, stm, system-fileio, system-filepath
+         , template-haskell, unix
+         }:
+         mkDerivation {
+           pname = "acid-state";
+           version = "0.14.3";
+           sha256 = "1d8hq8cj6h4crfnkmds6mhrhhg7r1b1byb8fybaj8khfa99sj0nm";
+           libraryHaskellDepends = [
+             array base bytestring cereal containers directory
+             extensible-exceptions filepath mtl network safecopy stm
+             template-haskell unix
+           ];
+           benchmarkHaskellDepends = [
+             base criterion directory mtl random system-fileio system-filepath
+           ];
+           doHaddock = false;
+           doCheck = false;
+           homepage = "https://github.com/acid-state/acid-state";
+           description = "Add ACID guarantees to any serializable Haskell data structure";
+           license = stdenv.lib.licenses.publicDomain;
+         }) {};
+      "ixset" = callPackage
+        ({ mkDerivation, base, containers, safecopy, syb, syb-with-class
+         , template-haskell
+         }:
+         mkDerivation {
+           pname = "ixset";
+           version = "1.0.7";
+           sha256 = "1la2gdlblgwpymlawcc9zqr7c5w942di12yshm35wg0x3dc5l3ig";
+           libraryHaskellDepends = [
+             base containers safecopy syb syb-with-class template-haskell
+           ];
+           doHaddock = false;
+           doCheck = false;
+           homepage = "http://happstack.com";
+           description = "Efficient relational queries on Haskell sets";
+           license = stdenv.lib.licenses.bsd3;
+         }) {};
+      "rss" = callPackage
+        ({ mkDerivation, base, HaXml, network, network-uri, old-locale
+         , time
+         }:
+         mkDerivation {
+           pname = "rss";
+           version = "3000.2.0.6";
+           sha256 = "03crzmi9903w6xsdc00wd9jhsr41b8pglz9n502h68w3jkm6zr4d";
+           libraryHaskellDepends = [
+             base HaXml network network-uri old-locale time
+           ];
+           doHaddock = false;
+           doCheck = false;
+           homepage = "https://github.com/basvandijk/rss";
+           description = "A library for generating RSS 2.0 feeds.";
+           license = stdenv.lib.licenses.publicDomain;
+         }) {};
+      "syb-with-class" = callPackage
+        ({ mkDerivation, array, base, bytestring, containers
+         , template-haskell
+         }:
+         mkDerivation {
+           pname = "syb-with-class";
+           version = "0.6.1.8";
+           sha256 = "01b187jhhfp77l4zgks5gszkn9jmgjc44mw9yympw1fsfskljiz3";
+           libraryHaskellDepends = [
+             array base bytestring containers template-haskell
+           ];
+           doHaddock = false;
+           doCheck = false;
+           description = "Scrap Your Boilerplate With Class";
+           license = stdenv.lib.licenses.bsd3;
+         }) {};
+      "tazblog" = callPackage
+        ({ mkDerivation, acid-state, base, base64-bytestring, blaze-html
+         , blaze-markup, bytestring, crypto-api, cryptohash, hamlet
+         , happstack-server, ixset, markdown, mtl, network, network-uri
+         , old-locale, options, rss, safecopy, shakespeare, text, time
+         , transformers
+         }:
+         mkDerivation {
+           pname = "tazblog";
+           version = "5.1.3";
+           src = blogSource;
+           isLibrary = true;
+           isExecutable = true;
+           libraryHaskellDepends = [
+             acid-state base base64-bytestring blaze-html blaze-markup
+             bytestring crypto-api cryptohash hamlet happstack-server ixset
+             markdown mtl network network-uri old-locale rss safecopy
+             shakespeare text time transformers
+           ];
+           executableHaskellDepends = [ acid-state base network options ];
+           description = "Tazjin's Blog";
+           license = stdenv.lib.licenses.mit;
+         }) {};
+    };
+  
+  pkgOverrides = self: stackPackages {
+    inherit pkgs stdenv;
+    inherit (self) callPackage;
+  };
+  
+in callPackage (nixpkgs.path + "/pkgs/development/haskell-modules") {
+  ghc = pkgs.haskell.compiler.ghc802;
+  compilerConfig = self: extends pkgOverrides (stackageConfig self);
+  initialPackages = stackagePackages;
+  configurationCommon = args: self: super: {};
+  inherit haskellLib;
+}
diff --git a/infra/nixos/tazblog/packages.nix b/infra/nixos/tazblog/packages.nix
new file mode 100644
index 0000000000..30f70abe6a
--- /dev/null
+++ b/infra/nixos/tazblog/packages.nix
@@ -0,0 +1,3391 @@
+# Generated by stackage2nix 0.4.0 from "/nix/store/848g1i6w075hdan5w0i4zjc2vgrhig7f-stackage-all/lts-9.20.yaml"
+{ pkgs, stdenv, callPackage }:
+
+self: {
+  "Cabal" = callPackage
+    ({ mkDerivation, array, base, binary, bytestring, containers
+     , deepseq, directory, filepath, pretty, process, time, unix
+     }:
+     mkDerivation {
+       pname = "Cabal";
+       version = "1.24.2.0";
+       sha256 = "0h33v1716wkqh9wvq2wynvhwzkjjhg4aav0a1i3cmyq36n7fpl5p";
+       revision = "2";
+       editedCabalFile = "15ncrm7x2lg4hn0m5mhc8hy769bzhmajsm6l9i6536plfs2bbbdj";
+       libraryHaskellDepends = [
+         array base binary bytestring containers deepseq directory filepath
+         pretty process time unix
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.haskell.org/cabal/";
+       description = "A framework for packaging Haskell software";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "Glob" = callPackage
+    ({ mkDerivation, base, containers, directory, dlist, filepath
+     , transformers, transformers-compat
+     }:
+     mkDerivation {
+       pname = "Glob";
+       version = "0.8.0";
+       sha256 = "15p8nbi19mhl3iisngbawmdpvk8paaqq4248fqgan63q1sz13w1q";
+       libraryHaskellDepends = [
+         base containers directory dlist filepath transformers
+         transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://iki.fi/matti.niemenmaa/glob/";
+       description = "Globbing library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "HTTP" = callPackage
+    ({ mkDerivation, array, base, bytestring, mtl, network, network-uri
+     , parsec, time
+     }:
+     mkDerivation {
+       pname = "HTTP";
+       version = "4000.3.9";
+       sha256 = "1zv38sjr1kv6vm35a8w5659ap9jpxpq5b9zjgablils8ca52p5h5";
+       libraryHaskellDepends = [
+         array base bytestring mtl network network-uri parsec time
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell/HTTP";
+       description = "A library for client-side HTTP";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "HUnit" = callPackage
+    ({ mkDerivation, base, call-stack, deepseq, filepath }:
+     mkDerivation {
+       pname = "HUnit";
+       version = "1.5.0.0";
+       sha256 = "186ykl7vxlfgkd2k8k1rq7yzcryzjpqwmn4ci1nn9h6irqbivib5";
+       libraryHaskellDepends = [ base call-stack deepseq ];
+       testHaskellDepends = [ base call-stack deepseq filepath ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/hspec/HUnit#readme";
+       description = "A unit testing framework for Haskell";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "HaXml" = callPackage
+    ({ mkDerivation, base, bytestring, containers, directory, filepath
+     , polyparse, pretty, random
+     }:
+     mkDerivation {
+       pname = "HaXml";
+       version = "1.25.4";
+       sha256 = "1d8xq37h627im5harybhsn08qjdaf6vskldm03cqbfjmr2w6fx6p";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         base bytestring containers filepath polyparse pretty random
+       ];
+       executableHaskellDepends = [ base directory polyparse pretty ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://projects.haskell.org/HaXml/";
+       description = "Utilities for manipulating XML documents";
+       license = "LGPL";
+     }) {};
+  "QuickCheck" = callPackage
+    ({ mkDerivation, base, containers, random, template-haskell
+     , test-framework, tf-random, transformers
+     }:
+     mkDerivation {
+       pname = "QuickCheck";
+       version = "2.9.2";
+       sha256 = "119np67qvx8hyp9vkg4gr2wv3lj3j6ay2vl4hxspkg43ymb1cp0m";
+       libraryHaskellDepends = [
+         base containers random template-haskell tf-random transformers
+       ];
+       testHaskellDepends = [
+         base containers template-haskell test-framework
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/nick8325/quickcheck";
+       description = "Automatic testing of Haskell programs";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "StateVar" = callPackage
+    ({ mkDerivation, base, stm, transformers }:
+     mkDerivation {
+       pname = "StateVar";
+       version = "1.1.0.4";
+       sha256 = "1dzz9l0haswgag9x56q7n57kw18v7nhmzkjyr61nz9y9npn8vmks";
+       libraryHaskellDepends = [ base stm transformers ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell-opengl/StateVar";
+       description = "State variables";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "abstract-deque" = callPackage
+    ({ mkDerivation, array, base, containers, random, time }:
+     mkDerivation {
+       pname = "abstract-deque";
+       version = "0.3";
+       sha256 = "18jwswjxwzc9bjiy4ds6hw2a74ki797jmfcifxd2ga4kh7ri1ah9";
+       libraryHaskellDepends = [ array base containers random time ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/rrnewton/haskell-lockfree/wiki";
+       description = "Abstract, parameterized interface to mutable Deques";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "abstract-par" = callPackage
+    ({ mkDerivation, base, deepseq }:
+     mkDerivation {
+       pname = "abstract-par";
+       version = "0.3.3";
+       sha256 = "0q6qsniw4wks2pw6wzncb1p1j3k6al5njnvm2v5n494hplwqg2i4";
+       libraryHaskellDepends = [ base deepseq ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/simonmar/monad-par";
+       description = "Type classes generalizing the functionality of the 'monad-par' library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "adjunctions" = callPackage
+    ({ mkDerivation, array, base, comonad, containers, contravariant
+     , distributive, free, mtl, profunctors, semigroupoids, semigroups
+     , tagged, transformers, transformers-compat, void
+     }:
+     mkDerivation {
+       pname = "adjunctions";
+       version = "4.3";
+       sha256 = "1k1ykisf96i4g2zm47c45md7p42c4vsp9r73392pz1g8mx7s2j5r";
+       revision = "1";
+       editedCabalFile = "1079l9szyr7ybi9wcvv1vjsjfrqirkn9z3j7dann8vbk81a4z37q";
+       libraryHaskellDepends = [
+         array base comonad containers contravariant distributive free mtl
+         profunctors semigroupoids semigroups tagged transformers
+         transformers-compat void
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/adjunctions/";
+       description = "Adjunctions and representable functors";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "aeson" = callPackage
+    ({ mkDerivation, attoparsec, base, base-compat, base-orphans
+     , base16-bytestring, bytestring, containers, deepseq, directory
+     , dlist, filepath, generic-deriving, ghc-prim, hashable
+     , hashable-time, HUnit, integer-logarithms, QuickCheck
+     , quickcheck-instances, scientific, tagged, template-haskell
+     , test-framework, test-framework-hunit, test-framework-quickcheck2
+     , text, time, time-locale-compat, unordered-containers, uuid-types
+     , vector
+     }:
+     mkDerivation {
+       pname = "aeson";
+       version = "1.1.2.0";
+       sha256 = "1zy5z8pzvh53qkjm0nm3f4rwqfqg3867ck8ncd6mrxpcyvxqqj1p";
+       revision = "1";
+       editedCabalFile = "06acsik1qcn5r1z1y3n7iw5h8x0h3hdcjii0bq9nf9ncvc71h1d4";
+       libraryHaskellDepends = [
+         attoparsec base base-compat bytestring containers deepseq dlist
+         ghc-prim hashable scientific tagged template-haskell text time
+         time-locale-compat unordered-containers uuid-types vector
+       ];
+       testHaskellDepends = [
+         attoparsec base base-compat base-orphans base16-bytestring
+         bytestring containers directory dlist filepath generic-deriving
+         ghc-prim hashable hashable-time HUnit integer-logarithms QuickCheck
+         quickcheck-instances scientific tagged template-haskell
+         test-framework test-framework-hunit test-framework-quickcheck2 text
+         time time-locale-compat unordered-containers uuid-types vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/aeson";
+       description = "Fast JSON parsing and encoding";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "ansi-terminal" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "ansi-terminal";
+       version = "0.6.3.1";
+       sha256 = "15c0c0vb66y3mr11kcvgjf4h0f7dqg7k1xq7zzq9fy11r7h9i3s5";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [ base ];
+       executableHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/feuerbach/ansi-terminal";
+       description = "Simple ANSI terminal support, with Windows compatibility";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "ansi-wl-pprint" = callPackage
+    ({ mkDerivation, ansi-terminal, base }:
+     mkDerivation {
+       pname = "ansi-wl-pprint";
+       version = "0.6.7.3";
+       sha256 = "025pyphsjf0dnbrmj5nscbi6gzyigwgp3ifxb3psn7kji6mfr29p";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [ ansi-terminal base ];
+       executableHaskellDepends = [ ansi-terminal base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/ansi-wl-pprint";
+       description = "The Wadler/Leijen Pretty Printer for colored ANSI terminal output";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "async" = callPackage
+    ({ mkDerivation, base, HUnit, stm, test-framework
+     , test-framework-hunit
+     }:
+     mkDerivation {
+       pname = "async";
+       version = "2.1.1.1";
+       sha256 = "1qj4fp1ynwg0l453gmm27vgkzb5k5m2hzdlg5rdqi9kf8rqy90yd";
+       libraryHaskellDepends = [ base stm ];
+       testHaskellDepends = [
+         base HUnit test-framework test-framework-hunit
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/simonmar/async";
+       description = "Run IO operations asynchronously and wait for their results";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "attoparsec" = callPackage
+    ({ mkDerivation, array, base, bytestring, case-insensitive
+     , containers, criterion, deepseq, directory, filepath, ghc-prim
+     , http-types, parsec, QuickCheck, quickcheck-unicode, scientific
+     , tasty, tasty-quickcheck, text, transformers, unordered-containers
+     , vector
+     }:
+     mkDerivation {
+       pname = "attoparsec";
+       version = "0.13.1.0";
+       sha256 = "0r1zrrkbqv8w4pb459fj5izd1h85p9nrsp3gyzj7qiayjpa79p2j";
+       libraryHaskellDepends = [
+         array base bytestring containers deepseq scientific text
+         transformers
+       ];
+       testHaskellDepends = [
+         array base bytestring deepseq QuickCheck quickcheck-unicode
+         scientific tasty tasty-quickcheck text transformers vector
+       ];
+       benchmarkHaskellDepends = [
+         array base bytestring case-insensitive containers criterion deepseq
+         directory filepath ghc-prim http-types parsec scientific text
+         transformers unordered-containers vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/attoparsec";
+       description = "Fast combinator parsing for bytestrings and text";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "base-compat" = callPackage
+    ({ mkDerivation, base, hspec, QuickCheck, unix }:
+     mkDerivation {
+       pname = "base-compat";
+       version = "0.9.3";
+       sha256 = "0452l6zf6fjhy4kxqwv6i6hhg6yfx4wcg450k3axpyj30l7jnq3x";
+       libraryHaskellDepends = [ base unix ];
+       testHaskellDepends = [ base hspec QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A compatibility layer for base";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "base-orphans" = callPackage
+    ({ mkDerivation, base, ghc-prim, hspec, QuickCheck }:
+     mkDerivation {
+       pname = "base-orphans";
+       version = "0.6";
+       sha256 = "03mdww5j0gwai7aqlx3m71ldmjcr99jzpkcclzjfclk6a6kjla67";
+       libraryHaskellDepends = [ base ghc-prim ];
+       testHaskellDepends = [ base hspec QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell-compat/base-orphans#readme";
+       description = "Backwards-compatible orphan instances for base";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "base16-bytestring" = callPackage
+    ({ mkDerivation, base, bytestring, ghc-prim }:
+     mkDerivation {
+       pname = "base16-bytestring";
+       version = "0.1.1.6";
+       sha256 = "0jf40m3yijqw6wd1rwwvviww46fasphaay9m9rgqyhf5aahnbzjs";
+       libraryHaskellDepends = [ base bytestring ghc-prim ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/bos/base16-bytestring";
+       description = "Fast base16 (hex) encoding and decoding for ByteStrings";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "base64-bytestring" = callPackage
+    ({ mkDerivation, base, bytestring, containers, HUnit, QuickCheck
+     , test-framework, test-framework-hunit, test-framework-quickcheck2
+     }:
+     mkDerivation {
+       pname = "base64-bytestring";
+       version = "1.0.0.1";
+       sha256 = "0l1v4ddjdsgi9nqzyzcxxj76rwar3lzx8gmwf2r54bqan3san9db";
+       libraryHaskellDepends = [ base bytestring ];
+       testHaskellDepends = [
+         base bytestring containers HUnit QuickCheck test-framework
+         test-framework-hunit test-framework-quickcheck2
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/base64-bytestring";
+       description = "Fast base64 encoding and decoding for ByteStrings";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "basement" = callPackage
+    ({ mkDerivation, base, ghc-prim }:
+     mkDerivation {
+       pname = "basement";
+       version = "0.0.4";
+       sha256 = "1zdqv8dbzv8jx6z8fcghinbnxdc5fb97i7sdfswdr1fcp8jq6i38";
+       libraryHaskellDepends = [ base ghc-prim ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell-foundation/foundation";
+       description = "Foundation scrap box of array & string";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "bifunctors" = callPackage
+    ({ mkDerivation, base, base-orphans, comonad, containers, hspec
+     , QuickCheck, semigroups, tagged, template-haskell, transformers
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "bifunctors";
+       version = "5.4.2";
+       sha256 = "13fwvw1102ik96pgi85i34kisz1h237vgw88ywsgifsah9kh4qiq";
+       libraryHaskellDepends = [
+         base base-orphans comonad containers semigroups tagged
+         template-haskell transformers transformers-compat
+       ];
+       testHaskellDepends = [
+         base hspec QuickCheck template-haskell transformers
+         transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/bifunctors/";
+       description = "Bifunctors";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "blaze-builder" = callPackage
+    ({ mkDerivation, base, bytestring, deepseq, HUnit, QuickCheck
+     , test-framework, test-framework-hunit, test-framework-quickcheck2
+     , text, utf8-string
+     }:
+     mkDerivation {
+       pname = "blaze-builder";
+       version = "0.4.0.2";
+       sha256 = "1m33y6p5xldni8p4fzg8fmsyqvkfmnimdamr1xjnsmgm3dkf9lws";
+       libraryHaskellDepends = [ base bytestring deepseq text ];
+       testHaskellDepends = [
+         base bytestring HUnit QuickCheck test-framework
+         test-framework-hunit test-framework-quickcheck2 text utf8-string
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/lpsmith/blaze-builder";
+       description = "Efficient buffered output";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "blaze-html" = callPackage
+    ({ mkDerivation, base, blaze-builder, blaze-markup, bytestring
+     , containers, HUnit, QuickCheck, test-framework
+     , test-framework-hunit, test-framework-quickcheck2, text
+     }:
+     mkDerivation {
+       pname = "blaze-html";
+       version = "0.9.0.1";
+       sha256 = "0r0acv47nh75bmf7kjyfvhcwz8f02rn9x0a1l80pzgyczfrsmkmf";
+       libraryHaskellDepends = [
+         base blaze-builder blaze-markup bytestring text
+       ];
+       testHaskellDepends = [
+         base blaze-builder blaze-markup bytestring containers HUnit
+         QuickCheck test-framework test-framework-hunit
+         test-framework-quickcheck2 text
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://jaspervdj.be/blaze";
+       description = "A blazingly fast HTML combinator library for Haskell";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "blaze-markup" = callPackage
+    ({ mkDerivation, base, blaze-builder, bytestring, containers, HUnit
+     , QuickCheck, test-framework, test-framework-hunit
+     , test-framework-quickcheck2, text
+     }:
+     mkDerivation {
+       pname = "blaze-markup";
+       version = "0.8.0.0";
+       sha256 = "03sl7xs6vk4zxbjszgyjpsppi1cknswg7z7rswz2f0rq62wwpq8r";
+       libraryHaskellDepends = [ base blaze-builder bytestring text ];
+       testHaskellDepends = [
+         base blaze-builder bytestring containers HUnit QuickCheck
+         test-framework test-framework-hunit test-framework-quickcheck2 text
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://jaspervdj.be/blaze";
+       description = "A blazingly fast markup combinator library for Haskell";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "byteable" = callPackage
+    ({ mkDerivation, base, bytestring }:
+     mkDerivation {
+       pname = "byteable";
+       version = "0.1.1";
+       sha256 = "1qizg0kxxjqnd3cbrjhhidk5pbbciz0pb3z5kzikjjxnnnhk8fr4";
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [ base bytestring ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/vincenthz/hs-byteable";
+       description = "Type class for sequence of bytes";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "bytestring-builder" = callPackage
+    ({ mkDerivation, base, bytestring, deepseq }:
+     mkDerivation {
+       pname = "bytestring-builder";
+       version = "0.10.8.1.0";
+       sha256 = "1hnvjac28y44yn78c9vdp1zvrknvlw98ky3g4n5vivr16rvh8x3d";
+       libraryHaskellDepends = [ base bytestring deepseq ];
+       doHaddock = false;
+       doCheck = false;
+       description = "The new bytestring builder, packaged outside of GHC";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "cabal-doctest" = callPackage
+    ({ mkDerivation, base, Cabal, directory, filepath }:
+     mkDerivation {
+       pname = "cabal-doctest";
+       version = "1.0.4";
+       sha256 = "03sawamkp95jycq9sah72iw525pdndb3x4h489zf4s3ir9avds3d";
+       libraryHaskellDepends = [ base Cabal directory filepath ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/phadej/cabal-doctest";
+       description = "A Setup.hs helper for doctests running";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "call-stack" = callPackage
+    ({ mkDerivation, base, nanospec }:
+     mkDerivation {
+       pname = "call-stack";
+       version = "0.1.0";
+       sha256 = "1qmihf5jafmc79sk52l6gpx75f5bnla2lp62kh3p34x3j84mwpzj";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base nanospec ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/sol/call-stack#readme";
+       description = "Use GHC call-stacks in a backward compatible way";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "case-insensitive" = callPackage
+    ({ mkDerivation, base, bytestring, criterion, deepseq, hashable
+     , text
+     }:
+     mkDerivation {
+       pname = "case-insensitive";
+       version = "1.2.0.10";
+       sha256 = "0v1hclvv0516fnlj5j2izd9xmakl7dshi9cb32iz6dgvzx01qck6";
+       libraryHaskellDepends = [ base bytestring deepseq hashable text ];
+       benchmarkHaskellDepends = [ base bytestring criterion deepseq ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/basvandijk/case-insensitive";
+       description = "Case insensitive string comparison";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "cassava" = callPackage
+    ({ mkDerivation, array, attoparsec, base, blaze-builder, bytestring
+     , containers, deepseq, hashable, text, unordered-containers, vector
+     }:
+     mkDerivation {
+       pname = "cassava";
+       version = "0.4.5.1";
+       sha256 = "17wxrwq977nyi225zlg3wj32f0ypyvikznhw59k0hxb4vkljlqkw";
+       revision = "1";
+       editedCabalFile = "05035bnvyqs36sp2bqd1wdjp5x4zs1pnrw6c8hq5nwjwdajjqkf0";
+       libraryHaskellDepends = [
+         array attoparsec base blaze-builder bytestring containers deepseq
+         hashable text unordered-containers vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/hvr/cassava";
+       description = "A CSV parsing and encoding library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "cereal" = callPackage
+    ({ mkDerivation, array, base, bytestring, containers, ghc-prim
+     , QuickCheck, test-framework, test-framework-quickcheck2
+     }:
+     mkDerivation {
+       pname = "cereal";
+       version = "0.5.4.0";
+       sha256 = "1rzyr8r9pjlgas5pc8n776r22i0ficanq05ypqrs477jxxd6rjns";
+       libraryHaskellDepends = [
+         array base bytestring containers ghc-prim
+       ];
+       testHaskellDepends = [
+         base bytestring QuickCheck test-framework
+         test-framework-quickcheck2
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/GaloisInc/cereal";
+       description = "A binary serialization library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "chell" = callPackage
+    ({ mkDerivation, ansi-terminal, base, bytestring, options, patience
+     , random, template-haskell, text, transformers
+     }:
+     mkDerivation {
+       pname = "chell";
+       version = "0.4.0.2";
+       sha256 = "10ingy9qnbmc8cqh4i9pskcw43l0mzk8f3d76b3qz3fig5ary3j9";
+       libraryHaskellDepends = [
+         ansi-terminal base bytestring options patience random
+         template-haskell text transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://john-millikin.com/software/chell/";
+       description = "A simple and intuitive library for automated testing";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "clock" = callPackage
+    ({ mkDerivation, base, tasty, tasty-quickcheck }:
+     mkDerivation {
+       pname = "clock";
+       version = "0.7.2";
+       sha256 = "07v91s20halsqjmziqb1sqjp2sjpckl9by7y28aaklwqi2bh2rl8";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base tasty tasty-quickcheck ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/corsis/clock";
+       description = "High-resolution clock functions: monotonic, realtime, cputime";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "code-page" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "code-page";
+       version = "0.1.3";
+       sha256 = "1491frk4jx6dlhifky9dvcxbsbcfssrz979a5hp5zn061rh8cp76";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/RyanGlScott/code-page";
+       description = "Windows code page library for Haskell";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "comonad" = callPackage
+    ({ mkDerivation, base, Cabal, cabal-doctest, containers
+     , contravariant, distributive, doctest, semigroups, tagged
+     , transformers, transformers-compat
+     }:
+     mkDerivation {
+       pname = "comonad";
+       version = "5.0.2";
+       sha256 = "115pai560rllsmym76bj787kwz5xx19y8bl6262005nddqwzxc0v";
+       revision = "1";
+       editedCabalFile = "1lnsnx8p3wlfhd1xfc68za3b00vq77z2m6b0vqiw2laqmpj9akcw";
+       setupHaskellDepends = [ base Cabal cabal-doctest ];
+       libraryHaskellDepends = [
+         base containers contravariant distributive semigroups tagged
+         transformers transformers-compat
+       ];
+       testHaskellDepends = [ base doctest ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/comonad/";
+       description = "Comonads";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "conduit" = callPackage
+    ({ mkDerivation, base, containers, criterion, deepseq, exceptions
+     , hspec, kan-extensions, lifted-base, mmorph, monad-control, mtl
+     , mwc-random, primitive, QuickCheck, resourcet, safe, split
+     , transformers, transformers-base, transformers-compat, vector
+     }:
+     mkDerivation {
+       pname = "conduit";
+       version = "1.2.12.1";
+       sha256 = "0zl6gflh7y36y2vypjhqx13nhkk5y3h12c1zj7kjfclrmwnvnwh0";
+       libraryHaskellDepends = [
+         base exceptions lifted-base mmorph monad-control mtl primitive
+         resourcet transformers transformers-base transformers-compat
+       ];
+       testHaskellDepends = [
+         base containers exceptions hspec mtl QuickCheck resourcet safe
+         split transformers
+       ];
+       benchmarkHaskellDepends = [
+         base containers criterion deepseq hspec kan-extensions mwc-random
+         transformers vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/snoyberg/conduit";
+       description = "Streaming data processing library";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "conduit-extra" = callPackage
+    ({ mkDerivation, async, attoparsec, base, blaze-builder, bytestring
+     , bytestring-builder, conduit, criterion, directory, exceptions
+     , filepath, hspec, monad-control, network, primitive, process
+     , QuickCheck, resourcet, stm, streaming-commons, text, transformers
+     , transformers-base
+     }:
+     mkDerivation {
+       pname = "conduit-extra";
+       version = "1.1.17";
+       sha256 = "01haq94kf4jsqrhs6j2kkvxrw4iqhvhnd9rcrqpkdbp1dil493kn";
+       libraryHaskellDepends = [
+         async attoparsec base blaze-builder bytestring conduit directory
+         exceptions filepath monad-control network primitive process
+         resourcet stm streaming-commons text transformers transformers-base
+       ];
+       testHaskellDepends = [
+         async attoparsec base blaze-builder bytestring bytestring-builder
+         conduit directory exceptions hspec process QuickCheck resourcet stm
+         streaming-commons text transformers transformers-base
+       ];
+       benchmarkHaskellDepends = [
+         base blaze-builder bytestring bytestring-builder conduit criterion
+         transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/snoyberg/conduit";
+       description = "Batteries included conduit: adapters for common libraries";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "contravariant" = callPackage
+    ({ mkDerivation, base, semigroups, StateVar, transformers
+     , transformers-compat, void
+     }:
+     mkDerivation {
+       pname = "contravariant";
+       version = "1.4";
+       sha256 = "117fff8kkrvlmr8cb2jpj71z7lf2pdiyks6ilyx89mry6zqnsrp1";
+       libraryHaskellDepends = [
+         base semigroups StateVar transformers transformers-compat void
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/contravariant/";
+       description = "Contravariant functors";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "cpphs" = callPackage
+    ({ mkDerivation, base, directory, old-locale, old-time, polyparse
+     }:
+     mkDerivation {
+       pname = "cpphs";
+       version = "1.20.8";
+       sha256 = "1bh524asqhk9v1s0wvipl0hgn7l63iy3js867yv0z3h5v2kn8vg5";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         base directory old-locale old-time polyparse
+       ];
+       executableHaskellDepends = [
+         base directory old-locale old-time polyparse
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://projects.haskell.org/cpphs/";
+       description = "A liberalised re-implementation of cpp, the C pre-processor";
+       license = "LGPL";
+     }) {};
+  "cpu" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "cpu";
+       version = "0.1.2";
+       sha256 = "0x19mlanmkg96h6h1i04w2i631z84y4rbk22ki4zhgsajysgw9sn";
+       isLibrary = true;
+       isExecutable = true;
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/vincenthz/hs-cpu";
+       description = "Cpu information and properties helpers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "criterion" = callPackage
+    ({ mkDerivation, aeson, ansi-wl-pprint, base, binary, bytestring
+     , cassava, code-page, containers, deepseq, directory, filepath
+     , Glob, hastache, HUnit, js-flot, js-jquery, mtl, mwc-random
+     , optparse-applicative, parsec, QuickCheck, statistics, tasty
+     , tasty-hunit, tasty-quickcheck, text, time, transformers
+     , transformers-compat, vector, vector-algorithms
+     }:
+     mkDerivation {
+       pname = "criterion";
+       version = "1.1.4.0";
+       sha256 = "0xps7jm8g1bg7a2y4b6mj5nhg3b595k5ysprf4711lwyfpy478jk";
+       revision = "1";
+       editedCabalFile = "0hgy2rbrb0dg1sjdvqk2zivdq075fih4zlf51ffdmqzgcdj3i9b1";
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [
+         aeson ansi-wl-pprint base binary bytestring cassava code-page
+         containers deepseq directory filepath Glob hastache js-flot
+         js-jquery mtl mwc-random optparse-applicative parsec statistics
+         text time transformers transformers-compat vector vector-algorithms
+       ];
+       testHaskellDepends = [
+         aeson base bytestring HUnit QuickCheck statistics tasty tasty-hunit
+         tasty-quickcheck vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.serpentine.com/criterion";
+       description = "Robust, reliable performance measurement and analysis";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "crypto-api" = callPackage
+    ({ mkDerivation, base, bytestring, cereal, entropy, tagged
+     , transformers
+     }:
+     mkDerivation {
+       pname = "crypto-api";
+       version = "0.13.2";
+       sha256 = "1vc27qcgbg7hf50rkqhlrs58zn1888ilh4b6wrrm07bnm48xacak";
+       libraryHaskellDepends = [
+         base bytestring cereal entropy tagged transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/TomMD/crypto-api";
+       description = "A generic interface for cryptographic operations";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "cryptohash" = callPackage
+    ({ mkDerivation, base, byteable, bytestring, criterion, cryptonite
+     , ghc-prim, HUnit, memory, QuickCheck, tasty, tasty-hunit
+     , tasty-quickcheck
+     }:
+     mkDerivation {
+       pname = "cryptohash";
+       version = "0.11.9";
+       sha256 = "1yr2iyb779znj79j3fq4ky8l1y8a600a2x1fx9p5pmpwq5zq93y2";
+       libraryHaskellDepends = [
+         base byteable bytestring cryptonite ghc-prim memory
+       ];
+       testHaskellDepends = [
+         base byteable bytestring HUnit QuickCheck tasty tasty-hunit
+         tasty-quickcheck
+       ];
+       benchmarkHaskellDepends = [ base byteable bytestring criterion ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/vincenthz/hs-cryptohash";
+       description = "collection of crypto hashes, fast, pure and practical";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "cryptonite" = callPackage
+    ({ mkDerivation, base, bytestring, criterion, deepseq, foundation
+     , ghc-prim, integer-gmp, memory, random, tasty, tasty-hunit
+     , tasty-kat, tasty-quickcheck
+     }:
+     mkDerivation {
+       pname = "cryptonite";
+       version = "0.23";
+       sha256 = "1680dxgmnjgj083jhsw3rlljwaw0zqi5099m59x6kwqkxhn1qjpf";
+       libraryHaskellDepends = [
+         base bytestring deepseq foundation ghc-prim integer-gmp memory
+       ];
+       testHaskellDepends = [
+         base bytestring memory tasty tasty-hunit tasty-kat tasty-quickcheck
+       ];
+       benchmarkHaskellDepends = [
+         base bytestring criterion memory random
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell-crypto/cryptonite";
+       description = "Cryptography Primitives sink";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "css-text" = callPackage
+    ({ mkDerivation, attoparsec, base, hspec, QuickCheck, text }:
+     mkDerivation {
+       pname = "css-text";
+       version = "0.1.2.2";
+       sha256 = "11qrwrjqk2k4bm3bz1qcyscp146raz1hgpzynkd50yaq12n69xfz";
+       libraryHaskellDepends = [ attoparsec base text ];
+       testHaskellDepends = [ attoparsec base hspec QuickCheck text ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.yesodweb.com/";
+       description = "CSS parser and renderer";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "data-default" = callPackage
+    ({ mkDerivation, base, data-default-class
+     , data-default-instances-containers, data-default-instances-dlist
+     , data-default-instances-old-locale
+     }:
+     mkDerivation {
+       pname = "data-default";
+       version = "0.7.1.1";
+       sha256 = "04d5n8ybmcxba9qb6h389w9zfq1lvj81b82jh6maqp6pkhkmvydh";
+       libraryHaskellDepends = [
+         base data-default-class data-default-instances-containers
+         data-default-instances-dlist data-default-instances-old-locale
+       ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A class for types with a default value";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "data-default-class" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "data-default-class";
+       version = "0.1.2.0";
+       sha256 = "0miyjz8d4jyvqf2vp60lyfbnflx6cj2k8apmm9ly1hq0y0iv80ag";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A class for types with a default value";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "data-default-instances-containers" = callPackage
+    ({ mkDerivation, base, containers, data-default-class }:
+     mkDerivation {
+       pname = "data-default-instances-containers";
+       version = "0.0.1";
+       sha256 = "06h8xka031w752a7cjlzghvr8adqbl95xj9z5zc1b62w02phfpm5";
+       libraryHaskellDepends = [ base containers data-default-class ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Default instances for types in containers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "data-default-instances-dlist" = callPackage
+    ({ mkDerivation, base, data-default-class, dlist }:
+     mkDerivation {
+       pname = "data-default-instances-dlist";
+       version = "0.0.1";
+       sha256 = "0narkdqiprhgayjiawrr4390h4rq4pl2pb6mvixbv2phrc8kfs3x";
+       libraryHaskellDepends = [ base data-default-class dlist ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Default instances for types in dlist";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "data-default-instances-old-locale" = callPackage
+    ({ mkDerivation, base, data-default-class, old-locale }:
+     mkDerivation {
+       pname = "data-default-instances-old-locale";
+       version = "0.0.1";
+       sha256 = "00h81i5phib741yj517p8mbnc48myvfj8axzsw44k34m48lv1lv0";
+       libraryHaskellDepends = [ base data-default-class old-locale ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Default instances for types in old-locale";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "deepseq-generics" = callPackage
+    ({ mkDerivation, base, deepseq, ghc-prim, HUnit, test-framework
+     , test-framework-hunit
+     }:
+     mkDerivation {
+       pname = "deepseq-generics";
+       version = "0.2.0.0";
+       sha256 = "17bwghc15mc9pchfd1w46jh2p3wzc86aj6a537wqwxn08rayzcxh";
+       revision = "1";
+       editedCabalFile = "055m914q7a19jagpxh65d8m67z1nl0h7cz77y1r0zp1qmpkisg82";
+       libraryHaskellDepends = [ base deepseq ghc-prim ];
+       testHaskellDepends = [
+         base deepseq ghc-prim HUnit test-framework test-framework-hunit
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/hvr/deepseq-generics";
+       description = "GHC.Generics-based Control.DeepSeq.rnf implementation";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "distributive" = callPackage
+    ({ mkDerivation, base, base-orphans, Cabal, cabal-doctest, doctest
+     , generic-deriving, hspec, tagged, transformers
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "distributive";
+       version = "0.5.3";
+       sha256 = "0y566r97sfyvhsmd4yxiz4ns2mqgwf5bdbp56wgxl6wlkidq0wwi";
+       revision = "2";
+       editedCabalFile = "02j27xvlj0jw3b2jpfg6wbysj0blllin792wj6qnrgnrvd4haj7v";
+       setupHaskellDepends = [ base Cabal cabal-doctest ];
+       libraryHaskellDepends = [
+         base base-orphans tagged transformers transformers-compat
+       ];
+       testHaskellDepends = [ base doctest generic-deriving hspec ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/distributive/";
+       description = "Distributive functors -- Dual to Traversable";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "dlist" = callPackage
+    ({ mkDerivation, base, deepseq }:
+     mkDerivation {
+       pname = "dlist";
+       version = "0.8.0.3";
+       sha256 = "0brgai4vs7xz29p06kd6gzg5bpa8iy3k7yzgcc44izspd74q4rw7";
+       libraryHaskellDepends = [ base deepseq ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/spl/dlist";
+       description = "Difference lists";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "doctest" = callPackage
+    ({ mkDerivation, base, base-compat, code-page, deepseq, directory
+     , filepath, ghc, ghc-paths, hspec, HUnit, mockery, process
+     , QuickCheck, setenv, silently, stringbuilder, syb, transformers
+     , with-location
+     }:
+     mkDerivation {
+       pname = "doctest";
+       version = "0.11.4";
+       sha256 = "09a170wr13p2c0w085d7qbf2blrvj1qmg92j61xqi17rwdwkvyjs";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         base base-compat code-page deepseq directory filepath ghc ghc-paths
+         process syb transformers
+       ];
+       executableHaskellDepends = [ base ];
+       testHaskellDepends = [
+         base base-compat code-page deepseq directory filepath ghc ghc-paths
+         hspec HUnit mockery process QuickCheck setenv silently
+         stringbuilder syb transformers with-location
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/sol/doctest#readme";
+       description = "Test interactive Haskell examples";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "entropy" = callPackage
+    ({ mkDerivation, base, bytestring, Cabal, directory, filepath
+     , process, unix
+     }:
+     mkDerivation {
+       pname = "entropy";
+       version = "0.3.8";
+       sha256 = "1l3lfigqvdlmxkz1wl7zdkmc0i2r5p6z4xzhiw8xdsbsw7aljfkl";
+       setupHaskellDepends = [ base Cabal directory filepath process ];
+       libraryHaskellDepends = [ base bytestring unix ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/TomMD/entropy";
+       description = "A platform independent entropy source";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "erf" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "erf";
+       version = "2.0.0.0";
+       sha256 = "0dxk2r32ajmmc05vaxcp0yw6vgv4lkbmh8jcshncn98xgsfbgw14";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "The error function, erf, and related functions";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "exceptions" = callPackage
+    ({ mkDerivation, base, mtl, QuickCheck, stm, template-haskell
+     , test-framework, test-framework-quickcheck2, transformers
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "exceptions";
+       version = "0.8.3";
+       sha256 = "1gl7xzffsqmigam6zg0jsglncgzxqafld2p6kb7ccp9xirzdjsjd";
+       revision = "2";
+       editedCabalFile = "1vl59j0l7m53hkzlcfmdbqbab8dk4lp9gzwryn7nsr6ylg94wayw";
+       libraryHaskellDepends = [
+         base mtl stm template-haskell transformers transformers-compat
+       ];
+       testHaskellDepends = [
+         base mtl QuickCheck stm template-haskell test-framework
+         test-framework-quickcheck2 transformers transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/exceptions/";
+       description = "Extensible optionally-pure exceptions";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "extensible-exceptions" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "extensible-exceptions";
+       version = "0.1.1.4";
+       sha256 = "1273nqws9ij1rp1bsq5jc7k2jxpqa0svawdbim05lf302y0firbc";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Extensible exceptions";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "fail" = callPackage
+    ({ mkDerivation }:
+     mkDerivation {
+       pname = "fail";
+       version = "4.9.0.0";
+       sha256 = "18nlj6xvnggy61gwbyrpmvbdkq928wv0wx2zcsljb52kbhddnp3d";
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://prime.haskell.org/wiki/Libraries/Proposals/MonadFail";
+       description = "Forward-compatible MonadFail class";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "foundation" = callPackage
+    ({ mkDerivation, base, basement, gauge, ghc-prim }:
+     mkDerivation {
+       pname = "foundation";
+       version = "0.0.17";
+       sha256 = "00f2p47h715fjb3rpsxlf4jskgwk9sz5p692r09gspspqmrs5l84";
+       revision = "1";
+       editedCabalFile = "15y38y0mj4vc694jwh3cjgnq8xv5vv7954g633f7mw5f0hb3yxkn";
+       libraryHaskellDepends = [ base basement ghc-prim ];
+       testHaskellDepends = [ base basement ];
+       benchmarkHaskellDepends = [ base basement gauge ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell-foundation/foundation";
+       description = "Alternative prelude with batteries and no dependencies";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "free" = callPackage
+    ({ mkDerivation, base, bifunctors, comonad, containers
+     , distributive, exceptions, mtl, prelude-extras, profunctors
+     , semigroupoids, semigroups, template-haskell, transformers
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "free";
+       version = "4.12.4";
+       sha256 = "1147s393442xf4gkpbq0rd1p286vmykgx85mxhk5d1c7wfm4bzn9";
+       libraryHaskellDepends = [
+         base bifunctors comonad containers distributive exceptions mtl
+         prelude-extras profunctors semigroupoids semigroups
+         template-haskell transformers transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/free/";
+       description = "Monads for free";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "gauge" = callPackage
+    ({ mkDerivation, base, basement, bytestring, code-page, containers
+     , deepseq, directory, HUnit, math-functions, mwc-random, tasty
+     , tasty-hunit, vector
+     }:
+     mkDerivation {
+       pname = "gauge";
+       version = "0.1.3";
+       sha256 = "1i97f00haj4832s2arbnqq19dpna54ygmchvnqkq00hsxk38cyc0";
+       libraryHaskellDepends = [
+         base basement code-page containers deepseq math-functions
+         mwc-random vector
+       ];
+       testHaskellDepends = [
+         base bytestring deepseq directory HUnit tasty tasty-hunit
+       ];
+       benchmarkHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/vincenthz/hs-gauge";
+       description = "small framework for performance measurement and analysis";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "generic-deriving" = callPackage
+    ({ mkDerivation, base, containers, ghc-prim, hspec
+     , template-haskell
+     }:
+     mkDerivation {
+       pname = "generic-deriving";
+       version = "1.11.2";
+       sha256 = "1y92q4dmbyc24hjjvq02474s9grwabxffn16y31gzaqhm0m0z5i9";
+       libraryHaskellDepends = [
+         base containers ghc-prim template-haskell
+       ];
+       testHaskellDepends = [ base hspec template-haskell ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/dreixel/generic-deriving";
+       description = "Generic programming library for generalised deriving";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "ghc-paths" = callPackage
+    ({ mkDerivation, base, Cabal, directory }:
+     mkDerivation {
+       pname = "ghc-paths";
+       version = "0.1.0.9";
+       sha256 = "0ibrr1dxa35xx20cpp8jzgfak1rdmy344dfwq4vlq013c6w8z9mg";
+       revision = "2";
+       editedCabalFile = "1gs6biqbcabgmrwhc1bq1bdaxdwwh26v4mpvj5c7cfyigc64gwyk";
+       setupHaskellDepends = [ base Cabal directory ];
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Knowledge of GHC's installation directories";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hamlet" = callPackage
+    ({ mkDerivation, base, shakespeare }:
+     mkDerivation {
+       pname = "hamlet";
+       version = "1.2.0";
+       sha256 = "0rla3ap3malk8j6mh07fr2aqvbscpy743wrfq3skgjv3j4jlpjfi";
+       libraryHaskellDepends = [ base shakespeare ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.yesodweb.com/book/shakespearean-templates";
+       description = "Haml-like template files that are compile-time checked (deprecated)";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "happstack-server" = callPackage
+    ({ mkDerivation, base, base64-bytestring, blaze-html, bytestring
+     , containers, directory, exceptions, extensible-exceptions
+     , filepath, hslogger, html, HUnit, monad-control, mtl, network
+     , network-uri, old-locale, parsec, process, sendfile, syb
+     , system-filepath, template-haskell, text, threads, time
+     , time-compat, transformers, transformers-base, transformers-compat
+     , unix, utf8-string, xhtml, zlib
+     }:
+     mkDerivation {
+       pname = "happstack-server";
+       version = "7.4.6.4";
+       sha256 = "1fd19qxpdj7iz4rjjwgi527naiw32l09gazr39skgzzf7m8ckiml";
+       libraryHaskellDepends = [
+         base base64-bytestring blaze-html bytestring containers directory
+         exceptions extensible-exceptions filepath hslogger html
+         monad-control mtl network network-uri old-locale parsec process
+         sendfile syb system-filepath template-haskell text threads time
+         time-compat transformers transformers-base transformers-compat unix
+         utf8-string xhtml zlib
+       ];
+       testHaskellDepends = [
+         base bytestring containers HUnit parsec zlib
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://happstack.com";
+       description = "Web related tools and services";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "happy" = callPackage
+    ({ mkDerivation, array, base, Cabal, containers, directory
+     , filepath, mtl, process
+     }:
+     mkDerivation {
+       pname = "happy";
+       version = "1.19.8";
+       sha256 = "186ky3bly0i3cc56qk3r7j7pxh2108aackq4n2lli7jmbnb3kxsd";
+       isLibrary = false;
+       isExecutable = true;
+       setupHaskellDepends = [ base Cabal directory filepath ];
+       executableHaskellDepends = [ array base containers mtl ];
+       testHaskellDepends = [ base process ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://www.haskell.org/happy/";
+       description = "Happy is a parser generator for Haskell";
+       license = stdenv.lib.licenses.bsd2;
+     }) {};
+  "hashable" = callPackage
+    ({ mkDerivation, base, bytestring, criterion, deepseq, ghc-prim
+     , HUnit, integer-gmp, QuickCheck, random, siphash, test-framework
+     , test-framework-hunit, test-framework-quickcheck2, text, unix
+     }:
+     mkDerivation {
+       pname = "hashable";
+       version = "1.2.6.1";
+       sha256 = "0ymv2mcrrgbdc2w39rib171fwnhg7fgp0sy4h8amrh1vw64qgjll";
+       revision = "2";
+       editedCabalFile = "0w4756sa04nk2bw3vnysb0y9d09zzg3c77aydkjfxz1hnl1dvnjn";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         base bytestring deepseq ghc-prim integer-gmp text
+       ];
+       testHaskellDepends = [
+         base bytestring ghc-prim HUnit QuickCheck random test-framework
+         test-framework-hunit test-framework-quickcheck2 text unix
+       ];
+       benchmarkHaskellDepends = [
+         base bytestring criterion ghc-prim integer-gmp siphash text
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/tibbe/hashable";
+       description = "A class for types that can be converted to a hash value";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hashable-time" = callPackage
+    ({ mkDerivation, base, hashable, time }:
+     mkDerivation {
+       pname = "hashable-time";
+       version = "0.2.0.1";
+       sha256 = "0k932nyd08l3xxbh2g3n76py2f4kd9yw4s5a065vjz0xp6wjnxdm";
+       libraryHaskellDepends = [ base hashable time ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Hashable instances for Data.Time";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hashmap" = callPackage
+    ({ mkDerivation, base, containers, deepseq, hashable }:
+     mkDerivation {
+       pname = "hashmap";
+       version = "1.3.2";
+       sha256 = "15jppbxwqkwccdif789c7gvlfypyd98gnv1p5dh2kx977r19sh01";
+       libraryHaskellDepends = [ base containers deepseq hashable ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/foxik/hashmap";
+       description = "Persistent containers Map and Set based on hashing";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "haskell-lexer" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "haskell-lexer";
+       version = "1.0.1";
+       sha256 = "0rj3r1pk88hh3sk3mj61whp8czz5kpxhbc78xlr04bxwqjrjmm6p";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A fully compliant Haskell 98 lexer";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "haskell-src-exts" = callPackage
+    ({ mkDerivation, array, base, containers, cpphs, directory
+     , filepath, ghc-prim, happy, mtl, pretty, pretty-show, smallcheck
+     , tasty, tasty-golden, tasty-smallcheck
+     }:
+     mkDerivation {
+       pname = "haskell-src-exts";
+       version = "1.18.2";
+       sha256 = "0hq9f6r67gkhad4cc4dhahrwrz9kxfibhk8qrw5j0p7cvh23hn1i";
+       libraryHaskellDepends = [ array base cpphs ghc-prim pretty ];
+       libraryToolDepends = [ happy ];
+       testHaskellDepends = [
+         base containers directory filepath mtl pretty-show smallcheck tasty
+         tasty-golden tasty-smallcheck
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell-suite/haskell-src-exts";
+       description = "Manipulating Haskell source: abstract syntax, lexer, parser, and pretty-printer";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hastache" = callPackage
+    ({ mkDerivation, base, blaze-builder, bytestring, containers
+     , directory, filepath, ieee754, mtl, process, syb, text
+     , transformers
+     }:
+     mkDerivation {
+       pname = "hastache";
+       version = "0.6.1";
+       sha256 = "0r5l8k157pgvz1ck4lfid5x05f2s0nlmwf33f4fj09b1kmk8k3wc";
+       revision = "5";
+       editedCabalFile = "0fwd1jd6sqkscmy2yq1w3dcl4va4w9n8mhs6ldrilh1cj6b54r3f";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         base blaze-builder bytestring containers directory filepath ieee754
+         mtl syb text transformers
+       ];
+       executableHaskellDepends = [
+         base blaze-builder bytestring containers directory filepath ieee754
+         mtl process syb text transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/lymar/hastache";
+       description = "Haskell implementation of Mustache templates";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hostname" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "hostname";
+       version = "1.0";
+       sha256 = "0p6gm4328946qxc295zb6vhwhf07l1fma82vd0siylnsnsqxlhwv";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A very simple package providing a cross-platform means of determining the hostname";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hscolour" = callPackage
+    ({ mkDerivation, base, containers }:
+     mkDerivation {
+       pname = "hscolour";
+       version = "1.24.2";
+       sha256 = "08ng635m1qylng1khm9nqvfw2wdhljy1q2wi4ly63nfaznx8dysm";
+       isLibrary = true;
+       isExecutable = true;
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [ base containers ];
+       executableHaskellDepends = [ base containers ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://code.haskell.org/~malcolm/hscolour/";
+       description = "Colourise Haskell code";
+       license = "LGPL";
+     }) {};
+  "hslogger" = callPackage
+    ({ mkDerivation, base, containers, directory, HUnit, mtl, network
+     , old-locale, process, time, unix
+     }:
+     mkDerivation {
+       pname = "hslogger";
+       version = "1.2.10";
+       sha256 = "0as5gvlh6pi2gflakp695qnlizyyp059dqrhvjl4gjxalja6xjnp";
+       libraryHaskellDepends = [
+         base containers directory mtl network old-locale process time unix
+       ];
+       testHaskellDepends = [ base HUnit ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://software.complete.org/hslogger";
+       description = "Versatile logging framework";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "hspec" = callPackage
+    ({ mkDerivation, base, call-stack, directory, hspec-core
+     , hspec-discover, hspec-expectations, hspec-meta, HUnit, QuickCheck
+     , stringbuilder, transformers
+     }:
+     mkDerivation {
+       pname = "hspec";
+       version = "2.4.4";
+       sha256 = "08fg8w38xbhidw3pfn13ag3mnpp3rb1lzp7xpq47cncwv92k46mh";
+       libraryHaskellDepends = [
+         base call-stack hspec-core hspec-discover hspec-expectations HUnit
+         QuickCheck transformers
+       ];
+       testHaskellDepends = [
+         base call-stack directory hspec-core hspec-discover
+         hspec-expectations hspec-meta HUnit QuickCheck stringbuilder
+         transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://hspec.github.io/";
+       description = "A Testing Framework for Haskell";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "hspec-core" = callPackage
+    ({ mkDerivation, ansi-terminal, array, async, base, call-stack
+     , deepseq, directory, filepath, hspec-expectations, hspec-meta
+     , HUnit, process, QuickCheck, quickcheck-io, random, setenv
+     , silently, temporary, tf-random, time, transformers
+     }:
+     mkDerivation {
+       pname = "hspec-core";
+       version = "2.4.4";
+       sha256 = "1pxzr3l8b9640mh904n51nwlr2338wak23781s48a9kzvwf347b0";
+       libraryHaskellDepends = [
+         ansi-terminal array async base call-stack deepseq directory
+         filepath hspec-expectations HUnit QuickCheck quickcheck-io random
+         setenv tf-random time transformers
+       ];
+       testHaskellDepends = [
+         ansi-terminal array async base call-stack deepseq directory
+         filepath hspec-expectations hspec-meta HUnit process QuickCheck
+         quickcheck-io random setenv silently temporary tf-random time
+         transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://hspec.github.io/";
+       description = "A Testing Framework for Haskell";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "hspec-discover" = callPackage
+    ({ mkDerivation, base, directory, filepath, hspec-meta }:
+     mkDerivation {
+       pname = "hspec-discover";
+       version = "2.4.4";
+       sha256 = "0isx9nc59nw8pkh4r6ynd55dghqnzgrzn9pvrq6ail1y5z3knhkn";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [ base directory filepath ];
+       executableHaskellDepends = [ base directory filepath ];
+       testHaskellDepends = [ base directory filepath hspec-meta ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://hspec.github.io/";
+       description = "Automatically discover and run Hspec tests";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "hspec-expectations" = callPackage
+    ({ mkDerivation, base, call-stack, HUnit, nanospec }:
+     mkDerivation {
+       pname = "hspec-expectations";
+       version = "0.8.2";
+       sha256 = "1vxl9zazbaapijr6zmcj72j9wf7ka1pirrjbwddwwddg3zm0g5l1";
+       libraryHaskellDepends = [ base call-stack HUnit ];
+       testHaskellDepends = [ base call-stack HUnit nanospec ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/hspec/hspec-expectations#readme";
+       description = "Catchy combinators for HUnit";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "hspec-meta" = callPackage
+    ({ mkDerivation, ansi-terminal, array, async, base, call-stack
+     , deepseq, directory, filepath, hspec-expectations, HUnit
+     , QuickCheck, quickcheck-io, random, setenv, time, transformers
+     }:
+     mkDerivation {
+       pname = "hspec-meta";
+       version = "2.4.4";
+       sha256 = "117n4j56wfh48xj02mv0wkp10bkr2xkyvwg7n7r2ynp03wrf9ykm";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         ansi-terminal array async base call-stack deepseq directory
+         filepath hspec-expectations HUnit QuickCheck quickcheck-io random
+         setenv time transformers
+       ];
+       executableHaskellDepends = [
+         ansi-terminal array async base call-stack deepseq directory
+         filepath hspec-expectations HUnit QuickCheck quickcheck-io random
+         setenv time transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://hspec.github.io/";
+       description = "A version of Hspec which is used to test Hspec itself";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "html" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "html";
+       version = "1.0.1.2";
+       sha256 = "0q9hmfii62kc82ijlg238fxrzxhsivn42x5wd6ffcr9xldg4jd8c";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "HTML combinator library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "http-types" = callPackage
+    ({ mkDerivation, array, base, blaze-builder, bytestring
+     , case-insensitive, doctest, hspec, QuickCheck
+     , quickcheck-instances, text
+     }:
+     mkDerivation {
+       pname = "http-types";
+       version = "0.9.1";
+       sha256 = "0l7mnvqyppxpnq6ds4a9f395zdbl22z3sxiry1myfs8wvj669vbv";
+       libraryHaskellDepends = [
+         array base blaze-builder bytestring case-insensitive text
+       ];
+       testHaskellDepends = [
+         base blaze-builder bytestring doctest hspec QuickCheck
+         quickcheck-instances text
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/aristidb/http-types";
+       description = "Generic HTTP types for Haskell (for both client and server code)";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "ieee754" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "ieee754";
+       version = "0.8.0";
+       sha256 = "1lcs521g9lzy9d7337vg4w7q7s8500rfqy7rcifcz6pm6yfgyb8f";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/patperry/hs-ieee754";
+       description = "Utilities for dealing with IEEE floating point numbers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "integer-logarithms" = callPackage
+    ({ mkDerivation, array, base, ghc-prim, integer-gmp }:
+     mkDerivation {
+       pname = "integer-logarithms";
+       version = "1.0.2";
+       sha256 = "0w5mhak181zi6qr5h2zbcs9ymaqacisp9jwk99naz6s8zz5rq1ii";
+       libraryHaskellDepends = [ array base ghc-prim integer-gmp ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/phadej/integer-logarithms";
+       description = "Integer logarithms";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "js-flot" = callPackage
+    ({ mkDerivation, base, HTTP }:
+     mkDerivation {
+       pname = "js-flot";
+       version = "0.8.3";
+       sha256 = "0yjyzqh3qzhy5h3nql1fckw0gcfb0f4wj9pm85nafpfqp2kg58hv";
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base HTTP ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/ndmitchell/js-flot#readme";
+       description = "Obtain minified flot code";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "js-jquery" = callPackage
+    ({ mkDerivation, base, HTTP }:
+     mkDerivation {
+       pname = "js-jquery";
+       version = "3.2.1";
+       sha256 = "03qymiwnk24sigqjnl42i77rsx6vrgg5wjday0f2j0d6s213sl30";
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base HTTP ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/ndmitchell/js-jquery#readme";
+       description = "Obtain minified jQuery code";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "kan-extensions" = callPackage
+    ({ mkDerivation, adjunctions, array, base, comonad, containers
+     , contravariant, distributive, fail, free, mtl, semigroupoids
+     , tagged, transformers
+     }:
+     mkDerivation {
+       pname = "kan-extensions";
+       version = "5.0.2";
+       sha256 = "0bj88bgwxlx490f5r979idsm9dpdsb0ldzar9sa0jhj2jn2xx7hw";
+       libraryHaskellDepends = [
+         adjunctions array base comonad containers contravariant
+         distributive fail free mtl semigroupoids tagged transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/kan-extensions/";
+       description = "Kan extensions, Kan lifts, various forms of the Yoneda lemma, and (co)density (co)monads";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "language-haskell-extract" = callPackage
+    ({ mkDerivation, base, regex-posix, template-haskell }:
+     mkDerivation {
+       pname = "language-haskell-extract";
+       version = "0.2.4";
+       sha256 = "1nxcs7g8a1sp91bzpy4cj6s31k5pvc3gvig04cbrggv5cvjidnhl";
+       libraryHaskellDepends = [ base regex-posix template-haskell ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/finnsson/template-helper";
+       description = "Module to automatically extract functions from the local code";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "lens" = callPackage
+    ({ mkDerivation, array, base, base-orphans, bifunctors, bytestring
+     , Cabal, cabal-doctest, call-stack, comonad, containers
+     , contravariant, criterion, deepseq, directory, distributive
+     , doctest, exceptions, filepath, free, generic-deriving, ghc-prim
+     , hashable, HUnit, kan-extensions, mtl, nats, parallel, profunctors
+     , QuickCheck, reflection, semigroupoids, semigroups, simple-reflect
+     , tagged, template-haskell, test-framework, test-framework-hunit
+     , test-framework-quickcheck2, test-framework-th, text
+     , th-abstraction, transformers, transformers-compat
+     , unordered-containers, vector, void
+     }:
+     mkDerivation {
+       pname = "lens";
+       version = "4.15.4";
+       sha256 = "1lkwlnhgpgnsz046mw4qs0fa7h4l012gilrr3nf3spllsy3pnbkl";
+       setupHaskellDepends = [ base Cabal cabal-doctest filepath ];
+       libraryHaskellDepends = [
+         array base base-orphans bifunctors bytestring call-stack comonad
+         containers contravariant distributive exceptions filepath free
+         ghc-prim hashable kan-extensions mtl parallel profunctors
+         reflection semigroupoids semigroups tagged template-haskell text
+         th-abstraction transformers transformers-compat
+         unordered-containers vector void
+       ];
+       testHaskellDepends = [
+         base bytestring containers deepseq directory doctest filepath
+         generic-deriving HUnit mtl nats parallel QuickCheck semigroups
+         simple-reflect test-framework test-framework-hunit
+         test-framework-quickcheck2 test-framework-th text transformers
+         unordered-containers vector
+       ];
+       benchmarkHaskellDepends = [
+         base bytestring comonad containers criterion deepseq
+         generic-deriving transformers unordered-containers vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/lens/";
+       description = "Lenses, Folds and Traversals";
+       license = stdenv.lib.licenses.bsd2;
+     }) {};
+  "lens-action" = callPackage
+    ({ mkDerivation, base, Cabal, cabal-doctest, comonad, contravariant
+     , directory, doctest, filepath, lens, mtl, profunctors
+     , semigroupoids, semigroups, transformers
+     }:
+     mkDerivation {
+       pname = "lens-action";
+       version = "0.2.2";
+       sha256 = "1skhczbl774sb0202b8allm96b67wqsl5fd7jdr9i6a20hyx1gqr";
+       setupHaskellDepends = [ base Cabal cabal-doctest ];
+       libraryHaskellDepends = [
+         base comonad contravariant lens mtl profunctors semigroupoids
+         semigroups transformers
+       ];
+       testHaskellDepends = [ base directory doctest filepath ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/lens-action/";
+       description = "Monadic Getters and Folds";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "lifted-base" = callPackage
+    ({ mkDerivation, base, criterion, monad-control, monad-peel
+     , transformers, transformers-base
+     }:
+     mkDerivation {
+       pname = "lifted-base";
+       version = "0.2.3.11";
+       sha256 = "1ass00wfa91z5xp2xmm97xrvwm7j5hdkxid5cqvr3xbwrsgpmi4f";
+       libraryHaskellDepends = [ base monad-control transformers-base ];
+       benchmarkHaskellDepends = [
+         base criterion monad-control monad-peel transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/basvandijk/lifted-base";
+       description = "lifted IO operations from the base library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "logging-facade" = callPackage
+    ({ mkDerivation, base, call-stack, hspec, transformers }:
+     mkDerivation {
+       pname = "logging-facade";
+       version = "0.3.0";
+       sha256 = "0d0lwxxgd16is9aw6v3ps4r9prv3dj8xscmm45fvzq3nicjiawcf";
+       libraryHaskellDepends = [ base call-stack transformers ];
+       testHaskellDepends = [ base hspec ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/sol/logging-facade#readme";
+       description = "Simple logging abstraction that allows multiple back-ends";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "logict" = callPackage
+    ({ mkDerivation, base, mtl }:
+     mkDerivation {
+       pname = "logict";
+       version = "0.6.0.2";
+       sha256 = "07hnirv6snnym2r7iijlfz00b60jpy2856zvqxh989q0in7bd0hi";
+       libraryHaskellDepends = [ base mtl ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://code.haskell.org/~dolio/";
+       description = "A backtracking logic-programming monad";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "markdown" = callPackage
+    ({ mkDerivation, attoparsec, base, blaze-html, blaze-markup
+     , conduit, conduit-extra, containers, data-default, directory
+     , filepath, hspec, text, transformers, xml-conduit, xml-types
+     , xss-sanitize
+     }:
+     mkDerivation {
+       pname = "markdown";
+       version = "0.1.16";
+       sha256 = "11gdawvwji7301lm07z5q94g5jlf9iq63wf6k7f6sc88w99b7c08";
+       libraryHaskellDepends = [
+         attoparsec base blaze-html blaze-markup conduit conduit-extra
+         containers data-default text transformers xml-conduit xml-types
+         xss-sanitize
+       ];
+       testHaskellDepends = [
+         base blaze-html conduit conduit-extra containers directory filepath
+         hspec text transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/snoyberg/markdown";
+       description = "Convert Markdown to HTML, with XSS protection";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "math-functions" = callPackage
+    ({ mkDerivation, base, deepseq, erf, HUnit, primitive, QuickCheck
+     , test-framework, test-framework-hunit, test-framework-quickcheck2
+     , vector, vector-th-unbox
+     }:
+     mkDerivation {
+       pname = "math-functions";
+       version = "0.2.1.0";
+       sha256 = "1sv5vabsx332v1lpb6v3jv4zrzvpx1n7yprzd8wlcda5vsc5a6zp";
+       libraryHaskellDepends = [
+         base deepseq primitive vector vector-th-unbox
+       ];
+       testHaskellDepends = [
+         base deepseq erf HUnit primitive QuickCheck test-framework
+         test-framework-hunit test-framework-quickcheck2 vector
+         vector-th-unbox
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/math-functions";
+       description = "Special functions and Chebyshev polynomials";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "memory" = callPackage
+    ({ mkDerivation, base, basement, bytestring, deepseq, foundation
+     , ghc-prim, tasty, tasty-hunit, tasty-quickcheck
+     }:
+     mkDerivation {
+       pname = "memory";
+       version = "0.14.10";
+       sha256 = "01i1nx83n5lspwdhkhhjxxcp9agf9y70547dzs5m8zl043jmd0z4";
+       libraryHaskellDepends = [
+         base basement bytestring deepseq foundation ghc-prim
+       ];
+       testHaskellDepends = [
+         base foundation tasty tasty-hunit tasty-quickcheck
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/vincenthz/hs-memory";
+       description = "memory and related abstraction stuff";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "mmorph" = callPackage
+    ({ mkDerivation, base, mtl, transformers, transformers-compat }:
+     mkDerivation {
+       pname = "mmorph";
+       version = "1.0.9";
+       sha256 = "0qs5alhy719a14lrs7rnh2qsn1146czg68gvgylf4m5jh4w7vwp1";
+       revision = "1";
+       editedCabalFile = "1xxf78qi08qsis2q785s0ra29wjxnxw8pyns0dsqp4a6cybd3mjd";
+       libraryHaskellDepends = [
+         base mtl transformers transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Monad morphisms";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "mockery" = callPackage
+    ({ mkDerivation, base, base-compat, bytestring, directory, filepath
+     , hspec, logging-facade, temporary
+     }:
+     mkDerivation {
+       pname = "mockery";
+       version = "0.3.5";
+       sha256 = "09ypgm3z69gq8mj6y66ss58kbjnk15r8frwcwbqcfbfksfnfv8dp";
+       libraryHaskellDepends = [
+         base base-compat bytestring directory filepath logging-facade
+         temporary
+       ];
+       testHaskellDepends = [
+         base base-compat bytestring directory filepath hspec logging-facade
+         temporary
+       ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Support functions for automated testing";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "monad-control" = callPackage
+    ({ mkDerivation, base, stm, transformers, transformers-base
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "monad-control";
+       version = "1.0.2.2";
+       sha256 = "0cz4ww3vp96crdqrh7w86rzrs7gs8c1z7rq84yxxhbiz28fs4d0y";
+       libraryHaskellDepends = [
+         base stm transformers transformers-base transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/basvandijk/monad-control";
+       description = "Lift control operations, like exception catching, through monad transformers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "monad-par" = callPackage
+    ({ mkDerivation, abstract-deque, abstract-par, array, base
+     , containers, deepseq, HUnit, monad-par-extras, mtl, mwc-random
+     , parallel, QuickCheck, test-framework, test-framework-hunit
+     , test-framework-quickcheck2, test-framework-th, time
+     }:
+     mkDerivation {
+       pname = "monad-par";
+       version = "0.3.4.8";
+       sha256 = "0ldrzqy24fsszvn2a2nr77m2ih7xm0h9bgkjyv1l274aj18xyk7q";
+       libraryHaskellDepends = [
+         abstract-deque abstract-par array base containers deepseq
+         monad-par-extras mtl mwc-random parallel
+       ];
+       testHaskellDepends = [
+         abstract-deque abstract-par array base containers deepseq HUnit
+         monad-par-extras mtl mwc-random QuickCheck test-framework
+         test-framework-hunit test-framework-quickcheck2 test-framework-th
+         time
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/simonmar/monad-par";
+       description = "A library for parallel programming based on a monad";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "monad-par-extras" = callPackage
+    ({ mkDerivation, abstract-par, base, cereal, deepseq, mtl, random
+     , transformers
+     }:
+     mkDerivation {
+       pname = "monad-par-extras";
+       version = "0.3.3";
+       sha256 = "0bl4bd6jzdc5zm20q1g67ppkfh6j6yn8fwj6msjayj621cck67p2";
+       libraryHaskellDepends = [
+         abstract-par base cereal deepseq mtl random transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/simonmar/monad-par";
+       description = "Combinators and extra features for Par monads";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "monad-peel" = callPackage
+    ({ mkDerivation, base, extensible-exceptions, HUnit, test-framework
+     , test-framework-hunit, transformers
+     }:
+     mkDerivation {
+       pname = "monad-peel";
+       version = "0.2.1.2";
+       sha256 = "1x1kr5pk8ksw8xcm19c50jx8m0crf3m3qp73k31dnl9r1w4ykm9d";
+       libraryHaskellDepends = [
+         base extensible-exceptions transformers
+       ];
+       testHaskellDepends = [
+         base extensible-exceptions HUnit test-framework
+         test-framework-hunit transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://andersk.mit.edu/haskell/monad-peel/";
+       description = "Lift control operations like exception catching through monad transformers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "monads-tf" = callPackage
+    ({ mkDerivation, base, transformers }:
+     mkDerivation {
+       pname = "monads-tf";
+       version = "0.1.0.3";
+       sha256 = "1wdhskwa6dw8qljbvwpyxj8ca6y95q2np7z4y4q6bpf4anmd5794";
+       libraryHaskellDepends = [ base transformers ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Monad classes, using type families";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "mtl" = callPackage
+    ({ mkDerivation, base, transformers }:
+     mkDerivation {
+       pname = "mtl";
+       version = "2.2.1";
+       sha256 = "1icdbj2rshzn0m1zz5wa7v3xvkf6qw811p4s7jgqwvx1ydwrvrfa";
+       revision = "1";
+       editedCabalFile = "0fsa965g9h23mlfjzghmmhcb9dmaq8zpm374gby6iwgdx47q0njb";
+       libraryHaskellDepends = [ base transformers ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/mtl";
+       description = "Monad classes, using functional dependencies";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "mwc-random" = callPackage
+    ({ mkDerivation, base, HUnit, math-functions, primitive, QuickCheck
+     , statistics, test-framework, test-framework-hunit
+     , test-framework-quickcheck2, time, vector
+     }:
+     mkDerivation {
+       pname = "mwc-random";
+       version = "0.13.6.0";
+       sha256 = "05j7yh0hh9nxic3dijmzv44kc6gzclvamdph7sq7w19wq57k6pq6";
+       libraryHaskellDepends = [
+         base math-functions primitive time vector
+       ];
+       testHaskellDepends = [
+         base HUnit QuickCheck statistics test-framework
+         test-framework-hunit test-framework-quickcheck2 vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/mwc-random";
+       description = "Fast, high quality pseudo random number generation";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "nanospec" = callPackage
+    ({ mkDerivation, base, hspec, silently }:
+     mkDerivation {
+       pname = "nanospec";
+       version = "0.2.1";
+       sha256 = "0jq2l1lmy4hcl6r975xcg86xr1y7jfxr3qn27ibsmjbzlnxdkjyv";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base hspec silently ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A lightweight implementation of a subset of Hspec's API";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "nats" = callPackage
+    ({ mkDerivation }:
+     mkDerivation {
+       pname = "nats";
+       version = "1.1.1";
+       sha256 = "1kfl2yy97nb7q0j17v96rl73xvi3z4db9bk0xychc76dax41n78k";
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/nats/";
+       description = "Natural numbers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "network" = callPackage
+    ({ mkDerivation, base, bytestring, doctest, HUnit, test-framework
+     , test-framework-hunit, unix
+     }:
+     mkDerivation {
+       pname = "network";
+       version = "2.6.3.2";
+       sha256 = "1dn092zfqmxfbzln6d0khka4gizzjivf2yja9w9hwb5g9q3pfi1m";
+       revision = "1";
+       editedCabalFile = "17234sy0vqic8g9wg8gmfmc0by50scjwbdk8bkcl9kjf3fvs4nyx";
+       libraryHaskellDepends = [ base bytestring unix ];
+       testHaskellDepends = [
+         base bytestring doctest HUnit test-framework test-framework-hunit
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell/network";
+       description = "Low-level networking interface";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "network-uri" = callPackage
+    ({ mkDerivation, base, deepseq, HUnit, parsec, test-framework
+     , test-framework-hunit, test-framework-quickcheck2
+     }:
+     mkDerivation {
+       pname = "network-uri";
+       version = "2.6.1.0";
+       sha256 = "1w27zkvn39kjr9lmw9421y8w43h572ycsfafsb7kyvr3a4ihlgj2";
+       revision = "1";
+       editedCabalFile = "141nj7q0p9wkn5gr41ayc63cgaanr9m59yym47wpxqr3c334bk32";
+       libraryHaskellDepends = [ base deepseq parsec ];
+       testHaskellDepends = [
+         base HUnit test-framework test-framework-hunit
+         test-framework-quickcheck2
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell/network-uri";
+       description = "URI manipulation";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "old-locale" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "old-locale";
+       version = "1.0.0.7";
+       sha256 = "0l3viphiszvz5wqzg7a45zp40grwlab941q5ay29iyw8p3v8pbyv";
+       revision = "2";
+       editedCabalFile = "04b9vn007hlvsrx4ksd3r8r3kbyaj2kvwxchdrmd4370qzi8p6gs";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "locale library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "old-time" = callPackage
+    ({ mkDerivation, base, old-locale }:
+     mkDerivation {
+       pname = "old-time";
+       version = "1.1.0.3";
+       sha256 = "1h9b26s3kfh2k0ih4383w90ibji6n0iwamxp6rfp2lbq1y5ibjqw";
+       revision = "2";
+       editedCabalFile = "1j6ln1dkvhdvnwl33bp0xf9lhc4sybqk0aw42p8cq81xwwzbn7y9";
+       libraryHaskellDepends = [ base old-locale ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Time library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "options" = callPackage
+    ({ mkDerivation, base, containers, monads-tf, transformers }:
+     mkDerivation {
+       pname = "options";
+       version = "1.2.1.1";
+       sha256 = "0qjs0v1ny52w51n5582d4z8wy9h6n0zw1xb5dh686ff5wadflgi8";
+       libraryHaskellDepends = [ base containers monads-tf transformers ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://john-millikin.com/software/haskell-options/";
+       description = "A powerful and easy-to-use command-line option parser";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "optparse-applicative" = callPackage
+    ({ mkDerivation, ansi-wl-pprint, base, process, QuickCheck
+     , transformers, transformers-compat
+     }:
+     mkDerivation {
+       pname = "optparse-applicative";
+       version = "0.13.2.0";
+       sha256 = "18kcjldpzay3k3309rvb9vqrp5b1gqp0hgymynqx7x2kgv7cz0sw";
+       libraryHaskellDepends = [
+         ansi-wl-pprint base process transformers transformers-compat
+       ];
+       testHaskellDepends = [ base QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/pcapriotti/optparse-applicative";
+       description = "Utilities and combinators for parsing command line options";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "parallel" = callPackage
+    ({ mkDerivation, array, base, containers, deepseq }:
+     mkDerivation {
+       pname = "parallel";
+       version = "3.2.1.1";
+       sha256 = "05rw8zhpqhx31zi6vg7zpyciaarh24j7g2p613xrpyrnksybjfrj";
+       libraryHaskellDepends = [ array base containers deepseq ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Parallel programming library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "parsec" = callPackage
+    ({ mkDerivation, base, bytestring, mtl, text }:
+     mkDerivation {
+       pname = "parsec";
+       version = "3.1.11";
+       sha256 = "0vk7q9j2128q191zf1sg0ylj9s9djwayqk9747k0a5fin4f2b1vg";
+       libraryHaskellDepends = [ base bytestring mtl text ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/aslatter/parsec";
+       description = "Monadic parser combinators";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "patience" = callPackage
+    ({ mkDerivation, base, containers }:
+     mkDerivation {
+       pname = "patience";
+       version = "0.1.1";
+       sha256 = "0qyv20gqy9pb1acy700ahv70lc6vprcwb26cc7fcpcs4scsc7irm";
+       libraryHaskellDepends = [ base containers ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Patience diff and longest increasing subsequence";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "pcre-light" = callPackage
+    ({ mkDerivation, base, bytestring, pcre }:
+     mkDerivation {
+       pname = "pcre-light";
+       version = "0.4.0.4";
+       sha256 = "0xcyi1fivwg7a92mch5bcqzmrfxzqj42rmb3m8kgs61x4qwpxj82";
+       libraryHaskellDepends = [ base bytestring ];
+       libraryPkgconfigDepends = [ pcre ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/Daniel-Diaz/pcre-light";
+       description = "Portable regex library for Perl 5 compatible regular expressions";
+       license = stdenv.lib.licenses.bsd3;
+     }) {inherit (pkgs) pcre;};
+  "polyparse" = callPackage
+    ({ mkDerivation, base, bytestring, text }:
+     mkDerivation {
+       pname = "polyparse";
+       version = "1.12";
+       sha256 = "05dya1vdvq29hkhkdlsglzhw7bdn51rvs1javs0q75nf99c66k7m";
+       libraryHaskellDepends = [ base bytestring text ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://code.haskell.org/~malcolm/polyparse/";
+       description = "A variety of alternative parser combinator libraries";
+       license = "LGPL";
+     }) {};
+  "prelude-extras" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "prelude-extras";
+       version = "0.4.0.3";
+       sha256 = "0xzqdf3nl2h0ra4gnslm1m1nsxlsgc0hh6ky3vn578vh11zhifq9";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/prelude-extras";
+       description = "Higher order versions of Prelude classes";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "pretty-show" = callPackage
+    ({ mkDerivation, array, base, filepath, ghc-prim, happy
+     , haskell-lexer, pretty
+     }:
+     mkDerivation {
+       pname = "pretty-show";
+       version = "1.6.15";
+       sha256 = "16ik7dhagyr3is5dmkihw109l4d0500vi55z46p8lhigmfwqpn2n";
+       isLibrary = true;
+       isExecutable = true;
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [
+         array base filepath ghc-prim haskell-lexer pretty
+       ];
+       libraryToolDepends = [ happy ];
+       executableHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://wiki.github.com/yav/pretty-show";
+       description = "Tools for working with derived `Show` instances and generic inspection of values";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "primitive" = callPackage
+    ({ mkDerivation, base, ghc-prim, transformers }:
+     mkDerivation {
+       pname = "primitive";
+       version = "0.6.2.0";
+       sha256 = "1q9a537av81c0lvcdzc8i5hqjx3209f5448d1smkyaz22c1dgs5q";
+       revision = "1";
+       editedCabalFile = "0d61g8ppsdajdqykl2kc46kq00aamsf12v60ilgrf58dbji9sz56";
+       libraryHaskellDepends = [ base ghc-prim transformers ];
+       testHaskellDepends = [ base ghc-prim ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell/primitive";
+       description = "Primitive memory-related operations";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "profunctors" = callPackage
+    ({ mkDerivation, base, base-orphans, bifunctors, comonad
+     , contravariant, distributive, tagged, transformers
+     }:
+     mkDerivation {
+       pname = "profunctors";
+       version = "5.2.1";
+       sha256 = "0pcwjp813d3mrzb7qf7dzkspf85xnfj1m2snhjgnvwx6vw07w877";
+       libraryHaskellDepends = [
+         base base-orphans bifunctors comonad contravariant distributive
+         tagged transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/profunctors/";
+       description = "Profunctors";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "quickcheck-instances" = callPackage
+    ({ mkDerivation, array, base, bytestring, containers, hashable
+     , old-time, QuickCheck, scientific, text, time
+     , unordered-containers, vector
+     }:
+     mkDerivation {
+       pname = "quickcheck-instances";
+       version = "0.3.12";
+       sha256 = "1wwvkzpams7i0j7nk5qj8vvhj8x5zcbgbgrpczszgvshva4bkmfx";
+       revision = "2";
+       editedCabalFile = "1v1r7gidkjc2v4dw1id57raqnjqv4rc10pa2l6xhhg0dzrnw28a3";
+       libraryHaskellDepends = [
+         array base bytestring containers hashable old-time QuickCheck
+         scientific text time unordered-containers vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/aslatter/qc-instances";
+       description = "Common quickcheck instances";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "quickcheck-io" = callPackage
+    ({ mkDerivation, base, HUnit, QuickCheck }:
+     mkDerivation {
+       pname = "quickcheck-io";
+       version = "0.2.0";
+       sha256 = "08k4v7pkgjf30pv5j2dfv1gqv6hclxlniyq2sps8zq4zswcr2xzv";
+       libraryHaskellDepends = [ base HUnit QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/hspec/quickcheck-io#readme";
+       description = "Use HUnit assertions as QuickCheck properties";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "quickcheck-unicode" = callPackage
+    ({ mkDerivation, base, QuickCheck }:
+     mkDerivation {
+       pname = "quickcheck-unicode";
+       version = "1.0.1.0";
+       sha256 = "0s43s1bzbg3gwsjgm7fpyksd1339f0m26dlw2famxwyzgvm0a80k";
+       libraryHaskellDepends = [ base QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/quickcheck-unicode";
+       description = "Generator and shrink functions for testing Unicode-related software";
+       license = stdenv.lib.licenses.bsd2;
+     }) {};
+  "random" = callPackage
+    ({ mkDerivation, base, time }:
+     mkDerivation {
+       pname = "random";
+       version = "1.1";
+       sha256 = "0nis3lbkp8vfx8pkr6v7b7kr5m334bzb0fk9vxqklnp2aw8a865p";
+       revision = "1";
+       editedCabalFile = "1pv5d7bm2rgap7llp5vjsplrg048gvf0226y0v19gpvdsx7n4rvv";
+       libraryHaskellDepends = [ base time ];
+       testHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "random number library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "reflection" = callPackage
+    ({ mkDerivation, base, template-haskell }:
+     mkDerivation {
+       pname = "reflection";
+       version = "2.1.2";
+       sha256 = "0f9w0akbm6p8h7kzgcd2f6nnpw1wy84pqn45vfz1ch5j0hn8h2d9";
+       libraryHaskellDepends = [ base template-haskell ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/reflection";
+       description = "Reifies arbitrary terms into types that can be reflected back into terms";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "regex-base" = callPackage
+    ({ mkDerivation, array, base, bytestring, containers, mtl }:
+     mkDerivation {
+       pname = "regex-base";
+       version = "0.93.2";
+       sha256 = "0y1j4h2pg12c853nzmczs263di7xkkmlnsq5dlp5wgbgl49mgp10";
+       libraryHaskellDepends = [ array base bytestring containers mtl ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://sourceforge.net/projects/lazy-regex";
+       description = "Replaces/Enhances Text.Regex";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "regex-posix" = callPackage
+    ({ mkDerivation, array, base, bytestring, containers, regex-base }:
+     mkDerivation {
+       pname = "regex-posix";
+       version = "0.95.2";
+       sha256 = "0gkhzhj8nvfn1ija31c7xnl6p0gadwii9ihyp219ck2arlhrj0an";
+       libraryHaskellDepends = [
+         array base bytestring containers regex-base
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://sourceforge.net/projects/lazy-regex";
+       description = "Replaces/Enhances Text.Regex";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "regex-tdfa" = callPackage
+    ({ mkDerivation, array, base, bytestring, containers, ghc-prim, mtl
+     , parsec, regex-base
+     }:
+     mkDerivation {
+       pname = "regex-tdfa";
+       version = "1.2.2";
+       sha256 = "0f8x8wyr6m21g8dnxvnvalz5bsq37l125l6qhs0fscbvprsxc4nb";
+       libraryHaskellDepends = [
+         array base bytestring containers ghc-prim mtl parsec regex-base
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/ChrisKuklewicz/regex-tdfa";
+       description = "Replaces/Enhances Text.Regex";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "resourcet" = callPackage
+    ({ mkDerivation, base, containers, exceptions, hspec, lifted-base
+     , mmorph, monad-control, mtl, transformers, transformers-base
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "resourcet";
+       version = "1.1.9";
+       sha256 = "1x9f2qz57agl3xljp1wi0ab51p13czrpf6qjp3506rl9dg99j6as";
+       libraryHaskellDepends = [
+         base containers exceptions lifted-base mmorph monad-control mtl
+         transformers transformers-base transformers-compat
+       ];
+       testHaskellDepends = [ base hspec lifted-base transformers ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/snoyberg/conduit";
+       description = "Deterministic allocation and freeing of scarce resources";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "safe" = callPackage
+    ({ mkDerivation, base, deepseq, QuickCheck }:
+     mkDerivation {
+       pname = "safe";
+       version = "0.3.15";
+       sha256 = "0bbalr2n92akwcgdyl5ff45h8d4waamj1lp7ly6mdgda17k4lpm3";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base deepseq QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/ndmitchell/safe#readme";
+       description = "Library of safe (exception free) functions";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "safecopy" = callPackage
+    ({ mkDerivation, array, base, bytestring, cereal, containers, lens
+     , lens-action, old-time, QuickCheck, quickcheck-instances, tasty
+     , tasty-quickcheck, template-haskell, text, time, vector
+     }:
+     mkDerivation {
+       pname = "safecopy";
+       version = "0.9.3.3";
+       sha256 = "17msazxg0iqvmsn4cwlnr1hwcw5bfp276zsg7x5r47ifi9j748nb";
+       libraryHaskellDepends = [
+         array base bytestring cereal containers old-time template-haskell
+         text time vector
+       ];
+       testHaskellDepends = [
+         array base cereal containers lens lens-action QuickCheck
+         quickcheck-instances tasty tasty-quickcheck template-haskell time
+         vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/acid-state/safecopy";
+       description = "Binary serialization with version control";
+       license = stdenv.lib.licenses.publicDomain;
+     }) {};
+  "scientific" = callPackage
+    ({ mkDerivation, base, binary, bytestring, containers, criterion
+     , deepseq, hashable, integer-gmp, integer-logarithms, primitive
+     , QuickCheck, smallcheck, tasty, tasty-ant-xml, tasty-hunit
+     , tasty-quickcheck, tasty-smallcheck, text
+     }:
+     mkDerivation {
+       pname = "scientific";
+       version = "0.3.5.2";
+       sha256 = "0msnjz7ml0zycw9bssslxbg0nigziw7vs5km4q3vjbs8jpzpkr2w";
+       revision = "2";
+       editedCabalFile = "0wsrd213480p3pqrd6i650fr092yv7dhla7a85p8154pn5gvbr0a";
+       libraryHaskellDepends = [
+         base binary bytestring containers deepseq hashable integer-gmp
+         integer-logarithms primitive text
+       ];
+       testHaskellDepends = [
+         base binary bytestring QuickCheck smallcheck tasty tasty-ant-xml
+         tasty-hunit tasty-quickcheck tasty-smallcheck text
+       ];
+       benchmarkHaskellDepends = [ base criterion ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/basvandijk/scientific";
+       description = "Numbers represented using scientific notation";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "semigroupoids" = callPackage
+    ({ mkDerivation, base, base-orphans, bifunctors, Cabal
+     , cabal-doctest, comonad, containers, contravariant, distributive
+     , doctest, hashable, semigroups, tagged, transformers
+     , transformers-compat, unordered-containers
+     }:
+     mkDerivation {
+       pname = "semigroupoids";
+       version = "5.2.1";
+       sha256 = "006jys6kvckkmbnhf4jc51sh64hamkz464mr8ciiakybrfvixr3r";
+       revision = "3";
+       editedCabalFile = "0wzcnpz8pyjk823vqnq5s8krsb8i6cw573hcschpd9x5ynq4li70";
+       setupHaskellDepends = [ base Cabal cabal-doctest ];
+       libraryHaskellDepends = [
+         base base-orphans bifunctors comonad containers contravariant
+         distributive hashable semigroups tagged transformers
+         transformers-compat unordered-containers
+       ];
+       testHaskellDepends = [ base doctest ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/semigroupoids";
+       description = "Semigroupoids: Category sans id";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "semigroups" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "semigroups";
+       version = "0.18.3";
+       sha256 = "1jm9wnb5jmwdk4i9qbwfay69ydi76xi0qqi9zqp6wh3jd2c7qa9m";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/semigroups/";
+       description = "Anything that associates";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "sendfile" = callPackage
+    ({ mkDerivation, base, bytestring, network }:
+     mkDerivation {
+       pname = "sendfile";
+       version = "0.7.9";
+       sha256 = "0hnw1ym81cff49dwww19kgbs4s0kpandbvn6h5cml3y0p1nxybqh";
+       libraryHaskellDepends = [ base bytestring network ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://hub.darcs.net/stepcut/sendfile";
+       description = "A portable sendfile library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "setenv" = callPackage
+    ({ mkDerivation, base, unix }:
+     mkDerivation {
+       pname = "setenv";
+       version = "0.1.1.3";
+       sha256 = "0cnbgrvb9byyahb37zlqrj05rj25v190crgcw8wmlgf0mwwxyn73";
+       revision = "1";
+       editedCabalFile = "0ny4g3kjys0hqg41mnwrsymy1bwhl8l169kis4y4fa58sb06m4f5";
+       libraryHaskellDepends = [ base unix ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A cross-platform library for setting environment variables";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "shakespeare" = callPackage
+    ({ mkDerivation, aeson, base, blaze-html, blaze-markup, bytestring
+     , containers, directory, exceptions, ghc-prim, hspec, HUnit, parsec
+     , process, scientific, template-haskell, text, time, transformers
+     , unordered-containers, vector
+     }:
+     mkDerivation {
+       pname = "shakespeare";
+       version = "2.0.14.1";
+       sha256 = "02pahbvibll4jmbq6p5vxr2r4mmrfx3h0c8v6qbj4rlq96lc6a23";
+       libraryHaskellDepends = [
+         aeson base blaze-html blaze-markup bytestring containers directory
+         exceptions ghc-prim parsec process scientific template-haskell text
+         time transformers unordered-containers vector
+       ];
+       testHaskellDepends = [
+         aeson base blaze-html blaze-markup bytestring containers directory
+         exceptions ghc-prim hspec HUnit parsec process template-haskell
+         text time transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.yesodweb.com/book/shakespearean-templates";
+       description = "A toolkit for making compile-time interpolated templates";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "silently" = callPackage
+    ({ mkDerivation, base, deepseq, directory, nanospec, temporary }:
+     mkDerivation {
+       pname = "silently";
+       version = "1.2.5";
+       sha256 = "0f9qm3f7y0hpxn6mddhhg51mm1r134qkvd2kr8r6192ka1ijbxnf";
+       libraryHaskellDepends = [ base deepseq directory ];
+       testHaskellDepends = [ base deepseq directory nanospec temporary ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/hspec/silently";
+       description = "Prevent or capture writing to stdout and other handles";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "simple-reflect" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "simple-reflect";
+       version = "0.3.2";
+       sha256 = "1dpcf6w3cf1sfl9bnlsx04x7aghw029glj5d05qzrsnms2rlw8iq";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://twanvl.nl/blog/haskell/simple-reflection-of-expressions";
+       description = "Simple reflection of expressions containing variables";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "siphash" = callPackage
+    ({ mkDerivation, base, bytestring, cpu, QuickCheck, test-framework
+     , test-framework-quickcheck2
+     }:
+     mkDerivation {
+       pname = "siphash";
+       version = "1.0.3";
+       sha256 = "1wq5dan30ggjgmravy92ylqjvjv1q7mxrmddr7zc8h6aqr0wx0fg";
+       revision = "1";
+       editedCabalFile = "1q2dy0ywngm9iv7k6d9gnf860m9hpf62q5qvdzmxw5s629gk4afn";
+       enableSeparateDataOutput = true;
+       libraryHaskellDepends = [ base bytestring cpu ];
+       testHaskellDepends = [
+         base bytestring QuickCheck test-framework
+         test-framework-quickcheck2
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/vincenthz/hs-siphash";
+       description = "siphash: a fast short input PRF";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "smallcheck" = callPackage
+    ({ mkDerivation, base, ghc-prim, logict, mtl, pretty }:
+     mkDerivation {
+       pname = "smallcheck";
+       version = "1.1.2";
+       sha256 = "14690ahl3iq99hw638qk0bpmkmspghjz2yh8p1nyccli92y23xjm";
+       libraryHaskellDepends = [ base ghc-prim logict mtl pretty ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/feuerbach/smallcheck";
+       description = "A property-based testing library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "split" = callPackage
+    ({ mkDerivation, base, QuickCheck }:
+     mkDerivation {
+       pname = "split";
+       version = "0.2.3.2";
+       sha256 = "0fmnkvq1ky4dgyh1z2mvdal5pw103irvkf4p9d5x8wyl1nnylhs9";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Combinator library for splitting lists";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "statistics" = callPackage
+    ({ mkDerivation, aeson, base, binary, deepseq, erf, HUnit, ieee754
+     , math-functions, monad-par, mwc-random, primitive, QuickCheck
+     , test-framework, test-framework-hunit, test-framework-quickcheck2
+     , vector, vector-algorithms, vector-binary-instances
+     }:
+     mkDerivation {
+       pname = "statistics";
+       version = "0.13.3.0";
+       sha256 = "1vc12c3mnpspbycwkl0b22jqrdbg9fpmr1fxdxlmqwl603qy0zvf";
+       libraryHaskellDepends = [
+         aeson base binary deepseq erf math-functions monad-par mwc-random
+         primitive vector vector-algorithms vector-binary-instances
+       ];
+       testHaskellDepends = [
+         base binary erf HUnit ieee754 math-functions mwc-random primitive
+         QuickCheck test-framework test-framework-hunit
+         test-framework-quickcheck2 vector vector-algorithms
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/statistics";
+       description = "A library of statistical types, data, and functions";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "stm" = callPackage
+    ({ mkDerivation, array, base }:
+     mkDerivation {
+       pname = "stm";
+       version = "2.4.4.1";
+       sha256 = "111kpy1d6f5c0bggh6hyfm86q5p8bq1qbqf6dw2x4l4dxnar16cg";
+       revision = "1";
+       editedCabalFile = "0kzw4rw9fgmc4qyxmm1lwifdyrx5r1356150xm14vy4mp86diks9";
+       libraryHaskellDepends = [ array base ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Software Transactional Memory";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "streaming-commons" = callPackage
+    ({ mkDerivation, array, async, base, blaze-builder, bytestring
+     , criterion, deepseq, directory, hspec, network, process
+     , QuickCheck, random, stm, text, transformers, unix, zlib
+     }:
+     mkDerivation {
+       pname = "streaming-commons";
+       version = "0.1.17";
+       sha256 = "1abxyjkn8xc8d33yhqxy1ki01kpzf4hy55f167qg4vk2ig5kh2p5";
+       libraryHaskellDepends = [
+         array async base blaze-builder bytestring directory network process
+         random stm text transformers unix zlib
+       ];
+       testHaskellDepends = [
+         array async base blaze-builder bytestring deepseq hspec network
+         QuickCheck text unix zlib
+       ];
+       benchmarkHaskellDepends = [
+         base blaze-builder bytestring criterion deepseq text
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/fpco/streaming-commons";
+       description = "Common lower-level functions needed by various streaming data libraries";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "stringbuilder" = callPackage
+    ({ mkDerivation, base, hspec, QuickCheck }:
+     mkDerivation {
+       pname = "stringbuilder";
+       version = "0.5.0";
+       sha256 = "1ap95xphqnrhv64c2a137wqslkdmb2jjd9ldb17gs1pw48k8hrl9";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base hspec QuickCheck ];
+       doHaddock = false;
+       doCheck = false;
+       description = "A writer monad for multi-line string literals";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "syb" = callPackage
+    ({ mkDerivation, base, containers, HUnit, mtl }:
+     mkDerivation {
+       pname = "syb";
+       version = "0.7";
+       sha256 = "1da2zz7gqm4xbkx5vpd74dayx1svaxyl145fl14mq15lbb77sxdq";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base containers HUnit mtl ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.cs.uu.nl/wiki/GenericProgramming/SYB";
+       description = "Scrap Your Boilerplate";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "system-fileio" = callPackage
+    ({ mkDerivation, base, bytestring, chell, system-filepath
+     , temporary, text, time, transformers, unix
+     }:
+     mkDerivation {
+       pname = "system-fileio";
+       version = "0.3.16.3";
+       sha256 = "1484hcl27s2qcby8ws5djj11q9bz68bspcifz9h5gii2ndy70x9i";
+       libraryHaskellDepends = [
+         base bytestring system-filepath text time unix
+       ];
+       testHaskellDepends = [
+         base bytestring chell system-filepath temporary text time
+         transformers unix
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/fpco/haskell-filesystem";
+       description = "Consistent filesystem interaction across GHC versions (deprecated)";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "system-filepath" = callPackage
+    ({ mkDerivation, base, bytestring, deepseq, text }:
+     mkDerivation {
+       pname = "system-filepath";
+       version = "0.4.13.4";
+       sha256 = "1yy5zsmmimhg6iaw9fmpwrxvxrgi5s6bfyqfihdsnx4bjvn7sp9l";
+       libraryHaskellDepends = [ base bytestring deepseq text ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/fpco/haskell-filesystem";
+       description = "High-level, byte-based file and directory path manipulations (deprecated)";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "tagged" = callPackage
+    ({ mkDerivation, base, deepseq, template-haskell, transformers
+     , transformers-compat
+     }:
+     mkDerivation {
+       pname = "tagged";
+       version = "0.8.5";
+       sha256 = "16cdzh0bw16nvjnyyy5j9s60malhz4nnazw96vxb0xzdap4m2z74";
+       revision = "1";
+       editedCabalFile = "15mqdimbgrq5brqljjl7dbxkyrxppap06q53cp7ml7w3l08v5mx8";
+       libraryHaskellDepends = [
+         base deepseq template-haskell transformers transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/tagged";
+       description = "Haskell 98 phantom types to avoid unsafely passing dummy arguments";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "tagsoup" = callPackage
+    ({ mkDerivation, base, bytestring, containers, deepseq, directory
+     , process, QuickCheck, text, time
+     }:
+     mkDerivation {
+       pname = "tagsoup";
+       version = "0.14.2";
+       sha256 = "1j7gliwn4x6i25zlhc8f704pbc96ddn9gb9czq3a4m0k1sfpm3w8";
+       libraryHaskellDepends = [ base bytestring containers text ];
+       testHaskellDepends = [
+         base bytestring containers deepseq directory process QuickCheck
+         text time
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/ndmitchell/tagsoup#readme";
+       description = "Parsing and extracting information from (possibly malformed) HTML/XML documents";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "tasty" = callPackage
+    ({ mkDerivation, ansi-terminal, async, base, clock, containers
+     , deepseq, mtl, optparse-applicative, regex-tdfa, stm, tagged
+     , unbounded-delays, unix
+     }:
+     mkDerivation {
+       pname = "tasty";
+       version = "0.11.3";
+       sha256 = "1g5394akq4j7y93b7cqwqf9lacqh2k21rrj6srbnh2sg97ng7j1b";
+       libraryHaskellDepends = [
+         ansi-terminal async base clock containers deepseq mtl
+         optparse-applicative regex-tdfa stm tagged unbounded-delays unix
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/feuerbach/tasty";
+       description = "Modern and extensible testing framework";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "tasty-ant-xml" = callPackage
+    ({ mkDerivation, base, containers, directory, filepath
+     , generic-deriving, ghc-prim, mtl, stm, tagged, tasty, transformers
+     , xml
+     }:
+     mkDerivation {
+       pname = "tasty-ant-xml";
+       version = "1.1.1";
+       sha256 = "0asvz2jjk1zf3ylps1277kf4yy6bifascblsd3vjfk9k9rh52w3j";
+       libraryHaskellDepends = [
+         base containers directory filepath generic-deriving ghc-prim mtl
+         stm tagged tasty transformers xml
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ocharles/tasty-ant-xml";
+       description = "Render tasty output to XML for Jenkins";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "tasty-golden" = callPackage
+    ({ mkDerivation, async, base, bytestring, containers, deepseq
+     , directory, filepath, mtl, optparse-applicative, process, tagged
+     , tasty, tasty-hunit, temporary, temporary-rc
+     }:
+     mkDerivation {
+       pname = "tasty-golden";
+       version = "2.3.1.1";
+       sha256 = "0pcf5hsyp5mmbqn7krdm49jxpkjm6rb4j83j28f76h7q55dzm1wy";
+       libraryHaskellDepends = [
+         async base bytestring containers deepseq directory filepath mtl
+         optparse-applicative process tagged tasty temporary
+       ];
+       testHaskellDepends = [
+         base directory filepath process tasty tasty-hunit temporary-rc
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/feuerbach/tasty-golden";
+       description = "Golden tests support for tasty";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "tasty-hunit" = callPackage
+    ({ mkDerivation, base, tasty }:
+     mkDerivation {
+       pname = "tasty-hunit";
+       version = "0.9.2";
+       sha256 = "08qnxaw34wfnzi9irs1jd4d0zczqm3k5ffkd4zwhkz0dflmgq7mf";
+       libraryHaskellDepends = [ base tasty ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://documentup.com/feuerbach/tasty";
+       description = "HUnit support for the Tasty test framework";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "tasty-kat" = callPackage
+    ({ mkDerivation, base, bytestring, mtl, tasty, tasty-hunit
+     , tasty-quickcheck
+     }:
+     mkDerivation {
+       pname = "tasty-kat";
+       version = "0.0.3";
+       sha256 = "14yvlpli6cv6bn3kh8mlfp4x1l6ns4fvmfv6hmj75cvxyzq029d7";
+       libraryHaskellDepends = [ base bytestring tasty ];
+       testHaskellDepends = [
+         base bytestring mtl tasty tasty-hunit tasty-quickcheck
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/vincenthz/tasty-kat";
+       description = "Known Answer Tests (KAT) framework for tasty";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "tasty-quickcheck" = callPackage
+    ({ mkDerivation, base, pcre-light, QuickCheck, tagged, tasty
+     , tasty-hunit
+     }:
+     mkDerivation {
+       pname = "tasty-quickcheck";
+       version = "0.8.4";
+       sha256 = "15rjxib5jmjq0hzj47x15kgp3awc73va4cy1pmpf7k3hvfv4qprn";
+       libraryHaskellDepends = [ base QuickCheck tagged tasty ];
+       testHaskellDepends = [ base pcre-light tasty tasty-hunit ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://documentup.com/feuerbach/tasty";
+       description = "QuickCheck support for the Tasty test framework";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "tasty-smallcheck" = callPackage
+    ({ mkDerivation, async, base, smallcheck, tagged, tasty }:
+     mkDerivation {
+       pname = "tasty-smallcheck";
+       version = "0.8.1";
+       sha256 = "1n66ngzllf3xrlqykwszlkwsi96n5nkm7xbpfq7774vpvfnafjri";
+       libraryHaskellDepends = [ async base smallcheck tagged tasty ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://documentup.com/feuerbach/tasty";
+       description = "SmallCheck support for the Tasty test framework";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "temporary" = callPackage
+    ({ mkDerivation, base, base-compat, directory, exceptions, filepath
+     , tasty, tasty-hunit, transformers, unix
+     }:
+     mkDerivation {
+       pname = "temporary";
+       version = "1.2.1.1";
+       sha256 = "1wq0rc71mp0lw7pkpcbhglf636ni46xnlpsmx6yz8acmwmqj8xsm";
+       libraryHaskellDepends = [
+         base directory exceptions filepath transformers unix
+       ];
+       testHaskellDepends = [
+         base base-compat directory filepath tasty tasty-hunit unix
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/feuerbach/temporary";
+       description = "Portable temporary file and directory support";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "temporary-rc" = callPackage
+    ({ mkDerivation, base, directory, exceptions, filepath
+     , transformers, unix
+     }:
+     mkDerivation {
+       pname = "temporary-rc";
+       version = "1.2.0.3";
+       sha256 = "1nqih0qks439k3pr5kmbbc8rjdw730slrxlflqb27fbxbzb8skqs";
+       libraryHaskellDepends = [
+         base directory exceptions filepath transformers unix
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://www.github.com/feuerbach/temporary";
+       description = "Portable temporary file and directory support for Windows and Unix, based on code from Cabal";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "test-framework" = callPackage
+    ({ mkDerivation, ansi-terminal, ansi-wl-pprint, base, containers
+     , hostname, old-locale, random, regex-posix, time, xml
+     }:
+     mkDerivation {
+       pname = "test-framework";
+       version = "0.8.1.1";
+       sha256 = "0wxjgdvb1c4ykazw774zlx86550848wbsvgjgcrdzcgbb9m650vq";
+       revision = "2";
+       editedCabalFile = "1mp1h0fzwxa3xxnbw33lp8hj0rb8vwkd712r5ak8ny5nmawh2c9y";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [
+         ansi-terminal ansi-wl-pprint base containers hostname old-locale
+         random regex-posix time xml
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://batterseapower.github.io/test-framework/";
+       description = "Framework for running and organising tests, with HUnit and QuickCheck support";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "test-framework-hunit" = callPackage
+    ({ mkDerivation, base, extensible-exceptions, HUnit, test-framework
+     }:
+     mkDerivation {
+       pname = "test-framework-hunit";
+       version = "0.3.0.2";
+       sha256 = "1y0b6vg8nfm43v90lxxcydhi6qlxhfy4vpxbzm5ic2w55bh8xjwm";
+       revision = "3";
+       editedCabalFile = "0i9mlalv7cl1iq43ld5myrnpszq5rxmd79hk495dcb08rglhgl3z";
+       libraryHaskellDepends = [
+         base extensible-exceptions HUnit test-framework
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://batterseapower.github.io/test-framework/";
+       description = "HUnit support for the test-framework package";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "test-framework-quickcheck2" = callPackage
+    ({ mkDerivation, base, extensible-exceptions, QuickCheck, random
+     , test-framework
+     }:
+     mkDerivation {
+       pname = "test-framework-quickcheck2";
+       version = "0.3.0.4";
+       sha256 = "0vj834337r6jzr3258cv68ly2sv5999mklpsrfngyk51kywsyqyp";
+       libraryHaskellDepends = [
+         base extensible-exceptions QuickCheck random test-framework
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://haskell.github.io/test-framework/";
+       description = "QuickCheck-2 support for the test-framework package";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "test-framework-th" = callPackage
+    ({ mkDerivation, base, haskell-src-exts, language-haskell-extract
+     , regex-posix, template-haskell, test-framework
+     }:
+     mkDerivation {
+       pname = "test-framework-th";
+       version = "0.2.4";
+       sha256 = "12lw7yj02jb9s0i7rb98jjam43j2h0gzmnbj9zi933fx7sg0sy4b";
+       libraryHaskellDepends = [
+         base haskell-src-exts language-haskell-extract regex-posix
+         template-haskell test-framework
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/finnsson/test-generator";
+       description = "Automagically generate the HUnit- and Quickcheck-bulk-code using Template Haskell";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "text" = callPackage
+    ({ mkDerivation, array, base, binary, bytestring, deepseq
+     , directory, ghc-prim, HUnit, integer-gmp, QuickCheck
+     , quickcheck-unicode, random, test-framework, test-framework-hunit
+     , test-framework-quickcheck2
+     }:
+     mkDerivation {
+       pname = "text";
+       version = "1.2.2.2";
+       sha256 = "1y9d0zjs2ls0c574mr5xw7y3y49s62sd3wcn9lhpwz8a6q352iii";
+       configureFlags = [ "-f-integer-simple" ];
+       libraryHaskellDepends = [
+         array base binary bytestring deepseq ghc-prim integer-gmp
+       ];
+       testHaskellDepends = [
+         array base binary bytestring deepseq directory ghc-prim HUnit
+         integer-gmp QuickCheck quickcheck-unicode random test-framework
+         test-framework-hunit test-framework-quickcheck2
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/text";
+       description = "An efficient packed Unicode text type";
+       license = stdenv.lib.licenses.bsd2;
+     }) {};
+  "tf-random" = callPackage
+    ({ mkDerivation, base, primitive, random, time }:
+     mkDerivation {
+       pname = "tf-random";
+       version = "0.5";
+       sha256 = "0445r2nns6009fmq0xbfpyv7jpzwv0snccjdg7hwj4xk4z0cwc1f";
+       libraryHaskellDepends = [ base primitive random time ];
+       doHaddock = false;
+       doCheck = false;
+       description = "High-quality splittable pseudorandom number generator";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "th-abstraction" = callPackage
+    ({ mkDerivation, base, containers, ghc-prim, template-haskell }:
+     mkDerivation {
+       pname = "th-abstraction";
+       version = "0.2.6.0";
+       sha256 = "0g42h6wnj2awc5ryhbvx009wd8w75pn66bjzsq1z4s3xajd2hbp5";
+       libraryHaskellDepends = [
+         base containers ghc-prim template-haskell
+       ];
+       testHaskellDepends = [ base containers template-haskell ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/glguy/th-abstraction";
+       description = "Nicer interface for reified information about data types";
+       license = stdenv.lib.licenses.isc;
+     }) {};
+  "threads" = callPackage
+    ({ mkDerivation, base, Cabal, stm }:
+     mkDerivation {
+       pname = "threads";
+       version = "0.5.1.5";
+       sha256 = "0phbspm8k2k6w66hv6ldccvy3kc4rjnspj0jwabiwklinkv7wpd1";
+       setupHaskellDepends = [ base Cabal ];
+       libraryHaskellDepends = [ base stm ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/basvandijk/threads";
+       description = "Fork threads and wait for their result";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "time-compat" = callPackage
+    ({ mkDerivation, base, old-time, time }:
+     mkDerivation {
+       pname = "time-compat";
+       version = "0.1.0.3";
+       sha256 = "0zqgzr8yjn36rn6gflwh5s0c92vl44xzxiw0jz8d5h0h8lhi21sr";
+       libraryHaskellDepends = [ base old-time time ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://hub.darcs.net/dag/time-compat";
+       description = "Compatibility with old-time for the time package";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "time-locale-compat" = callPackage
+    ({ mkDerivation, base, time }:
+     mkDerivation {
+       pname = "time-locale-compat";
+       version = "0.1.1.3";
+       sha256 = "1vdcfr2hp9qh3ag90x6ikbdf42wiqpdylnplffna54bpnilbyi4i";
+       configureFlags = [ "-f-old-locale" ];
+       libraryHaskellDepends = [ base time ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/khibino/haskell-time-locale-compat";
+       description = "Compatibility of TimeLocale between old-locale and time-1.5";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "transformers-base" = callPackage
+    ({ mkDerivation, base, stm, transformers, transformers-compat }:
+     mkDerivation {
+       pname = "transformers-base";
+       version = "0.4.4";
+       sha256 = "11r3slgpgpra6zi2kjg3g60gvv17b1fh6qxipcpk8n86qx7lk8va";
+       revision = "1";
+       editedCabalFile = "196pr3a4lhgklyw6nq6rv1j9djwzmvx7xrpp58carxnb55gk06pv";
+       libraryHaskellDepends = [
+         base stm transformers transformers-compat
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/mvv/transformers-base";
+       description = "Lift computations from the bottom of a transformer stack";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "transformers-compat" = callPackage
+    ({ mkDerivation, base, ghc-prim, transformers }:
+     mkDerivation {
+       pname = "transformers-compat";
+       version = "0.5.1.4";
+       sha256 = "17yam0199fh9ndsn9n69jx9nvbsmymzzwbi23dck3dk4q57fz0fq";
+       libraryHaskellDepends = [ base ghc-prim transformers ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/transformers-compat/";
+       description = "A small compatibility shim exposing the new types from transformers 0.3 and 0.4 to older Haskell platforms.";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "unbounded-delays" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "unbounded-delays";
+       version = "0.1.1.0";
+       sha256 = "1ir9fghbrc214c97bwafk5ck6cacxz1pdnq4i18p604d1b8zg9wa";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/basvandijk/unbounded-delays";
+       description = "Unbounded thread delays and timeouts";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "unordered-containers" = callPackage
+    ({ mkDerivation, base, bytestring, containers, criterion, deepseq
+     , deepseq-generics, hashable, hashmap, mtl, random
+     }:
+     mkDerivation {
+       pname = "unordered-containers";
+       version = "0.2.8.0";
+       sha256 = "1a7flszhhgyjn0nm9w7cm26jbf6vyx9ij1iij4sl11pjkwsqi8d4";
+       libraryHaskellDepends = [ base deepseq hashable ];
+       benchmarkHaskellDepends = [
+         base bytestring containers criterion deepseq deepseq-generics
+         hashable hashmap mtl random
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/tibbe/unordered-containers";
+       description = "Efficient hashing-based container types";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "utf8-string" = callPackage
+    ({ mkDerivation, base, bytestring }:
+     mkDerivation {
+       pname = "utf8-string";
+       version = "1.0.1.1";
+       sha256 = "0h7imvxkahiy8pzr8cpsimifdfvv18lizrb33k6mnq70rcx9w2zv";
+       revision = "2";
+       editedCabalFile = "1b97s9picjl689hcz8scinv7c8k5iaal1livqr0l1l8yc4h0imhr";
+       libraryHaskellDepends = [ base bytestring ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/glguy/utf8-string/";
+       description = "Support for reading and writing UTF8 Strings";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "uuid-types" = callPackage
+    ({ mkDerivation, base, binary, bytestring, deepseq, hashable
+     , random, text
+     }:
+     mkDerivation {
+       pname = "uuid-types";
+       version = "1.0.3";
+       sha256 = "1zdka5jnm1h6k36w3nr647yf3b5lqb336g3fkprhd6san9x52xlj";
+       revision = "1";
+       editedCabalFile = "0iwwj07gp28g357hv76k4h8pvlzamvchnw003cv3qk778pcpx201";
+       libraryHaskellDepends = [
+         base binary bytestring deepseq hashable random text
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/aslatter/uuid";
+       description = "Type definitions for Universally Unique Identifiers";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "vector" = callPackage
+    ({ mkDerivation, base, deepseq, ghc-prim, HUnit, primitive
+     , QuickCheck, random, template-haskell, test-framework
+     , test-framework-hunit, test-framework-quickcheck2, transformers
+     }:
+     mkDerivation {
+       pname = "vector";
+       version = "0.12.0.1";
+       sha256 = "0yrx2ypiaxahvaz84af5bi855hd3107kxkbqc8km29nsp5wyw05i";
+       revision = "1";
+       editedCabalFile = "1xjv8876kx9vh86w718vdaaai40pwnsiw8368c5h88ch8iqq10qb";
+       libraryHaskellDepends = [ base deepseq ghc-prim primitive ];
+       testHaskellDepends = [
+         base HUnit QuickCheck random template-haskell test-framework
+         test-framework-hunit test-framework-quickcheck2 transformers
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell/vector";
+       description = "Efficient Arrays";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "vector-algorithms" = callPackage
+    ({ mkDerivation, base, bytestring, containers, mtl, mwc-random
+     , primitive, QuickCheck, vector
+     }:
+     mkDerivation {
+       pname = "vector-algorithms";
+       version = "0.7.0.1";
+       sha256 = "0w4hf598lpxfg58rnimcqxrbnpqq2jmpjx82qa5md3q6r90hlipd";
+       revision = "1";
+       editedCabalFile = "1996aj239vasr4hd5c0pi9i0bd08r6clzr76nqvf3hc5kjs7vml2";
+       isLibrary = true;
+       isExecutable = true;
+       libraryHaskellDepends = [ base bytestring primitive vector ];
+       executableHaskellDepends = [ base mtl mwc-random vector ];
+       testHaskellDepends = [
+         base bytestring containers QuickCheck vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://code.haskell.org/~dolio/";
+       description = "Efficient algorithms for vector arrays";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "vector-binary-instances" = callPackage
+    ({ mkDerivation, base, binary, bytestring, criterion, deepseq
+     , tasty, tasty-quickcheck, vector
+     }:
+     mkDerivation {
+       pname = "vector-binary-instances";
+       version = "0.2.3.5";
+       sha256 = "0niad09lbxz3cj20qllyj92lwbc013ihw4lby8fv07x5xjx5a4p1";
+       revision = "1";
+       editedCabalFile = "0yk61mifvcc31vancsfsd0vskqh5k3a3znx1rbz8wzcs4ijjzh48";
+       libraryHaskellDepends = [ base binary vector ];
+       testHaskellDepends = [ base binary tasty tasty-quickcheck vector ];
+       benchmarkHaskellDepends = [
+         base binary bytestring criterion deepseq vector
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/bos/vector-binary-instances";
+       description = "Instances of Data.Binary and Data.Serialize for vector";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "vector-th-unbox" = callPackage
+    ({ mkDerivation, base, data-default, template-haskell, vector }:
+     mkDerivation {
+       pname = "vector-th-unbox";
+       version = "0.2.1.6";
+       sha256 = "0d82x55f5vvr1jvaia382m23rs690lg55pvavv8f4ph0y6kd91xy";
+       libraryHaskellDepends = [ base template-haskell vector ];
+       testHaskellDepends = [ base data-default vector ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Deriver for Data.Vector.Unboxed using Template Haskell";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "void" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "void";
+       version = "0.7.2";
+       sha256 = "0aygw0yb1h3yhmfl3bkwh5d3h0l4mmsxz7j53vdm6jryl1kgxzyk";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/ekmett/void";
+       description = "A Haskell 98 logically uninhabited data type";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "with-location" = callPackage
+    ({ mkDerivation, base, hspec }:
+     mkDerivation {
+       pname = "with-location";
+       version = "0.1.0";
+       sha256 = "1rzxvsyh8x3ql3zh7gyw9hjx9bl4v73h0y5kzgaxcfcdn86dg49c";
+       libraryHaskellDepends = [ base ];
+       testHaskellDepends = [ base hspec ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/sol/with-location#readme";
+       description = "Use ImplicitParams-based source locations in a backward compatible way";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "xhtml" = callPackage
+    ({ mkDerivation, base }:
+     mkDerivation {
+       pname = "xhtml";
+       version = "3000.2.2";
+       sha256 = "0z34m5jfvjyzqjr81kk6mp2dyf0iay5zl8xlzwl3k5zdfl5hsz74";
+       libraryHaskellDepends = [ base ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://github.com/haskell/xhtml";
+       description = "An XHTML combinator library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "xml" = callPackage
+    ({ mkDerivation, base, bytestring, text }:
+     mkDerivation {
+       pname = "xml";
+       version = "1.3.14";
+       sha256 = "0g814lj7vaxvib2g3r734221k80k7ap9czv9hinifn8syals3l9j";
+       libraryHaskellDepends = [ base bytestring text ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://code.galois.com";
+       description = "A simple XML library";
+       license = stdenv.lib.licenses.bsd3;
+     }) {};
+  "xml-conduit" = callPackage
+    ({ mkDerivation, attoparsec, base, blaze-builder, blaze-html
+     , blaze-markup, bytestring, conduit, conduit-extra, containers
+     , data-default, deepseq, hspec, HUnit, monad-control, resourcet
+     , text, transformers, xml-types
+     }:
+     mkDerivation {
+       pname = "xml-conduit";
+       version = "1.5.1";
+       sha256 = "0d4pb9d0mdz9djh8aiy5r8088rqh7w34mbqmg8mmaq1i7vx2dzks";
+       libraryHaskellDepends = [
+         attoparsec base blaze-builder blaze-html blaze-markup bytestring
+         conduit conduit-extra containers data-default deepseq monad-control
+         resourcet text transformers xml-types
+       ];
+       testHaskellDepends = [
+         base blaze-markup bytestring conduit containers hspec HUnit
+         resourcet text transformers xml-types
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/snoyberg/xml";
+       description = "Pure-Haskell utilities for dealing with XML with the conduit package";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "xml-types" = callPackage
+    ({ mkDerivation, base, deepseq, text }:
+     mkDerivation {
+       pname = "xml-types";
+       version = "0.3.6";
+       sha256 = "1jgqxsa9p2q3h6nymbfmvhldqrqlwrhrzmwadlyc0li50x0d8dwr";
+       libraryHaskellDepends = [ base deepseq text ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "https://john-millikin.com/software/haskell-xml/";
+       description = "Basic types for representing XML";
+       license = stdenv.lib.licenses.mit;
+     }) {};
+  "xss-sanitize" = callPackage
+    ({ mkDerivation, attoparsec, base, containers, css-text, hspec
+     , HUnit, network-uri, tagsoup, text, utf8-string
+     }:
+     mkDerivation {
+       pname = "xss-sanitize";
+       version = "0.3.5.7";
+       sha256 = "005cmhaw9xbzkcn42jmhvcvk63bzmg4lml368xwmqdvh7r0mcn4m";
+       libraryHaskellDepends = [
+         attoparsec base containers css-text network-uri tagsoup text
+         utf8-string
+       ];
+       testHaskellDepends = [
+         attoparsec base containers css-text hspec HUnit network-uri tagsoup
+         text utf8-string
+       ];
+       doHaddock = false;
+       doCheck = false;
+       homepage = "http://github.com/yesodweb/haskell-xss-sanitize";
+       description = "sanitize untrusted HTML to prevent XSS attacks";
+       license = stdenv.lib.licenses.bsd2;
+     }) {};
+  "zlib" = callPackage
+    ({ mkDerivation, base, bytestring, QuickCheck, tasty, tasty-hunit
+     , tasty-quickcheck, zlib
+     }:
+     mkDerivation {
+       pname = "zlib";
+       version = "0.6.1.2";
+       sha256 = "1fx2k2qmgm2dj3fkxx2ry945fpdn02d4dkihjxma21xgdiilxsz4";
+       libraryHaskellDepends = [ base bytestring ];
+       librarySystemDepends = [ zlib ];
+       testHaskellDepends = [
+         base bytestring QuickCheck tasty tasty-hunit tasty-quickcheck
+       ];
+       doHaddock = false;
+       doCheck = false;
+       description = "Compression and decompression in the gzip and zlib formats";
+       license = stdenv.lib.licenses.bsd3;
+     }) {inherit (pkgs) zlib;};
+
+}
diff --git a/infra/nixos/tazserve.nix b/infra/nixos/tazserve.nix
new file mode 100644
index 0000000000..8fbb950b0d
--- /dev/null
+++ b/infra/nixos/tazserve.nix
@@ -0,0 +1,106 @@
+{ pkgs, config, ... }:
+
+with pkgs; let blogSource = fetchgit {
+  url = "https://git.tazj.in/tazjin/tazblog.git";
+  sha256 = "0m745vb8k6slzdsld63rbfg583k70q3g6i5lz576sccalkg0r2l2";
+  rev = "aeeb11f1b76729115c4db98f419cbcda1a0f7660";
+};
+tazblog = import ./tazblog { inherit blogSource; };
+blog = tazblog.tazblog;
+blogConfig = {
+  enableACME = true;
+  forceSSL = true;
+  locations."/" = {
+    proxyPass = "http://127.0.0.1:8000";
+  };
+};
+gemma = import ./pkgs/gemma.nix { inherit pkgs; };
+gemmaConfig = writeTextFile {
+  name = "config.lisp";
+  text = builtins.readFile ./gemma-config.lisp;
+};
+in {
+  # Ensure that blog software is installed
+  environment.systemPackages = [
+    blog
+    blogSource
+  ];
+
+  # Set up database unit
+  systemd.services.tazblog-db =  {
+    description           = "Database engine for Tazblog";
+    script                = "${blog}/bin/tazblog-db";
+    serviceConfig.restart = "always";
+    wantedBy              = [ "multi-user.target" ];
+  };
+
+  # Set up blog unit
+  systemd.services.tazblog = {
+    description           = "Tazjin's blog engine";
+    script                = "${blog}/bin/tazblog --resourceDir ${blogSource}/static";
+    serviceConfig.restart = "always";
+    requires              = [ "tazblog-db.service" ];
+    wantedBy              = [ "multi-user.target" ];
+  };
+
+  # Set up Gogs
+  services.gogs = {
+    enable       = true;
+    appName      = "Gogs: tazjin's private code";
+    cookieSecure = true;
+    domain       = "git.tazj.in";
+    rootUrl      = "https://git.tazj.in/";
+    extraConfig = ''
+      [log]
+      ROOT_PATH = /var/lib/gogs/log
+    '';
+  };
+
+  # Set up Gemma
+  systemd.services.gemma = {
+    description           = "Recurring task tracking app";
+    script                = "${gemma}/bin/gemma";
+    serviceConfig.Restart = "always";
+    wantedBy              = [ "multi-user.target" ];
+
+    environment = {
+      GEMMA_CONFIG = "${gemmaConfig}";
+    };
+  };
+
+  # Set up reverse proxy
+  services.nginx = {
+    enable = true;
+    recommendedTlsSettings = true;
+    recommendedProxySettings = true;
+
+    # Blog!
+    virtualHosts."tazj.in" = blogConfig;
+    virtualHosts."www.tazj.in" = blogConfig;
+
+    # Git!
+    virtualHosts."git.tazj.in" = {
+      enableACME = true;
+      forceSSL   = true;
+      locations."/" = {
+        proxyPass = "http://127.0.0.1:3000";
+      };
+    };
+
+    # oslo.pub redirect
+    virtualHosts."oslo.pub" = {
+      enableACME = true;
+      forceSSL   = true;
+      extraConfig = "return 302 https://www.google.com/maps/d/viewer?mid=1pJIYY9cuEdt9DuMTbb4etBVq7hs;";
+    };
+
+    # Gemma demo instance!
+    virtualHosts."gemma.tazj.in" = {
+      enableACME = true;
+      forceSSL   = true;
+      locations."/" = {
+        proxyPass = "http://127.0.0.1:4242";
+      };
+    };
+  };
+}