diff --git a/horizon.dhall b/horizon.dhall
index 3495b8143fbdab86c2486bdeecc4b43eb0a2c504..dc283af89594a3ed0f0fffec53f28cec71e89c4a 100644
--- a/horizon.dhall
+++ b/horizon.dhall
@@ -71,6 +71,7 @@ let packages =
       , StateVar = H.callHackage "StateVar" "1.2.2"
       , X11-xft = H.callHackage "X11-xft" "0.3.4"
       , X11 = H.callHackage "X11" "1.10.3"
+      , abstract-deque-tests = H.callHackage "abstract-deque-tests" "0.3"
       , abstract-deque = H.callHackage "abstract-deque" "0.3"
       , abstract-par = H.callHackage "abstract-par" "0.3.3"
       , adjunctions = H.callHackage "adjunctions" "4.4.2"
@@ -145,11 +146,13 @@ let packages =
       , cereal-vector = H.callHackage "cereal-vector" "0.2.0.1"
       , cereal = H.callHackage "cereal" "0.5.8.3"
       , charset = H.callHackage "charset" "0.3.9"
+      , cheapskate = H.callHackage "cheapskate" "0.1.1.2"
       , checkers = H.callHackage "checkers" "0.6.0"
       , chell-quickcheck = H.callHackage "chell-quickcheck" "0.2.5.3"
       , chell = H.callHackage "chell" "0.5.0.1"
       , citeproc = H.callHackage "citeproc" "0.8.0.1"
       , clock = H.callHackage "clock" "0.8.3"
+      , cmark-gfm = H.callHackage "cmark-gfm" "0.2.5"
       , cmdargs = H.callHackage "cmdargs" "0.10.21"
       , co-log-core = H.callHackage "co-log-core" "0.3.1.0"
       , co-log-polysemy = H.callHackage "co-log-polysemy" "0.0.1.3"
@@ -172,6 +175,7 @@ let packages =
       , composite-lens-extra = H.callHackage "composite-lens-extra" "0.1.0.0"
       , composite-tuple = H.callHackage "composite-tuple" "0.1.2.0"
       , concurrent-output = H.callHackage "concurrent-output" "1.10.16"
+      , conduit-combinators = H.callHackage "conduit-combinators" "1.3.0"
       , conduit = H.callHackage "conduit" "1.3.4.2"
       , conduit-extra = H.callHackage "conduit-extra" "1.3.6"
       , config-ini = H.callHackage "config-ini" "0.2.5.0"
@@ -184,6 +188,7 @@ let packages =
       , cpphs = H.callHackage "cpphs" "1.20.9.1"
       , criterion-measurement = H.callHackage "criterion-measurement" "0.2.0.0"
       , criterion = H.callHackage "criterion" "1.5.13.0"
+      , css-text = H.callHackage "css-text" "0.1.3.0"
       , csv =
           callHorizonAdopted "csv" "d02b89bbad79136b52fd1197f087466cf51573dd"
       , cursor-brick = H.callHackage "cursor-brick" "0.1.0.1"
@@ -194,6 +199,7 @@ let packages =
       , cursor-gen = H.callHackage "cursor-gen" "0.4.0.0"
       , cursor = H.callHackage "cursor" "0.3.2.0"
       , cryptonite = H.callHackage "cryptonite" "0.30"
+      , cryptonite-conduit = H.callHackage "cryptonite-conduit" "0.2.2"
       , cryptohash-md5 = H.callHackage "cryptohash-md5" "0.11.101.0"
       , cryptohash-sha1 = H.callHackage "cryptohash-sha1" "0.11.101.0"
       , cryptohash-sha256 = H.callHackage "cryptohash-sha256" "0.11.102.1"
@@ -307,6 +313,7 @@ let packages =
       , freer-simple = H.callHackage "freer-simple" "1.2.1.2"
       , friendly-time = H.callHackage "friendly-time" "0.4.1"
       , fsnotify = H.callHackage "fsnotify" "0.4.1.0"
+      , fusion-plugin-types = H.callHackage "fusion-plugin-types" "0.1.0"
       , fuzzy-time-gen = H.callHackage "fuzzy-time-gen" "0.2.0.1"
       , fuzzy-time = H.callHackage "fuzzy-time" "0.2.0.3"
       , generically = H.callHackage "generically" "0.1"
@@ -460,6 +467,7 @@ let packages =
       , invariant = H.callHackage "invariant" "0.6"
       , ipynb = H.callHackage "ipynb" "0.2"
       , iproute = H.callHackage "iproute" "1.7.12"
+      , iso8601-time = H.callHackage "iso8601-time" "0.1.5"
       , jira-wiki-markup = H.callHackage "jira-wiki-markup" "1.4.0"
       , js-chart = H.callHackage "js-chart" "2.9.4.1"
       , js-dgtable = H.callHackage "js-dgtable" "0.5.2"
@@ -492,6 +500,7 @@ let packages =
       , lifted-async = H.callHackage "lifted-async" "0.10.2.1"
       , lifted-base = H.callHackage "lifted-base" "0.2.3.12"
       , linear = H.callHackage "linear" "1.21.10"
+      , lockfree-queue = H.callHackage "lockfree-queue" "0.2.4"
       , logging-facade = H.callHackage "logging-facade" "0.3.1"
       , logict = H.callHackage "logict" "0.8.0.0"
       , log-base = H.callHackage "log-base" "0.12.0.0"
@@ -516,6 +525,7 @@ let packages =
       , net-mqtt = H.callHackage "net-mqtt" "0.8.2.2"
       , managed = H.callHackage "managed" "1.0.9"
       , markdown-unlit = H.callHackage "markdown-unlit" "0.5.1"
+      , markdown = H.callHackage "markdown" "0.1.17.5"
       , math-functions = H.callHackage "math-functions" "0.3.4.2"
       , megaparsec = H.callHackage "megaparsec" "9.2.2"
       , memory = H.callHackage "memory" "0.18.0"
@@ -641,6 +651,8 @@ let packages =
       , procex = H.callHackage "procex" "0.3.3"
       , profunctors = H.callHackage "profunctors" "5.6.2"
       , prometheus-client = H.callHackage "prometheus-client" "1.1.0"
+      , prometheus-metrics-ghc =
+          H.callHackage "prometheus-metrics-ghc" "1.0.1.2"
       , prometheus-proc = H.callHackage "prometheus-proc" "0.1.4.0"
       , process-extras = H.callHackage "process-extras" "0.7.4"
       , proteaaudio-sdl = H.callHackage "proteaaudio-sdl" "0.9.2"
@@ -658,6 +670,7 @@ let packages =
       , random-bytestring = H.callHackage "random-bytestring" "0.1.4"
       , random-shuffle = H.callHackage "random-shuffle" "0.0.4"
       , random = H.callHackage "random" "1.2.1.1"
+      , raven-haskell = H.callHackage "raven-haskell" "0.1.4.1"
       , raw-strings-qq = H.callHackage "raw-strings-qq" "1.1"
       , rdtsc = H.callHackage "rdtsc" "1.3.0.1"
       , rebase = H.callHackage "rebase" "1.16"
@@ -725,6 +738,7 @@ let packages =
       , servant-swagger-ui-core =
           H.callHackage "servant-swagger-ui-core" "0.3.5"
       , servant-static-th = H.callHackage "servant-static-th" "1.0.0.0"
+      , servant-websockets = H.callHackage "servant-websockets" "2.0.0"
       , setenv = H.callHackage "setenv" "0.1.1.3"
       , setlocale = H.callHackage "setlocale" "1.0.0.10"
       , shakespeare = H.callHackage "shakespeare" "2.0.30"
@@ -760,6 +774,7 @@ let packages =
       , stm-chans = H.callHackage "stm-chans" "3.0.0.6"
       , streaming-commons = H.callHackage "streaming-commons" "0.2.2.4"
       , streaming = H.callHackage "streaming" "0.2.3.1"
+      , streamly = H.callHackage "streamly" "0.8.3"
       , store-core = H.callHackage "store-core" "0.4.4.4"
       , store = H.callHackage "store" "0.7.16"
       , strict = H.callHackage "strict" "0.4.0.1"
@@ -769,6 +784,7 @@ let packages =
       , string-qq = H.callHackage "string-qq" "0.0.4"
       , stringbuilder = H.callHackage "stringbuilder" "0.5.1"
       , stringsearch = H.callHackage "stringsearch" "0.3.6.6"
+      , sundown = H.callHackage "sundown" "0.6"
       , swagger2 = H.callHackage "swagger2" "2.8.5"
       , syb = H.callHackage "syb" "0.7.2.1"
       , sydtest = H.callHackage "sydtest" "0.13.0.0"
@@ -878,7 +894,7 @@ let packages =
       , unagi-chan = H.callHackage "unagi-chan" "0.4.1.4"
       , unbounded-delays = H.callHackage "unbounded-delays" "0.1.1.1"
       , unicode-collation = H.callHackage "unicode-collation" "0.1.3.2"
-      , unicode-data = H.callHackage "unicode-data" "0.4.0"
+      , unicode-data = H.callHackage "unicode-data" "0.3.1"
       , unicode-transforms = H.callHackage "unicode-transforms" "0.4.0.1"
       , uniplate = H.callHackage "uniplate" "1.6.13"
       , universe-base = H.callHackage "universe-base" "1.1.3"
@@ -930,8 +946,12 @@ let packages =
             "https://github.com/flora-pm/wai-middleware-heartbeat"
             "bd7dbbe83d25c00fcd2cf5c77736af904910c596"
             (None Text)
+      , wai-log = H.callHackage "wai-log" "0.4.0.1"
       , wai-logger = H.callHackage "wai-logger" "2.4.0"
+      , wai-middleware-prometheus =
+          H.callHackage "wai-middleware-prometheus" "1.0.0.1"
       , wai-middleware-static = H.callHackage "wai-middleware-static" "0.9.2"
+      , wai-websockets = H.callHackage "wai-websockets" "3.0.1.2"
       , wai = H.callHackage "wai" "3.2.3"
       , warp = H.callHackage "warp" "3.3.22"
       , warp-tls = H.callHackage "warp-tls" "3.3.3"
@@ -947,11 +967,13 @@ let packages =
       , x509-system = H.callHackage "x509-system" "1.6.7"
       , x509-validation = H.callHackage "x509-validation" "1.6.12"
       , x509 = H.callHackage "x509" "1.7.7"
+      , xml-conduit-writer = H.callHackage "xml-conduit-writer" "0.1.1.2"
       , xml-conduit = H.callHackage "xml-conduit" "1.9.1.1"
       , xml-types = H.callHackage "xml-types" "0.3.8"
       , xml = H.callHackage "xml" "1.3.14"
       , xmonad-contrib = H.callHackage "xmonad-contrib" "0.17.1"
       , xmonad = H.callHackage "xmonad" "0.17.1"
+      , xss-sanitize = H.callHackage "xss-sanitize" "0.3.7.1"
       , yaml = H.callHackage "yaml" "0.11.8.0"
       , zip-archive = H.callHackage "zip-archive" "0.4.2.2"
       , zlib = H.callHackage "zlib" "0.6.3.0"
diff --git a/initial-packages.nix b/initial-packages.nix
index fdb0b776599be40c164239af8d0947976d67efda..eae597b2ed35e11751d95ea8f714de93c1f55830 100644
--- a/initial-packages.nix
+++ b/initial-packages.nix
@@ -57,6 +57,8 @@ self: with pkgs.haskell.lib; {
 
   abstract-deque = self.callPackage (./pkgs/abstract-deque.nix) { };
 
+  abstract-deque-tests = self.callPackage (./pkgs/abstract-deque-tests.nix) { };
+
   abstract-par = self.callPackage (./pkgs/abstract-par.nix) { };
 
   adjunctions = self.callPackage (./pkgs/adjunctions.nix) { };
@@ -193,6 +195,8 @@ self: with pkgs.haskell.lib; {
 
   charset = self.callPackage (./pkgs/charset.nix) { };
 
+  cheapskate = self.callPackage (./pkgs/cheapskate.nix) { };
+
   checkers = self.callPackage (./pkgs/checkers.nix) { };
 
   chell = self.callPackage (./pkgs/chell.nix) { };
@@ -203,6 +207,8 @@ self: with pkgs.haskell.lib; {
 
   clock = self.callPackage (./pkgs/clock.nix) { };
 
+  cmark-gfm = self.callPackage (./pkgs/cmark-gfm.nix) { };
+
   cmdargs = self.callPackage (./pkgs/cmdargs.nix) { };
 
   co-log-core = self.callPackage (./pkgs/co-log-core.nix) { };
@@ -241,6 +247,8 @@ self: with pkgs.haskell.lib; {
 
   conduit = self.callPackage (./pkgs/conduit.nix) { };
 
+  conduit-combinators = self.callPackage (./pkgs/conduit-combinators.nix) { };
+
   conduit-extra = self.callPackage (./pkgs/conduit-extra.nix) { };
 
   config-ini = self.callPackage (./pkgs/config-ini.nix) { };
@@ -277,6 +285,10 @@ self: with pkgs.haskell.lib; {
 
   cryptonite = self.callPackage (./pkgs/cryptonite.nix) { };
 
+  cryptonite-conduit = self.callPackage (./pkgs/cryptonite-conduit.nix) { };
+
+  css-text = self.callPackage (./pkgs/css-text.nix) { };
+
   csv = self.callPackage (./pkgs/csv.nix) { };
 
   cursor = self.callPackage (./pkgs/cursor.nix) { };
@@ -453,6 +465,8 @@ self: with pkgs.haskell.lib; {
 
   fsnotify = self.callPackage (./pkgs/fsnotify.nix) { };
 
+  fusion-plugin-types = self.callPackage (./pkgs/fusion-plugin-types.nix) { };
+
   fuzzy-time = self.callPackage (./pkgs/fuzzy-time.nix) { };
 
   fuzzy-time-gen = self.callPackage (./pkgs/fuzzy-time-gen.nix) { };
@@ -709,6 +723,8 @@ self: with pkgs.haskell.lib; {
 
   ipynb = self.callPackage (./pkgs/ipynb.nix) { };
 
+  iso8601-time = self.callPackage (./pkgs/iso8601-time.nix) { };
+
   jira-wiki-markup = self.callPackage (./pkgs/jira-wiki-markup.nix) { };
 
   js-chart = self.callPackage (./pkgs/js-chart.nix) { };
@@ -759,6 +775,8 @@ self: with pkgs.haskell.lib; {
 
   linear = self.callPackage (./pkgs/linear.nix) { };
 
+  lockfree-queue = self.callPackage (./pkgs/lockfree-queue.nix) { };
+
   log-base = self.callPackage (./pkgs/log-base.nix) { };
 
   log-effectful = self.callPackage (./pkgs/log-effectful.nix) { };
@@ -793,6 +811,8 @@ self: with pkgs.haskell.lib; {
 
   managed = self.callPackage (./pkgs/managed.nix) { };
 
+  markdown = self.callPackage (./pkgs/markdown.nix) { };
+
   markdown-unlit = self.callPackage (./pkgs/markdown-unlit.nix) { };
 
   math-functions = self.callPackage (./pkgs/math-functions.nix) { };
@@ -1023,6 +1043,8 @@ self: with pkgs.haskell.lib; {
 
   prometheus-client = self.callPackage (./pkgs/prometheus-client.nix) { };
 
+  prometheus-metrics-ghc = self.callPackage (./pkgs/prometheus-metrics-ghc.nix) { };
+
   prometheus-proc = self.callPackage (./pkgs/prometheus-proc.nix) { };
 
   proteaaudio-sdl = self.callPackage (./pkgs/proteaaudio-sdl.nix) { };
@@ -1053,6 +1075,8 @@ self: with pkgs.haskell.lib; {
 
   random-shuffle = self.callPackage (./pkgs/random-shuffle.nix) { };
 
+  raven-haskell = self.callPackage (./pkgs/raven-haskell.nix) { };
+
   raw-strings-qq = self.callPackage (./pkgs/raw-strings-qq.nix) { };
 
   rdtsc = self.callPackage (./pkgs/rdtsc.nix) { };
@@ -1173,6 +1197,8 @@ self: with pkgs.haskell.lib; {
 
   servant-swagger-ui-core = self.callPackage (./pkgs/servant-swagger-ui-core.nix) { };
 
+  servant-websockets = self.callPackage (./pkgs/servant-websockets.nix) { };
+
   setenv = self.callPackage (./pkgs/setenv.nix) { };
 
   setlocale = self.callPackage (./pkgs/setlocale.nix) { };
@@ -1243,6 +1269,8 @@ self: with pkgs.haskell.lib; {
 
   streaming-commons = self.callPackage (./pkgs/streaming-commons.nix) { };
 
+  streamly = self.callPackage (./pkgs/streamly.nix) { };
+
   strict = self.callPackage (./pkgs/strict.nix) { };
 
   string-conv = self.callPackage (./pkgs/string-conv.nix) { };
@@ -1257,6 +1285,8 @@ self: with pkgs.haskell.lib; {
 
   stringsearch = self.callPackage (./pkgs/stringsearch.nix) { };
 
+  sundown = self.callPackage (./pkgs/sundown.nix) { };
+
   swagger2 = self.callPackage (./pkgs/swagger2.nix) { };
 
   syb = self.callPackage (./pkgs/syb.nix) { };
@@ -1511,12 +1541,18 @@ self: with pkgs.haskell.lib; {
 
   wai-extra = self.callPackage (./pkgs/wai-extra.nix) { };
 
+  wai-log = self.callPackage (./pkgs/wai-log.nix) { };
+
   wai-logger = self.callPackage (./pkgs/wai-logger.nix) { };
 
   wai-middleware-heartbeat = self.callPackage (./pkgs/wai-middleware-heartbeat.nix) { };
 
+  wai-middleware-prometheus = self.callPackage (./pkgs/wai-middleware-prometheus.nix) { };
+
   wai-middleware-static = self.callPackage (./pkgs/wai-middleware-static.nix) { };
 
+  wai-websockets = self.callPackage (./pkgs/wai-websockets.nix) { };
+
   warp = self.callPackage (./pkgs/warp.nix) { };
 
   warp-tls = self.callPackage (./pkgs/warp-tls.nix) { };
@@ -1549,12 +1585,16 @@ self: with pkgs.haskell.lib; {
 
   xml-conduit = self.callPackage (./pkgs/xml-conduit.nix) { };
 
+  xml-conduit-writer = self.callPackage (./pkgs/xml-conduit-writer.nix) { };
+
   xml-types = self.callPackage (./pkgs/xml-types.nix) { };
 
   xmonad = self.callPackage (./pkgs/xmonad.nix) { };
 
   xmonad-contrib = self.callPackage (./pkgs/xmonad-contrib.nix) { };
 
+  xss-sanitize = self.callPackage (./pkgs/xss-sanitize.nix) { };
+
   yaml = self.callPackage (./pkgs/yaml.nix) { };
 
   zip-archive = self.callPackage (./pkgs/zip-archive.nix) { };
diff --git a/pkgs/abstract-deque-tests.nix b/pkgs/abstract-deque-tests.nix
new file mode 100644
index 0000000000000000000000000000000000000000..1f4a847b5fca1dbf19ae338ccb151ecb8a25351f
--- /dev/null
+++ b/pkgs/abstract-deque-tests.nix
@@ -0,0 +1,53 @@
+{ mkDerivation
+, HUnit
+, abstract-deque
+, array
+, base
+, containers
+, lib
+, random
+, test-framework
+, test-framework-hunit
+, time
+}:
+mkDerivation {
+  pname = "abstract-deque-tests";
+  version = "0.3";
+  sha256 = "5f17fb4cc26559f81c777f494622907e8927181175eaa172fb6adbf14b2feba5";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    abstract-deque
+    array
+    base
+    containers
+    HUnit
+    random
+    test-framework
+    test-framework-hunit
+    time
+  ];
+  testHaskellDepends = [
+    abstract-deque
+    array
+    base
+    containers
+    HUnit
+    random
+    test-framework
+    test-framework-hunit
+    time
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/rrnewton/haskell-lockfree/wiki";
+  description = "A test-suite for any queue or double-ended queue satisfying an interface";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/cheapskate.nix b/pkgs/cheapskate.nix
new file mode 100644
index 0000000000000000000000000000000000000000..e42d8023b91a0f5eb22159c0a5fc22610ec2d0bb
--- /dev/null
+++ b/pkgs/cheapskate.nix
@@ -0,0 +1,48 @@
+{ mkDerivation
+, base
+, blaze-html
+, bytestring
+, containers
+, data-default
+, deepseq
+, lib
+, mtl
+, syb
+, text
+, uniplate
+, xss-sanitize
+}:
+mkDerivation {
+  pname = "cheapskate";
+  version = "0.1.1.2";
+  sha256 = "ed374897c39391fcf760552e6468def39fe36c3185708ca83056660ca3a2c69e";
+  revision = "1";
+  editedCabalFile = "15hdlp062gv8x7giwcfbj1kfmhpj1bg7y2w4wr2yl436haxkrbmq";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    blaze-html
+    containers
+    data-default
+    deepseq
+    mtl
+    syb
+    text
+    uniplate
+    xss-sanitize
+  ];
+  executableHaskellDepends = [ base blaze-html bytestring text ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/jgm/cheapskate";
+  description = "Experimental markdown processor";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/cmark-gfm.nix b/pkgs/cmark-gfm.nix
new file mode 100644
index 0000000000000000000000000000000000000000..b0f89006e687de5e6d074c4d1f5fbee099bb962b
--- /dev/null
+++ b/pkgs/cmark-gfm.nix
@@ -0,0 +1,44 @@
+{ mkDerivation
+, HUnit
+, base
+, blaze-html
+, bytestring
+, cheapskate
+, criterion
+, discount
+, lib
+, markdown
+, sundown
+, text
+}:
+mkDerivation {
+  pname = "cmark-gfm";
+  version = "0.2.5";
+  sha256 = "411caca0dd16c381d093a563b0002c057a3bdb396d3d3f81ad7fecca40d34451";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring text ];
+  testHaskellDepends = [ base HUnit text ];
+  benchmarkHaskellDepends = [
+    base
+    blaze-html
+    cheapskate
+    criterion
+    discount
+    markdown
+    sundown
+    text
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/kivikakk/cmark-gfm-hs";
+  description = "Fast, accurate GitHub Flavored Markdown parser and renderer";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/conduit-combinators.nix b/pkgs/conduit-combinators.nix
new file mode 100644
index 0000000000000000000000000000000000000000..732c879432126cd54cd487a72d4ab119e580babc
--- /dev/null
+++ b/pkgs/conduit-combinators.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "conduit-combinators";
+  version = "1.3.0";
+  sha256 = "9717d916a0422a7fb7cc262302333269607530d40cd0bea3be947872f906e7d3";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/snoyberg/mono-traversable#readme";
+  description = "DEPRECATED Functionality merged into the conduit package itself";
+  license = lib.licenses.mit;
+  broken = false;
+}
diff --git a/pkgs/cryptonite-conduit.nix b/pkgs/cryptonite-conduit.nix
new file mode 100644
index 0000000000000000000000000000000000000000..484ba640ebe45bd07adae7fc92ac0ad03de6316a
--- /dev/null
+++ b/pkgs/cryptonite-conduit.nix
@@ -0,0 +1,59 @@
+{ mkDerivation
+, base
+, bytestring
+, conduit
+, conduit-combinators
+, conduit-extra
+, cryptonite
+, exceptions
+, lib
+, memory
+, resourcet
+, tasty
+, tasty-hunit
+, tasty-quickcheck
+, transformers
+}:
+mkDerivation {
+  pname = "cryptonite-conduit";
+  version = "0.2.2";
+  sha256 = "705d69ab3f79b7b8810c7b9e7da81a1c6686b6a4323b1e78150576a25a658dae";
+  revision = "1";
+  editedCabalFile = "1hh2nzfz4qpxgivfilgk4ll416lph8b2fdkzpzrmqfjglivydfmz";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    bytestring
+    conduit
+    conduit-extra
+    cryptonite
+    exceptions
+    memory
+    resourcet
+    transformers
+  ];
+  testHaskellDepends = [
+    base
+    bytestring
+    conduit
+    conduit-combinators
+    cryptonite
+    memory
+    tasty
+    tasty-hunit
+    tasty-quickcheck
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/haskell-crypto/cryptonite-conduit";
+  description = "cryptonite conduit";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/css-text.nix b/pkgs/css-text.nix
new file mode 100644
index 0000000000000000000000000000000000000000..59b5b7e34440d185b7bf62d39e27664fce44a9cc
--- /dev/null
+++ b/pkgs/css-text.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, QuickCheck, attoparsec, base, hspec, lib, text }:
+mkDerivation {
+  pname = "css-text";
+  version = "0.1.3.0";
+  sha256 = "5ff507bf3863219f41e7f2d215e5511fe15ee13d1e28bd3ee64e0b0b894bcd7a";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ attoparsec base text ];
+  testHaskellDepends = [ attoparsec base hspec QuickCheck text ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/yesodweb/css-text.git#readme";
+  description = "CSS parser and renderer";
+  license = lib.licenses.mit;
+  broken = false;
+}
diff --git a/pkgs/fusion-plugin-types.nix b/pkgs/fusion-plugin-types.nix
new file mode 100644
index 0000000000000000000000000000000000000000..e36d2b857e51d87ba0fe637a23b72eb05647f407
--- /dev/null
+++ b/pkgs/fusion-plugin-types.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, lib }:
+mkDerivation {
+  pname = "fusion-plugin-types";
+  version = "0.1.0";
+  sha256 = "6d0453886b0aca46ab311b8ac8031fd249417e96a1b675248fca196565f59f92";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/composewell/fusion-plugin-types";
+  description = "Types for the fusion-plugin package";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/iso8601-time.nix b/pkgs/iso8601-time.nix
new file mode 100644
index 0000000000000000000000000000000000000000..732de4f288c3e23ec145669889ef41a9338e938d
--- /dev/null
+++ b/pkgs/iso8601-time.nix
@@ -0,0 +1,22 @@
+{ mkDerivation, HUnit, base, hspec, lib, time }:
+mkDerivation {
+  pname = "iso8601-time";
+  version = "0.1.5";
+  sha256 = "f2cd444b2be68402c773a4b451912817f06d33093aea691b42ebeed3630ff0c8";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base time ];
+  testHaskellDepends = [ base hspec HUnit time ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/nh2/iso8601-time";
+  description = "Convert to/from the ISO 8601 time format";
+  license = lib.licenses.mit;
+  broken = false;
+}
diff --git a/pkgs/lockfree-queue.nix b/pkgs/lockfree-queue.nix
new file mode 100644
index 0000000000000000000000000000000000000000..0994eb9ce657adcd35e89f681234d20f919fb4b1
--- /dev/null
+++ b/pkgs/lockfree-queue.nix
@@ -0,0 +1,48 @@
+{ mkDerivation
+, HUnit
+, abstract-deque
+, abstract-deque-tests
+, atomic-primops
+, base
+, bytestring
+, ghc-prim
+, lib
+, test-framework
+, test-framework-hunit
+}:
+mkDerivation {
+  pname = "lockfree-queue";
+  version = "0.2.4";
+  sha256 = "a0f6770cdcbe0c4f86ba2a498af06933db615d83ff5457a1750f733f6ef399ee";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    abstract-deque
+    atomic-primops
+    base
+    ghc-prim
+  ];
+  testHaskellDepends = [
+    abstract-deque
+    abstract-deque-tests
+    atomic-primops
+    base
+    bytestring
+    ghc-prim
+    HUnit
+    test-framework
+    test-framework-hunit
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/rrnewton/haskell-lockfree/wiki";
+  description = "Michael and Scott lock-free queues";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/markdown.nix b/pkgs/markdown.nix
new file mode 100644
index 0000000000000000000000000000000000000000..6827a535675cd616e63f7e4d987275e55a2c0a56
--- /dev/null
+++ b/pkgs/markdown.nix
@@ -0,0 +1,70 @@
+{ mkDerivation
+, attoparsec
+, base
+, blaze-html
+, blaze-markup
+, bytestring
+, call-stack
+, conduit
+, conduit-extra
+, containers
+, data-default
+, directory
+, filepath
+, hspec
+, lib
+, text
+, transformers
+, xml-conduit
+, xml-types
+, xss-sanitize
+}:
+mkDerivation {
+  pname = "markdown";
+  version = "0.1.17.5";
+  sha256 = "98c1c7f96aff402ac342da77b0a3e4a294197769a0b7b9e97ec8997bdfeef429";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  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
+    bytestring
+    call-stack
+    conduit
+    conduit-extra
+    containers
+    directory
+    filepath
+    hspec
+    text
+    transformers
+    xss-sanitize
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/snoyberg/markdown";
+  description = "Convert Markdown to HTML, with XSS protection";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/prometheus-metrics-ghc.nix b/pkgs/prometheus-metrics-ghc.nix
new file mode 100644
index 0000000000000000000000000000000000000000..f6840a81d8c888c2e7b79b9f9225ad14c41630e5
--- /dev/null
+++ b/pkgs/prometheus-metrics-ghc.nix
@@ -0,0 +1,34 @@
+{ mkDerivation
+, base
+, doctest
+, lib
+, prometheus-client
+, text
+, utf8-string
+}:
+mkDerivation {
+  pname = "prometheus-metrics-ghc";
+  version = "1.0.1.2";
+  sha256 = "f3dfa40b881647bc4c0b3a2f2be633a457c76f59d4bc77a12e46fa643981ea1a";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    prometheus-client
+    text
+    utf8-string
+  ];
+  testHaskellDepends = [ base doctest prometheus-client ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/fimad/prometheus-haskell";
+  description = "Metrics exposing GHC runtime information for use with prometheus-client";
+  license = lib.licenses.asl20;
+  broken = false;
+}
diff --git a/pkgs/raven-haskell.nix b/pkgs/raven-haskell.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5bb060019bc8814aa14d4b4f42646ac4796fdd48
--- /dev/null
+++ b/pkgs/raven-haskell.nix
@@ -0,0 +1,48 @@
+{ mkDerivation
+, aeson
+, base
+, bytestring
+, http-conduit
+, lib
+, mtl
+, network
+, random
+, resourcet
+, text
+, time
+, unordered-containers
+, uuid-types
+}:
+mkDerivation {
+  pname = "raven-haskell";
+  version = "0.1.4.1";
+  sha256 = "5e7dcbb0fb0db15e5ca2bf56a8624b88f13ba3965b2b42c8f892f2e614cfe724";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson
+    base
+    bytestring
+    http-conduit
+    mtl
+    network
+    random
+    resourcet
+    text
+    time
+    unordered-containers
+    uuid-types
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://gitlab.com/dpwiz/raven-haskell";
+  description = "Haskell client for Sentry logging service";
+  license = lib.licenses.mit;
+  broken = false;
+}
diff --git a/pkgs/servant-websockets.nix b/pkgs/servant-websockets.nix
new file mode 100644
index 0000000000000000000000000000000000000000..640457badae907e359cbc1e30de8312db5ff7de6
--- /dev/null
+++ b/pkgs/servant-websockets.nix
@@ -0,0 +1,62 @@
+{ mkDerivation
+, aeson
+, async
+, base
+, bytestring
+, conduit
+, exceptions
+, lib
+, monad-control
+, resourcet
+, servant-server
+, text
+, wai
+, wai-websockets
+, warp
+, websockets
+}:
+mkDerivation {
+  pname = "servant-websockets";
+  version = "2.0.0";
+  sha256 = "c4262b5d5a01a692d8d9ca4abd735abe1ce7288ac456f5e819b5c358adbe43f7";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson
+    async
+    base
+    bytestring
+    conduit
+    exceptions
+    monad-control
+    resourcet
+    servant-server
+    text
+    wai
+    wai-websockets
+    warp
+    websockets
+  ];
+  executableHaskellDepends = [
+    aeson
+    base
+    conduit
+    servant-server
+    text
+    wai
+    warp
+    websockets
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/moesenle/servant-websockets#readme";
+  description = "Small library providing WebSocket endpoints for servant";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/streamly.nix b/pkgs/streamly.nix
new file mode 100644
index 0000000000000000000000000000000000000000..6bf5864f1c140ecc770f6172400340ce75f06b5f
--- /dev/null
+++ b/pkgs/streamly.nix
@@ -0,0 +1,60 @@
+{ mkDerivation
+, atomic-primops
+, base
+, containers
+, deepseq
+, directory
+, exceptions
+, filepath
+, fusion-plugin-types
+, ghc-prim
+, heaps
+, lib
+, lockfree-queue
+, monad-control
+, mtl
+, network
+, primitive
+, transformers
+, transformers-base
+, unicode-data
+}:
+mkDerivation {
+  pname = "streamly";
+  version = "0.8.3";
+  sha256 = "af8bc4fb86ba41f8970a9147e9ad290d17f44db123ea3db29bd04404fdcc5b76";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    atomic-primops
+    base
+    containers
+    deepseq
+    directory
+    exceptions
+    filepath
+    fusion-plugin-types
+    ghc-prim
+    heaps
+    lockfree-queue
+    monad-control
+    mtl
+    network
+    primitive
+    transformers
+    transformers-base
+    unicode-data
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://streamly.composewell.com";
+  description = "Dataflow programming and declarative concurrency";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/sundown.nix b/pkgs/sundown.nix
new file mode 100644
index 0000000000000000000000000000000000000000..5228731ca447b71997f030e6c9686521189f7e93
--- /dev/null
+++ b/pkgs/sundown.nix
@@ -0,0 +1,21 @@
+{ mkDerivation, base, bytestring, lib, text }:
+mkDerivation {
+  pname = "sundown";
+  version = "0.6";
+  sha256 = "cb9b7e98138311375148ffe0fa4c4b04eb7a9f8ec2ae13a674d465e5d71db027";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [ base bytestring text ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/bitonic/sundown";
+  description = "Bindings to the sundown markdown library";
+  license = lib.licenses.publicDomain;
+  broken = false;
+}
diff --git a/pkgs/unicode-data.nix b/pkgs/unicode-data.nix
index 4eaac6e84f126c3f361273fa528d4b67f2b21a64..8d33b099011db2f8d9c9bc45dc82fc71fbe19b45 100644
--- a/pkgs/unicode-data.nix
+++ b/pkgs/unicode-data.nix
@@ -9,8 +9,8 @@
 }:
 mkDerivation {
   pname = "unicode-data";
-  version = "0.4.0";
-  sha256 = "4890d5a26cae879ea573dc07408e833ad49937a9a551a3bbdc4fa77718644127";
+  version = "0.3.1";
+  sha256 = "be1f815497a7c4d46395ba6dfc49f811a9716a670381f89f102b7df0f0f35c60";
   isLibrary = true;
   isExecutable = true;
   enableSeparateDataOutput = false;
diff --git a/pkgs/wai-log.nix b/pkgs/wai-log.nix
new file mode 100644
index 0000000000000000000000000000000000000000..aa7e0d38553975f712aeff9da95be6a00c992779
--- /dev/null
+++ b/pkgs/wai-log.nix
@@ -0,0 +1,44 @@
+{ mkDerivation
+, aeson
+, base
+, bytestring
+, http-types
+, lib
+, log-base
+, string-conversions
+, text
+, time
+, uuid
+, wai
+}:
+mkDerivation {
+  pname = "wai-log";
+  version = "0.4.0.1";
+  sha256 = "19d21d688e3093289afd7632d33bfaf27c0ab49e5956f153ad72c81ce85e990a";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    aeson
+    base
+    bytestring
+    http-types
+    log-base
+    string-conversions
+    text
+    time
+    uuid
+    wai
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/scrive/wai-log";
+  description = "A logging middleware for WAI applications";
+  license = lib.licenses.bsd3;
+  broken = false;
+}
diff --git a/pkgs/wai-middleware-prometheus.nix b/pkgs/wai-middleware-prometheus.nix
new file mode 100644
index 0000000000000000000000000000000000000000..ce0cdd1dd9063b6f9a80b23292f31eaab9567cb3
--- /dev/null
+++ b/pkgs/wai-middleware-prometheus.nix
@@ -0,0 +1,42 @@
+{ mkDerivation
+, base
+, bytestring
+, clock
+, data-default
+, doctest
+, http-types
+, lib
+, prometheus-client
+, text
+, wai
+}:
+mkDerivation {
+  pname = "wai-middleware-prometheus";
+  version = "1.0.0.1";
+  sha256 = "b75b6f87ef9a4466787624164de5159c2b035ef0a7c361a706a59022b2faa798";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    bytestring
+    clock
+    data-default
+    http-types
+    prometheus-client
+    text
+    wai
+  ];
+  testHaskellDepends = [ base doctest prometheus-client ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/fimad/prometheus-haskell";
+  description = "WAI middlware for exposing http://prometheus.io metrics.";
+  license = lib.licenses.asl20;
+  broken = false;
+}
diff --git a/pkgs/wai-websockets.nix b/pkgs/wai-websockets.nix
new file mode 100644
index 0000000000000000000000000000000000000000..4c8c64680fd97d443d17f0f204b5817fa5fcf059
--- /dev/null
+++ b/pkgs/wai-websockets.nix
@@ -0,0 +1,58 @@
+{ mkDerivation
+, base
+, bytestring
+, case-insensitive
+, file-embed
+, http-types
+, lib
+, network
+, text
+, transformers
+, wai
+, wai-app-static
+, warp
+, websockets
+}:
+mkDerivation {
+  pname = "wai-websockets";
+  version = "3.0.1.2";
+  sha256 = "917cceb08f296d7dc6b6cafb66133ae53888b2c98b8fb2a2d7fa629d75ab5d2c";
+  isLibrary = true;
+  isExecutable = true;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    bytestring
+    case-insensitive
+    http-types
+    network
+    transformers
+    wai
+    websockets
+  ];
+  executableHaskellDepends = [
+    base
+    bytestring
+    case-insensitive
+    file-embed
+    http-types
+    network
+    text
+    transformers
+    wai
+    wai-app-static
+    warp
+    websockets
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "http://github.com/yesodweb/wai";
+  description = "Provide a bridge between WAI and the websockets package";
+  license = lib.licenses.mit;
+  broken = false;
+}
diff --git a/pkgs/xml-conduit-writer.nix b/pkgs/xml-conduit-writer.nix
new file mode 100644
index 0000000000000000000000000000000000000000..c4841d6d148b23943f70574a86a007265495654c
--- /dev/null
+++ b/pkgs/xml-conduit-writer.nix
@@ -0,0 +1,41 @@
+{ mkDerivation
+, base
+, containers
+, data-default
+, dlist
+, lib
+, mtl
+, text
+, xml-conduit
+, xml-types
+}:
+mkDerivation {
+  pname = "xml-conduit-writer";
+  version = "0.1.1.2";
+  sha256 = "0891c05ad2a2de68183868de8f66230d02f209446ee91bca772cbf22b599ae58";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  libraryHaskellDepends = [
+    base
+    containers
+    data-default
+    dlist
+    mtl
+    text
+    xml-conduit
+    xml-types
+  ];
+  testHaskellDepends = [ base text ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://bitbucket.org/dpwiz/xml-conduit-writer";
+  description = "Warm and fuzzy creation of XML documents";
+  license = lib.licenses.mit;
+  broken = false;
+}
diff --git a/pkgs/xss-sanitize.nix b/pkgs/xss-sanitize.nix
new file mode 100644
index 0000000000000000000000000000000000000000..dd798fa868d2760a7209b9a0a39fc2cdac1558f7
--- /dev/null
+++ b/pkgs/xss-sanitize.nix
@@ -0,0 +1,54 @@
+{ mkDerivation
+, HUnit
+, attoparsec
+, base
+, containers
+, css-text
+, hspec
+, lib
+, network-uri
+, tagsoup
+, text
+, utf8-string
+}:
+mkDerivation {
+  pname = "xss-sanitize";
+  version = "0.3.7.1";
+  sha256 = "303c15935f0e54dd0ef1b3665d307e4e74e2a3e9f8d4612a2133ac8a04f4b5d2";
+  isLibrary = true;
+  isExecutable = false;
+  enableSeparateDataOutput = false;
+  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
+  ];
+  enableLibraryProfiling = true;
+  enableExecutableProfiling = true;
+  doHaddock = false;
+  jailbreak = true;
+  doCheck = false;
+  doBenchmark = false;
+  hyperlinkSource = false;
+  homepage = "https://github.com/yesodweb/haskell-xss-sanitize#readme";
+  description = "sanitize untrusted HTML to prevent XSS attacks";
+  license = lib.licenses.bsd2;
+  broken = false;
+}