about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/networking/instant-messengers
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/applications/networking/instant-messengers')
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/blink/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/blink/pythonpath.patch49
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix126
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c12
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-electron/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/base.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix36
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/discord/update-discord.sh36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json113
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-yarndeps.nix6797
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix80
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix40
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/element/update-element-desktop.sh17
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix19
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix98
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix19
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix91
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix102
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/go-mod.patch50
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix61
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/hardcoded_path.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/gtmess/default.nix19
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix72
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix187
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch118
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch74
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/composition.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-env.nix540
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-packages.nix1426
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/package.json27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix98
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile39
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile.lock103
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix82
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/gemset.nix422
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/mikutter.desktop9
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/gtk/Gemfile4
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/image_file_cache/Gemfile1
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/photo_support/Gemfile4
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/uitranslator/Gemfile6
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/neochat/default.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix78
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix64
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/carbons/default.nix26
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/msn-pecan/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-mra/default.nix35
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-opensteamworks/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-osd/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-skypeweb/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-xmpp-receipts/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-discord/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-facebook/default.nix65
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-hangouts/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-lurch/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-matrix/default.nix38
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-plugin-pack/default.nix19
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-slack/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-vk-plugin/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-xmpp-http-upload/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/skype4pidgin/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/telegram-purple/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/tox-prpl/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/window-merge/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix88
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch64
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pond/default.nix33
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pond/deps.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix83
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch12
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/pybitmessage/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix47
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/rambox/pro.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/rambox/rambox.nix30
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix59
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix150
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch106
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix38
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix70
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/default.nix60
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/requirements.nix67
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix143
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix40
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix124
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix23
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix180
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh41
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix22
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/stride/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/default.nix44
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/qt-5.11.patch10
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/scons.patch53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix89
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix148
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix96
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix108
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix34
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix29
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix36
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix53
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/salut/default.nix27
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix56
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/torchat/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix32
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix43
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix106
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix54
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix68
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix154
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/default.nix25
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/deps.nix20
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix21
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix125
-rwxr-xr-xnixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh10
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix46
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch13
-rw-r--r--nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix40
164 files changed, 17152 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix
new file mode 100644
index 000000000000..bab9d12123df
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/SkypeExport/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, cmake, boost166 }:
+
+stdenv.mkDerivation rec {
+  pname = "SkypeExport";
+  version = "1.4.0";
+
+  src = fetchFromGitHub {
+    owner = "Temptin";
+    repo = "SkypeExport";
+    rev = "v${version}";
+    sha256 = "1ilkh0s3dz5cp83wwgmscnfmnyck5qcwqg1yxp9zv6s356dxnbak";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ boost166 ];
+
+  preConfigure = "cd src/SkypeExport/_gccbuild/linux";
+  installPhase = "install -Dt $out/bin SkypeExport";
+
+  meta = with lib; {
+    description = "Export Skype history to HTML";
+    homepage = "https://github.com/Temptin/SkypeExport";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ yegortimoshenko ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix
new file mode 100644
index 000000000000..e3a8e682577a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/baresip/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv, fetchurl, zlib, openssl, libre, librem, pkg-config, gst_all_1
+, cairo, mpg123, alsaLib, SDL, libv4l, celt, libsndfile, srtp, ffmpeg_3
+, gsm, speex, portaudio, spandsp, libuuid, libvpx
+}:
+stdenv.mkDerivation rec {
+  version = "0.6.5";
+  pname = "baresip";
+  src=fetchurl {
+    url = "http://www.creytiv.com/pub/baresip-${version}.tar.gz";
+    sha256 = "13di0ycdcr2q2a20mjvyaqfmvk5xldwqaxklqsz7470jnbc5n0rb";
+  };
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [zlib openssl libre librem cairo mpg123
+    alsaLib SDL libv4l celt libsndfile srtp ffmpeg_3 gsm speex portaudio spandsp libuuid
+    libvpx
+  ] ++ (with gst_all_1; [ gstreamer gst-libav gst-plugins-base gst-plugins-bad gst-plugins-good ]);
+  makeFlags = [
+    "LIBRE_MK=${libre}/share/re/re.mk"
+    "LIBRE_INC=${libre}/include/re"
+    "LIBRE_SO=${libre}/lib"
+    "LIBREM_PATH=${librem}"
+    "PREFIX=$(out)"
+    "USE_VIDEO=1"
+    "CCACHE_DISABLE=1"
+
+    "USE_ALSA=1" "USE_AMR=1" "USE_CAIRO=1" "USE_CELT=1"
+    "USE_CONS=1" "USE_EVDEV=1" "USE_FFMPEG=1"  "USE_GSM=1" "USE_GST1=1"
+    "USE_L16=1" "USE_MPG123=1" "USE_OSS=1" "USE_PLC=1" "USE_VPX=1"
+    "USE_PORTAUDIO=1" "USE_SDL=1" "USE_SNDFILE=1" "USE_SPEEX=1"
+    "USE_SPEEX_AEC=1" "USE_SPEEX_PP=1" "USE_SPEEX_RESAMP=1" "USE_SRTP=1"
+    "USE_STDIO=1" "USE_SYSLOG=1" "USE_UUID=1" "USE_V4L2=1" "USE_X11=1"
+
+    "USE_BV32=" "USE_COREAUDIO=" "USE_G711=1" "USE_G722=1" "USE_G722_1="
+    "USE_ILBC=" "USE_OPUS=" "USE_SILK="
+  ]
+  ++ lib.optional (stdenv.cc.cc != null) "SYSROOT_ALT=${stdenv.cc.cc}"
+  ++ lib.optional (stdenv.cc.libc != null) "SYSROOT=${stdenv.cc.libc}"
+  ;
+
+  NIX_CFLAGS_COMPILE='' -I${librem}/include/rem -I${gsm}/include/gsm
+    -DHAVE_INTTYPES_H -D__GLIBC__
+    -D__need_timeval -D__need_timespec -D__need_time_t '';
+  meta = {
+    homepage = "http://www.creytiv.com/baresip.html";
+    platforms = with lib.platforms; linux;
+    maintainers = with lib.maintainers; [raskin];
+    license = lib.licenses.bsd3;
+    inherit version;
+    downloadPage = "http://www.creytiv.com/pub/";
+    updateWalker = true;
+    downloadURLRegexp = "/baresip-.*[.]tar[.].*";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix
new file mode 100644
index 000000000000..543a5f52c979
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-discord/default.nix
@@ -0,0 +1,32 @@
+{ lib, fetchFromGitHub, stdenv, bitlbee, autoreconfHook, pkg-config, glib }:
+
+with lib;
+stdenv.mkDerivation rec {
+  pname = "bitlbee-discord";
+  version = "0.4.3";
+
+  src = fetchFromGitHub {
+    rev = version;
+    owner = "sm00th";
+    repo = "bitlbee-discord";
+    sha256 = "00qgdvrp7hv02n0ns685igp810zxmv3adsama8601122al6x041n";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ bitlbee ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    export BITLBEE_DATADIR=$out/share/bitlbee
+    ./autogen.sh
+  '';
+
+  meta = {
+    description = "Bitlbee plugin for Discord";
+
+    homepage = "https://github.com/sm00th/bitlbee-discord";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ lassulus jb55 ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix
new file mode 100644
index 000000000000..8023c70fe5fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-facebook/default.nix
@@ -0,0 +1,31 @@
+{ lib, fetchFromGitHub, stdenv, bitlbee, autoconf, automake, libtool, pkg-config, glib, json-glib }:
+
+with lib;
+stdenv.mkDerivation rec {
+  pname = "bitlbee-facebook";
+  version = "1.2.1";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "bitlbee";
+    repo = "bitlbee-facebook";
+    sha256 = "1yjhjhk3jzjip13lq009vlg84lm2lzwhac5jy0aq3vkcz6rp94rc";
+  };
+
+  nativeBuildInputs = [ autoconf automake libtool pkg-config ];
+
+  buildInputs = [ bitlbee json-glib ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    ./autogen.sh
+  '';
+
+  meta = {
+    description = "The Facebook protocol plugin for bitlbee";
+
+    homepage = "https://github.com/bitlbee/bitlbee-facebook";
+    license = licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix
new file mode 100644
index 000000000000..f1b2df658a6b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-mastodon/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchgit, stdenv, bitlbee, autoreconfHook, pkg-config, glib }:
+
+with lib;
+stdenv.mkDerivation rec {
+  pname = "bitlbee-mastodon";
+  version = "1.4.4";
+
+  src = fetchgit {
+    url = "https://alexschroeder.ch/cgit/bitlbee-mastodon";
+    rev = "v${version}";
+    sha256 = "0a8196pyr6bjnqg82zn7jdhiv7xsg4npbpzalla1i2h99j30q8pk";
+  };
+
+  nativeBuildInputs = [ autoreconfHook pkg-config ];
+  buildInputs = [ bitlbee ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    export BITLBEE_DATADIR=$out/share/bitlbee
+  '';
+
+  meta = {
+    description = "Bitlbee plugin for Mastodon";
+    homepage = "https://alexschroeder.ch/cgit/bitlbee-mastodon/about";
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [ jpotier ];
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix
new file mode 100644
index 000000000000..14464247659c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee-steam/default.nix
@@ -0,0 +1,30 @@
+{ lib, fetchFromGitHub, stdenv, bitlbee, autoconf, automake, libtool, pkg-config, glib, libgcrypt }:
+
+with lib;
+stdenv.mkDerivation rec {
+  version = "1.4.2";
+  pname = "bitlbee-steam";
+
+  src = fetchFromGitHub {
+    rev = "v${version}";
+    owner = "bitlbee";
+    repo = "bitlbee-steam";
+    sha256 = "121r92mgwv445wwxzh35n19fs5k81ihr0j19k256ia5502b1xxaq";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ bitlbee autoconf automake libtool libgcrypt ];
+
+  preConfigure = ''
+    export BITLBEE_PLUGINDIR=$out/lib/bitlbee
+    ./autogen.sh
+  '';
+
+  meta = {
+    description = "Steam protocol plugin for BitlBee";
+
+    homepage = "https://github.com/jgeboski/bitlbee-steam";
+    license = licenses.gpl2Plus;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix
new file mode 100644
index 000000000000..1a83a04a1fa8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/default.nix
@@ -0,0 +1,68 @@
+{ lib, fetchurl, fetchpatch, stdenv, gnutls, glib, pkg-config, check, libotr, python
+, enableLibPurple ? false, pidgin ? null
+, enablePam ? false, pam ? null
+}:
+
+with lib;
+stdenv.mkDerivation rec {
+  name = "bitlbee-3.6";
+
+  src = fetchurl {
+    url = "mirror://bitlbee/src/${name}.tar.gz";
+    sha256 = "0zhhcbcr59sx9h4maf8zamzv2waya7sbsl7w74gbyilvy93dw5cz";
+  };
+
+  nativeBuildInputs = [ pkg-config ] ++ optional doCheck check;
+
+  buildInputs = [ gnutls libotr python ]
+    ++ optional enableLibPurple pidgin
+    ++ optional enablePam pam;
+
+  propagatedBuildInputs = [ glib ];
+
+  configureFlags = [
+    "--otr=1"
+    "--ssl=gnutls"
+    "--pidfile=/var/lib/bitlbee/bitlbee.pid"
+  ] ++ optional enableLibPurple "--purple=1"
+    ++ optional enablePam "--pam=1";
+
+  patches = [
+    # This should be dropped once the issue is fixed upstream.
+    (fetchpatch {
+      url = "https://github.com/bitlbee/bitlbee/commit/6ff651b3ec93e5fd74f80766d5e9714d963137bc.diff";
+      sha256 = "144dpm4kq7c268fpww1q3n88ayg068n73fbabr5arh1zryw48qfv";
+    })
+  ];
+
+  installTargets = [ "install" "install-dev" ];
+
+  doCheck = !enableLibPurple; # Checks fail with libpurple for some reason
+  checkPhase = ''
+    # check flags set VERBOSE=y which breaks the build due overriding a command
+    make check
+  '';
+
+  enableParallelBuilding = true;
+
+  meta = {
+    description = "IRC instant messaging gateway";
+
+    longDescription = ''
+      BitlBee brings IM (instant messaging) to IRC clients.  It's a
+      great solution for people who have an IRC client running all the
+      time and don't want to run an additional MSN/AIM/whatever
+      client.
+
+      BitlBee currently supports the following IM networks/protocols:
+      XMPP/Jabber (including Google Talk), MSN Messenger, Yahoo!
+      Messenger, AIM and ICQ.
+    '';
+
+    homepage = "https://www.bitlbee.org/";
+    license = licenses.gpl2Plus;
+
+    maintainers = with maintainers; [ pSub ];
+    platforms = platforms.gnu ++ platforms.linux;  # arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix
new file mode 100644
index 000000000000..ad68fcb4b79d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bitlbee/plugins.nix
@@ -0,0 +1,20 @@
+{ lib, stdenv, bitlbee }:
+
+with lib;
+
+plugins:
+
+stdenv.mkDerivation {
+  inherit bitlbee plugins;
+  name = "bitlbee-plugins";
+  buildInputs = [ bitlbee plugins ];
+  phases = [ "installPhase" ];
+  installPhase = ''
+    mkdir -p $out/lib/bitlbee
+    for plugin in $plugins; do
+      for thing in $(ls $plugin/lib/bitlbee); do
+        ln -s $plugin/lib/bitlbee/$thing $out/lib/bitlbee/
+      done
+    done
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/blink/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/blink/default.nix
new file mode 100644
index 000000000000..7ed3b1673831
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/blink/default.nix
@@ -0,0 +1,68 @@
+{ lib, fetchdarcs, pythonPackages, libvncserver, zlib
+, gnutls, libvpx, makeDesktopItem, mkDerivationWith }:
+
+mkDerivationWith pythonPackages.buildPythonApplication rec {
+
+  pname = "blink";
+  version = "3.2.0";
+
+  src = fetchdarcs {
+    url = "http://devel.ag-projects.com/repositories/blink-qt";
+    rev = "release-${version}";
+    sha256 = "19rcwr5scw48qnj79q1pysw95fz9h98nyc3161qy2kph5g7dwkc3";
+  };
+
+  patches = [ ./pythonpath.patch ];
+  postPatch = ''
+    sed -i 's|@out@|'"''${out}"'|g' blink/resources.py
+  '';
+
+  propagatedBuildInputs = with pythonPackages; [
+    pyqt5_with_qtwebkit
+    cjson
+    sipsimple
+    twisted
+    google_api_python_client
+  ];
+
+  buildInputs = [
+    pythonPackages.cython
+    zlib
+    libvncserver
+    libvpx
+  ];
+
+  desktopItem = makeDesktopItem {
+    name = "Blink";
+    exec = "blink";
+    comment = meta.description;
+    desktopName = "Blink";
+    icon = "blink";
+    genericName = "Instant Messaging";
+    categories = "Internet;";
+  };
+
+  dontWrapQtApps = true;
+
+  postInstall = ''
+    mkdir -p "$out/share/applications"
+    mkdir -p "$out/share/pixmaps"
+    cp "$desktopItem"/share/applications/* "$out/share/applications"
+    cp "$out"/share/blink/icons/blink.* "$out/share/pixmaps"
+  '';
+
+  preFixup = ''
+    makeWrapperArgs+=(
+      --prefix "LD_LIBRARY_PATH" ":" "${gnutls.out}/lib"
+      "''${qtWrapperArgs[@]}"
+    )
+  '';
+
+  meta = with lib; {
+    homepage = "http://icanblink.com/";
+    description = "A state of the art, easy to use SIP client for Voice, Video and IM";
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ pSub ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/blink/pythonpath.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/blink/pythonpath.patch
new file mode 100644
index 000000000000..0df8bc84ff30
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/blink/pythonpath.patch
@@ -0,0 +1,49 @@
+--- blink-2.0.0/blink/resources.py	2016-03-09 14:39:07.000000000 +0100
++++ blink-2.0.0/blink/resources-patched.py	2016-03-12 21:34:14.965476623 +0100
+@@ -1,7 +1,10 @@
++# Copyright (C) 2010-2013 AG Projects. See LICENSE for details.
++#
+ 
+ """Provide access to Blink's resources"""
+ 
+-import __main__
++__all__ = ['ApplicationData', 'Resources', 'IconManager']
++
+ import imghdr
+ import os
+ import platform
+@@ -19,14 +22,10 @@
+ from blink.util import run_in_gui_thread
+ 
+ 
+-__all__ = ['ApplicationData', 'Resources', 'IconManager']
+-
+-
+ class DirectoryContextManager(unicode):
+     def __enter__(self):
+         self.directory = os.getcwdu()
+         os.chdir(self)
+-
+     def __exit__(self, type, value, traceback):
+         os.chdir(self.directory)
+ 
+@@ -61,18 +60,7 @@
+     @classproperty
+     def directory(cls):
+         if cls._cached_directory is None:
+-            try:
+-                binary_directory = os.path.dirname(os.path.realpath(__main__.__file__))
+-            except AttributeError:
+-                if hasattr(sys, 'frozen'):
+-                    application_directory = os.path.dirname(os.path.realpath(sys.executable))
+-                else:
+-                    application_directory = os.path.realpath('')  # executed in interactive interpreter
+-            else:
+-                if os.path.basename(binary_directory) == 'bin':
+-                    application_directory = os.path.dirname(binary_directory)
+-                else:
+-                    application_directory = binary_directory
++            application_directory = '@out@'
+             if os.path.exists(os.path.join(application_directory, 'resources', 'blink.ui')):
+                 cls._cached_directory = os.path.join(application_directory, 'resources').decode(sys.getfilesystemencoding())
+             else:
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix
new file mode 100644
index 000000000000..d80ccf0a8fab
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/default.nix
@@ -0,0 +1,126 @@
+{ stdenv
+, lib
+, fetchurl
+, rpmextract
+, libnotify
+, libuuid
+, cairo
+, cups
+, pango
+, fontconfig
+, udev
+, dbus
+, gtk3
+, atk
+, at-spi2-atk
+, expat
+, gdk-pixbuf
+, freetype
+, nspr
+, glib
+, nss
+, libX11
+, libXrandr
+, libXrender
+, libXtst
+, libXdamage
+, libxcb
+, libXcursor
+, libXi
+, libXext
+, libXfixes
+, libXft
+, libXcomposite
+, libXScrnSaver
+, alsaLib
+, pulseaudio
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "bluejeans";
+  version = "2.19.0";
+  buildNumber = "61";
+
+  src = fetchurl {
+    url = "https://swdl.bluejeans.com/desktop-app/linux/${version}/BlueJeans_${version}.${buildNumber}.rpm";
+    sha256 = "163p67dqry256d454qzk4k4b692kz8s9fcvaxd6gi7zvnsd48ikr";
+  };
+
+  nativeBuildInputs = [ rpmextract makeWrapper ];
+
+  libPath =
+    lib.makeLibraryPath
+      [
+        libnotify
+        libuuid
+        cairo
+        cups
+        pango
+        fontconfig
+        gtk3
+        atk
+        at-spi2-atk
+        expat
+        gdk-pixbuf
+        dbus
+        (lib.getLib udev)
+        freetype
+        nspr
+        glib
+        stdenv.cc.cc.lib
+        nss
+        libX11
+        libXrandr
+        libXrender
+        libXtst
+        libXdamage
+        libxcb
+        libXcursor
+        libXi
+        libXext
+        libXfixes
+        libXft
+        libXcomposite
+        libXScrnSaver
+        alsaLib
+        pulseaudio
+      ];
+
+  localtime64_stub = ./localtime64_stub.c;
+
+  buildCommand = ''
+    mkdir -p $out/bin/
+    cd $out
+    rpmextract $src
+    mv usr/share share
+    rmdir usr
+
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      --replace-needed libudev.so.0 libudev.so.1 \
+      opt/BlueJeans/bluejeans-v2
+    patchelf \
+      --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+      opt/BlueJeans/resources/BluejeansHelper
+
+    cc $localtime64_stub -shared -o "$out"/opt/BlueJeans/liblocaltime64_stub.so
+
+    makeWrapper $out/opt/BlueJeans/bluejeans-v2 $out/bin/bluejeans \
+      --set LD_LIBRARY_PATH "${libPath}":"${placeholder "out"}"/opt/BlueJeans \
+      --set LD_PRELOAD "$out"/opt/BlueJeans/liblocaltime64_stub.so
+
+    substituteInPlace "$out"/share/applications/bluejeans-v2.desktop \
+      --replace "/opt/BlueJeans/bluejeans-v2" "$out/bin/bluejeans"
+
+    patchShebangs "$out"
+  '';
+
+  meta = with lib; {
+    description = "Video, audio, and web conferencing that works together with the collaboration tools you use every day";
+    homepage = "https://www.bluejeans.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c
new file mode 100644
index 000000000000..87c2fa11714c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/bluejeans/localtime64_stub.c
@@ -0,0 +1,12 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+void *localtime64() {
+  fprintf(stderr, "nixpkgs: call into localtime64_r\n");
+  abort();
+}
+
+void *localtime64_r() {
+  fprintf(stderr, "nixpkgs: call into localtime64_r\n");
+  abort();
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix
new file mode 100644
index 000000000000..78178f0021e2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/centerim/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchurl, gnused, openssl, curl, ncurses, libjpeg
+, withGpg ? true, gpgme ? null}:
+
+stdenv.mkDerivation rec {
+  version = "5.0.1";
+  pname = "centerim5";
+
+  src = fetchurl {
+    url = "http://centerim.org/download/cim5/${pname}-${version}.tar.gz";
+    sha256 = "0viz86jflp684vfginhl6aaw4gh2qvalc25anlwljjl3kkmibklk";
+  };
+
+  CXXFLAGS = "-std=gnu++98";
+
+  buildInputs = [ openssl curl ncurses libjpeg ]
+    ++ lib.optional withGpg gpgme;
+
+  preConfigure = ''
+    ${gnused}/bin/sed -i '1,1i#include <stdio.h>' libicq2000/libicq2000/sigslot.h
+  '';
+
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+  ];
+
+  meta = {
+    homepage = "http://www.centerim.org/";
+    description = "Fork of CenterICQ, a curses instant messaging program";
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
new file mode 100644
index 000000000000..f9789cfda418
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
@@ -0,0 +1,36 @@
+{ mkDerivation, stdenv, lib, pkg-config, fetchFromGitHub, qtbase, qtsvg, qtmultimedia, qmake, boost, openssl, wrapQtAppsHook }:
+
+mkDerivation rec {
+  pname = "chatterino2";
+  version = "2.2.2";
+  src = fetchFromGitHub {
+    owner = "Chatterino";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "026cs48hmqkv7k4akbm205avj2pn3x1g7q46chwa707k9km325dz";
+    fetchSubmodules = true;
+  };
+  nativeBuildInputs = [ qmake pkg-config wrapQtAppsHook ];
+  buildInputs = [ qtbase qtsvg qtmultimedia boost openssl ];
+  postInstall = lib.optionalString stdenv.isDarwin ''
+    mkdir -p "$out/Applications"
+    mv bin/chatterino.app "$out/Applications/"
+  '';
+  postFixup = lib.optionalString stdenv.isDarwin ''
+    wrapQtApp "$out/Applications/chatterino.app/Contents/MacOS/chatterino"
+  '';
+  meta = with lib; {
+    description = "A chat client for Twitch chat";
+    longDescription = ''
+      Chatterino is a chat client for Twitch chat. It aims to be an
+      improved/extended version of the Twitch web chat. Chatterino 2 is
+      the second installment of the Twitch chat client series
+      "Chatterino".
+    '';
+    homepage = "https://github.com/Chatterino/chatterino2";
+    changelog = "https://github.com/Chatterino/chatterino2/blob/master/CHANGELOG.md";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ rexim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix
new file mode 100644
index 000000000000..a906c46c4aef
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/cordless/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "cordless";
+  version = "2020-11-22";
+
+  src = fetchFromGitHub {
+    owner = "Bios-Marcel";
+    repo = pname;
+    rev = version;
+    sha256 = "0avf09b73fs3wpb4fzmm6ka595aanfvp95m6xj1ccxvq8ciwpqcw";
+  };
+
+  subPackages = [ "." ];
+
+  vendorSha256 = "01anbhwgwam70dymcmvkia1xpw48658rq7wv4m7fiavxvnli6z2y";
+
+  meta = with lib; {
+    homepage = "https://github.com/Bios-Marcel/cordless";
+    description = "Discord terminal client";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ colemickens ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix
new file mode 100644
index 000000000000..31896f20184f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/coyim/default.nix
@@ -0,0 +1,27 @@
+{ lib, buildGoPackage, fetchFromGitHub, pkg-config,
+  cairo, gdk-pixbuf, glib, gnome3, wrapGAppsHook, gtk3 }:
+
+buildGoPackage rec {
+  pname = "coyim";
+  version = "0.3.11";
+
+  goPackagePath = "github.com/coyim/coyim";
+
+  src = fetchFromGitHub {
+    owner = "coyim";
+    repo = "coyim";
+    rev = "v${version}";
+    sha256 = "1g8nf56j17rdhhj7pv3ha1rb2mfc0mdvyzl35pgcki08w7iw08j3";
+  };
+
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ];
+
+  buildInputs = [ glib cairo gdk-pixbuf gtk3 gnome3.adwaita-icon-theme ];
+
+  meta = with lib; {
+    description = "a safe and secure chat client";
+    homepage = "https://coy.im/";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-electron/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-electron/default.nix
new file mode 100644
index 000000000000..e58e73fdc85b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/deltachat-electron/default.nix
@@ -0,0 +1,36 @@
+{ lib, fetchurl, appimageTools }:
+
+let
+  pname = "deltachat-electron";
+  version = "1.3.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url =
+      "https://download.delta.chat/desktop/v${version}/DeltaChat-${version}.AppImage";
+    sha256 = "1xyp8cg11px8rras12sncjmq85alyvz7ycw1v1py8w8rlz60wkij";
+  };
+
+  appimageContents = appimageTools.extract { inherit name src; };
+
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D \
+      ${appimageContents}/deltachat-desktop.desktop \
+      $out/share/applications/${pname}.desktop
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+    cp -r ${appimageContents}/usr/share/icons $out/share
+  '';
+
+  meta = with lib; {
+    description = "Electron client for DeltaChat";
+    homepage = "https://delta.chat/";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
new file mode 100644
index 000000000000..0474f21a2b92
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
@@ -0,0 +1,89 @@
+{ lib, stdenv, fetchFromGitHub
+, vala, cmake, ninja, wrapGAppsHook, pkg-config, gettext
+, gobject-introspection, gnome3, glib, gdk-pixbuf, gtk3, glib-networking
+, xorg, libXdmcp, libxkbcommon
+, libnotify, libsoup, libgee
+, librsvg, libsignal-protocol-c
+, fetchpatch
+, libgcrypt
+, epoxy
+, at-spi2-core
+, sqlite
+, dbus
+, gpgme
+, pcre
+, qrencode
+, icu
+ }:
+
+stdenv.mkDerivation rec {
+  pname = "dino";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "dino";
+    repo = "dino";
+    rev = "v${version}";
+    sha256 = "0wy1hb3kz3k4gqqwx308n37cqag2d017jwfz0b5s30nkx2pbwspw";
+  };
+
+  nativeBuildInputs = [
+    vala
+    cmake
+    ninja
+    pkg-config
+    wrapGAppsHook
+    gettext
+  ];
+
+  buildInputs = [
+    qrencode
+    gobject-introspection
+    glib-networking
+    glib
+    libgee
+    gnome3.adwaita-icon-theme
+    sqlite
+    gdk-pixbuf
+    gtk3
+    libnotify
+    gpgme
+    libgcrypt
+    libsoup
+    pcre
+    epoxy
+    at-spi2-core
+    dbus
+    icu
+    libsignal-protocol-c
+    librsvg
+  ] ++ lib.optionals (!stdenv.isDarwin) [
+    xorg.libxcb
+    xorg.libpthreadstubs
+    libXdmcp
+    libxkbcommon
+  ];
+
+  # Dino looks for plugins with a .so filename extension, even on macOS where
+  # .dylib is appropriate, and despite the fact that it builds said plugins with
+  # that as their filename extension
+  #
+  # Therefore, on macOS rename all of the plugins to use correct names that Dino
+  # will load
+  #
+  # See https://github.com/dino/dino/wiki/macOS
+  postFixup = lib.optionalString (stdenv.isDarwin) ''
+    cd "$out/lib/dino/plugins/"
+    for f in *.dylib; do
+      mv "$f" "$(basename "$f" .dylib).so"
+    done
+  '';
+
+  meta = with lib; {
+    description = "Modern Jabber/XMPP Client using GTK/Vala";
+    homepage = "https://github.com/dino/dino";
+    license = licenses.gpl3;
+    platforms = platforms.linux ++ platforms.darwin;
+    maintainers = with maintainers; [ mic92 qyliss ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/base.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/base.nix
new file mode 100644
index 000000000000..e4c588e6c18e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/base.nix
@@ -0,0 +1,80 @@
+{ pname, version, src, binaryName, desktopName
+, autoPatchelfHook, fetchurl, makeDesktopItem, lib, stdenv, wrapGAppsHook
+, alsaLib, at-spi2-atk, at-spi2-core, atk, cairo, cups, dbus, expat, fontconfig
+, freetype, gdk-pixbuf, glib, gtk3, libcxx, libdrm, libnotify, libpulseaudio, libuuid
+, libX11, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext
+, libXfixes, libXi, libXrandr, libXrender, libXtst, libxcb
+, mesa, nspr, nss, pango, systemd, libappindicator-gtk3, libdbusmenu
+}:
+
+let
+  inherit binaryName;
+in stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  nativeBuildInputs = [
+    alsaLib
+    autoPatchelfHook
+    cups
+    libdrm
+    libuuid
+    libX11
+    libXScrnSaver
+    libXtst
+    libxcb
+    mesa.drivers
+    nss
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  libPath = lib.makeLibraryPath [
+    libcxx systemd libpulseaudio
+    stdenv.cc.cc alsaLib atk at-spi2-atk at-spi2-core cairo cups dbus expat fontconfig freetype
+    gdk-pixbuf glib gtk3 libnotify libX11 libXcomposite libuuid
+    libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender
+    libXtst nspr nss libxcb pango systemd libXScrnSaver
+    libappindicator-gtk3 libdbusmenu
+   ];
+
+  installPhase = ''
+    mkdir -p $out/{bin,opt/${binaryName},share/pixmaps}
+    mv * $out/opt/${binaryName}
+
+    chmod +x $out/opt/${binaryName}/${binaryName}
+    patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+        $out/opt/${binaryName}/${binaryName}
+
+    wrapProgram $out/opt/${binaryName}/${binaryName} \
+        "''${gappsWrapperArgs[@]}" \
+        --prefix XDG_DATA_DIRS : "${gtk3}/share/gsettings-schemas/${gtk3.name}/" \
+        --prefix LD_LIBRARY_PATH : ${libPath}
+
+    ln -s $out/opt/${binaryName}/${binaryName} $out/bin/
+    ln -s $out/opt/${binaryName}/discord.png $out/share/pixmaps/${pname}.png
+
+    ln -s "${desktopItem}/share/applications" $out/share/
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = binaryName;
+    icon = pname;
+    inherit desktopName;
+    genericName = meta.description;
+    categories = "Network;InstantMessaging;";
+    mimeType = "x-scheme-handler/discord";
+  };
+
+  passthru.updateScript = ./update-discord.sh;
+
+  meta = with lib; {
+    description = "All-in-one cross-platform voice and text chat for gamers";
+    homepage = "https://discordapp.com/";
+    downloadPage = "https://discordapp.com/download";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ ldesgoui MP2E tadeokondrak ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix
new file mode 100644
index 000000000000..c7ddc495546d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/default.nix
@@ -0,0 +1,36 @@
+{ branch ? "stable", pkgs }:
+# Generated by ./update-discord.sh
+let
+  inherit (pkgs) callPackage fetchurl;
+in {
+  stable = callPackage ./base.nix rec {
+    pname = "discord";
+    binaryName = "Discord";
+    desktopName = "Discord";
+    version = "0.0.13";
+    src = fetchurl {
+      url = "https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
+      sha256 = "0d5z6cbj9dg3hjw84pyg75f8dwdvi2mqxb9ic8dfqzk064ssiv7y";
+    };
+  };
+  ptb = callPackage ./base.nix rec {
+    pname = "discord-ptb";
+    binaryName = "DiscordPTB";
+    desktopName = "Discord PTB";
+    version = "0.0.23";
+    src = fetchurl {
+      url = "https://dl-ptb.discordapp.net/apps/linux/${version}/discord-ptb-${version}.tar.gz";
+      sha256 = "0vxz68vldrbmmw1alpwl7blfcy6byd6zg9m0851dm0p0ldyhsp5j";
+    };
+  };
+  canary = callPackage ./base.nix rec {
+    pname = "discord-canary";
+    binaryName = "DiscordCanary";
+    desktopName = "Discord Canary";
+    version = "0.0.119";
+    src = fetchurl {
+      url = "https://dl-canary.discordapp.net/apps/linux/${version}/discord-canary-${version}.tar.gz";
+      sha256 = "0bzrilag7mjfhr84l956xisbaz8mmkmqizg22f9gabgcv85vwzsi";
+    };
+  };
+}.${branch}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/discord/update-discord.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/update-discord.sh
new file mode 100755
index 000000000000..34c1574c65aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/discord/update-discord.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+# script to generate ./default.nix
+
+set -e
+exec >"${BASH_SOURCE%/*}/default.nix"
+
+cat <<EOF
+{ branch ? "stable", pkgs }:
+# Generated by ./update-discord.sh
+let
+  inherit (pkgs) callPackage fetchurl;
+in {
+EOF
+
+for branch in "" ptb canary; do
+    url=$(curl -sI "https://discordapp.com/api/download${branch:+/}${branch}?platform=linux&format=tar.gz" | grep -oP 'location: \K\S+')
+    version=${url##https://dl*.discordapp.net/apps/linux/}
+    version=${version%%/*.tar.gz}
+    echo "  ${branch:-stable} = callPackage ./base.nix rec {"
+    echo "    pname = \"discord${branch:+-}${branch}\";"
+    case $branch in
+        "") suffix="" ;;
+        ptb) suffix="PTB" ;;
+        canary) suffix="Canary" ;;
+    esac
+    echo "    binaryName = \"Discord${suffix}\";"
+    echo "    desktopName = \"Discord${suffix:+ }${suffix}\";"
+    echo "    version = \"${version}\";"
+    echo "    src = fetchurl {"
+    echo "      url = \"${url//${version}/\$\{version\}}\";"
+    echo "      sha256 = \"$(nix-prefetch-url "$url")\";"
+    echo "    };"
+    echo "  };"
+done
+
+echo "}.\${branch}"
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json
new file mode 100644
index 000000000000..a5f21f11dfed
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-package.json
@@ -0,0 +1,113 @@
+{
+  "name": "element-desktop",
+  "productName": "Element",
+  "main": "src/electron-main.js",
+  "version": "1.7.20",
+  "description": "A feature-rich client for Matrix.org",
+  "author": "Element",
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/vector-im/element-desktop"
+  },
+  "license": "Apache-2.0",
+  "files": [],
+  "scripts": {
+    "mkdirs": "mkdirp packages deploys",
+    "fetch": "yarn run mkdirs && node scripts/fetch-package.js",
+    "asar-webapp": "asar p webapp webapp.asar",
+    "start": "electron .",
+    "lint": "eslint src/ scripts/ hak/",
+    "build:native": "yarn run hak",
+    "build32": "electron-builder --ia32",
+    "build64": "electron-builder --x64",
+    "build": "electron-builder",
+    "docker:setup": "docker build -t element-desktop-dockerbuild dockerbuild",
+    "docker:build:native": "scripts/in-docker.sh yarn run hak",
+    "docker:build": "scripts/in-docker.sh yarn run build",
+    "docker:install": "scripts/in-docker.sh yarn install",
+    "debrepo": "scripts/mkrepo.sh",
+    "clean": "rimraf webapp.asar dist packages deploys",
+    "hak": "node scripts/hak/index.js"
+  },
+  "dependencies": {
+    "auto-launch": "^5.0.5",
+    "electron-store": "^6.0.1",
+    "electron-window-state": "^5.0.3",
+    "minimist": "^1.2.3",
+    "png-to-ico": "^2.1.1",
+    "request": "^2.88.2"
+  },
+  "devDependencies": {
+    "asar": "^2.0.1",
+    "electron-builder": "22.9.1",
+    "electron-builder-squirrel-windows": "22.9.1",
+    "electron-devtools-installer": "^3.1.1",
+    "electron-notarize": "^1.0.0",
+    "eslint": "7.3.1",
+    "eslint-config-matrix-org": "^0.1.2",
+    "find-npm-prefix": "^1.0.2",
+    "fs-extra": "^8.1.0",
+    "glob": "^7.1.6",
+    "mkdirp": "^1.0.3",
+    "needle": "^2.5.0",
+    "node-pre-gyp": "^0.15.0",
+    "npm": "^6.14.11",
+    "rimraf": "^3.0.2",
+    "semver": "^7.3.4",
+    "tar": "^6.1.0"
+  },
+  "hakDependencies": {
+    "matrix-seshat": "^2.2.3",
+    "keytar": "^5.6.0"
+  },
+  "build": {
+    "appId": "im.riot.app",
+    "electronVersion": "10.2.0",
+    "files": [
+      "package.json",
+      {
+        "from": ".hak/hakModules",
+        "to": "node_modules"
+      },
+      "src/**"
+    ],
+    "extraResources": [
+      {
+        "from": "res/img",
+        "to": "img"
+      },
+      "webapp.asar"
+    ],
+    "linux": {
+      "target": "deb",
+      "category": "Network;InstantMessaging;Chat",
+      "maintainer": "support@element.io",
+      "desktop": {
+        "StartupWMClass": "element"
+      }
+    },
+    "mac": {
+      "category": "public.app-category.social-networking",
+      "darkModeSupport": true
+    },
+    "win": {
+      "target": {
+        "target": "squirrel"
+      },
+      "sign": "scripts/electron_winSign"
+    },
+    "directories": {
+      "output": "dist"
+    },
+    "afterPack": "scripts/electron_afterPack",
+    "afterSign": "scripts/electron_afterSign",
+    "protocols": [
+      {
+        "name": "element",
+        "schemes": [
+          "element"
+        ]
+      }
+    ]
+  }
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-yarndeps.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-yarndeps.nix
new file mode 100644
index 000000000000..a0fb802ac042
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop-yarndeps.nix
@@ -0,0 +1,6797 @@
+{ fetchurl, fetchgit, linkFarm, runCommandNoCC, gnutar }: rec {
+  offline_cache = linkFarm "offline" packages;
+  packages = [
+    {
+      name = "7zip_bin___7zip_bin_5.0.3.tgz";
+      path = fetchurl {
+        name = "7zip_bin___7zip_bin_5.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/7zip-bin/-/7zip-bin-5.0.3.tgz";
+        sha1 = "bc5b5532ecafd923a61f2fb097e3b108c0106a3f";
+      };
+    }
+    {
+      name = "_babel_code_frame___code_frame_7.5.5.tgz";
+      path = fetchurl {
+        name = "_babel_code_frame___code_frame_7.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz";
+        sha1 = "bc0782f6d69f7b7d49531219699b988f669a8f9d";
+      };
+    }
+    {
+      name = "_babel_code_frame___code_frame_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_code_frame___code_frame_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz";
+        sha1 = "168da1a36e90da68ae8d49c0f1b48c7c6249213a";
+      };
+    }
+    {
+      name = "_babel_generator___generator_7.10.5.tgz";
+      path = fetchurl {
+        name = "_babel_generator___generator_7.10.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.5.tgz";
+        sha1 = "1b903554bc8c583ee8d25f1e8969732e6b829a69";
+      };
+    }
+    {
+      name = "_babel_helper_function_name___helper_function_name_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_helper_function_name___helper_function_name_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz";
+        sha1 = "d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a";
+      };
+    }
+    {
+      name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_helper_get_function_arity___helper_get_function_arity_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz";
+        sha1 = "98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2";
+      };
+    }
+    {
+      name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_helper_split_export_declaration___helper_split_export_declaration_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz";
+        sha1 = "2c70576eaa3b5609b24cb99db2888cc3fc4251d1";
+      };
+    }
+    {
+      name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_helper_validator_identifier___helper_validator_identifier_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz";
+        sha1 = "a78c7a7251e01f616512d31b10adcf52ada5e0d2";
+      };
+    }
+    {
+      name = "_babel_highlight___highlight_7.5.0.tgz";
+      path = fetchurl {
+        name = "_babel_highlight___highlight_7.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz";
+        sha1 = "56d11312bd9248fa619591d02472be6e8cb32540";
+      };
+    }
+    {
+      name = "_babel_highlight___highlight_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_highlight___highlight_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz";
+        sha1 = "7d1bdfd65753538fabe6c38596cdb76d9ac60143";
+      };
+    }
+    {
+      name = "_babel_parser___parser_7.10.5.tgz";
+      path = fetchurl {
+        name = "_babel_parser___parser_7.10.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.5.tgz";
+        sha1 = "e7c6bf5a7deff957cec9f04b551e2762909d826b";
+      };
+    }
+    {
+      name = "_babel_runtime___runtime_7.11.2.tgz";
+      path = fetchurl {
+        name = "_babel_runtime___runtime_7.11.2.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz";
+        sha1 = "f549c13c754cc40b87644b9fa9f09a6a95fe0736";
+      };
+    }
+    {
+      name = "_babel_template___template_7.10.4.tgz";
+      path = fetchurl {
+        name = "_babel_template___template_7.10.4.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz";
+        sha1 = "3251996c4200ebc71d1a8fc405fba940f36ba278";
+      };
+    }
+    {
+      name = "_babel_traverse___traverse_7.10.5.tgz";
+      path = fetchurl {
+        name = "_babel_traverse___traverse_7.10.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.5.tgz";
+        sha1 = "77ce464f5b258be265af618d8fddf0536f20b564";
+      };
+    }
+    {
+      name = "_babel_types___types_7.10.5.tgz";
+      path = fetchurl {
+        name = "_babel_types___types_7.10.5.tgz";
+        url  = "https://registry.yarnpkg.com/@babel/types/-/types-7.10.5.tgz";
+        sha1 = "d88ae7e2fde86bfbfe851d4d81afa70a997b5d15";
+      };
+    }
+    {
+      name = "_develar_schema_utils___schema_utils_2.6.5.tgz";
+      path = fetchurl {
+        name = "_develar_schema_utils___schema_utils_2.6.5.tgz";
+        url  = "https://registry.yarnpkg.com/@develar/schema-utils/-/schema-utils-2.6.5.tgz";
+        sha1 = "3ece22c5838402419a6e0425f85742b961d9b6c6";
+      };
+    }
+    {
+      name = "_iarna_cli___cli_1.2.0.tgz";
+      path = fetchurl {
+        name = "_iarna_cli___cli_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/@iarna/cli/-/cli-1.2.0.tgz";
+        sha1 = "0f7af5e851afe895104583c4ca07377a8094d641";
+      };
+    }
+    {
+      name = "_jimp_bmp___bmp_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_bmp___bmp_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.16.1.tgz";
+        sha1 = "6e2da655b2ba22e721df0795423f34e92ef13768";
+      };
+    }
+    {
+      name = "_jimp_core___core_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_core___core_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/core/-/core-0.16.1.tgz";
+        sha1 = "68c4288f6ef7f31a0f6b859ba3fb28dae930d39d";
+      };
+    }
+    {
+      name = "_jimp_custom___custom_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_custom___custom_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/custom/-/custom-0.16.1.tgz";
+        sha1 = "28b659c59e20a1d75a0c46067bd3f4bd302cf9c5";
+      };
+    }
+    {
+      name = "_jimp_gif___gif_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_gif___gif_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/gif/-/gif-0.16.1.tgz";
+        sha1 = "d1f7c3a58f4666482750933af8b8f4666414f3ca";
+      };
+    }
+    {
+      name = "_jimp_jpeg___jpeg_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_jpeg___jpeg_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/jpeg/-/jpeg-0.16.1.tgz";
+        sha1 = "3b7bb08a4173f2f6d81f3049b251df3ee2ac8175";
+      };
+    }
+    {
+      name = "_jimp_plugin_blit___plugin_blit_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_blit___plugin_blit_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz";
+        sha1 = "09ea919f9d326de3b9c2826fe4155da37dde8edb";
+      };
+    }
+    {
+      name = "_jimp_plugin_blur___plugin_blur_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_blur___plugin_blur_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz";
+        sha1 = "e614fa002797dcd662e705d4cea376e7db968bf5";
+      };
+    }
+    {
+      name = "_jimp_plugin_circle___plugin_circle_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_circle___plugin_circle_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz";
+        sha1 = "20e3194a67ca29740aba2630fd4d0a89afa27491";
+      };
+    }
+    {
+      name = "_jimp_plugin_color___plugin_color_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_color___plugin_color_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-color/-/plugin-color-0.16.1.tgz";
+        sha1 = "0f298ba74dee818b663834cd80d53e56f3755233";
+      };
+    }
+    {
+      name = "_jimp_plugin_contain___plugin_contain_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_contain___plugin_contain_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz";
+        sha1 = "3c5f5c495fd9bb08a970739d83694934f58123f2";
+      };
+    }
+    {
+      name = "_jimp_plugin_cover___plugin_cover_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_cover___plugin_cover_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz";
+        sha1 = "0e8caec16a40abe15b1b32e5383a603a3306dc41";
+      };
+    }
+    {
+      name = "_jimp_plugin_crop___plugin_crop_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_crop___plugin_crop_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz";
+        sha1 = "b362497c873043fe47ba881ab08604bf7226f50f";
+      };
+    }
+    {
+      name = "_jimp_plugin_displace___plugin_displace_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_displace___plugin_displace_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz";
+        sha1 = "4dd9db518c3e78de9d723f86a234bf98922afe8d";
+      };
+    }
+    {
+      name = "_jimp_plugin_dither___plugin_dither_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_dither___plugin_dither_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz";
+        sha1 = "b47de2c0bb09608bed228b41c3cd01a85ec2d45b";
+      };
+    }
+    {
+      name = "_jimp_plugin_fisheye___plugin_fisheye_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_fisheye___plugin_fisheye_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz";
+        sha1 = "f625047b6cdbe1b83b89e9030fd025ab19cdb1a4";
+      };
+    }
+    {
+      name = "_jimp_plugin_flip___plugin_flip_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_flip___plugin_flip_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz";
+        sha1 = "7a99ea22bde802641017ed0f2615870c144329bb";
+      };
+    }
+    {
+      name = "_jimp_plugin_gaussian___plugin_gaussian_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_gaussian___plugin_gaussian_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz";
+        sha1 = "0845e314085ccd52e34fad9a83949bc0d81a68e8";
+      };
+    }
+    {
+      name = "_jimp_plugin_invert___plugin_invert_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_invert___plugin_invert_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz";
+        sha1 = "7e6f5a15707256f3778d06921675bbcf18545c97";
+      };
+    }
+    {
+      name = "_jimp_plugin_mask___plugin_mask_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_mask___plugin_mask_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz";
+        sha1 = "e7f2460e05c3cda7af5e76f33ccb0579f66f90df";
+      };
+    }
+    {
+      name = "_jimp_plugin_normalize___plugin_normalize_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_normalize___plugin_normalize_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz";
+        sha1 = "032dfd88eefbc4dedc8b1b2d243832e4f3af30c8";
+      };
+    }
+    {
+      name = "_jimp_plugin_print___plugin_print_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_print___plugin_print_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-print/-/plugin-print-0.16.1.tgz";
+        sha1 = "66b803563f9d109825970714466e6ab9ae639ff6";
+      };
+    }
+    {
+      name = "_jimp_plugin_resize___plugin_resize_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_resize___plugin_resize_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz";
+        sha1 = "65e39d848ed13ba2d6c6faf81d5d590396571d10";
+      };
+    }
+    {
+      name = "_jimp_plugin_rotate___plugin_rotate_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_rotate___plugin_rotate_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz";
+        sha1 = "53fb5d51a4b3d05af9c91c2a8fffe5d7a1a47c8c";
+      };
+    }
+    {
+      name = "_jimp_plugin_scale___plugin_scale_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_scale___plugin_scale_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz";
+        sha1 = "89f6ba59feed3429847ed226aebda33a240cc647";
+      };
+    }
+    {
+      name = "_jimp_plugin_shadow___plugin_shadow_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_shadow___plugin_shadow_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz";
+        sha1 = "a7af892a740febf41211e10a5467c3c5c521a04c";
+      };
+    }
+    {
+      name = "_jimp_plugin_threshold___plugin_threshold_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugin_threshold___plugin_threshold_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz";
+        sha1 = "34f3078f9965145b7ae26c53a32ad74b1195bbf5";
+      };
+    }
+    {
+      name = "_jimp_plugins___plugins_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_plugins___plugins_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/plugins/-/plugins-0.16.1.tgz";
+        sha1 = "9f08544c97226d6460a16ced79f57e85bec3257b";
+      };
+    }
+    {
+      name = "_jimp_png___png_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_png___png_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/png/-/png-0.16.1.tgz";
+        sha1 = "f24cfc31529900b13a2dd9d4fdb4460c1e4d814e";
+      };
+    }
+    {
+      name = "_jimp_tiff___tiff_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_tiff___tiff_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/tiff/-/tiff-0.16.1.tgz";
+        sha1 = "0e8756695687d7574b6bc73efab0acd4260b7a12";
+      };
+    }
+    {
+      name = "_jimp_types___types_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_types___types_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/types/-/types-0.16.1.tgz";
+        sha1 = "0dbab37b3202315c91010f16c31766d35a2322cc";
+      };
+    }
+    {
+      name = "_jimp_utils___utils_0.16.1.tgz";
+      path = fetchurl {
+        name = "_jimp_utils___utils_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/@jimp/utils/-/utils-0.16.1.tgz";
+        sha1 = "2f51e6f14ff8307c4aa83d5e1a277da14a9fe3f7";
+      };
+    }
+    {
+      name = "_sindresorhus_is___is_0.14.0.tgz";
+      path = fetchurl {
+        name = "_sindresorhus_is___is_0.14.0.tgz";
+        url  = "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz";
+        sha1 = "9fb3a3cf3132328151f353de4632e01e52102bea";
+      };
+    }
+    {
+      name = "_szmarczak_http_timer___http_timer_1.1.2.tgz";
+      path = fetchurl {
+        name = "_szmarczak_http_timer___http_timer_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz";
+        sha1 = "b1665e2c461a2cd92f4c1bbf50d5454de0d4b421";
+      };
+    }
+    {
+      name = "_types_color_name___color_name_1.1.1.tgz";
+      path = fetchurl {
+        name = "_types_color_name___color_name_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz";
+        sha1 = "1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0";
+      };
+    }
+    {
+      name = "_types_debug___debug_4.1.5.tgz";
+      path = fetchurl {
+        name = "_types_debug___debug_4.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz";
+        sha1 = "b14efa8852b7768d898906613c23f688713e02cd";
+      };
+    }
+    {
+      name = "_types_eslint_visitor_keys___eslint_visitor_keys_1.0.0.tgz";
+      path = fetchurl {
+        name = "_types_eslint_visitor_keys___eslint_visitor_keys_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz";
+        sha1 = "1ee30d79544ca84d68d4b3cdb0af4f205663dd2d";
+      };
+    }
+    {
+      name = "_types_fs_extra___fs_extra_9.0.1.tgz";
+      path = fetchurl {
+        name = "_types_fs_extra___fs_extra_9.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.1.tgz";
+        sha1 = "91c8fc4c51f6d5dbe44c2ca9ab09310bd00c7918";
+      };
+    }
+    {
+      name = "_types_json_schema___json_schema_7.0.5.tgz";
+      path = fetchurl {
+        name = "_types_json_schema___json_schema_7.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz";
+        sha1 = "dcce4430e64b443ba8945f0290fb564ad5bac6dd";
+      };
+    }
+    {
+      name = "_types_json5___json5_0.0.29.tgz";
+      path = fetchurl {
+        name = "_types_json5___json5_0.0.29.tgz";
+        url  = "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz";
+        sha1 = "ee28707ae94e11d2b827bcbe5270bcea7f3e71ee";
+      };
+    }
+    {
+      name = "_types_node___node_13.7.1.tgz";
+      path = fetchurl {
+        name = "_types_node___node_13.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/@types/node/-/node-13.7.1.tgz";
+        sha1 = "238eb34a66431b71d2aaddeaa7db166f25971a0d";
+      };
+    }
+    {
+      name = "_types_node___node_14.14.21.tgz";
+      path = fetchurl {
+        name = "_types_node___node_14.14.21.tgz";
+        url  = "https://registry.yarnpkg.com/@types/node/-/node-14.14.21.tgz";
+        sha1 = "d934aacc22424fe9622ebf6857370c052eae464e";
+      };
+    }
+    {
+      name = "_types_yargs_parser___yargs_parser_15.0.0.tgz";
+      path = fetchurl {
+        name = "_types_yargs_parser___yargs_parser_15.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz";
+        sha1 = "cb3f9f741869e20cce330ffbeb9271590483882d";
+      };
+    }
+    {
+      name = "_types_yargs___yargs_15.0.5.tgz";
+      path = fetchurl {
+        name = "_types_yargs___yargs_15.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz";
+        sha1 = "947e9a6561483bdee9adffc983e91a6902af8b79";
+      };
+    }
+    {
+      name = "_typescript_eslint_eslint_plugin___eslint_plugin_3.7.0.tgz";
+      path = fetchurl {
+        name = "_typescript_eslint_eslint_plugin___eslint_plugin_3.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-3.7.0.tgz";
+        sha1 = "0f91aa3c83d019591719e597fbdb73a59595a263";
+      };
+    }
+    {
+      name = "_typescript_eslint_experimental_utils___experimental_utils_3.7.0.tgz";
+      path = fetchurl {
+        name = "_typescript_eslint_experimental_utils___experimental_utils_3.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-3.7.0.tgz";
+        sha1 = "0ee21f6c48b2b30c63211da23827725078d5169a";
+      };
+    }
+    {
+      name = "_typescript_eslint_parser___parser_3.7.0.tgz";
+      path = fetchurl {
+        name = "_typescript_eslint_parser___parser_3.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-3.7.0.tgz";
+        sha1 = "3e9cd9df9ea644536feb6e5acdb8279ecff96ce9";
+      };
+    }
+    {
+      name = "_typescript_eslint_types___types_3.7.0.tgz";
+      path = fetchurl {
+        name = "_typescript_eslint_types___types_3.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-3.7.0.tgz";
+        sha1 = "09897fab0cb95479c01166b10b2c03c224821077";
+      };
+    }
+    {
+      name = "_typescript_eslint_typescript_estree___typescript_estree_3.7.0.tgz";
+      path = fetchurl {
+        name = "_typescript_eslint_typescript_estree___typescript_estree_3.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-3.7.0.tgz";
+        sha1 = "66872e6da120caa4b64e6b4ca5c8702afc74738d";
+      };
+    }
+    {
+      name = "_typescript_eslint_visitor_keys___visitor_keys_3.7.0.tgz";
+      path = fetchurl {
+        name = "_typescript_eslint_visitor_keys___visitor_keys_3.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-3.7.0.tgz";
+        sha1 = "ac0417d382a136e4571a0b0dcfe52088cb628177";
+      };
+    }
+    {
+      name = "JSONStream___JSONStream_1.3.5.tgz";
+      path = fetchurl {
+        name = "JSONStream___JSONStream_1.3.5.tgz";
+        url  = "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz";
+        sha1 = "3208c1f08d3a4d99261ab64f92302bc15e111ca0";
+      };
+    }
+    {
+      name = "abbrev___abbrev_1.1.1.tgz";
+      path = fetchurl {
+        name = "abbrev___abbrev_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz";
+        sha1 = "f8f2c887ad10bf67f634f005b6987fed3179aac8";
+      };
+    }
+    {
+      name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+      path = fetchurl {
+        name = "acorn_jsx___acorn_jsx_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz";
+        sha1 = "4c66069173d6fdd68ed85239fc256226182b2ebe";
+      };
+    }
+    {
+      name = "acorn___acorn_7.3.1.tgz";
+      path = fetchurl {
+        name = "acorn___acorn_7.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz";
+        sha1 = "85010754db53c3fbaf3b9ea3e083aa5c5d147ffd";
+      };
+    }
+    {
+      name = "agent_base___agent_base_4.3.0.tgz";
+      path = fetchurl {
+        name = "agent_base___agent_base_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz";
+        sha1 = "8165f01c436009bccad0b1d122f05ed770efc6ee";
+      };
+    }
+    {
+      name = "agent_base___agent_base_4.2.1.tgz";
+      path = fetchurl {
+        name = "agent_base___agent_base_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz";
+        sha1 = "d89e5999f797875674c07d87f260fc41e83e8ca9";
+      };
+    }
+    {
+      name = "agentkeepalive___agentkeepalive_3.5.2.tgz";
+      path = fetchurl {
+        name = "agentkeepalive___agentkeepalive_3.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.2.tgz";
+        sha1 = "a113924dd3fa24a0bc3b78108c450c2abee00f67";
+      };
+    }
+    {
+      name = "ajv_keywords___ajv_keywords_3.4.1.tgz";
+      path = fetchurl {
+        name = "ajv_keywords___ajv_keywords_3.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz";
+        sha1 = "ef916e271c64ac12171fd8384eaae6b2345854da";
+      };
+    }
+    {
+      name = "ajv___ajv_6.12.3.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.12.3.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz";
+        sha1 = "18c5af38a111ddeb4f2697bd78d68abc1cabd706";
+      };
+    }
+    {
+      name = "ajv___ajv_6.10.2.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.10.2.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz";
+        sha1 = "d3cea04d6b017b2894ad69040fec8b623eb4bd52";
+      };
+    }
+    {
+      name = "ajv___ajv_6.12.2.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.12.2.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz";
+        sha1 = "c629c5eced17baf314437918d2da88c99d5958cd";
+      };
+    }
+    {
+      name = "ajv___ajv_6.12.6.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.12.6.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz";
+        sha1 = "baf5a62e802b07d977034586f8c3baf5adf26df4";
+      };
+    }
+    {
+      name = "ajv___ajv_6.12.5.tgz";
+      path = fetchurl {
+        name = "ajv___ajv_6.12.5.tgz";
+        url  = "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz";
+        sha1 = "19b0e8bae8f476e5ba666300387775fb1a00a4da";
+      };
+    }
+    {
+      name = "ansi_align___ansi_align_2.0.0.tgz";
+      path = fetchurl {
+        name = "ansi_align___ansi_align_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz";
+        sha1 = "c36aeccba563b89ceb556f3690f0b1d9e3547f7f";
+      };
+    }
+    {
+      name = "ansi_align___ansi_align_3.0.0.tgz";
+      path = fetchurl {
+        name = "ansi_align___ansi_align_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz";
+        sha1 = "b536b371cf687caaef236c18d3e21fe3797467cb";
+      };
+    }
+    {
+      name = "ansi_colors___ansi_colors_4.1.1.tgz";
+      path = fetchurl {
+        name = "ansi_colors___ansi_colors_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz";
+        sha1 = "cbb9ae256bf750af1eab344f229aa27fe94ba348";
+      };
+    }
+    {
+      name = "ansi_escapes___ansi_escapes_4.3.1.tgz";
+      path = fetchurl {
+        name = "ansi_escapes___ansi_escapes_4.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz";
+        sha1 = "a5c47cc43181f1f38ffd7076837700d395522a61";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_2.1.1.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_3.0.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz";
+        sha1 = "ed0317c322064f79466c02966bddb605ab37d998";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_4.1.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz";
+        sha1 = "8b9f8f08cf1acb843756a839ca8c7e3168c51997";
+      };
+    }
+    {
+      name = "ansi_regex___ansi_regex_5.0.0.tgz";
+      path = fetchurl {
+        name = "ansi_regex___ansi_regex_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz";
+        sha1 = "388539f55179bf39339c81af30a654d69f87cb75";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_3.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz";
+        sha1 = "41fbb20243e50b12be0f04b8dedbf07520ce841d";
+      };
+    }
+    {
+      name = "ansi_styles___ansi_styles_4.2.1.tgz";
+      path = fetchurl {
+        name = "ansi_styles___ansi_styles_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz";
+        sha1 = "90ae75c424d008d2624c5bf29ead3177ebfcf359";
+      };
+    }
+    {
+      name = "ansicolors___ansicolors_0.3.2.tgz";
+      path = fetchurl {
+        name = "ansicolors___ansicolors_0.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz";
+        sha1 = "665597de86a9ffe3aa9bfbe6cae5c6ea426b4979";
+      };
+    }
+    {
+      name = "ansistyles___ansistyles_0.1.3.tgz";
+      path = fetchurl {
+        name = "ansistyles___ansistyles_0.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/ansistyles/-/ansistyles-0.1.3.tgz";
+        sha1 = "5de60415bda071bb37127854c864f41b23254539";
+      };
+    }
+    {
+      name = "any_base___any_base_1.1.0.tgz";
+      path = fetchurl {
+        name = "any_base___any_base_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/any-base/-/any-base-1.1.0.tgz";
+        sha1 = "ae101a62bc08a597b4c9ab5b7089d456630549fe";
+      };
+    }
+    {
+      name = "app_builder_bin___app_builder_bin_3.5.10.tgz";
+      path = fetchurl {
+        name = "app_builder_bin___app_builder_bin_3.5.10.tgz";
+        url  = "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-3.5.10.tgz";
+        sha1 = "4a7f9999fccc0c435b6284ae1366bc76a17c4a7d";
+      };
+    }
+    {
+      name = "app_builder_lib___app_builder_lib_22.9.1.tgz";
+      path = fetchurl {
+        name = "app_builder_lib___app_builder_lib_22.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-22.9.1.tgz";
+        sha1 = "ccb8f1a02b628514a5dfab9401fa2a976689415c";
+      };
+    }
+    {
+      name = "applescript___applescript_1.0.0.tgz";
+      path = fetchurl {
+        name = "applescript___applescript_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz";
+        sha1 = "bb87af568cad034a4e48c4bdaf6067a3a2701317";
+      };
+    }
+    {
+      name = "aproba___aproba_1.2.0.tgz";
+      path = fetchurl {
+        name = "aproba___aproba_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz";
+        sha1 = "6802e6264efd18c790a1b0d517f0f2627bf2c94a";
+      };
+    }
+    {
+      name = "aproba___aproba_2.0.0.tgz";
+      path = fetchurl {
+        name = "aproba___aproba_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz";
+        sha1 = "52520b8ae5b569215b354efc0caa3fe1e45a8adc";
+      };
+    }
+    {
+      name = "archiver_utils___archiver_utils_2.1.0.tgz";
+      path = fetchurl {
+        name = "archiver_utils___archiver_utils_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz";
+        sha1 = "e8a460e94b693c3e3da182a098ca6285ba9249e2";
+      };
+    }
+    {
+      name = "archiver___archiver_5.2.0.tgz";
+      path = fetchurl {
+        name = "archiver___archiver_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/archiver/-/archiver-5.2.0.tgz";
+        sha1 = "25aa1b3d9febf7aec5b0f296e77e69960c26db94";
+      };
+    }
+    {
+      name = "archy___archy_1.0.0.tgz";
+      path = fetchurl {
+        name = "archy___archy_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz";
+        sha1 = "f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40";
+      };
+    }
+    {
+      name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz";
+      path = fetchurl {
+        name = "are_we_there_yet___are_we_there_yet_1.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
+        sha1 = "4b35c2944f062a8bfcda66410760350fe9ddfc21";
+      };
+    }
+    {
+      name = "argparse___argparse_1.0.10.tgz";
+      path = fetchurl {
+        name = "argparse___argparse_1.0.10.tgz";
+        url  = "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz";
+        sha1 = "bcd6791ea5ae09725e17e5ad988134cd40b3d911";
+      };
+    }
+    {
+      name = "array_includes___array_includes_3.1.1.tgz";
+      path = fetchurl {
+        name = "array_includes___array_includes_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz";
+        sha1 = "cdd67e6852bdf9c1215460786732255ed2459348";
+      };
+    }
+    {
+      name = "array.prototype.flat___array.prototype.flat_1.2.3.tgz";
+      path = fetchurl {
+        name = "array.prototype.flat___array.prototype.flat_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz";
+        sha1 = "0de82b426b0318dbfdb940089e38b043d37f6c7b";
+      };
+    }
+    {
+      name = "array.prototype.flatmap___array.prototype.flatmap_1.2.3.tgz";
+      path = fetchurl {
+        name = "array.prototype.flatmap___array.prototype.flatmap_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz";
+        sha1 = "1c13f84a178566042dd63de4414440db9222e443";
+      };
+    }
+    {
+      name = "asap___asap_2.0.6.tgz";
+      path = fetchurl {
+        name = "asap___asap_2.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz";
+        sha1 = "e50347611d7e690943208bbdafebcbc2fb866d46";
+      };
+    }
+    {
+      name = "asar___asar_2.0.1.tgz";
+      path = fetchurl {
+        name = "asar___asar_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/asar/-/asar-2.0.1.tgz";
+        sha1 = "8518a1c62c238109c15a5f742213e83a09b9fd38";
+      };
+    }
+    {
+      name = "asn1___asn1_0.2.4.tgz";
+      path = fetchurl {
+        name = "asn1___asn1_0.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz";
+        sha1 = "8d2475dfab553bb33e77b54e59e880bb8ce23136";
+      };
+    }
+    {
+      name = "assert_plus___assert_plus_1.0.0.tgz";
+      path = fetchurl {
+        name = "assert_plus___assert_plus_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    }
+    {
+      name = "astral_regex___astral_regex_1.0.0.tgz";
+      path = fetchurl {
+        name = "astral_regex___astral_regex_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz";
+        sha1 = "6c8c3fb827dd43ee3918f27b82782ab7658a6fd9";
+      };
+    }
+    {
+      name = "async_exit_hook___async_exit_hook_2.0.1.tgz";
+      path = fetchurl {
+        name = "async_exit_hook___async_exit_hook_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/async-exit-hook/-/async-exit-hook-2.0.1.tgz";
+        sha1 = "8bd8b024b0ec9b1c01cccb9af9db29bd717dfaf3";
+      };
+    }
+    {
+      name = "async___async_0.9.2.tgz";
+      path = fetchurl {
+        name = "async___async_0.9.2.tgz";
+        url  = "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz";
+        sha1 = "aea74d5e61c1f899613bf64bda66d4c78f2fd17d";
+      };
+    }
+    {
+      name = "async___async_3.2.0.tgz";
+      path = fetchurl {
+        name = "async___async_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz";
+        sha1 = "b3a2685c5ebb641d3de02d161002c60fc9f85720";
+      };
+    }
+    {
+      name = "asynckit___asynckit_0.4.0.tgz";
+      path = fetchurl {
+        name = "asynckit___asynckit_0.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    }
+    {
+      name = "at_least_node___at_least_node_1.0.0.tgz";
+      path = fetchurl {
+        name = "at_least_node___at_least_node_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz";
+        sha1 = "602cd4b46e844ad4effc92a8011a3c46e0238dc2";
+      };
+    }
+    {
+      name = "atomically___atomically_1.7.0.tgz";
+      path = fetchurl {
+        name = "atomically___atomically_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz";
+        sha1 = "c07a0458432ea6dbc9a3506fffa424b48bccaafe";
+      };
+    }
+    {
+      name = "auto_launch___auto_launch_5.0.5.tgz";
+      path = fetchurl {
+        name = "auto_launch___auto_launch_5.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/auto-launch/-/auto-launch-5.0.5.tgz";
+        sha1 = "d14bd002b1ef642f85e991a6195ff5300c8ad3c0";
+      };
+    }
+    {
+      name = "aws_sign2___aws_sign2_0.7.0.tgz";
+      path = fetchurl {
+        name = "aws_sign2___aws_sign2_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    }
+    {
+      name = "aws4___aws4_1.9.0.tgz";
+      path = fetchurl {
+        name = "aws4___aws4_1.9.0.tgz";
+        url  = "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz";
+        sha1 = "24390e6ad61386b0a747265754d2a17219de862c";
+      };
+    }
+    {
+      name = "babel_eslint___babel_eslint_10.1.0.tgz";
+      path = fetchurl {
+        name = "babel_eslint___babel_eslint_10.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz";
+        sha1 = "6968e568a910b78fb3779cdd8b6ac2f479943232";
+      };
+    }
+    {
+      name = "balanced_match___balanced_match_1.0.0.tgz";
+      path = fetchurl {
+        name = "balanced_match___balanced_match_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    }
+    {
+      name = "base64_js___base64_js_1.3.1.tgz";
+      path = fetchurl {
+        name = "base64_js___base64_js_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz";
+        sha1 = "58ece8cb75dd07e71ed08c736abc5fac4dbf8df1";
+      };
+    }
+    {
+      name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz";
+      path = fetchurl {
+        name = "bcrypt_pbkdf___bcrypt_pbkdf_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+      };
+    }
+    {
+      name = "bin_links___bin_links_1.1.7.tgz";
+      path = fetchurl {
+        name = "bin_links___bin_links_1.1.7.tgz";
+        url  = "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.7.tgz";
+        sha1 = "34b79ea9d0e575d7308afeff0c6b2fc24c793359";
+      };
+    }
+    {
+      name = "bin_links___bin_links_1.1.8.tgz";
+      path = fetchurl {
+        name = "bin_links___bin_links_1.1.8.tgz";
+        url  = "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.8.tgz";
+        sha1 = "bd39aadab5dc4bdac222a07df5baf1af745b2228";
+      };
+    }
+    {
+      name = "bl___bl_4.0.3.tgz";
+      path = fetchurl {
+        name = "bl___bl_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/bl/-/bl-4.0.3.tgz";
+        sha1 = "12d6287adc29080e22a705e5764b2a9522cdc489";
+      };
+    }
+    {
+      name = "bluebird_lst___bluebird_lst_1.0.9.tgz";
+      path = fetchurl {
+        name = "bluebird_lst___bluebird_lst_1.0.9.tgz";
+        url  = "https://registry.yarnpkg.com/bluebird-lst/-/bluebird-lst-1.0.9.tgz";
+        sha1 = "a64a0e4365658b9ab5fe875eb9dfb694189bb41c";
+      };
+    }
+    {
+      name = "bluebird___bluebird_3.7.2.tgz";
+      path = fetchurl {
+        name = "bluebird___bluebird_3.7.2.tgz";
+        url  = "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz";
+        sha1 = "9f229c15be272454ffa973ace0dbee79a1b0c36f";
+      };
+    }
+    {
+      name = "bmp_js___bmp_js_0.1.0.tgz";
+      path = fetchurl {
+        name = "bmp_js___bmp_js_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz";
+        sha1 = "e05a63f796a6c1ff25f4771ec7adadc148c07233";
+      };
+    }
+    {
+      name = "boxen___boxen_1.3.0.tgz";
+      path = fetchurl {
+        name = "boxen___boxen_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz";
+        sha1 = "55c6c39a8ba58d9c61ad22cd877532deb665a20b";
+      };
+    }
+    {
+      name = "boxen___boxen_4.2.0.tgz";
+      path = fetchurl {
+        name = "boxen___boxen_4.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz";
+        sha1 = "e411b62357d6d6d36587c8ac3d5d974daa070e64";
+      };
+    }
+    {
+      name = "brace_expansion___brace_expansion_1.1.11.tgz";
+      path = fetchurl {
+        name = "brace_expansion___brace_expansion_1.1.11.tgz";
+        url  = "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha1 = "3c7fcbf529d87226f3d2f52b966ff5271eb441dd";
+      };
+    }
+    {
+      name = "buffer_crc32___buffer_crc32_0.2.13.tgz";
+      path = fetchurl {
+        name = "buffer_crc32___buffer_crc32_0.2.13.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz";
+        sha1 = "0d333e3f00eac50aa1454abd30ef8c2a5d9a7242";
+      };
+    }
+    {
+      name = "buffer_equal___buffer_equal_0.0.1.tgz";
+      path = fetchurl {
+        name = "buffer_equal___buffer_equal_0.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz";
+        sha1 = "91bc74b11ea405bc916bc6aa908faafa5b4aac4b";
+      };
+    }
+    {
+      name = "buffer_from___buffer_from_1.1.1.tgz";
+      path = fetchurl {
+        name = "buffer_from___buffer_from_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz";
+        sha1 = "32713bc028f75c02fdb710d7c7bcec1f2c6070ef";
+      };
+    }
+    {
+      name = "buffer___buffer_5.6.0.tgz";
+      path = fetchurl {
+        name = "buffer___buffer_5.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/buffer/-/buffer-5.6.0.tgz";
+        sha1 = "a31749dc7d81d84db08abf937b6b8c4033f62786";
+      };
+    }
+    {
+      name = "builder_util_runtime___builder_util_runtime_8.7.2.tgz";
+      path = fetchurl {
+        name = "builder_util_runtime___builder_util_runtime_8.7.2.tgz";
+        url  = "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.7.2.tgz";
+        sha1 = "d93afc71428a12789b437e13850e1fa7da956d72";
+      };
+    }
+    {
+      name = "builder_util___builder_util_22.9.1.tgz";
+      path = fetchurl {
+        name = "builder_util___builder_util_22.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/builder-util/-/builder-util-22.9.1.tgz";
+        sha1 = "b7087a5cde477f90d718ca5d7fafb6ae261b16af";
+      };
+    }
+    {
+      name = "builtins___builtins_1.0.3.tgz";
+      path = fetchurl {
+        name = "builtins___builtins_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz";
+        sha1 = "cb94faeb61c8696451db36534e1422f94f0aee88";
+      };
+    }
+    {
+      name = "byline___byline_5.0.0.tgz";
+      path = fetchurl {
+        name = "byline___byline_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz";
+        sha1 = "741c5216468eadc457b03410118ad77de8c1ddb1";
+      };
+    }
+    {
+      name = "byte_size___byte_size_5.0.1.tgz";
+      path = fetchurl {
+        name = "byte_size___byte_size_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/byte-size/-/byte-size-5.0.1.tgz";
+        sha1 = "4b651039a5ecd96767e71a3d7ed380e48bed4191";
+      };
+    }
+    {
+      name = "cacache___cacache_12.0.3.tgz";
+      path = fetchurl {
+        name = "cacache___cacache_12.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz";
+        sha1 = "be99abba4e1bf5df461cd5a2c1071fc432573390";
+      };
+    }
+    {
+      name = "cacheable_request___cacheable_request_6.1.0.tgz";
+      path = fetchurl {
+        name = "cacheable_request___cacheable_request_6.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz";
+        sha1 = "20ffb8bd162ba4be11e9567d823db651052ca912";
+      };
+    }
+    {
+      name = "call_limit___call_limit_1.1.1.tgz";
+      path = fetchurl {
+        name = "call_limit___call_limit_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/call-limit/-/call-limit-1.1.1.tgz";
+        sha1 = "ef15f2670db3f1992557e2d965abc459e6e358d4";
+      };
+    }
+    {
+      name = "callsites___callsites_3.1.0.tgz";
+      path = fetchurl {
+        name = "callsites___callsites_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz";
+        sha1 = "b3630abd8943432f54b3f0519238e33cd7df2f73";
+      };
+    }
+    {
+      name = "camelcase___camelcase_4.1.0.tgz";
+      path = fetchurl {
+        name = "camelcase___camelcase_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz";
+        sha1 = "d545635be1e33c542649c69173e5de6acfae34dd";
+      };
+    }
+    {
+      name = "camelcase___camelcase_5.3.1.tgz";
+      path = fetchurl {
+        name = "camelcase___camelcase_5.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz";
+        sha1 = "e3c9b31569e106811df242f715725a1f4c494320";
+      };
+    }
+    {
+      name = "capture_stack_trace___capture_stack_trace_1.0.1.tgz";
+      path = fetchurl {
+        name = "capture_stack_trace___capture_stack_trace_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz";
+        sha1 = "a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d";
+      };
+    }
+    {
+      name = "caseless___caseless_0.12.0.tgz";
+      path = fetchurl {
+        name = "caseless___caseless_0.12.0.tgz";
+        url  = "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    }
+    {
+      name = "chalk___chalk_2.4.2.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_2.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz";
+        sha1 = "cd42541677a54333cf541a49108c1432b44c9424";
+      };
+    }
+    {
+      name = "chalk___chalk_3.0.0.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz";
+        sha1 = "3f73c2bf526591f574cc492c51e2456349f844e4";
+      };
+    }
+    {
+      name = "chalk___chalk_4.1.0.tgz";
+      path = fetchurl {
+        name = "chalk___chalk_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz";
+        sha1 = "4e14870a618d9e2edd97dd8345fd9d9dc315646a";
+      };
+    }
+    {
+      name = "chardet___chardet_0.7.0.tgz";
+      path = fetchurl {
+        name = "chardet___chardet_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz";
+        sha1 = "90094849f0937f2eedc2425d0d28a9e5f0cbad9e";
+      };
+    }
+    {
+      name = "chownr___chownr_1.1.4.tgz";
+      path = fetchurl {
+        name = "chownr___chownr_1.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz";
+        sha1 = "6fc9d7b42d32a583596337666e7d08084da2cc6b";
+      };
+    }
+    {
+      name = "chownr___chownr_2.0.0.tgz";
+      path = fetchurl {
+        name = "chownr___chownr_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz";
+        sha1 = "15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece";
+      };
+    }
+    {
+      name = "chromium_pickle_js___chromium_pickle_js_0.2.0.tgz";
+      path = fetchurl {
+        name = "chromium_pickle_js___chromium_pickle_js_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz";
+        sha1 = "04a106672c18b085ab774d983dfa3ea138f22205";
+      };
+    }
+    {
+      name = "ci_info___ci_info_1.6.0.tgz";
+      path = fetchurl {
+        name = "ci_info___ci_info_1.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz";
+        sha1 = "2ca20dbb9ceb32d4524a683303313f0304b1e497";
+      };
+    }
+    {
+      name = "ci_info___ci_info_2.0.0.tgz";
+      path = fetchurl {
+        name = "ci_info___ci_info_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz";
+        sha1 = "67a9e964be31a51e15e5010d58e6f12834002f46";
+      };
+    }
+    {
+      name = "cidr_regex___cidr_regex_2.0.10.tgz";
+      path = fetchurl {
+        name = "cidr_regex___cidr_regex_2.0.10.tgz";
+        url  = "https://registry.yarnpkg.com/cidr-regex/-/cidr-regex-2.0.10.tgz";
+        sha1 = "af13878bd4ad704de77d6dc800799358b3afa70d";
+      };
+    }
+    {
+      name = "cli_boxes___cli_boxes_1.0.0.tgz";
+      path = fetchurl {
+        name = "cli_boxes___cli_boxes_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz";
+        sha1 = "4fa917c3e59c94a004cd61f8ee509da651687143";
+      };
+    }
+    {
+      name = "cli_boxes___cli_boxes_2.2.0.tgz";
+      path = fetchurl {
+        name = "cli_boxes___cli_boxes_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz";
+        sha1 = "538ecae8f9c6ca508e3c3c95b453fe93cb4c168d";
+      };
+    }
+    {
+      name = "cli_columns___cli_columns_3.1.2.tgz";
+      path = fetchurl {
+        name = "cli_columns___cli_columns_3.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/cli-columns/-/cli-columns-3.1.2.tgz";
+        sha1 = "6732d972979efc2ae444a1f08e08fa139c96a18e";
+      };
+    }
+    {
+      name = "cli_cursor___cli_cursor_3.1.0.tgz";
+      path = fetchurl {
+        name = "cli_cursor___cli_cursor_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz";
+        sha1 = "264305a7ae490d1d03bf0c9ba7c925d1753af307";
+      };
+    }
+    {
+      name = "cli_table3___cli_table3_0.5.1.tgz";
+      path = fetchurl {
+        name = "cli_table3___cli_table3_0.5.1.tgz";
+        url  = "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz";
+        sha1 = "0252372d94dfc40dbd8df06005f48f31f656f202";
+      };
+    }
+    {
+      name = "cli_width___cli_width_3.0.0.tgz";
+      path = fetchurl {
+        name = "cli_width___cli_width_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz";
+        sha1 = "a2f48437a2caa9a22436e794bf071ec9e61cedf6";
+      };
+    }
+    {
+      name = "cliui___cliui_3.2.0.tgz";
+      path = fetchurl {
+        name = "cliui___cliui_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz";
+        sha1 = "120601537a916d29940f934da3b48d585a39213d";
+      };
+    }
+    {
+      name = "cliui___cliui_5.0.0.tgz";
+      path = fetchurl {
+        name = "cliui___cliui_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz";
+        sha1 = "deefcfdb2e800784aa34f46fa08e06851c7bbbc5";
+      };
+    }
+    {
+      name = "cliui___cliui_7.0.4.tgz";
+      path = fetchurl {
+        name = "cliui___cliui_7.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz";
+        sha1 = "a0265ee655476fc807aea9df3df8df7783808b4f";
+      };
+    }
+    {
+      name = "clone_response___clone_response_1.0.2.tgz";
+      path = fetchurl {
+        name = "clone_response___clone_response_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz";
+        sha1 = "d1dc973920314df67fbeb94223b4ee350239e96b";
+      };
+    }
+    {
+      name = "clone___clone_1.0.4.tgz";
+      path = fetchurl {
+        name = "clone___clone_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz";
+        sha1 = "da309cc263df15994c688ca902179ca3c7cd7c7e";
+      };
+    }
+    {
+      name = "cmd_shim___cmd_shim_3.0.3.tgz";
+      path = fetchurl {
+        name = "cmd_shim___cmd_shim_3.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz";
+        sha1 = "2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb";
+      };
+    }
+    {
+      name = "code_point_at___code_point_at_1.1.0.tgz";
+      path = fetchurl {
+        name = "code_point_at___code_point_at_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+      };
+    }
+    {
+      name = "color_convert___color_convert_1.9.3.tgz";
+      path = fetchurl {
+        name = "color_convert___color_convert_1.9.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz";
+        sha1 = "bb71850690e1f136567de629d2d5471deda4c1e8";
+      };
+    }
+    {
+      name = "color_convert___color_convert_2.0.1.tgz";
+      path = fetchurl {
+        name = "color_convert___color_convert_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz";
+        sha1 = "72d3a68d598c9bdb3af2ad1e84f21d896abd4de3";
+      };
+    }
+    {
+      name = "color_name___color_name_1.1.3.tgz";
+      path = fetchurl {
+        name = "color_name___color_name_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz";
+        sha1 = "a7d0558bd89c42f795dd42328f740831ca53bc25";
+      };
+    }
+    {
+      name = "color_name___color_name_1.1.4.tgz";
+      path = fetchurl {
+        name = "color_name___color_name_1.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz";
+        sha1 = "c2a09a87acbde69543de6f63fa3995c826c536a2";
+      };
+    }
+    {
+      name = "colors___colors_1.4.0.tgz";
+      path = fetchurl {
+        name = "colors___colors_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz";
+        sha1 = "c50491479d4c1bdaed2c9ced32cf7c7dc2360f78";
+      };
+    }
+    {
+      name = "columnify___columnify_1.5.4.tgz";
+      path = fetchurl {
+        name = "columnify___columnify_1.5.4.tgz";
+        url  = "https://registry.yarnpkg.com/columnify/-/columnify-1.5.4.tgz";
+        sha1 = "4737ddf1c7b69a8a7c340570782e947eec8e78bb";
+      };
+    }
+    {
+      name = "combined_stream___combined_stream_1.0.8.tgz";
+      path = fetchurl {
+        name = "combined_stream___combined_stream_1.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha1 = "c3d45a8b34fd730631a110a8a2520682b31d5a7f";
+      };
+    }
+    {
+      name = "commander___commander_2.20.3.tgz";
+      path = fetchurl {
+        name = "commander___commander_2.20.3.tgz";
+        url  = "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz";
+        sha1 = "fd485e84c03eb4881c20722ba48035e8531aeb33";
+      };
+    }
+    {
+      name = "compress_commons___compress_commons_4.0.2.tgz";
+      path = fetchurl {
+        name = "compress_commons___compress_commons_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.0.2.tgz";
+        sha1 = "d6896be386e52f37610cef9e6fa5defc58c31bd7";
+      };
+    }
+    {
+      name = "concat_map___concat_map_0.0.1.tgz";
+      path = fetchurl {
+        name = "concat_map___concat_map_0.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    }
+    {
+      name = "concat_stream___concat_stream_1.6.2.tgz";
+      path = fetchurl {
+        name = "concat_stream___concat_stream_1.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz";
+        sha1 = "904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34";
+      };
+    }
+    {
+      name = "conf___conf_7.1.2.tgz";
+      path = fetchurl {
+        name = "conf___conf_7.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/conf/-/conf-7.1.2.tgz";
+        sha1 = "d9678a9d8f04de8bf5cd475105da8fdae49c2ec4";
+      };
+    }
+    {
+      name = "config_chain___config_chain_1.1.12.tgz";
+      path = fetchurl {
+        name = "config_chain___config_chain_1.1.12.tgz";
+        url  = "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz";
+        sha1 = "0fde8d091200eb5e808caf25fe618c02f48e4efa";
+      };
+    }
+    {
+      name = "configstore___configstore_3.1.2.tgz";
+      path = fetchurl {
+        name = "configstore___configstore_3.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz";
+        sha1 = "c6f25defaeef26df12dd33414b001fe81a543f8f";
+      };
+    }
+    {
+      name = "configstore___configstore_5.0.1.tgz";
+      path = fetchurl {
+        name = "configstore___configstore_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz";
+        sha1 = "d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96";
+      };
+    }
+    {
+      name = "console_control_strings___console_control_strings_1.1.0.tgz";
+      path = fetchurl {
+        name = "console_control_strings___console_control_strings_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz";
+        sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
+      };
+    }
+    {
+      name = "contains_path___contains_path_0.1.0.tgz";
+      path = fetchurl {
+        name = "contains_path___contains_path_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz";
+        sha1 = "fe8cf184ff6670b6baef01a9d4861a5cbec4120a";
+      };
+    }
+    {
+      name = "copy_concurrently___copy_concurrently_1.0.5.tgz";
+      path = fetchurl {
+        name = "copy_concurrently___copy_concurrently_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz";
+        sha1 = "92297398cae34937fcafd6ec8139c18051f0b5e0";
+      };
+    }
+    {
+      name = "core_util_is___core_util_is_1.0.2.tgz";
+      path = fetchurl {
+        name = "core_util_is___core_util_is_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    }
+    {
+      name = "crc_32___crc_32_1.2.0.tgz";
+      path = fetchurl {
+        name = "crc_32___crc_32_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz";
+        sha1 = "cb2db6e29b88508e32d9dd0ec1693e7b41a18208";
+      };
+    }
+    {
+      name = "crc32_stream___crc32_stream_4.0.1.tgz";
+      path = fetchurl {
+        name = "crc32_stream___crc32_stream_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.1.tgz";
+        sha1 = "0f047d74041737f8a55e86837a1b826bd8ab0067";
+      };
+    }
+    {
+      name = "create_error_class___create_error_class_3.0.2.tgz";
+      path = fetchurl {
+        name = "create_error_class___create_error_class_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz";
+        sha1 = "06be7abef947a3f14a30fd610671d401bca8b7b6";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_5.1.0.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz";
+        sha1 = "e8bd0efee58fcff6f8f94510a0a554bbfa235449";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_6.0.5.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_6.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz";
+        sha1 = "4a5ec7c64dfae22c3a14124dbacdee846d80cbc4";
+      };
+    }
+    {
+      name = "cross_spawn___cross_spawn_7.0.3.tgz";
+      path = fetchurl {
+        name = "cross_spawn___cross_spawn_7.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz";
+        sha1 = "f73a85b9d5d41d045551c177e2882d4ac85728a6";
+      };
+    }
+    {
+      name = "crypto_random_string___crypto_random_string_1.0.0.tgz";
+      path = fetchurl {
+        name = "crypto_random_string___crypto_random_string_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz";
+        sha1 = "a230f64f568310e1498009940790ec99545bca7e";
+      };
+    }
+    {
+      name = "crypto_random_string___crypto_random_string_2.0.0.tgz";
+      path = fetchurl {
+        name = "crypto_random_string___crypto_random_string_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz";
+        sha1 = "ef2a7a966ec11083388369baa02ebead229b30d5";
+      };
+    }
+    {
+      name = "cuint___cuint_0.2.2.tgz";
+      path = fetchurl {
+        name = "cuint___cuint_0.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz";
+        sha1 = "408086d409550c2631155619e9fa7bcadc3b991b";
+      };
+    }
+    {
+      name = "cyclist___cyclist_1.0.1.tgz";
+      path = fetchurl {
+        name = "cyclist___cyclist_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz";
+        sha1 = "596e9698fd0c80e12038c2b82d6eb1b35b6224d9";
+      };
+    }
+    {
+      name = "dashdash___dashdash_1.14.1.tgz";
+      path = fetchurl {
+        name = "dashdash___dashdash_1.14.1.tgz";
+        url  = "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    }
+    {
+      name = "debounce_fn___debounce_fn_4.0.0.tgz";
+      path = fetchurl {
+        name = "debounce_fn___debounce_fn_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz";
+        sha1 = "ed76d206d8a50e60de0dd66d494d82835ffe61c7";
+      };
+    }
+    {
+      name = "debug___debug_3.1.0.tgz";
+      path = fetchurl {
+        name = "debug___debug_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz";
+        sha1 = "5bb5a0672628b64149566ba16819e61518c67261";
+      };
+    }
+    {
+      name = "debug___debug_2.6.9.tgz";
+      path = fetchurl {
+        name = "debug___debug_2.6.9.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz";
+        sha1 = "5d128515df134ff327e90a4c93f4e077a536341f";
+      };
+    }
+    {
+      name = "debug___debug_3.2.6.tgz";
+      path = fetchurl {
+        name = "debug___debug_3.2.6.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz";
+        sha1 = "e83d17de16d8a7efb7717edbe5fb10135eee629b";
+      };
+    }
+    {
+      name = "debug___debug_4.1.1.tgz";
+      path = fetchurl {
+        name = "debug___debug_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz";
+        sha1 = "3b72260255109c6b589cee050f1d516139664791";
+      };
+    }
+    {
+      name = "debug___debug_4.3.1.tgz";
+      path = fetchurl {
+        name = "debug___debug_4.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz";
+        sha1 = "f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee";
+      };
+    }
+    {
+      name = "debuglog___debuglog_1.0.1.tgz";
+      path = fetchurl {
+        name = "debuglog___debuglog_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz";
+        sha1 = "aa24ffb9ac3df9a2351837cfb2d279360cd78492";
+      };
+    }
+    {
+      name = "decamelize___decamelize_1.2.0.tgz";
+      path = fetchurl {
+        name = "decamelize___decamelize_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz";
+        sha1 = "f6534d15148269b20352e7bee26f501f9a191290";
+      };
+    }
+    {
+      name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+      path = fetchurl {
+        name = "decode_uri_component___decode_uri_component_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz";
+        sha1 = "eb3913333458775cb84cd1a1fae062106bb87545";
+      };
+    }
+    {
+      name = "decompress_response___decompress_response_3.3.0.tgz";
+      path = fetchurl {
+        name = "decompress_response___decompress_response_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz";
+        sha1 = "80a4dd323748384bfa248083622aedec982adff3";
+      };
+    }
+    {
+      name = "deep_extend___deep_extend_0.6.0.tgz";
+      path = fetchurl {
+        name = "deep_extend___deep_extend_0.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz";
+        sha1 = "c4fa7c95404a17a9c3e8ca7e1537312b736330ac";
+      };
+    }
+    {
+      name = "deep_is___deep_is_0.1.3.tgz";
+      path = fetchurl {
+        name = "deep_is___deep_is_0.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz";
+        sha1 = "b369d6fb5dbc13eecf524f91b070feedc357cf34";
+      };
+    }
+    {
+      name = "defaults___defaults_1.0.3.tgz";
+      path = fetchurl {
+        name = "defaults___defaults_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz";
+        sha1 = "c656051e9817d9ff08ed881477f3fe4019f3ef7d";
+      };
+    }
+    {
+      name = "defer_to_connect___defer_to_connect_1.1.1.tgz";
+      path = fetchurl {
+        name = "defer_to_connect___defer_to_connect_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.1.tgz";
+        sha1 = "88ae694b93f67b81815a2c8c769aef6574ac8f2f";
+      };
+    }
+    {
+      name = "define_properties___define_properties_1.1.3.tgz";
+      path = fetchurl {
+        name = "define_properties___define_properties_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz";
+        sha1 = "cf88da6cbee26fe6db7094f61d870cbd84cee9f1";
+      };
+    }
+    {
+      name = "delayed_stream___delayed_stream_1.0.0.tgz";
+      path = fetchurl {
+        name = "delayed_stream___delayed_stream_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    }
+    {
+      name = "delegates___delegates_1.0.0.tgz";
+      path = fetchurl {
+        name = "delegates___delegates_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz";
+        sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
+      };
+    }
+    {
+      name = "detect_indent___detect_indent_5.0.0.tgz";
+      path = fetchurl {
+        name = "detect_indent___detect_indent_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz";
+        sha1 = "3871cc0a6a002e8c3e5b3cf7f336264675f06b9d";
+      };
+    }
+    {
+      name = "detect_libc___detect_libc_1.0.3.tgz";
+      path = fetchurl {
+        name = "detect_libc___detect_libc_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz";
+        sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
+      };
+    }
+    {
+      name = "detect_newline___detect_newline_2.1.0.tgz";
+      path = fetchurl {
+        name = "detect_newline___detect_newline_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz";
+        sha1 = "f41f1c10be4b00e87b5f13da680759f2c5bfd3e2";
+      };
+    }
+    {
+      name = "dezalgo___dezalgo_1.0.3.tgz";
+      path = fetchurl {
+        name = "dezalgo___dezalgo_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz";
+        sha1 = "7f742de066fc748bc8db820569dddce49bf0d456";
+      };
+    }
+    {
+      name = "dmg_builder___dmg_builder_22.9.1.tgz";
+      path = fetchurl {
+        name = "dmg_builder___dmg_builder_22.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-22.9.1.tgz";
+        sha1 = "64647224f37ee47fc9bd01947c21cc010a30511f";
+      };
+    }
+    {
+      name = "doctrine___doctrine_1.5.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_1.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz";
+        sha1 = "379dce730f6166f76cefa4e6707a159b02c5a6fa";
+      };
+    }
+    {
+      name = "doctrine___doctrine_2.1.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz";
+        sha1 = "5cd01fc101621b42c4cd7f5d1a66243716d3f39d";
+      };
+    }
+    {
+      name = "doctrine___doctrine_3.0.0.tgz";
+      path = fetchurl {
+        name = "doctrine___doctrine_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz";
+        sha1 = "addebead72a6574db783639dc87a121773973961";
+      };
+    }
+    {
+      name = "dom_walk___dom_walk_0.1.1.tgz";
+      path = fetchurl {
+        name = "dom_walk___dom_walk_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz";
+        sha1 = "672226dc74c8f799ad35307df936aba11acd6018";
+      };
+    }
+    {
+      name = "dot_prop___dot_prop_4.2.0.tgz";
+      path = fetchurl {
+        name = "dot_prop___dot_prop_4.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz";
+        sha1 = "1f19e0c2e1aa0e32797c49799f2837ac6af69c57";
+      };
+    }
+    {
+      name = "dot_prop___dot_prop_5.2.0.tgz";
+      path = fetchurl {
+        name = "dot_prop___dot_prop_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz";
+        sha1 = "c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb";
+      };
+    }
+    {
+      name = "dotenv_expand___dotenv_expand_5.1.0.tgz";
+      path = fetchurl {
+        name = "dotenv_expand___dotenv_expand_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz";
+        sha1 = "3fbaf020bfd794884072ea26b1e9791d45a629f0";
+      };
+    }
+    {
+      name = "dotenv___dotenv_5.0.1.tgz";
+      path = fetchurl {
+        name = "dotenv___dotenv_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/dotenv/-/dotenv-5.0.1.tgz";
+        sha1 = "a5317459bd3d79ab88cff6e44057a6a3fbb1fcef";
+      };
+    }
+    {
+      name = "dotenv___dotenv_8.2.0.tgz";
+      path = fetchurl {
+        name = "dotenv___dotenv_8.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz";
+        sha1 = "97e619259ada750eea3e4ea3e26bceea5424b16a";
+      };
+    }
+    {
+      name = "duplexer3___duplexer3_0.1.4.tgz";
+      path = fetchurl {
+        name = "duplexer3___duplexer3_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz";
+        sha1 = "ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2";
+      };
+    }
+    {
+      name = "duplexify___duplexify_3.7.1.tgz";
+      path = fetchurl {
+        name = "duplexify___duplexify_3.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz";
+        sha1 = "2a4df5317f6ccfd91f86d6fd25d8d8a103b88309";
+      };
+    }
+    {
+      name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz";
+      path = fetchurl {
+        name = "ecc_jsbn___ecc_jsbn_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+      };
+    }
+    {
+      name = "editor___editor_1.0.0.tgz";
+      path = fetchurl {
+        name = "editor___editor_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/editor/-/editor-1.0.0.tgz";
+        sha1 = "60c7f87bd62bcc6a894fa8ccd6afb7823a24f742";
+      };
+    }
+    {
+      name = "ejs___ejs_3.1.5.tgz";
+      path = fetchurl {
+        name = "ejs___ejs_3.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz";
+        sha1 = "aed723844dc20acb4b170cd9ab1017e476a0d93b";
+      };
+    }
+    {
+      name = "electron_builder_squirrel_windows___electron_builder_squirrel_windows_22.9.1.tgz";
+      path = fetchurl {
+        name = "electron_builder_squirrel_windows___electron_builder_squirrel_windows_22.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-22.9.1.tgz";
+        sha1 = "d9ad65a8f5abd1011ac1dbd01492623fb5466a32";
+      };
+    }
+    {
+      name = "electron_builder___electron_builder_22.9.1.tgz";
+      path = fetchurl {
+        name = "electron_builder___electron_builder_22.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/electron-builder/-/electron-builder-22.9.1.tgz";
+        sha1 = "a2962db6f2757bc01d02489f38fafe0809f68f60";
+      };
+    }
+    {
+      name = "electron_devtools_installer___electron_devtools_installer_3.1.1.tgz";
+      path = fetchurl {
+        name = "electron_devtools_installer___electron_devtools_installer_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/electron-devtools-installer/-/electron-devtools-installer-3.1.1.tgz";
+        sha1 = "7b56c8c86475c5e4e10de6917d150c53c9ceb55e";
+      };
+    }
+    {
+      name = "electron_notarize___electron_notarize_1.0.0.tgz";
+      path = fetchurl {
+        name = "electron_notarize___electron_notarize_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-1.0.0.tgz";
+        sha1 = "bc925b1ccc3f79e58e029e8c4706572b01a9fd8f";
+      };
+    }
+    {
+      name = "electron_publish___electron_publish_22.9.1.tgz";
+      path = fetchurl {
+        name = "electron_publish___electron_publish_22.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/electron-publish/-/electron-publish-22.9.1.tgz";
+        sha1 = "7cc76ac4cc53efd29ee31c1e5facb9724329068e";
+      };
+    }
+    {
+      name = "electron_store___electron_store_6.0.1.tgz";
+      path = fetchurl {
+        name = "electron_store___electron_store_6.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/electron-store/-/electron-store-6.0.1.tgz";
+        sha1 = "2178b9dc37aeb749d99cf9d1d1bc090890b922dc";
+      };
+    }
+    {
+      name = "electron_window_state___electron_window_state_5.0.3.tgz";
+      path = fetchurl {
+        name = "electron_window_state___electron_window_state_5.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/electron-window-state/-/electron-window-state-5.0.3.tgz";
+        sha1 = "4f36d09e3f953d87aff103bf010f460056050aa8";
+      };
+    }
+    {
+      name = "emoji_regex___emoji_regex_7.0.3.tgz";
+      path = fetchurl {
+        name = "emoji_regex___emoji_regex_7.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz";
+        sha1 = "933a04052860c85e83c122479c4748a8e4c72156";
+      };
+    }
+    {
+      name = "emoji_regex___emoji_regex_8.0.0.tgz";
+      path = fetchurl {
+        name = "emoji_regex___emoji_regex_8.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz";
+        sha1 = "e818fd69ce5ccfcb404594f842963bf53164cc37";
+      };
+    }
+    {
+      name = "encoding___encoding_0.1.12.tgz";
+      path = fetchurl {
+        name = "encoding___encoding_0.1.12.tgz";
+        url  = "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz";
+        sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb";
+      };
+    }
+    {
+      name = "end_of_stream___end_of_stream_1.4.4.tgz";
+      path = fetchurl {
+        name = "end_of_stream___end_of_stream_1.4.4.tgz";
+        url  = "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz";
+        sha1 = "5ae64a5f45057baf3626ec14da0ca5e4b2431eb0";
+      };
+    }
+    {
+      name = "enquirer___enquirer_2.3.6.tgz";
+      path = fetchurl {
+        name = "enquirer___enquirer_2.3.6.tgz";
+        url  = "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz";
+        sha1 = "2a7fe5dd634a1e4125a975ec994ff5456dc3734d";
+      };
+    }
+    {
+      name = "env_paths___env_paths_2.2.0.tgz";
+      path = fetchurl {
+        name = "env_paths___env_paths_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz";
+        sha1 = "cdca557dc009152917d6166e2febe1f039685e43";
+      };
+    }
+    {
+      name = "err_code___err_code_1.1.2.tgz";
+      path = fetchurl {
+        name = "err_code___err_code_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz";
+        sha1 = "06e0116d3028f6aef4806849eb0ea6a748ae6960";
+      };
+    }
+    {
+      name = "errno___errno_0.1.7.tgz";
+      path = fetchurl {
+        name = "errno___errno_0.1.7.tgz";
+        url  = "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz";
+        sha1 = "4684d71779ad39af177e3f007996f7c67c852618";
+      };
+    }
+    {
+      name = "error_ex___error_ex_1.3.2.tgz";
+      path = fetchurl {
+        name = "error_ex___error_ex_1.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz";
+        sha1 = "b4ac40648107fdcdcfae242f428bea8a14d4f1bf";
+      };
+    }
+    {
+      name = "es_abstract___es_abstract_1.17.6.tgz";
+      path = fetchurl {
+        name = "es_abstract___es_abstract_1.17.6.tgz";
+        url  = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz";
+        sha1 = "9142071707857b2cacc7b89ecb670316c3e2d52a";
+      };
+    }
+    {
+      name = "es_abstract___es_abstract_1.16.3.tgz";
+      path = fetchurl {
+        name = "es_abstract___es_abstract_1.16.3.tgz";
+        url  = "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.16.3.tgz";
+        sha1 = "52490d978f96ff9f89ec15b5cf244304a5bca161";
+      };
+    }
+    {
+      name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+      path = fetchurl {
+        name = "es_to_primitive___es_to_primitive_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz";
+        sha1 = "e55cd4c9cdc188bcefb03b366c736323fc5c898a";
+      };
+    }
+    {
+      name = "es6_promise___es6_promise_4.2.8.tgz";
+      path = fetchurl {
+        name = "es6_promise___es6_promise_4.2.8.tgz";
+        url  = "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz";
+        sha1 = "4eb21594c972bc40553d276e510539143db53e0a";
+      };
+    }
+    {
+      name = "es6_promisify___es6_promisify_5.0.0.tgz";
+      path = fetchurl {
+        name = "es6_promisify___es6_promisify_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz";
+        sha1 = "5109d62f3e56ea967c4b63505aef08291c8a5203";
+      };
+    }
+    {
+      name = "escalade___escalade_3.1.1.tgz";
+      path = fetchurl {
+        name = "escalade___escalade_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz";
+        sha1 = "d8cfdc7000965c5a0174b4a82eaa5c0552742e40";
+      };
+    }
+    {
+      name = "escape_goat___escape_goat_2.1.1.tgz";
+      path = fetchurl {
+        name = "escape_goat___escape_goat_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz";
+        sha1 = "1b2dc77003676c457ec760b2dc68edb648188675";
+      };
+    }
+    {
+      name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+      path = fetchurl {
+        name = "escape_string_regexp___escape_string_regexp_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";
+        sha1 = "1b61c0562190a8dff6ae3bb2cf0200ca130b86d4";
+      };
+    }
+    {
+      name = "eslint_config_esnext___eslint_config_esnext_4.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_esnext___eslint_config_esnext_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-esnext/-/eslint-config-esnext-4.1.0.tgz";
+        sha1 = "8695b858fcf40d28c1aedca181f700528c7b60c6";
+      };
+    }
+    {
+      name = "eslint_config_google___eslint_config_google_0.14.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_google___eslint_config_google_0.14.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.14.0.tgz";
+        sha1 = "4f5f8759ba6e11b424294a219dbfa18c508bcc1a";
+      };
+    }
+    {
+      name = "eslint_config_matrix_org___eslint_config_matrix_org_0.1.2.tgz";
+      path = fetchurl {
+        name = "eslint_config_matrix_org___eslint_config_matrix_org_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-matrix-org/-/eslint-config-matrix-org-0.1.2.tgz";
+        sha1 = "b5d7e193e4f3fc5041905967b53c5ddd6924c793";
+      };
+    }
+    {
+      name = "eslint_config_node___eslint_config_node_4.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_node___eslint_config_node_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-node/-/eslint-config-node-4.1.0.tgz";
+        sha1 = "fc1f13946d83766d6b83b0e67699e2071a56f417";
+      };
+    }
+    {
+      name = "eslint_config_react_native___eslint_config_react_native_4.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_react_native___eslint_config_react_native_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-react-native/-/eslint-config-react-native-4.1.0.tgz";
+        sha1 = "63e9401c7fac146804785f609e7df8f15b3e04eb";
+      };
+    }
+    {
+      name = "eslint_config_recommended___eslint_config_recommended_4.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_config_recommended___eslint_config_recommended_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-config-recommended/-/eslint-config-recommended-4.1.0.tgz";
+        sha1 = "1adff90e0716d439be471d192977f233de171a46";
+      };
+    }
+    {
+      name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.4.tgz";
+      path = fetchurl {
+        name = "eslint_import_resolver_node___eslint_import_resolver_node_0.3.4.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz";
+        sha1 = "85ffa81942c25012d8231096ddf679c03042c717";
+      };
+    }
+    {
+      name = "eslint_module_utils___eslint_module_utils_2.6.0.tgz";
+      path = fetchurl {
+        name = "eslint_module_utils___eslint_module_utils_2.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz";
+        sha1 = "579ebd094f56af7797d19c9866c9c9486629bfa6";
+      };
+    }
+    {
+      name = "eslint_plugin_babel___eslint_plugin_babel_5.3.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_babel___eslint_plugin_babel_5.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz";
+        sha1 = "75a2413ffbf17e7be57458301c60291f2cfbf560";
+      };
+    }
+    {
+      name = "eslint_plugin_import___eslint_plugin_import_2.22.0.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_import___eslint_plugin_import_2.22.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.0.tgz";
+        sha1 = "92f7736fe1fde3e2de77623c838dd992ff5ffb7e";
+      };
+    }
+    {
+      name = "eslint_plugin_react_native_globals___eslint_plugin_react_native_globals_0.1.2.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_react_native_globals___eslint_plugin_react_native_globals_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-react-native-globals/-/eslint-plugin-react-native-globals-0.1.2.tgz";
+        sha1 = "ee1348bc2ceb912303ce6bdbd22e2f045ea86ea2";
+      };
+    }
+    {
+      name = "eslint_plugin_react_native___eslint_plugin_react_native_3.8.1.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_react_native___eslint_plugin_react_native_3.8.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-react-native/-/eslint-plugin-react-native-3.8.1.tgz";
+        sha1 = "92811e37191ecb0d29c0f0a0c9e5c943ee573821";
+      };
+    }
+    {
+      name = "eslint_plugin_react___eslint_plugin_react_7.20.3.tgz";
+      path = fetchurl {
+        name = "eslint_plugin_react___eslint_plugin_react_7.20.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.3.tgz";
+        sha1 = "0590525e7eb83890ce71f73c2cf836284ad8c2f1";
+      };
+    }
+    {
+      name = "eslint_rule_composer___eslint_rule_composer_0.3.0.tgz";
+      path = fetchurl {
+        name = "eslint_rule_composer___eslint_rule_composer_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz";
+        sha1 = "79320c927b0c5c0d3d3d2b76c8b4a488f25bbaf9";
+      };
+    }
+    {
+      name = "eslint_scope___eslint_scope_5.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_scope___eslint_scope_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.0.tgz";
+        sha1 = "d0f971dfe59c69e0cada684b23d49dbf82600ce5";
+      };
+    }
+    {
+      name = "eslint_utils___eslint_utils_1.4.3.tgz";
+      path = fetchurl {
+        name = "eslint_utils___eslint_utils_1.4.3.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz";
+        sha1 = "74fec7c54d0776b6f67e0251040b5806564e981f";
+      };
+    }
+    {
+      name = "eslint_utils___eslint_utils_2.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_utils___eslint_utils_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz";
+        sha1 = "d2de5e03424e707dc10c74068ddedae708741b27";
+      };
+    }
+    {
+      name = "eslint_visitor_keys___eslint_visitor_keys_1.1.0.tgz";
+      path = fetchurl {
+        name = "eslint_visitor_keys___eslint_visitor_keys_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz";
+        sha1 = "e2a82cea84ff246ad6fb57f9bde5b46621459ec2";
+      };
+    }
+    {
+      name = "eslint_visitor_keys___eslint_visitor_keys_1.3.0.tgz";
+      path = fetchurl {
+        name = "eslint_visitor_keys___eslint_visitor_keys_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz";
+        sha1 = "30ebd1ef7c2fdff01c3a4f151044af25fab0523e";
+      };
+    }
+    {
+      name = "eslint___eslint_7.3.1.tgz";
+      path = fetchurl {
+        name = "eslint___eslint_7.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/eslint/-/eslint-7.3.1.tgz";
+        sha1 = "76392bd7e44468d046149ba128d1566c59acbe19";
+      };
+    }
+    {
+      name = "eslint___eslint_6.8.0.tgz";
+      path = fetchurl {
+        name = "eslint___eslint_6.8.0.tgz";
+        url  = "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz";
+        sha1 = "62262d6729739f9275723824302fb227c8c93ffb";
+      };
+    }
+    {
+      name = "espree___espree_6.2.1.tgz";
+      path = fetchurl {
+        name = "espree___espree_6.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz";
+        sha1 = "77fc72e1fd744a2052c20f38a5b575832e82734a";
+      };
+    }
+    {
+      name = "espree___espree_7.2.0.tgz";
+      path = fetchurl {
+        name = "espree___espree_7.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/espree/-/espree-7.2.0.tgz";
+        sha1 = "1c263d5b513dbad0ac30c4991b93ac354e948d69";
+      };
+    }
+    {
+      name = "esprima___esprima_4.0.1.tgz";
+      path = fetchurl {
+        name = "esprima___esprima_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz";
+        sha1 = "13b04cdb3e6c5d19df91ab6987a8695619b0aa71";
+      };
+    }
+    {
+      name = "esquery___esquery_1.0.1.tgz";
+      path = fetchurl {
+        name = "esquery___esquery_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz";
+        sha1 = "406c51658b1f5991a5f9b62b1dc25b00e3e5c708";
+      };
+    }
+    {
+      name = "esquery___esquery_1.3.1.tgz";
+      path = fetchurl {
+        name = "esquery___esquery_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz";
+        sha1 = "b78b5828aa8e214e29fb74c4d5b752e1c033da57";
+      };
+    }
+    {
+      name = "esrecurse___esrecurse_4.2.1.tgz";
+      path = fetchurl {
+        name = "esrecurse___esrecurse_4.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz";
+        sha1 = "007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf";
+      };
+    }
+    {
+      name = "estraverse___estraverse_4.3.0.tgz";
+      path = fetchurl {
+        name = "estraverse___estraverse_4.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz";
+        sha1 = "398ad3f3c5a24948be7725e83d11a7de28cdbd1d";
+      };
+    }
+    {
+      name = "estraverse___estraverse_5.1.0.tgz";
+      path = fetchurl {
+        name = "estraverse___estraverse_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz";
+        sha1 = "374309d39fd935ae500e7b92e8a6b4c720e59642";
+      };
+    }
+    {
+      name = "esutils___esutils_2.0.3.tgz";
+      path = fetchurl {
+        name = "esutils___esutils_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz";
+        sha1 = "74d2eb4de0b8da1293711910d50775b9b710ef64";
+      };
+    }
+    {
+      name = "execa___execa_0.7.0.tgz";
+      path = fetchurl {
+        name = "execa___execa_0.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz";
+        sha1 = "944becd34cc41ee32a63a9faf27ad5a65fc59777";
+      };
+    }
+    {
+      name = "exif_parser___exif_parser_0.1.12.tgz";
+      path = fetchurl {
+        name = "exif_parser___exif_parser_0.1.12.tgz";
+        url  = "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.12.tgz";
+        sha1 = "58a9d2d72c02c1f6f02a0ef4a9166272b7760922";
+      };
+    }
+    {
+      name = "exit_on_epipe___exit_on_epipe_1.0.1.tgz";
+      path = fetchurl {
+        name = "exit_on_epipe___exit_on_epipe_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz";
+        sha1 = "0bdd92e87d5285d267daa8171d0eb06159689692";
+      };
+    }
+    {
+      name = "extend___extend_3.0.2.tgz";
+      path = fetchurl {
+        name = "extend___extend_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz";
+        sha1 = "f8b1136b4071fbd8eb140aff858b1019ec2915fa";
+      };
+    }
+    {
+      name = "external_editor___external_editor_3.1.0.tgz";
+      path = fetchurl {
+        name = "external_editor___external_editor_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz";
+        sha1 = "cb03f740befae03ea4d283caed2741a83f335495";
+      };
+    }
+    {
+      name = "extsprintf___extsprintf_1.3.0.tgz";
+      path = fetchurl {
+        name = "extsprintf___extsprintf_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    }
+    {
+      name = "extsprintf___extsprintf_1.4.0.tgz";
+      path = fetchurl {
+        name = "extsprintf___extsprintf_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz";
+        sha1 = "e2689f8f356fad62cca65a3a91c5df5f9551692f";
+      };
+    }
+    {
+      name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz";
+      path = fetchurl {
+        name = "fast_deep_equal___fast_deep_equal_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";
+        sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49";
+      };
+    }
+    {
+      name = "fast_deep_equal___fast_deep_equal_3.1.3.tgz";
+      path = fetchurl {
+        name = "fast_deep_equal___fast_deep_equal_3.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz";
+        sha1 = "3a7d56b559d6cbc3eb512325244e619a65c6c525";
+      };
+    }
+    {
+      name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz";
+      path = fetchurl {
+        name = "fast_json_stable_stringify___fast_json_stable_stringify_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    }
+    {
+      name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+      path = fetchurl {
+        name = "fast_levenshtein___fast_levenshtein_2.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";
+        sha1 = "3d8a5c66883a16a30ca8643e851f19baa7797917";
+      };
+    }
+    {
+      name = "figgy_pudding___figgy_pudding_3.5.1.tgz";
+      path = fetchurl {
+        name = "figgy_pudding___figgy_pudding_3.5.1.tgz";
+        url  = "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz";
+        sha1 = "862470112901c727a0e495a80744bd5baa1d6790";
+      };
+    }
+    {
+      name = "figures___figures_3.2.0.tgz";
+      path = fetchurl {
+        name = "figures___figures_3.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz";
+        sha1 = "625c18bd293c604dc4a8ddb2febf0c88341746af";
+      };
+    }
+    {
+      name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+      path = fetchurl {
+        name = "file_entry_cache___file_entry_cache_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz";
+        sha1 = "ca0f6efa6dd3d561333fb14515065c2fafdf439c";
+      };
+    }
+    {
+      name = "file_type___file_type_9.0.0.tgz";
+      path = fetchurl {
+        name = "file_type___file_type_9.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/file-type/-/file-type-9.0.0.tgz";
+        sha1 = "a68d5ad07f486414dfb2c8866f73161946714a18";
+      };
+    }
+    {
+      name = "filelist___filelist_1.0.1.tgz";
+      path = fetchurl {
+        name = "filelist___filelist_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz";
+        sha1 = "f10d1a3ae86c1694808e8f20906f43d4c9132dbb";
+      };
+    }
+    {
+      name = "find_npm_prefix___find_npm_prefix_1.0.2.tgz";
+      path = fetchurl {
+        name = "find_npm_prefix___find_npm_prefix_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/find-npm-prefix/-/find-npm-prefix-1.0.2.tgz";
+        sha1 = "8d8ce2c78b3b4b9e66c8acc6a37c231eb841cfdf";
+      };
+    }
+    {
+      name = "find_up___find_up_2.1.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz";
+        sha1 = "45d1b7e506c717ddd482775a2b77920a3c0c57a7";
+      };
+    }
+    {
+      name = "find_up___find_up_3.0.0.tgz";
+      path = fetchurl {
+        name = "find_up___find_up_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz";
+        sha1 = "49169f1d7993430646da61ecc5ae355c21c97b73";
+      };
+    }
+    {
+      name = "flat_cache___flat_cache_2.0.1.tgz";
+      path = fetchurl {
+        name = "flat_cache___flat_cache_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz";
+        sha1 = "5d296d6f04bda44a4630a301413bdbc2ec085ec0";
+      };
+    }
+    {
+      name = "flatted___flatted_2.0.1.tgz";
+      path = fetchurl {
+        name = "flatted___flatted_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz";
+        sha1 = "69e57caa8f0eacbc281d2e2cb458d46fdb449e08";
+      };
+    }
+    {
+      name = "flush_write_stream___flush_write_stream_1.1.1.tgz";
+      path = fetchurl {
+        name = "flush_write_stream___flush_write_stream_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz";
+        sha1 = "8dd7d873a1babc207d94ead0c2e0e44276ebf2e8";
+      };
+    }
+    {
+      name = "forever_agent___forever_agent_0.6.1.tgz";
+      path = fetchurl {
+        name = "forever_agent___forever_agent_0.6.1.tgz";
+        url  = "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    }
+    {
+      name = "form_data___form_data_2.3.3.tgz";
+      path = fetchurl {
+        name = "form_data___form_data_2.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz";
+        sha1 = "dcce52c05f644f298c6a7ab936bd724ceffbf3a6";
+      };
+    }
+    {
+      name = "from2___from2_1.3.0.tgz";
+      path = fetchurl {
+        name = "from2___from2_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/from2/-/from2-1.3.0.tgz";
+        sha1 = "88413baaa5f9a597cfde9221d86986cd3c061dfd";
+      };
+    }
+    {
+      name = "from2___from2_2.3.0.tgz";
+      path = fetchurl {
+        name = "from2___from2_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz";
+        sha1 = "8bfb5502bde4a4d36cfdeea007fcca21d7e382af";
+      };
+    }
+    {
+      name = "fs_constants___fs_constants_1.0.0.tgz";
+      path = fetchurl {
+        name = "fs_constants___fs_constants_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz";
+        sha1 = "6be0de9be998ce16af8afc24497b9ee9b7ccd9ad";
+      };
+    }
+    {
+      name = "fs_extra___fs_extra_8.1.0.tgz";
+      path = fetchurl {
+        name = "fs_extra___fs_extra_8.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz";
+        sha1 = "49d43c45a88cd9677668cb7be1b46efdb8d2e1c0";
+      };
+    }
+    {
+      name = "fs_extra___fs_extra_9.0.1.tgz";
+      path = fetchurl {
+        name = "fs_extra___fs_extra_9.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz";
+        sha1 = "910da0062437ba4c39fedd863f1675ccfefcb9fc";
+      };
+    }
+    {
+      name = "fs_minipass___fs_minipass_1.2.7.tgz";
+      path = fetchurl {
+        name = "fs_minipass___fs_minipass_1.2.7.tgz";
+        url  = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz";
+        sha1 = "ccff8570841e7fe4265693da88936c55aed7f7c7";
+      };
+    }
+    {
+      name = "fs_minipass___fs_minipass_2.0.0.tgz";
+      path = fetchurl {
+        name = "fs_minipass___fs_minipass_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.0.0.tgz";
+        sha1 = "a6415edab02fae4b9e9230bc87ee2e4472003cd1";
+      };
+    }
+    {
+      name = "fs_vacuum___fs_vacuum_1.2.10.tgz";
+      path = fetchurl {
+        name = "fs_vacuum___fs_vacuum_1.2.10.tgz";
+        url  = "https://registry.yarnpkg.com/fs-vacuum/-/fs-vacuum-1.2.10.tgz";
+        sha1 = "b7629bec07a4031a2548fdf99f5ecf1cc8b31e36";
+      };
+    }
+    {
+      name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz";
+      path = fetchurl {
+        name = "fs_write_stream_atomic___fs_write_stream_atomic_1.0.10.tgz";
+        url  = "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz";
+        sha1 = "b47df53493ef911df75731e70a9ded0189db40c9";
+      };
+    }
+    {
+      name = "fs.realpath___fs.realpath_1.0.0.tgz";
+      path = fetchurl {
+        name = "fs.realpath___fs.realpath_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    }
+    {
+      name = "function_bind___function_bind_1.1.1.tgz";
+      path = fetchurl {
+        name = "function_bind___function_bind_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz";
+        sha1 = "a56899d3ea3c9bab874bb9773b7c5ede92f4895d";
+      };
+    }
+    {
+      name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+      path = fetchurl {
+        name = "functional_red_black_tree___functional_red_black_tree_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz";
+        sha1 = "1b0ab3bd553b2a0d6399d29c0e3ea0b252078327";
+      };
+    }
+    {
+      name = "gauge___gauge_2.7.4.tgz";
+      path = fetchurl {
+        name = "gauge___gauge_2.7.4.tgz";
+        url  = "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz";
+        sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
+      };
+    }
+    {
+      name = "genfun___genfun_5.0.0.tgz";
+      path = fetchurl {
+        name = "genfun___genfun_5.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz";
+        sha1 = "9dd9710a06900a5c4a5bf57aca5da4e52fe76537";
+      };
+    }
+    {
+      name = "gentle_fs___gentle_fs_2.3.0.tgz";
+      path = fetchurl {
+        name = "gentle_fs___gentle_fs_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.0.tgz";
+        sha1 = "13538db5029400f98684be4894e8a7d8f0d1ea7f";
+      };
+    }
+    {
+      name = "gentle_fs___gentle_fs_2.3.1.tgz";
+      path = fetchurl {
+        name = "gentle_fs___gentle_fs_2.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.1.tgz";
+        sha1 = "11201bf66c18f930ddca72cf69460bdfa05727b1";
+      };
+    }
+    {
+      name = "get_caller_file___get_caller_file_1.0.3.tgz";
+      path = fetchurl {
+        name = "get_caller_file___get_caller_file_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz";
+        sha1 = "f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a";
+      };
+    }
+    {
+      name = "get_caller_file___get_caller_file_2.0.5.tgz";
+      path = fetchurl {
+        name = "get_caller_file___get_caller_file_2.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz";
+        sha1 = "4f94412a82db32f36e3b0b9741f8a97feb031f7e";
+      };
+    }
+    {
+      name = "get_stream___get_stream_3.0.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz";
+        sha1 = "8e943d1358dc37555054ecbe2edb05aa174ede14";
+      };
+    }
+    {
+      name = "get_stream___get_stream_4.1.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz";
+        sha1 = "c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5";
+      };
+    }
+    {
+      name = "get_stream___get_stream_5.1.0.tgz";
+      path = fetchurl {
+        name = "get_stream___get_stream_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz";
+        sha1 = "01203cdc92597f9b909067c3e656cc1f4d3c4dc9";
+      };
+    }
+    {
+      name = "getpass___getpass_0.1.7.tgz";
+      path = fetchurl {
+        name = "getpass___getpass_0.1.7.tgz";
+        url  = "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    }
+    {
+      name = "gifwrap___gifwrap_0.9.2.tgz";
+      path = fetchurl {
+        name = "gifwrap___gifwrap_0.9.2.tgz";
+        url  = "https://registry.yarnpkg.com/gifwrap/-/gifwrap-0.9.2.tgz";
+        sha1 = "348e286e67d7cf57942172e1e6f05a71cee78489";
+      };
+    }
+    {
+      name = "glob_parent___glob_parent_5.1.1.tgz";
+      path = fetchurl {
+        name = "glob_parent___glob_parent_5.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz";
+        sha1 = "b6c1ef417c4e5663ea498f1c45afac6916bbc229";
+      };
+    }
+    {
+      name = "glob___glob_7.1.6.tgz";
+      path = fetchurl {
+        name = "glob___glob_7.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz";
+        sha1 = "141f33b81a7c2492e125594307480c46679278a6";
+      };
+    }
+    {
+      name = "global_dirs___global_dirs_0.1.1.tgz";
+      path = fetchurl {
+        name = "global_dirs___global_dirs_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz";
+        sha1 = "b319c0dd4607f353f3be9cca4c72fc148c49f445";
+      };
+    }
+    {
+      name = "global_dirs___global_dirs_2.0.1.tgz";
+      path = fetchurl {
+        name = "global_dirs___global_dirs_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz";
+        sha1 = "acdf3bb6685bcd55cb35e8a052266569e9469201";
+      };
+    }
+    {
+      name = "global___global_4.3.2.tgz";
+      path = fetchurl {
+        name = "global___global_4.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz";
+        sha1 = "e76989268a6c74c38908b1305b10fc0e394e9d0f";
+      };
+    }
+    {
+      name = "globals___globals_11.12.0.tgz";
+      path = fetchurl {
+        name = "globals___globals_11.12.0.tgz";
+        url  = "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz";
+        sha1 = "ab8795338868a0babd8525758018c2a7eb95c42e";
+      };
+    }
+    {
+      name = "globals___globals_12.4.0.tgz";
+      path = fetchurl {
+        name = "globals___globals_12.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz";
+        sha1 = "a18813576a41b00a24a97e7f815918c2e19925f8";
+      };
+    }
+    {
+      name = "got___got_6.7.1.tgz";
+      path = fetchurl {
+        name = "got___got_6.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz";
+        sha1 = "240cd05785a9a18e561dc1b44b41c763ef1e8db0";
+      };
+    }
+    {
+      name = "got___got_9.6.0.tgz";
+      path = fetchurl {
+        name = "got___got_9.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz";
+        sha1 = "edf45e7d67f99545705de1f7bbeeeb121765ed85";
+      };
+    }
+    {
+      name = "graceful_fs___graceful_fs_4.2.3.tgz";
+      path = fetchurl {
+        name = "graceful_fs___graceful_fs_4.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz";
+        sha1 = "4a12ff1b60376ef09862c2093edd908328be8423";
+      };
+    }
+    {
+      name = "graceful_fs___graceful_fs_4.2.4.tgz";
+      path = fetchurl {
+        name = "graceful_fs___graceful_fs_4.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz";
+        sha1 = "2256bde14d3632958c465ebc96dc467ca07a29fb";
+      };
+    }
+    {
+      name = "har_schema___har_schema_2.0.0.tgz";
+      path = fetchurl {
+        name = "har_schema___har_schema_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    }
+    {
+      name = "har_validator___har_validator_5.1.3.tgz";
+      path = fetchurl {
+        name = "har_validator___har_validator_5.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz";
+        sha1 = "1ef89ebd3e4996557675eed9893110dc350fa080";
+      };
+    }
+    {
+      name = "har_validator___har_validator_5.1.5.tgz";
+      path = fetchurl {
+        name = "har_validator___har_validator_5.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz";
+        sha1 = "1f0803b9f8cb20c0fa13822df1ecddb36bde1efd";
+      };
+    }
+    {
+      name = "has_flag___has_flag_3.0.0.tgz";
+      path = fetchurl {
+        name = "has_flag___has_flag_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz";
+        sha1 = "b5d454dc2199ae225699f3467e5a07f3b955bafd";
+      };
+    }
+    {
+      name = "has_flag___has_flag_4.0.0.tgz";
+      path = fetchurl {
+        name = "has_flag___has_flag_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz";
+        sha1 = "944771fd9c81c81265c4d6941860da06bb59479b";
+      };
+    }
+    {
+      name = "has_symbols___has_symbols_1.0.1.tgz";
+      path = fetchurl {
+        name = "has_symbols___has_symbols_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz";
+        sha1 = "9f5214758a44196c406d9bd76cebf81ec2dd31e8";
+      };
+    }
+    {
+      name = "has_unicode___has_unicode_2.0.1.tgz";
+      path = fetchurl {
+        name = "has_unicode___has_unicode_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz";
+        sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
+      };
+    }
+    {
+      name = "has_yarn___has_yarn_2.1.0.tgz";
+      path = fetchurl {
+        name = "has_yarn___has_yarn_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz";
+        sha1 = "137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77";
+      };
+    }
+    {
+      name = "has___has_1.0.3.tgz";
+      path = fetchurl {
+        name = "has___has_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz";
+        sha1 = "722d7cbfc1f6aa8241f16dd814e011e1f41e8796";
+      };
+    }
+    {
+      name = "hosted_git_info___hosted_git_info_2.8.5.tgz";
+      path = fetchurl {
+        name = "hosted_git_info___hosted_git_info_2.8.5.tgz";
+        url  = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz";
+        sha1 = "759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c";
+      };
+    }
+    {
+      name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+      path = fetchurl {
+        name = "hosted_git_info___hosted_git_info_2.8.8.tgz";
+        url  = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz";
+        sha1 = "7539bd4bc1e0e0a895815a2e0262420b12858488";
+      };
+    }
+    {
+      name = "hosted_git_info___hosted_git_info_3.0.7.tgz";
+      path = fetchurl {
+        name = "hosted_git_info___hosted_git_info_3.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.7.tgz";
+        sha1 = "a30727385ea85acfcee94e0aad9e368c792e036c";
+      };
+    }
+    {
+      name = "http_cache_semantics___http_cache_semantics_3.8.1.tgz";
+      path = fetchurl {
+        name = "http_cache_semantics___http_cache_semantics_3.8.1.tgz";
+        url  = "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz";
+        sha1 = "39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2";
+      };
+    }
+    {
+      name = "http_cache_semantics___http_cache_semantics_4.0.3.tgz";
+      path = fetchurl {
+        name = "http_cache_semantics___http_cache_semantics_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz";
+        sha1 = "495704773277eeef6e43f9ab2c2c7d259dda25c5";
+      };
+    }
+    {
+      name = "http_proxy_agent___http_proxy_agent_2.1.0.tgz";
+      path = fetchurl {
+        name = "http_proxy_agent___http_proxy_agent_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz";
+        sha1 = "e4821beef5b2142a2026bd73926fe537631c5405";
+      };
+    }
+    {
+      name = "http_signature___http_signature_1.2.0.tgz";
+      path = fetchurl {
+        name = "http_signature___http_signature_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    }
+    {
+      name = "https_proxy_agent___https_proxy_agent_2.2.4.tgz";
+      path = fetchurl {
+        name = "https_proxy_agent___https_proxy_agent_2.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz";
+        sha1 = "4ee7a737abd92678a293d9b34a1af4d0d08c787b";
+      };
+    }
+    {
+      name = "humanize_ms___humanize_ms_1.2.1.tgz";
+      path = fetchurl {
+        name = "humanize_ms___humanize_ms_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz";
+        sha1 = "c46e3159a293f6b896da29316d8b6fe8bb79bbed";
+      };
+    }
+    {
+      name = "iconv_lite___iconv_lite_0.4.24.tgz";
+      path = fetchurl {
+        name = "iconv_lite___iconv_lite_0.4.24.tgz";
+        url  = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz";
+        sha1 = "2022b4b25fbddc21d2f524974a474aafe733908b";
+      };
+    }
+    {
+      name = "iconv_lite___iconv_lite_0.6.2.tgz";
+      path = fetchurl {
+        name = "iconv_lite___iconv_lite_0.6.2.tgz";
+        url  = "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz";
+        sha1 = "ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01";
+      };
+    }
+    {
+      name = "ieee754___ieee754_1.1.13.tgz";
+      path = fetchurl {
+        name = "ieee754___ieee754_1.1.13.tgz";
+        url  = "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz";
+        sha1 = "ec168558e95aa181fd87d37f55c32bbcb6708b84";
+      };
+    }
+    {
+      name = "iferr___iferr_0.1.5.tgz";
+      path = fetchurl {
+        name = "iferr___iferr_0.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz";
+        sha1 = "c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501";
+      };
+    }
+    {
+      name = "iferr___iferr_1.0.2.tgz";
+      path = fetchurl {
+        name = "iferr___iferr_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/iferr/-/iferr-1.0.2.tgz";
+        sha1 = "e9fde49a9da06dc4a4194c6c9ed6d08305037a6d";
+      };
+    }
+    {
+      name = "ignore_walk___ignore_walk_3.0.3.tgz";
+      path = fetchurl {
+        name = "ignore_walk___ignore_walk_3.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz";
+        sha1 = "017e2447184bfeade7c238e4aefdd1e8f95b1e37";
+      };
+    }
+    {
+      name = "ignore___ignore_4.0.6.tgz";
+      path = fetchurl {
+        name = "ignore___ignore_4.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz";
+        sha1 = "750e3db5862087b4737ebac8207ffd1ef27b25fc";
+      };
+    }
+    {
+      name = "image_q___image_q_1.1.1.tgz";
+      path = fetchurl {
+        name = "image_q___image_q_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/image-q/-/image-q-1.1.1.tgz";
+        sha1 = "fc84099664460b90ca862d9300b6bfbbbfbf8056";
+      };
+    }
+    {
+      name = "immediate___immediate_3.0.6.tgz";
+      path = fetchurl {
+        name = "immediate___immediate_3.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz";
+        sha1 = "9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b";
+      };
+    }
+    {
+      name = "import_fresh___import_fresh_3.2.1.tgz";
+      path = fetchurl {
+        name = "import_fresh___import_fresh_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz";
+        sha1 = "633ff618506e793af5ac91bf48b72677e15cbe66";
+      };
+    }
+    {
+      name = "import_lazy___import_lazy_2.1.0.tgz";
+      path = fetchurl {
+        name = "import_lazy___import_lazy_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz";
+        sha1 = "05698e3d45c88e8d7e9d92cb0584e77f096f3e43";
+      };
+    }
+    {
+      name = "imurmurhash___imurmurhash_0.1.4.tgz";
+      path = fetchurl {
+        name = "imurmurhash___imurmurhash_0.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+      };
+    }
+    {
+      name = "infer_owner___infer_owner_1.0.4.tgz";
+      path = fetchurl {
+        name = "infer_owner___infer_owner_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz";
+        sha1 = "c4cefcaa8e51051c2a40ba2ce8a3d27295af9467";
+      };
+    }
+    {
+      name = "inflight___inflight_1.0.6.tgz";
+      path = fetchurl {
+        name = "inflight___inflight_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    }
+    {
+      name = "inherits___inherits_2.0.4.tgz";
+      path = fetchurl {
+        name = "inherits___inherits_2.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz";
+        sha1 = "0fa2c64f932917c3433a0ded55363aae37416b7c";
+      };
+    }
+    {
+      name = "ini___ini_1.3.8.tgz";
+      path = fetchurl {
+        name = "ini___ini_1.3.8.tgz";
+        url  = "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz";
+        sha1 = "a29da425b48806f34767a4efce397269af28432c";
+      };
+    }
+    {
+      name = "init_package_json___init_package_json_1.10.3.tgz";
+      path = fetchurl {
+        name = "init_package_json___init_package_json_1.10.3.tgz";
+        url  = "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz";
+        sha1 = "45ffe2f610a8ca134f2bd1db5637b235070f6cbe";
+      };
+    }
+    {
+      name = "inquirer___inquirer_7.3.2.tgz";
+      path = fetchurl {
+        name = "inquirer___inquirer_7.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.2.tgz";
+        sha1 = "25245d2e32dc9f33dbe26eeaada231daa66e9c7c";
+      };
+    }
+    {
+      name = "internal_slot___internal_slot_1.0.2.tgz";
+      path = fetchurl {
+        name = "internal_slot___internal_slot_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz";
+        sha1 = "9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3";
+      };
+    }
+    {
+      name = "invert_kv___invert_kv_1.0.0.tgz";
+      path = fetchurl {
+        name = "invert_kv___invert_kv_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz";
+        sha1 = "104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6";
+      };
+    }
+    {
+      name = "ip_regex___ip_regex_2.1.0.tgz";
+      path = fetchurl {
+        name = "ip_regex___ip_regex_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz";
+        sha1 = "fa78bf5d2e6913c911ce9f819ee5146bb6d844e9";
+      };
+    }
+    {
+      name = "ip___ip_1.1.5.tgz";
+      path = fetchurl {
+        name = "ip___ip_1.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz";
+        sha1 = "bdded70114290828c0a039e72ef25f5aaec4354a";
+      };
+    }
+    {
+      name = "is_arrayish___is_arrayish_0.2.1.tgz";
+      path = fetchurl {
+        name = "is_arrayish___is_arrayish_0.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz";
+        sha1 = "77c99840527aa8ecb1a8ba697b80645a7a926a9d";
+      };
+    }
+    {
+      name = "is_callable___is_callable_1.1.4.tgz";
+      path = fetchurl {
+        name = "is_callable___is_callable_1.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz";
+        sha1 = "1e1adf219e1eeb684d691f9d6a05ff0d30a24d75";
+      };
+    }
+    {
+      name = "is_callable___is_callable_1.2.0.tgz";
+      path = fetchurl {
+        name = "is_callable___is_callable_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz";
+        sha1 = "83336560b54a38e35e3a2df7afd0454d691468bb";
+      };
+    }
+    {
+      name = "is_ci___is_ci_1.2.1.tgz";
+      path = fetchurl {
+        name = "is_ci___is_ci_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz";
+        sha1 = "e3779c8ee17fccf428488f6e281187f2e632841c";
+      };
+    }
+    {
+      name = "is_ci___is_ci_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_ci___is_ci_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz";
+        sha1 = "6bc6334181810e04b5c22b3d589fdca55026404c";
+      };
+    }
+    {
+      name = "is_cidr___is_cidr_3.1.0.tgz";
+      path = fetchurl {
+        name = "is_cidr___is_cidr_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.0.tgz";
+        sha1 = "72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f";
+      };
+    }
+    {
+      name = "is_date_object___is_date_object_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_date_object___is_date_object_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz";
+        sha1 = "9aa20eb6aeebbff77fbd33e74ca01b33581d3a16";
+      };
+    }
+    {
+      name = "is_extglob___is_extglob_2.1.1.tgz";
+      path = fetchurl {
+        name = "is_extglob___is_extglob_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz";
+        sha1 = "a88c02535791f02ed37c76a1b9ea9773c833f8c2";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz";
+        sha1 = "a3b30a5c4f199183167aaab93beefae3ddfb654f";
+      };
+    }
+    {
+      name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz";
+      path = fetchurl {
+        name = "is_fullwidth_code_point___is_fullwidth_code_point_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz";
+        sha1 = "f116f8064fe90b3f7844a38997c0b75051269f1d";
+      };
+    }
+    {
+      name = "is_function___is_function_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_function___is_function_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz";
+        sha1 = "12cfb98b65b57dd3d193a3121f5f6e2f437602b5";
+      };
+    }
+    {
+      name = "is_glob___is_glob_4.0.1.tgz";
+      path = fetchurl {
+        name = "is_glob___is_glob_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz";
+        sha1 = "7567dbe9f2f5e2467bc77ab83c4a29482407a5dc";
+      };
+    }
+    {
+      name = "is_installed_globally___is_installed_globally_0.1.0.tgz";
+      path = fetchurl {
+        name = "is_installed_globally___is_installed_globally_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz";
+        sha1 = "0dfd98f5a9111716dd535dda6492f67bf3d25a80";
+      };
+    }
+    {
+      name = "is_installed_globally___is_installed_globally_0.3.1.tgz";
+      path = fetchurl {
+        name = "is_installed_globally___is_installed_globally_0.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.1.tgz";
+        sha1 = "679afef819347a72584617fd19497f010b8ed35f";
+      };
+    }
+    {
+      name = "is_npm___is_npm_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_npm___is_npm_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz";
+        sha1 = "f2fb63a65e4905b406c86072765a1a4dc793b9f4";
+      };
+    }
+    {
+      name = "is_npm___is_npm_4.0.0.tgz";
+      path = fetchurl {
+        name = "is_npm___is_npm_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz";
+        sha1 = "c90dd8380696df87a7a6d823c20d0b12bbe3c84d";
+      };
+    }
+    {
+      name = "is_obj___is_obj_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_obj___is_obj_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz";
+        sha1 = "3e4729ac1f5fde025cd7d83a896dab9f4f67db0f";
+      };
+    }
+    {
+      name = "is_obj___is_obj_2.0.0.tgz";
+      path = fetchurl {
+        name = "is_obj___is_obj_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz";
+        sha1 = "473fb05d973705e3fd9620545018ca8e22ef4982";
+      };
+    }
+    {
+      name = "is_path_inside___is_path_inside_1.0.1.tgz";
+      path = fetchurl {
+        name = "is_path_inside___is_path_inside_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz";
+        sha1 = "8ef5b7de50437a3fdca6b4e865ef7aa55cb48036";
+      };
+    }
+    {
+      name = "is_path_inside___is_path_inside_3.0.2.tgz";
+      path = fetchurl {
+        name = "is_path_inside___is_path_inside_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz";
+        sha1 = "f5220fc82a3e233757291dddc9c5877f2a1f3017";
+      };
+    }
+    {
+      name = "is_redirect___is_redirect_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_redirect___is_redirect_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz";
+        sha1 = "1d03dded53bd8db0f30c26e4f95d36fc7c87dc24";
+      };
+    }
+    {
+      name = "is_regex___is_regex_1.0.4.tgz";
+      path = fetchurl {
+        name = "is_regex___is_regex_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz";
+        sha1 = "5517489b547091b0930e095654ced25ee97e9491";
+      };
+    }
+    {
+      name = "is_regex___is_regex_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_regex___is_regex_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz";
+        sha1 = "ece38e389e490df0dc21caea2bd596f987f767ff";
+      };
+    }
+    {
+      name = "is_retry_allowed___is_retry_allowed_1.2.0.tgz";
+      path = fetchurl {
+        name = "is_retry_allowed___is_retry_allowed_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz";
+        sha1 = "d778488bd0a4666a3be8a1482b9f2baafedea8b4";
+      };
+    }
+    {
+      name = "is_stream___is_stream_1.1.0.tgz";
+      path = fetchurl {
+        name = "is_stream___is_stream_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    }
+    {
+      name = "is_string___is_string_1.0.5.tgz";
+      path = fetchurl {
+        name = "is_string___is_string_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz";
+        sha1 = "40493ed198ef3ff477b8c7f92f644ec82a5cd3a6";
+      };
+    }
+    {
+      name = "is_symbol___is_symbol_1.0.3.tgz";
+      path = fetchurl {
+        name = "is_symbol___is_symbol_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz";
+        sha1 = "38e1014b9e6329be0de9d24a414fd7441ec61937";
+      };
+    }
+    {
+      name = "is_typedarray___is_typedarray_1.0.0.tgz";
+      path = fetchurl {
+        name = "is_typedarray___is_typedarray_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    }
+    {
+      name = "is_yarn_global___is_yarn_global_0.3.0.tgz";
+      path = fetchurl {
+        name = "is_yarn_global___is_yarn_global_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz";
+        sha1 = "d502d3382590ea3004893746754c89139973e232";
+      };
+    }
+    {
+      name = "isarray___isarray_0.0.1.tgz";
+      path = fetchurl {
+        name = "isarray___isarray_0.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz";
+        sha1 = "8a18acfca9a8f4177e09abfc6038939b05d1eedf";
+      };
+    }
+    {
+      name = "isarray___isarray_1.0.0.tgz";
+      path = fetchurl {
+        name = "isarray___isarray_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    }
+    {
+      name = "isbinaryfile___isbinaryfile_4.0.6.tgz";
+      path = fetchurl {
+        name = "isbinaryfile___isbinaryfile_4.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.6.tgz";
+        sha1 = "edcb62b224e2b4710830b67498c8e4e5a4d2610b";
+      };
+    }
+    {
+      name = "isexe___isexe_2.0.0.tgz";
+      path = fetchurl {
+        name = "isexe___isexe_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz";
+        sha1 = "e8fbf374dc556ff8947a10dcb0572d633f2cfa10";
+      };
+    }
+    {
+      name = "isstream___isstream_0.1.2.tgz";
+      path = fetchurl {
+        name = "isstream___isstream_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    }
+    {
+      name = "jake___jake_10.8.2.tgz";
+      path = fetchurl {
+        name = "jake___jake_10.8.2.tgz";
+        url  = "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz";
+        sha1 = "ebc9de8558160a66d82d0eadc6a2e58fbc500a7b";
+      };
+    }
+    {
+      name = "jimp___jimp_0.16.1.tgz";
+      path = fetchurl {
+        name = "jimp___jimp_0.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/jimp/-/jimp-0.16.1.tgz";
+        sha1 = "192f851a30e5ca11112a3d0aa53137659a78ca7a";
+      };
+    }
+    {
+      name = "jpeg_js___jpeg_js_0.4.2.tgz";
+      path = fetchurl {
+        name = "jpeg_js___jpeg_js_0.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.2.tgz";
+        sha1 = "8b345b1ae4abde64c2da2fe67ea216a114ac279d";
+      };
+    }
+    {
+      name = "js_tokens___js_tokens_4.0.0.tgz";
+      path = fetchurl {
+        name = "js_tokens___js_tokens_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz";
+        sha1 = "19203fb59991df98e3a287050d4647cdeaf32499";
+      };
+    }
+    {
+      name = "js_yaml___js_yaml_3.13.1.tgz";
+      path = fetchurl {
+        name = "js_yaml___js_yaml_3.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz";
+        sha1 = "aff151b30bfdfa8e49e05da22e7415e9dfa37847";
+      };
+    }
+    {
+      name = "js_yaml___js_yaml_3.14.0.tgz";
+      path = fetchurl {
+        name = "js_yaml___js_yaml_3.14.0.tgz";
+        url  = "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.0.tgz";
+        sha1 = "a7a34170f26a21bb162424d8adacb4113a69e482";
+      };
+    }
+    {
+      name = "jsbn___jsbn_0.1.1.tgz";
+      path = fetchurl {
+        name = "jsbn___jsbn_0.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    }
+    {
+      name = "jsesc___jsesc_2.5.2.tgz";
+      path = fetchurl {
+        name = "jsesc___jsesc_2.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz";
+        sha1 = "80564d2e483dacf6e8ef209650a67df3f0c283a4";
+      };
+    }
+    {
+      name = "json_buffer___json_buffer_3.0.0.tgz";
+      path = fetchurl {
+        name = "json_buffer___json_buffer_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz";
+        sha1 = "5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898";
+      };
+    }
+    {
+      name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+      path = fetchurl {
+        name = "json_parse_better_errors___json_parse_better_errors_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz";
+        sha1 = "bb867cfb3450e69107c131d1c514bab3dc8bcaa9";
+      };
+    }
+    {
+      name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+      path = fetchurl {
+        name = "json_schema_traverse___json_schema_traverse_0.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha1 = "69f6a87d9513ab8bb8fe63bdb0979c448e684660";
+      };
+    }
+    {
+      name = "json_schema_typed___json_schema_typed_7.0.3.tgz";
+      path = fetchurl {
+        name = "json_schema_typed___json_schema_typed_7.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz";
+        sha1 = "23ff481b8b4eebcd2ca123b4fa0409e66469a2d9";
+      };
+    }
+    {
+      name = "json_schema___json_schema_0.2.3.tgz";
+      path = fetchurl {
+        name = "json_schema___json_schema_0.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    }
+    {
+      name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+      path = fetchurl {
+        name = "json_stable_stringify_without_jsonify___json_stable_stringify_without_jsonify_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz";
+        sha1 = "9db7b59496ad3f3cfef30a75142d2d930ad72651";
+      };
+    }
+    {
+      name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz";
+      path = fetchurl {
+        name = "json_stringify_safe___json_stringify_safe_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    }
+    {
+      name = "json5___json5_1.0.1.tgz";
+      path = fetchurl {
+        name = "json5___json5_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz";
+        sha1 = "779fb0018604fa854eacbf6252180d83543e3dbe";
+      };
+    }
+    {
+      name = "json5___json5_2.1.3.tgz";
+      path = fetchurl {
+        name = "json5___json5_2.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz";
+        sha1 = "c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43";
+      };
+    }
+    {
+      name = "jsonfile___jsonfile_4.0.0.tgz";
+      path = fetchurl {
+        name = "jsonfile___jsonfile_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz";
+        sha1 = "8771aae0799b64076b76640fca058f9c10e33ecb";
+      };
+    }
+    {
+      name = "jsonfile___jsonfile_6.0.1.tgz";
+      path = fetchurl {
+        name = "jsonfile___jsonfile_6.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz";
+        sha1 = "98966cba214378c8c84b82e085907b40bf614179";
+      };
+    }
+    {
+      name = "jsonparse___jsonparse_1.3.1.tgz";
+      path = fetchurl {
+        name = "jsonparse___jsonparse_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz";
+        sha1 = "3f4dae4a91fac315f71062f8521cc239f1366280";
+      };
+    }
+    {
+      name = "jsprim___jsprim_1.4.1.tgz";
+      path = fetchurl {
+        name = "jsprim___jsprim_1.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    }
+    {
+      name = "jsx_ast_utils___jsx_ast_utils_2.4.1.tgz";
+      path = fetchurl {
+        name = "jsx_ast_utils___jsx_ast_utils_2.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.4.1.tgz";
+        sha1 = "1114a4c1209481db06c690c2b4f488cc665f657e";
+      };
+    }
+    {
+      name = "jszip___jszip_3.5.0.tgz";
+      path = fetchurl {
+        name = "jszip___jszip_3.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/jszip/-/jszip-3.5.0.tgz";
+        sha1 = "b4fd1f368245346658e781fec9675802489e15f6";
+      };
+    }
+    {
+      name = "keyv___keyv_3.1.0.tgz";
+      path = fetchurl {
+        name = "keyv___keyv_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz";
+        sha1 = "ecc228486f69991e49e9476485a5be1e8fc5c4d9";
+      };
+    }
+    {
+      name = "latest_version___latest_version_3.1.0.tgz";
+      path = fetchurl {
+        name = "latest_version___latest_version_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz";
+        sha1 = "a205383fea322b33b5ae3b18abee0dc2f356ee15";
+      };
+    }
+    {
+      name = "latest_version___latest_version_5.1.0.tgz";
+      path = fetchurl {
+        name = "latest_version___latest_version_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz";
+        sha1 = "119dfe908fe38d15dfa43ecd13fa12ec8832face";
+      };
+    }
+    {
+      name = "lazy_property___lazy_property_1.0.0.tgz";
+      path = fetchurl {
+        name = "lazy_property___lazy_property_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lazy-property/-/lazy-property-1.0.0.tgz";
+        sha1 = "84ddc4b370679ba8bd4cdcfa4c06b43d57111147";
+      };
+    }
+    {
+      name = "lazy_val___lazy_val_1.0.4.tgz";
+      path = fetchurl {
+        name = "lazy_val___lazy_val_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/lazy-val/-/lazy-val-1.0.4.tgz";
+        sha1 = "882636a7245c2cfe6e0a4e3ba6c5d68a137e5c65";
+      };
+    }
+    {
+      name = "lazystream___lazystream_1.0.0.tgz";
+      path = fetchurl {
+        name = "lazystream___lazystream_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz";
+        sha1 = "f6995fe0f820392f61396be89462407bb77168e4";
+      };
+    }
+    {
+      name = "lcid___lcid_1.0.0.tgz";
+      path = fetchurl {
+        name = "lcid___lcid_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz";
+        sha1 = "308accafa0bc483a3867b4b6f2b9506251d1b835";
+      };
+    }
+    {
+      name = "levn___levn_0.3.0.tgz";
+      path = fetchurl {
+        name = "levn___levn_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz";
+        sha1 = "3b09924edf9f083c0490fdd4c0bc4421e04764ee";
+      };
+    }
+    {
+      name = "levn___levn_0.4.1.tgz";
+      path = fetchurl {
+        name = "levn___levn_0.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz";
+        sha1 = "ae4562c007473b932a6200d403268dd2fffc6ade";
+      };
+    }
+    {
+      name = "libcipm___libcipm_4.0.8.tgz";
+      path = fetchurl {
+        name = "libcipm___libcipm_4.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.8.tgz";
+        sha1 = "dcea4919e10dfbce420327e63901613b9141bc89";
+      };
+    }
+    {
+      name = "libnpm___libnpm_3.0.1.tgz";
+      path = fetchurl {
+        name = "libnpm___libnpm_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/libnpm/-/libnpm-3.0.1.tgz";
+        sha1 = "0be11b4c9dd4d1ffd7d95c786e92e55d65be77a2";
+      };
+    }
+    {
+      name = "libnpmaccess___libnpmaccess_3.0.2.tgz";
+      path = fetchurl {
+        name = "libnpmaccess___libnpmaccess_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmaccess/-/libnpmaccess-3.0.2.tgz";
+        sha1 = "8b2d72345ba3bef90d3b4f694edd5c0417f58923";
+      };
+    }
+    {
+      name = "libnpmconfig___libnpmconfig_1.2.1.tgz";
+      path = fetchurl {
+        name = "libnpmconfig___libnpmconfig_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmconfig/-/libnpmconfig-1.2.1.tgz";
+        sha1 = "c0c2f793a74e67d4825e5039e7a02a0044dfcbc0";
+      };
+    }
+    {
+      name = "libnpmhook___libnpmhook_5.0.3.tgz";
+      path = fetchurl {
+        name = "libnpmhook___libnpmhook_5.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmhook/-/libnpmhook-5.0.3.tgz";
+        sha1 = "4020c0f5edbf08ebe395325caa5ea01885b928f7";
+      };
+    }
+    {
+      name = "libnpmorg___libnpmorg_1.0.1.tgz";
+      path = fetchurl {
+        name = "libnpmorg___libnpmorg_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmorg/-/libnpmorg-1.0.1.tgz";
+        sha1 = "5d2503f6ceb57f33dbdcc718e6698fea6d5ad087";
+      };
+    }
+    {
+      name = "libnpmpublish___libnpmpublish_1.1.3.tgz";
+      path = fetchurl {
+        name = "libnpmpublish___libnpmpublish_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz";
+        sha1 = "e3782796722d79eef1a0a22944c117e0c4ca4280";
+      };
+    }
+    {
+      name = "libnpmsearch___libnpmsearch_2.0.2.tgz";
+      path = fetchurl {
+        name = "libnpmsearch___libnpmsearch_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmsearch/-/libnpmsearch-2.0.2.tgz";
+        sha1 = "9a4f059102d38e3dd44085bdbfe5095f2a5044cf";
+      };
+    }
+    {
+      name = "libnpmteam___libnpmteam_1.0.2.tgz";
+      path = fetchurl {
+        name = "libnpmteam___libnpmteam_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/libnpmteam/-/libnpmteam-1.0.2.tgz";
+        sha1 = "8b48bcbb6ce70dd8150c950fcbdbf3feb6eec820";
+      };
+    }
+    {
+      name = "libnpx___libnpx_10.2.4.tgz";
+      path = fetchurl {
+        name = "libnpx___libnpx_10.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/libnpx/-/libnpx-10.2.4.tgz";
+        sha1 = "ef0e3258e29aef2ec7ee3276115e20e67f67d4ee";
+      };
+    }
+    {
+      name = "lie___lie_3.3.0.tgz";
+      path = fetchurl {
+        name = "lie___lie_3.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz";
+        sha1 = "dcf82dee545f46074daf200c7c1c5a08e0f40f6a";
+      };
+    }
+    {
+      name = "load_bmfont___load_bmfont_1.4.1.tgz";
+      path = fetchurl {
+        name = "load_bmfont___load_bmfont_1.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.1.tgz";
+        sha1 = "c0f5f4711a1e2ccff725a7b6078087ccfcddd3e9";
+      };
+    }
+    {
+      name = "load_json_file___load_json_file_2.0.0.tgz";
+      path = fetchurl {
+        name = "load_json_file___load_json_file_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz";
+        sha1 = "7947e42149af80d696cbf797bcaabcfe1fe29ca8";
+      };
+    }
+    {
+      name = "locate_path___locate_path_2.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz";
+        sha1 = "2b568b265eec944c6d9c0de9c3dbbbca0354cd8e";
+      };
+    }
+    {
+      name = "locate_path___locate_path_3.0.0.tgz";
+      path = fetchurl {
+        name = "locate_path___locate_path_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz";
+        sha1 = "dbec3b3ab759758071b58fe59fc41871af21400e";
+      };
+    }
+    {
+      name = "lock_verify___lock_verify_2.2.0.tgz";
+      path = fetchurl {
+        name = "lock_verify___lock_verify_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/lock-verify/-/lock-verify-2.2.0.tgz";
+        sha1 = "12432feb68bb647071c78c44bde16029a0f7d935";
+      };
+    }
+    {
+      name = "lockfile___lockfile_1.0.4.tgz";
+      path = fetchurl {
+        name = "lockfile___lockfile_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz";
+        sha1 = "07f819d25ae48f87e538e6578b6964a4981a5609";
+      };
+    }
+    {
+      name = "lodash._baseuniq___lodash._baseuniq_4.6.0.tgz";
+      path = fetchurl {
+        name = "lodash._baseuniq___lodash._baseuniq_4.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz";
+        sha1 = "0ebb44e456814af7905c6212fa2c9b2d51b841e8";
+      };
+    }
+    {
+      name = "lodash._createset___lodash._createset_4.0.3.tgz";
+      path = fetchurl {
+        name = "lodash._createset___lodash._createset_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz";
+        sha1 = "0f4659fbb09d75194fa9e2b88a6644d363c9fe26";
+      };
+    }
+    {
+      name = "lodash._root___lodash._root_3.0.1.tgz";
+      path = fetchurl {
+        name = "lodash._root___lodash._root_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz";
+        sha1 = "fba1c4524c19ee9a5f8136b4609f017cf4ded692";
+      };
+    }
+    {
+      name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz";
+      path = fetchurl {
+        name = "lodash.clonedeep___lodash.clonedeep_4.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz";
+        sha1 = "e23f3f9c4f8fbdde872529c1071857a086e5ccef";
+      };
+    }
+    {
+      name = "lodash.defaults___lodash.defaults_4.2.0.tgz";
+      path = fetchurl {
+        name = "lodash.defaults___lodash.defaults_4.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz";
+        sha1 = "d09178716ffea4dde9e5fb7b37f6f0802274580c";
+      };
+    }
+    {
+      name = "lodash.difference___lodash.difference_4.5.0.tgz";
+      path = fetchurl {
+        name = "lodash.difference___lodash.difference_4.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz";
+        sha1 = "9ccb4e505d486b91651345772885a2df27fd017c";
+      };
+    }
+    {
+      name = "lodash.flatten___lodash.flatten_4.4.0.tgz";
+      path = fetchurl {
+        name = "lodash.flatten___lodash.flatten_4.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz";
+        sha1 = "f31c22225a9632d2bbf8e4addbef240aa765a61f";
+      };
+    }
+    {
+      name = "lodash.isplainobject___lodash.isplainobject_4.0.6.tgz";
+      path = fetchurl {
+        name = "lodash.isplainobject___lodash.isplainobject_4.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz";
+        sha1 = "7c526a52d89b45c45cc690b88163be0497f550cb";
+      };
+    }
+    {
+      name = "lodash.union___lodash.union_4.6.0.tgz";
+      path = fetchurl {
+        name = "lodash.union___lodash.union_4.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz";
+        sha1 = "48bb5088409f16f1821666641c44dd1aaae3cd88";
+      };
+    }
+    {
+      name = "lodash.uniq___lodash.uniq_4.5.0.tgz";
+      path = fetchurl {
+        name = "lodash.uniq___lodash.uniq_4.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz";
+        sha1 = "d0225373aeb652adc1bc82e4945339a842754773";
+      };
+    }
+    {
+      name = "lodash.without___lodash.without_4.4.0.tgz";
+      path = fetchurl {
+        name = "lodash.without___lodash.without_4.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/lodash.without/-/lodash.without-4.4.0.tgz";
+        sha1 = "3cd4574a00b67bae373a94b748772640507b7aac";
+      };
+    }
+    {
+      name = "lodash___lodash_4.17.15.tgz";
+      path = fetchurl {
+        name = "lodash___lodash_4.17.15.tgz";
+        url  = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz";
+        sha1 = "b447f6670a0455bbfeedd11392eff330ea097548";
+      };
+    }
+    {
+      name = "lodash___lodash_4.17.19.tgz";
+      path = fetchurl {
+        name = "lodash___lodash_4.17.19.tgz";
+        url  = "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz";
+        sha1 = "e48ddedbe30b3321783c5b4301fbd353bc1e4a4b";
+      };
+    }
+    {
+      name = "loose_envify___loose_envify_1.4.0.tgz";
+      path = fetchurl {
+        name = "loose_envify___loose_envify_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz";
+        sha1 = "71ee51fa7be4caec1a63839f7e682d8132d30caf";
+      };
+    }
+    {
+      name = "lowercase_keys___lowercase_keys_1.0.1.tgz";
+      path = fetchurl {
+        name = "lowercase_keys___lowercase_keys_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz";
+        sha1 = "6f9e30b47084d971a7c820ff15a6c5167b74c26f";
+      };
+    }
+    {
+      name = "lowercase_keys___lowercase_keys_2.0.0.tgz";
+      path = fetchurl {
+        name = "lowercase_keys___lowercase_keys_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz";
+        sha1 = "2603e78b7b4b0006cbca2fbcc8a3202558ac9479";
+      };
+    }
+    {
+      name = "lru_cache___lru_cache_4.1.5.tgz";
+      path = fetchurl {
+        name = "lru_cache___lru_cache_4.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz";
+        sha1 = "8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd";
+      };
+    }
+    {
+      name = "lru_cache___lru_cache_5.1.1.tgz";
+      path = fetchurl {
+        name = "lru_cache___lru_cache_5.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz";
+        sha1 = "1da27e6710271947695daf6848e847f01d84b920";
+      };
+    }
+    {
+      name = "lru_cache___lru_cache_6.0.0.tgz";
+      path = fetchurl {
+        name = "lru_cache___lru_cache_6.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz";
+        sha1 = "6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94";
+      };
+    }
+    {
+      name = "make_dir___make_dir_1.3.0.tgz";
+      path = fetchurl {
+        name = "make_dir___make_dir_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz";
+        sha1 = "79c1033b80515bd6d24ec9933e860ca75ee27f0c";
+      };
+    }
+    {
+      name = "make_dir___make_dir_3.0.2.tgz";
+      path = fetchurl {
+        name = "make_dir___make_dir_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz";
+        sha1 = "04a1acbf22221e1d6ef43559f43e05a90dbb4392";
+      };
+    }
+    {
+      name = "make_dir___make_dir_3.1.0.tgz";
+      path = fetchurl {
+        name = "make_dir___make_dir_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz";
+        sha1 = "415e967046b3a7f1d185277d84aa58203726a13f";
+      };
+    }
+    {
+      name = "make_fetch_happen___make_fetch_happen_5.0.2.tgz";
+      path = fetchurl {
+        name = "make_fetch_happen___make_fetch_happen_5.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz";
+        sha1 = "aa8387104f2687edca01c8687ee45013d02d19bd";
+      };
+    }
+    {
+      name = "meant___meant_1.0.3.tgz";
+      path = fetchurl {
+        name = "meant___meant_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz";
+        sha1 = "67769af9de1d158773e928ae82c456114903554c";
+      };
+    }
+    {
+      name = "mem___mem_1.1.0.tgz";
+      path = fetchurl {
+        name = "mem___mem_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz";
+        sha1 = "5edd52b485ca1d900fe64895505399a0dfa45f76";
+      };
+    }
+    {
+      name = "mime_db___mime_db_1.42.0.tgz";
+      path = fetchurl {
+        name = "mime_db___mime_db_1.42.0.tgz";
+        url  = "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz";
+        sha1 = "3e252907b4c7adb906597b4b65636272cf9e7bac";
+      };
+    }
+    {
+      name = "mime_types___mime_types_2.1.25.tgz";
+      path = fetchurl {
+        name = "mime_types___mime_types_2.1.25.tgz";
+        url  = "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz";
+        sha1 = "39772d46621f93e2a80a856c53b86a62156a6437";
+      };
+    }
+    {
+      name = "mime___mime_1.6.0.tgz";
+      path = fetchurl {
+        name = "mime___mime_1.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz";
+        sha1 = "32cd9e5c64553bd58d19a568af452acff04981b1";
+      };
+    }
+    {
+      name = "mime___mime_2.5.0.tgz";
+      path = fetchurl {
+        name = "mime___mime_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/mime/-/mime-2.5.0.tgz";
+        sha1 = "2b4af934401779806ee98026bb42e8c1ae1876b1";
+      };
+    }
+    {
+      name = "mimic_fn___mimic_fn_1.2.0.tgz";
+      path = fetchurl {
+        name = "mimic_fn___mimic_fn_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz";
+        sha1 = "820c86a39334640e99516928bd03fca88057d022";
+      };
+    }
+    {
+      name = "mimic_fn___mimic_fn_2.1.0.tgz";
+      path = fetchurl {
+        name = "mimic_fn___mimic_fn_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz";
+        sha1 = "7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b";
+      };
+    }
+    {
+      name = "mimic_fn___mimic_fn_3.1.0.tgz";
+      path = fetchurl {
+        name = "mimic_fn___mimic_fn_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz";
+        sha1 = "65755145bbf3e36954b949c16450427451d5ca74";
+      };
+    }
+    {
+      name = "mimic_response___mimic_response_1.0.1.tgz";
+      path = fetchurl {
+        name = "mimic_response___mimic_response_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz";
+        sha1 = "4923538878eef42063cb8a3e3b0798781487ab1b";
+      };
+    }
+    {
+      name = "min_document___min_document_2.19.0.tgz";
+      path = fetchurl {
+        name = "min_document___min_document_2.19.0.tgz";
+        url  = "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz";
+        sha1 = "7bd282e3f5842ed295bb748cdd9f1ffa2c824685";
+      };
+    }
+    {
+      name = "minimatch___minimatch_3.0.4.tgz";
+      path = fetchurl {
+        name = "minimatch___minimatch_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz";
+        sha1 = "5166e286457f03306064be5497e8dbb0c3d32083";
+      };
+    }
+    {
+      name = "minimist___minimist_0.0.8.tgz";
+      path = fetchurl {
+        name = "minimist___minimist_0.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz";
+        sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+      };
+    }
+    {
+      name = "minimist___minimist_1.2.3.tgz";
+      path = fetchurl {
+        name = "minimist___minimist_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.3.tgz";
+        sha1 = "3db5c0765545ab8637be71f333a104a965a9ca3f";
+      };
+    }
+    {
+      name = "minimist___minimist_1.2.5.tgz";
+      path = fetchurl {
+        name = "minimist___minimist_1.2.5.tgz";
+        url  = "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz";
+        sha1 = "67d66014b66a6a8aaa0c083c5fd58df4e4e97602";
+      };
+    }
+    {
+      name = "minipass___minipass_2.9.0.tgz";
+      path = fetchurl {
+        name = "minipass___minipass_2.9.0.tgz";
+        url  = "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz";
+        sha1 = "e713762e7d3e32fed803115cf93e04bca9fcc9a6";
+      };
+    }
+    {
+      name = "minipass___minipass_3.1.1.tgz";
+      path = fetchurl {
+        name = "minipass___minipass_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz";
+        sha1 = "7607ce778472a185ad6d89082aa2070f79cedcd5";
+      };
+    }
+    {
+      name = "minizlib___minizlib_1.3.3.tgz";
+      path = fetchurl {
+        name = "minizlib___minizlib_1.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz";
+        sha1 = "2290de96818a34c29551c8a8d301216bd65a861d";
+      };
+    }
+    {
+      name = "minizlib___minizlib_2.1.2.tgz";
+      path = fetchurl {
+        name = "minizlib___minizlib_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz";
+        sha1 = "e90d3466ba209b932451508a11ce3d3632145931";
+      };
+    }
+    {
+      name = "mississippi___mississippi_3.0.0.tgz";
+      path = fetchurl {
+        name = "mississippi___mississippi_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz";
+        sha1 = "ea0a3291f97e0b5e8776b363d5f0a12d94c67022";
+      };
+    }
+    {
+      name = "mkdirp___mkdirp_0.5.1.tgz";
+      path = fetchurl {
+        name = "mkdirp___mkdirp_0.5.1.tgz";
+        url  = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz";
+        sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+      };
+    }
+    {
+      name = "mkdirp___mkdirp_0.5.5.tgz";
+      path = fetchurl {
+        name = "mkdirp___mkdirp_0.5.5.tgz";
+        url  = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz";
+        sha1 = "d91cefd62d1436ca0f41620e251288d420099def";
+      };
+    }
+    {
+      name = "mkdirp___mkdirp_1.0.3.tgz";
+      path = fetchurl {
+        name = "mkdirp___mkdirp_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz";
+        sha1 = "4cf2e30ad45959dddea53ad97d518b6c8205e1ea";
+      };
+    }
+    {
+      name = "move_concurrently___move_concurrently_1.0.1.tgz";
+      path = fetchurl {
+        name = "move_concurrently___move_concurrently_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz";
+        sha1 = "be2c005fda32e0b29af1f05d7c4b33214c701f92";
+      };
+    }
+    {
+      name = "ms___ms_2.0.0.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz";
+        sha1 = "5608aeadfc00be6c2901df5f9861788de0d597c8";
+      };
+    }
+    {
+      name = "ms___ms_2.1.2.tgz";
+      path = fetchurl {
+        name = "ms___ms_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz";
+        sha1 = "d09d1f357b443f493382a8eb3ccd183872ae6009";
+      };
+    }
+    {
+      name = "mute_stream___mute_stream_0.0.8.tgz";
+      path = fetchurl {
+        name = "mute_stream___mute_stream_0.0.8.tgz";
+        url  = "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz";
+        sha1 = "1630c42b2251ff81e2a283de96a5497ea92e5e0d";
+      };
+    }
+    {
+      name = "natural_compare___natural_compare_1.4.0.tgz";
+      path = fetchurl {
+        name = "natural_compare___natural_compare_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz";
+        sha1 = "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7";
+      };
+    }
+    {
+      name = "needle___needle_2.5.0.tgz";
+      path = fetchurl {
+        name = "needle___needle_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/needle/-/needle-2.5.0.tgz";
+        sha1 = "e6fc4b3cc6c25caed7554bd613a5cf0bac8c31c0";
+      };
+    }
+    {
+      name = "nice_try___nice_try_1.0.5.tgz";
+      path = fetchurl {
+        name = "nice_try___nice_try_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz";
+        sha1 = "a3378a7696ce7d223e88fc9b764bd7ef1089e366";
+      };
+    }
+    {
+      name = "node_fetch_npm___node_fetch_npm_2.0.2.tgz";
+      path = fetchurl {
+        name = "node_fetch_npm___node_fetch_npm_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz";
+        sha1 = "7258c9046182dca345b4208eda918daf33697ff7";
+      };
+    }
+    {
+      name = "node_gyp___node_gyp_5.1.0.tgz";
+      path = fetchurl {
+        name = "node_gyp___node_gyp_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.0.tgz";
+        sha1 = "8e31260a7af4a2e2f994b0673d4e0b3866156332";
+      };
+    }
+    {
+      name = "node_gyp___node_gyp_5.1.1.tgz";
+      path = fetchurl {
+        name = "node_gyp___node_gyp_5.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.1.1.tgz";
+        sha1 = "eb915f7b631c937d282e33aed44cb7a025f62a3e";
+      };
+    }
+    {
+      name = "node_pre_gyp___node_pre_gyp_0.15.0.tgz";
+      path = fetchurl {
+        name = "node_pre_gyp___node_pre_gyp_0.15.0.tgz";
+        url  = "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz";
+        sha1 = "c2fc383276b74c7ffa842925241553e8b40f1087";
+      };
+    }
+    {
+      name = "nopt___nopt_4.0.1.tgz";
+      path = fetchurl {
+        name = "nopt___nopt_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz";
+        sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d";
+      };
+    }
+    {
+      name = "nopt___nopt_4.0.3.tgz";
+      path = fetchurl {
+        name = "nopt___nopt_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz";
+        sha1 = "a375cad9d02fd921278d954c2254d5aa57e15e48";
+      };
+    }
+    {
+      name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+      path = fetchurl {
+        name = "normalize_package_data___normalize_package_data_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz";
+        sha1 = "e66db1838b200c1dfc233225d12cb36520e234a8";
+      };
+    }
+    {
+      name = "normalize_path___normalize_path_3.0.0.tgz";
+      path = fetchurl {
+        name = "normalize_path___normalize_path_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz";
+        sha1 = "0dcd69ff23a1c9b11fd0978316644a0388216a65";
+      };
+    }
+    {
+      name = "normalize_url___normalize_url_4.5.0.tgz";
+      path = fetchurl {
+        name = "normalize_url___normalize_url_4.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz";
+        sha1 = "453354087e6ca96957bd8f5baf753f5982142129";
+      };
+    }
+    {
+      name = "npm_audit_report___npm_audit_report_1.3.3.tgz";
+      path = fetchurl {
+        name = "npm_audit_report___npm_audit_report_1.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/npm-audit-report/-/npm-audit-report-1.3.3.tgz";
+        sha1 = "8226deeb253b55176ed147592a3995442f2179ed";
+      };
+    }
+    {
+      name = "npm_bundled___npm_bundled_1.1.1.tgz";
+      path = fetchurl {
+        name = "npm_bundled___npm_bundled_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz";
+        sha1 = "1edd570865a94cdb1bc8220775e29466c9fb234b";
+      };
+    }
+    {
+      name = "npm_cache_filename___npm_cache_filename_1.0.2.tgz";
+      path = fetchurl {
+        name = "npm_cache_filename___npm_cache_filename_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz";
+        sha1 = "ded306c5b0bfc870a9e9faf823bc5f283e05ae11";
+      };
+    }
+    {
+      name = "npm_install_checks___npm_install_checks_3.0.2.tgz";
+      path = fetchurl {
+        name = "npm_install_checks___npm_install_checks_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz";
+        sha1 = "ab2e32ad27baa46720706908e5b14c1852de44d9";
+      };
+    }
+    {
+      name = "npm_lifecycle___npm_lifecycle_3.1.4.tgz";
+      path = fetchurl {
+        name = "npm_lifecycle___npm_lifecycle_3.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz";
+        sha1 = "de6975c7d8df65f5150db110b57cce498b0b604c";
+      };
+    }
+    {
+      name = "npm_lifecycle___npm_lifecycle_3.1.5.tgz";
+      path = fetchurl {
+        name = "npm_lifecycle___npm_lifecycle_3.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz";
+        sha1 = "9882d3642b8c82c815782a12e6a1bfeed0026309";
+      };
+    }
+    {
+      name = "npm_logical_tree___npm_logical_tree_1.2.1.tgz";
+      path = fetchurl {
+        name = "npm_logical_tree___npm_logical_tree_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz";
+        sha1 = "44610141ca24664cad35d1e607176193fd8f5b88";
+      };
+    }
+    {
+      name = "npm_normalize_package_bin___npm_normalize_package_bin_1.0.1.tgz";
+      path = fetchurl {
+        name = "npm_normalize_package_bin___npm_normalize_package_bin_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz";
+        sha1 = "6e79a41f23fd235c0623218228da7d9c23b8f6e2";
+      };
+    }
+    {
+      name = "npm_package_arg___npm_package_arg_6.1.1.tgz";
+      path = fetchurl {
+        name = "npm_package_arg___npm_package_arg_6.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz";
+        sha1 = "02168cb0a49a2b75bf988a28698de7b529df5cb7";
+      };
+    }
+    {
+      name = "npm_packlist___npm_packlist_1.4.8.tgz";
+      path = fetchurl {
+        name = "npm_packlist___npm_packlist_1.4.8.tgz";
+        url  = "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz";
+        sha1 = "56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e";
+      };
+    }
+    {
+      name = "npm_pick_manifest___npm_pick_manifest_3.0.2.tgz";
+      path = fetchurl {
+        name = "npm_pick_manifest___npm_pick_manifest_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz";
+        sha1 = "f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7";
+      };
+    }
+    {
+      name = "npm_profile___npm_profile_4.0.2.tgz";
+      path = fetchurl {
+        name = "npm_profile___npm_profile_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.2.tgz";
+        sha1 = "8272a71c19634d0dce9c35a5daf8ee589cbb0f52";
+      };
+    }
+    {
+      name = "npm_profile___npm_profile_4.0.4.tgz";
+      path = fetchurl {
+        name = "npm_profile___npm_profile_4.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/npm-profile/-/npm-profile-4.0.4.tgz";
+        sha1 = "28ee94390e936df6d084263ee2061336a6a1581b";
+      };
+    }
+    {
+      name = "npm_registry_fetch___npm_registry_fetch_4.0.2.tgz";
+      path = fetchurl {
+        name = "npm_registry_fetch___npm_registry_fetch_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.2.tgz";
+        sha1 = "2b1434f93ccbe6b6385f8e45f45db93e16921d7a";
+      };
+    }
+    {
+      name = "npm_registry_fetch___npm_registry_fetch_4.0.7.tgz";
+      path = fetchurl {
+        name = "npm_registry_fetch___npm_registry_fetch_4.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz";
+        sha1 = "57951bf6541e0246b34c9f9a38ab73607c9449d7";
+      };
+    }
+    {
+      name = "npm_run_path___npm_run_path_2.0.2.tgz";
+      path = fetchurl {
+        name = "npm_run_path___npm_run_path_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz";
+        sha1 = "35a9232dfa35d7067b4cb2ddf2357b1871536c5f";
+      };
+    }
+    {
+      name = "npm_user_validate___npm_user_validate_1.0.1.tgz";
+      path = fetchurl {
+        name = "npm_user_validate___npm_user_validate_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz";
+        sha1 = "31428fc5475fe8416023f178c0ab47935ad8c561";
+      };
+    }
+    {
+      name = "npm___npm_6.14.11.tgz";
+      path = fetchurl {
+        name = "npm___npm_6.14.11.tgz";
+        url  = "https://registry.yarnpkg.com/npm/-/npm-6.14.11.tgz";
+        sha1 = "e0b5598d7b9a42d275e61d8bd28cd7eee0074a3b";
+      };
+    }
+    {
+      name = "npmlog___npmlog_4.1.2.tgz";
+      path = fetchurl {
+        name = "npmlog___npmlog_4.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz";
+        sha1 = "08a7f2a8bf734604779a9efa4ad5cc717abb954b";
+      };
+    }
+    {
+      name = "number_is_nan___number_is_nan_1.0.1.tgz";
+      path = fetchurl {
+        name = "number_is_nan___number_is_nan_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "097b602b53422a522c1afb8790318336941a011d";
+      };
+    }
+    {
+      name = "oauth_sign___oauth_sign_0.9.0.tgz";
+      path = fetchurl {
+        name = "oauth_sign___oauth_sign_0.9.0.tgz";
+        url  = "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha1 = "47a7b016baa68b5fa0ecf3dee08a85c679ac6455";
+      };
+    }
+    {
+      name = "object_assign___object_assign_4.1.1.tgz";
+      path = fetchurl {
+        name = "object_assign___object_assign_4.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+      };
+    }
+    {
+      name = "object_inspect___object_inspect_1.7.0.tgz";
+      path = fetchurl {
+        name = "object_inspect___object_inspect_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz";
+        sha1 = "f4f6bd181ad77f006b5ece60bd0b6f398ff74a67";
+      };
+    }
+    {
+      name = "object_keys___object_keys_1.1.1.tgz";
+      path = fetchurl {
+        name = "object_keys___object_keys_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz";
+        sha1 = "1c47f272df277f3b1daf061677d9c82e2322c60e";
+      };
+    }
+    {
+      name = "object.assign___object.assign_4.1.0.tgz";
+      path = fetchurl {
+        name = "object.assign___object.assign_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz";
+        sha1 = "968bf1100d7956bb3ca086f006f846b3bc4008da";
+      };
+    }
+    {
+      name = "object.entries___object.entries_1.1.2.tgz";
+      path = fetchurl {
+        name = "object.entries___object.entries_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz";
+        sha1 = "bc73f00acb6b6bb16c203434b10f9a7e797d3add";
+      };
+    }
+    {
+      name = "object.fromentries___object.fromentries_2.0.2.tgz";
+      path = fetchurl {
+        name = "object.fromentries___object.fromentries_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz";
+        sha1 = "4a09c9b9bb3843dd0f89acdb517a794d4f355ac9";
+      };
+    }
+    {
+      name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.0.3.tgz";
+      path = fetchurl {
+        name = "object.getownpropertydescriptors___object.getownpropertydescriptors_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz";
+        sha1 = "8758c846f5b407adab0f236e0986f14b051caa16";
+      };
+    }
+    {
+      name = "object.values___object.values_1.1.1.tgz";
+      path = fetchurl {
+        name = "object.values___object.values_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz";
+        sha1 = "68a99ecde356b7e9295a3c5e0ce31dc8c953de5e";
+      };
+    }
+    {
+      name = "omggif___omggif_1.0.10.tgz";
+      path = fetchurl {
+        name = "omggif___omggif_1.0.10.tgz";
+        url  = "https://registry.yarnpkg.com/omggif/-/omggif-1.0.10.tgz";
+        sha1 = "ddaaf90d4a42f532e9e7cb3a95ecdd47f17c7b19";
+      };
+    }
+    {
+      name = "once___once_1.4.0.tgz";
+      path = fetchurl {
+        name = "once___once_1.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    }
+    {
+      name = "onetime___onetime_5.1.0.tgz";
+      path = fetchurl {
+        name = "onetime___onetime_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz";
+        sha1 = "fff0f3c91617fe62bb50189636e99ac8a6df7be5";
+      };
+    }
+    {
+      name = "opener___opener_1.5.2.tgz";
+      path = fetchurl {
+        name = "opener___opener_1.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz";
+        sha1 = "5d37e1f35077b9dcac4301372271afdeb2a13598";
+      };
+    }
+    {
+      name = "optionator___optionator_0.8.3.tgz";
+      path = fetchurl {
+        name = "optionator___optionator_0.8.3.tgz";
+        url  = "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz";
+        sha1 = "84fa1d036fe9d3c7e21d99884b601167ec8fb495";
+      };
+    }
+    {
+      name = "optionator___optionator_0.9.1.tgz";
+      path = fetchurl {
+        name = "optionator___optionator_0.9.1.tgz";
+        url  = "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz";
+        sha1 = "4f236a6373dae0566a6d43e1326674f50c291499";
+      };
+    }
+    {
+      name = "os_homedir___os_homedir_1.0.2.tgz";
+      path = fetchurl {
+        name = "os_homedir___os_homedir_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz";
+        sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+      };
+    }
+    {
+      name = "os_locale___os_locale_2.1.0.tgz";
+      path = fetchurl {
+        name = "os_locale___os_locale_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz";
+        sha1 = "42bc2900a6b5b8bd17376c8e882b65afccf24bf2";
+      };
+    }
+    {
+      name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+      path = fetchurl {
+        name = "os_tmpdir___os_tmpdir_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+      };
+    }
+    {
+      name = "osenv___osenv_0.1.5.tgz";
+      path = fetchurl {
+        name = "osenv___osenv_0.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz";
+        sha1 = "85cdfafaeb28e8677f416e287592b5f3f49ea410";
+      };
+    }
+    {
+      name = "p_cancelable___p_cancelable_1.1.0.tgz";
+      path = fetchurl {
+        name = "p_cancelable___p_cancelable_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz";
+        sha1 = "d078d15a3af409220c886f1d9a0ca2e441ab26cc";
+      };
+    }
+    {
+      name = "p_finally___p_finally_1.0.0.tgz";
+      path = fetchurl {
+        name = "p_finally___p_finally_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz";
+        sha1 = "3fbcfb15b899a44123b34b6dcc18b724336a2cae";
+      };
+    }
+    {
+      name = "p_limit___p_limit_1.3.0.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz";
+        sha1 = "b86bd5f0c25690911c7590fcbfc2010d54b3ccb8";
+      };
+    }
+    {
+      name = "p_limit___p_limit_2.2.1.tgz";
+      path = fetchurl {
+        name = "p_limit___p_limit_2.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz";
+        sha1 = "aa07a788cc3151c939b5131f63570f0dd2009537";
+      };
+    }
+    {
+      name = "p_locate___p_locate_2.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz";
+        sha1 = "20a0103b222a70c8fd39cc2e580680f3dde5ec43";
+      };
+    }
+    {
+      name = "p_locate___p_locate_3.0.0.tgz";
+      path = fetchurl {
+        name = "p_locate___p_locate_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz";
+        sha1 = "322d69a05c0264b25997d9f40cd8a891ab0064a4";
+      };
+    }
+    {
+      name = "p_try___p_try_1.0.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz";
+        sha1 = "cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3";
+      };
+    }
+    {
+      name = "p_try___p_try_2.2.0.tgz";
+      path = fetchurl {
+        name = "p_try___p_try_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz";
+        sha1 = "cb2868540e313d61de58fafbe35ce9004d5540e6";
+      };
+    }
+    {
+      name = "package_json___package_json_4.0.1.tgz";
+      path = fetchurl {
+        name = "package_json___package_json_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz";
+        sha1 = "8869a0401253661c4c4ca3da6c2121ed555f5eed";
+      };
+    }
+    {
+      name = "package_json___package_json_6.5.0.tgz";
+      path = fetchurl {
+        name = "package_json___package_json_6.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz";
+        sha1 = "6feedaca35e75725876d0b0e64974697fed145b0";
+      };
+    }
+    {
+      name = "pacote___pacote_9.5.12.tgz";
+      path = fetchurl {
+        name = "pacote___pacote_9.5.12.tgz";
+        url  = "https://registry.yarnpkg.com/pacote/-/pacote-9.5.12.tgz";
+        sha1 = "1e11dd7a8d736bcc36b375a9804d41bb0377bf66";
+      };
+    }
+    {
+      name = "pako___pako_1.0.11.tgz";
+      path = fetchurl {
+        name = "pako___pako_1.0.11.tgz";
+        url  = "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz";
+        sha1 = "6c9599d340d54dfd3946380252a35705a6b992bf";
+      };
+    }
+    {
+      name = "parallel_transform___parallel_transform_1.2.0.tgz";
+      path = fetchurl {
+        name = "parallel_transform___parallel_transform_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz";
+        sha1 = "9049ca37d6cb2182c3b1d2c720be94d14a5814fc";
+      };
+    }
+    {
+      name = "parent_module___parent_module_1.0.1.tgz";
+      path = fetchurl {
+        name = "parent_module___parent_module_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz";
+        sha1 = "691d2709e78c79fae3a156622452d00762caaaa2";
+      };
+    }
+    {
+      name = "parse_bmfont_ascii___parse_bmfont_ascii_1.0.6.tgz";
+      path = fetchurl {
+        name = "parse_bmfont_ascii___parse_bmfont_ascii_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz";
+        sha1 = "11ac3c3ff58f7c2020ab22769079108d4dfa0285";
+      };
+    }
+    {
+      name = "parse_bmfont_binary___parse_bmfont_binary_1.0.6.tgz";
+      path = fetchurl {
+        name = "parse_bmfont_binary___parse_bmfont_binary_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz";
+        sha1 = "d038b476d3e9dd9db1e11a0b0e53a22792b69006";
+      };
+    }
+    {
+      name = "parse_bmfont_xml___parse_bmfont_xml_1.1.4.tgz";
+      path = fetchurl {
+        name = "parse_bmfont_xml___parse_bmfont_xml_1.1.4.tgz";
+        url  = "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz";
+        sha1 = "015319797e3e12f9e739c4d513872cd2fa35f389";
+      };
+    }
+    {
+      name = "parse_headers___parse_headers_2.0.3.tgz";
+      path = fetchurl {
+        name = "parse_headers___parse_headers_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz";
+        sha1 = "5e8e7512383d140ba02f0c7aa9f49b4399c92515";
+      };
+    }
+    {
+      name = "parse_json___parse_json_2.2.0.tgz";
+      path = fetchurl {
+        name = "parse_json___parse_json_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz";
+        sha1 = "f480f40434ef80741f8469099f8dea18f55a4dc9";
+      };
+    }
+    {
+      name = "path_exists___path_exists_3.0.0.tgz";
+      path = fetchurl {
+        name = "path_exists___path_exists_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz";
+        sha1 = "ce0ebeaa5f78cb18925ea7d810d7b59b010fd515";
+      };
+    }
+    {
+      name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+      path = fetchurl {
+        name = "path_is_absolute___path_is_absolute_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    }
+    {
+      name = "path_is_inside___path_is_inside_1.0.2.tgz";
+      path = fetchurl {
+        name = "path_is_inside___path_is_inside_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz";
+        sha1 = "365417dede44430d1c11af61027facf074bdfc53";
+      };
+    }
+    {
+      name = "path_key___path_key_2.0.1.tgz";
+      path = fetchurl {
+        name = "path_key___path_key_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz";
+        sha1 = "411cadb574c5a140d3a4b1910d40d80cc9f40b40";
+      };
+    }
+    {
+      name = "path_key___path_key_3.1.1.tgz";
+      path = fetchurl {
+        name = "path_key___path_key_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz";
+        sha1 = "581f6ade658cbba65a0d3380de7753295054f375";
+      };
+    }
+    {
+      name = "path_parse___path_parse_1.0.6.tgz";
+      path = fetchurl {
+        name = "path_parse___path_parse_1.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz";
+        sha1 = "d62dbb5679405d72c4737ec58600e9ddcf06d24c";
+      };
+    }
+    {
+      name = "path_type___path_type_2.0.0.tgz";
+      path = fetchurl {
+        name = "path_type___path_type_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz";
+        sha1 = "f012ccb8415b7096fc2daa1054c3d72389594c73";
+      };
+    }
+    {
+      name = "performance_now___performance_now_2.1.0.tgz";
+      path = fetchurl {
+        name = "performance_now___performance_now_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    }
+    {
+      name = "phin___phin_2.9.3.tgz";
+      path = fetchurl {
+        name = "phin___phin_2.9.3.tgz";
+        url  = "https://registry.yarnpkg.com/phin/-/phin-2.9.3.tgz";
+        sha1 = "f9b6ac10a035636fb65dfc576aaaa17b8743125c";
+      };
+    }
+    {
+      name = "pify___pify_2.3.0.tgz";
+      path = fetchurl {
+        name = "pify___pify_2.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz";
+        sha1 = "ed141a6ac043a849ea588498e7dca8b15330e90c";
+      };
+    }
+    {
+      name = "pify___pify_3.0.0.tgz";
+      path = fetchurl {
+        name = "pify___pify_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz";
+        sha1 = "e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176";
+      };
+    }
+    {
+      name = "pixelmatch___pixelmatch_4.0.2.tgz";
+      path = fetchurl {
+        name = "pixelmatch___pixelmatch_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz";
+        sha1 = "8f47dcec5011b477b67db03c243bc1f3085e8854";
+      };
+    }
+    {
+      name = "pkg_dir___pkg_dir_2.0.0.tgz";
+      path = fetchurl {
+        name = "pkg_dir___pkg_dir_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz";
+        sha1 = "f6d5d1109e19d63edf428e0bd57e12777615334b";
+      };
+    }
+    {
+      name = "pkg_up___pkg_up_3.1.0.tgz";
+      path = fetchurl {
+        name = "pkg_up___pkg_up_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz";
+        sha1 = "100ec235cc150e4fd42519412596a28512a0def5";
+      };
+    }
+    {
+      name = "png_to_ico___png_to_ico_2.1.1.tgz";
+      path = fetchurl {
+        name = "png_to_ico___png_to_ico_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/png-to-ico/-/png-to-ico-2.1.1.tgz";
+        sha1 = "35be46f93c1ac8d77025f6f4b60c1fa567c1d47c";
+      };
+    }
+    {
+      name = "pngjs___pngjs_3.4.0.tgz";
+      path = fetchurl {
+        name = "pngjs___pngjs_3.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz";
+        sha1 = "99ca7d725965fb655814eaf65f38f12bbdbf555f";
+      };
+    }
+    {
+      name = "prelude_ls___prelude_ls_1.2.1.tgz";
+      path = fetchurl {
+        name = "prelude_ls___prelude_ls_1.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz";
+        sha1 = "debc6489d7a6e6b0e7611888cec880337d316396";
+      };
+    }
+    {
+      name = "prelude_ls___prelude_ls_1.1.2.tgz";
+      path = fetchurl {
+        name = "prelude_ls___prelude_ls_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz";
+        sha1 = "21932a549f5e52ffd9a827f570e04be62a97da54";
+      };
+    }
+    {
+      name = "prepend_http___prepend_http_1.0.4.tgz";
+      path = fetchurl {
+        name = "prepend_http___prepend_http_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz";
+        sha1 = "d4f4562b0ce3696e41ac52d0e002e57a635dc6dc";
+      };
+    }
+    {
+      name = "prepend_http___prepend_http_2.0.0.tgz";
+      path = fetchurl {
+        name = "prepend_http___prepend_http_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz";
+        sha1 = "e92434bfa5ea8c19f41cdfd401d741a3c819d897";
+      };
+    }
+    {
+      name = "printj___printj_1.1.2.tgz";
+      path = fetchurl {
+        name = "printj___printj_1.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz";
+        sha1 = "d90deb2975a8b9f600fb3a1c94e3f4c53c78a222";
+      };
+    }
+    {
+      name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+      path = fetchurl {
+        name = "process_nextick_args___process_nextick_args_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha1 = "7820d9b16120cc55ca9ae7792680ae7dba6d7fe2";
+      };
+    }
+    {
+      name = "process___process_0.5.2.tgz";
+      path = fetchurl {
+        name = "process___process_0.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz";
+        sha1 = "1638d8a8e34c2f440a91db95ab9aeb677fc185cf";
+      };
+    }
+    {
+      name = "progress___progress_2.0.3.tgz";
+      path = fetchurl {
+        name = "progress___progress_2.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz";
+        sha1 = "7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8";
+      };
+    }
+    {
+      name = "promise_inflight___promise_inflight_1.0.1.tgz";
+      path = fetchurl {
+        name = "promise_inflight___promise_inflight_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz";
+        sha1 = "98472870bf228132fcbdd868129bad12c3c029e3";
+      };
+    }
+    {
+      name = "promise_retry___promise_retry_1.1.1.tgz";
+      path = fetchurl {
+        name = "promise_retry___promise_retry_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz";
+        sha1 = "6739e968e3051da20ce6497fb2b50f6911df3d6d";
+      };
+    }
+    {
+      name = "promzard___promzard_0.3.0.tgz";
+      path = fetchurl {
+        name = "promzard___promzard_0.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz";
+        sha1 = "26a5d6ee8c7dee4cb12208305acfb93ba382a9ee";
+      };
+    }
+    {
+      name = "prop_types___prop_types_15.7.2.tgz";
+      path = fetchurl {
+        name = "prop_types___prop_types_15.7.2.tgz";
+        url  = "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz";
+        sha1 = "52c41e75b8c87e72b9d9360e0206b99dcbffa6c5";
+      };
+    }
+    {
+      name = "proto_list___proto_list_1.2.4.tgz";
+      path = fetchurl {
+        name = "proto_list___proto_list_1.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz";
+        sha1 = "212d5bfe1318306a420f6402b8e26ff39647a849";
+      };
+    }
+    {
+      name = "protoduck___protoduck_5.0.1.tgz";
+      path = fetchurl {
+        name = "protoduck___protoduck_5.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz";
+        sha1 = "03c3659ca18007b69a50fd82a7ebcc516261151f";
+      };
+    }
+    {
+      name = "prr___prr_1.0.1.tgz";
+      path = fetchurl {
+        name = "prr___prr_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz";
+        sha1 = "d3fc114ba06995a45ec6893f484ceb1d78f5f476";
+      };
+    }
+    {
+      name = "pseudomap___pseudomap_1.0.2.tgz";
+      path = fetchurl {
+        name = "pseudomap___pseudomap_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz";
+        sha1 = "f052a28da70e618917ef0a8ac34c1ae5a68286b3";
+      };
+    }
+    {
+      name = "psl___psl_1.6.0.tgz";
+      path = fetchurl {
+        name = "psl___psl_1.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz";
+        sha1 = "60557582ee23b6c43719d9890fb4170ecd91e110";
+      };
+    }
+    {
+      name = "psl___psl_1.8.0.tgz";
+      path = fetchurl {
+        name = "psl___psl_1.8.0.tgz";
+        url  = "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz";
+        sha1 = "9326f8bcfb013adcc005fdff056acce020e51c24";
+      };
+    }
+    {
+      name = "pump___pump_2.0.1.tgz";
+      path = fetchurl {
+        name = "pump___pump_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz";
+        sha1 = "12399add6e4cf7526d973cbc8b5ce2e2908b3909";
+      };
+    }
+    {
+      name = "pump___pump_3.0.0.tgz";
+      path = fetchurl {
+        name = "pump___pump_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz";
+        sha1 = "b4a2116815bde2f4e1ea602354e8c75565107a64";
+      };
+    }
+    {
+      name = "pumpify___pumpify_1.5.1.tgz";
+      path = fetchurl {
+        name = "pumpify___pumpify_1.5.1.tgz";
+        url  = "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz";
+        sha1 = "36513be246ab27570b1a374a5ce278bfd74370ce";
+      };
+    }
+    {
+      name = "punycode___punycode_1.4.1.tgz";
+      path = fetchurl {
+        name = "punycode___punycode_1.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    }
+    {
+      name = "punycode___punycode_2.1.1.tgz";
+      path = fetchurl {
+        name = "punycode___punycode_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz";
+        sha1 = "b58b010ac40c22c5657616c8d2c2c02c7bf479ec";
+      };
+    }
+    {
+      name = "pupa___pupa_2.0.1.tgz";
+      path = fetchurl {
+        name = "pupa___pupa_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz";
+        sha1 = "dbdc9ff48ffbea4a26a069b6f9f7abb051008726";
+      };
+    }
+    {
+      name = "qrcode_terminal___qrcode_terminal_0.12.0.tgz";
+      path = fetchurl {
+        name = "qrcode_terminal___qrcode_terminal_0.12.0.tgz";
+        url  = "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz";
+        sha1 = "bb5b699ef7f9f0505092a3748be4464fe71b5819";
+      };
+    }
+    {
+      name = "qs___qs_6.5.2.tgz";
+      path = fetchurl {
+        name = "qs___qs_6.5.2.tgz";
+        url  = "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz";
+        sha1 = "cb3ae806e8740444584ef154ce8ee98d403f3e36";
+      };
+    }
+    {
+      name = "query_string___query_string_6.10.1.tgz";
+      path = fetchurl {
+        name = "query_string___query_string_6.10.1.tgz";
+        url  = "https://registry.yarnpkg.com/query-string/-/query-string-6.10.1.tgz";
+        sha1 = "30b3505f6fca741d5ae541964d1b3ae9dc2a0de8";
+      };
+    }
+    {
+      name = "qw___qw_1.0.1.tgz";
+      path = fetchurl {
+        name = "qw___qw_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/qw/-/qw-1.0.1.tgz";
+        sha1 = "efbfdc740f9ad054304426acb183412cc8b996d4";
+      };
+    }
+    {
+      name = "rc___rc_1.2.8.tgz";
+      path = fetchurl {
+        name = "rc___rc_1.2.8.tgz";
+        url  = "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz";
+        sha1 = "cd924bf5200a075b83c188cd6b9e211b7fc0d3ed";
+      };
+    }
+    {
+      name = "react_is___react_is_16.13.1.tgz";
+      path = fetchurl {
+        name = "react_is___react_is_16.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz";
+        sha1 = "789729a4dc36de2999dc156dd6c1d9c18cea56a4";
+      };
+    }
+    {
+      name = "read_cmd_shim___read_cmd_shim_1.0.5.tgz";
+      path = fetchurl {
+        name = "read_cmd_shim___read_cmd_shim_1.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz";
+        sha1 = "87e43eba50098ba5a32d0ceb583ab8e43b961c16";
+      };
+    }
+    {
+      name = "read_config_file___read_config_file_6.0.0.tgz";
+      path = fetchurl {
+        name = "read_config_file___read_config_file_6.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-config-file/-/read-config-file-6.0.0.tgz";
+        sha1 = "224b5dca6a5bdc1fb19e63f89f342680efdb9299";
+      };
+    }
+    {
+      name = "read_installed___read_installed_4.0.3.tgz";
+      path = fetchurl {
+        name = "read_installed___read_installed_4.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/read-installed/-/read-installed-4.0.3.tgz";
+        sha1 = "ff9b8b67f187d1e4c29b9feb31f6b223acd19067";
+      };
+    }
+    {
+      name = "read_package_json___read_package_json_2.1.1.tgz";
+      path = fetchurl {
+        name = "read_package_json___read_package_json_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz";
+        sha1 = "16aa66c59e7d4dad6288f179dd9295fd59bb98f1";
+      };
+    }
+    {
+      name = "read_package_tree___read_package_tree_5.3.1.tgz";
+      path = fetchurl {
+        name = "read_package_tree___read_package_tree_5.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz";
+        sha1 = "a32cb64c7f31eb8a6f31ef06f9cedf74068fe636";
+      };
+    }
+    {
+      name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
+      path = fetchurl {
+        name = "read_pkg_up___read_pkg_up_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz";
+        sha1 = "6b72a8048984e0c41e79510fd5e9fa99b3b549be";
+      };
+    }
+    {
+      name = "read_pkg___read_pkg_2.0.0.tgz";
+      path = fetchurl {
+        name = "read_pkg___read_pkg_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz";
+        sha1 = "8ef1c0623c6a6db0dc6713c4bfac46332b2368f8";
+      };
+    }
+    {
+      name = "read___read_1.0.7.tgz";
+      path = fetchurl {
+        name = "read___read_1.0.7.tgz";
+        url  = "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz";
+        sha1 = "b3da19bd052431a97671d44a42634adf710b40c4";
+      };
+    }
+    {
+      name = "readable_stream___readable_stream_2.3.7.tgz";
+      path = fetchurl {
+        name = "readable_stream___readable_stream_2.3.7.tgz";
+        url  = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz";
+        sha1 = "1eca1cf711aef814c04f62252a36a62f6cb23b57";
+      };
+    }
+    {
+      name = "readable_stream___readable_stream_3.6.0.tgz";
+      path = fetchurl {
+        name = "readable_stream___readable_stream_3.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz";
+        sha1 = "337bbda3adc0706bd3e024426a286d4b4b2c9198";
+      };
+    }
+    {
+      name = "readable_stream___readable_stream_1.1.14.tgz";
+      path = fetchurl {
+        name = "readable_stream___readable_stream_1.1.14.tgz";
+        url  = "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz";
+        sha1 = "7cf4c54ef648e3813084c636dd2079e166c081d9";
+      };
+    }
+    {
+      name = "readdir_glob___readdir_glob_1.1.1.tgz";
+      path = fetchurl {
+        name = "readdir_glob___readdir_glob_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.1.tgz";
+        sha1 = "f0e10bb7bf7bfa7e0add8baffdc54c3f7dbee6c4";
+      };
+    }
+    {
+      name = "readdir_scoped_modules___readdir_scoped_modules_1.1.0.tgz";
+      path = fetchurl {
+        name = "readdir_scoped_modules___readdir_scoped_modules_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz";
+        sha1 = "8d45407b4f870a0dcaebc0e28670d18e74514309";
+      };
+    }
+    {
+      name = "regenerator_runtime___regenerator_runtime_0.13.7.tgz";
+      path = fetchurl {
+        name = "regenerator_runtime___regenerator_runtime_0.13.7.tgz";
+        url  = "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz";
+        sha1 = "cac2dacc8a1ea675feaabaeb8ae833898ae46f55";
+      };
+    }
+    {
+      name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+      path = fetchurl {
+        name = "regexp.prototype.flags___regexp.prototype.flags_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz";
+        sha1 = "7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75";
+      };
+    }
+    {
+      name = "regexpp___regexpp_2.0.1.tgz";
+      path = fetchurl {
+        name = "regexpp___regexpp_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz";
+        sha1 = "8d19d31cf632482b589049f8281f93dbcba4d07f";
+      };
+    }
+    {
+      name = "regexpp___regexpp_3.1.0.tgz";
+      path = fetchurl {
+        name = "regexpp___regexpp_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz";
+        sha1 = "206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2";
+      };
+    }
+    {
+      name = "registry_auth_token___registry_auth_token_3.4.0.tgz";
+      path = fetchurl {
+        name = "registry_auth_token___registry_auth_token_3.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz";
+        sha1 = "d7446815433f5d5ed6431cd5dca21048f66b397e";
+      };
+    }
+    {
+      name = "registry_auth_token___registry_auth_token_4.0.0.tgz";
+      path = fetchurl {
+        name = "registry_auth_token___registry_auth_token_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz";
+        sha1 = "30e55961eec77379da551ea5c4cf43cbf03522be";
+      };
+    }
+    {
+      name = "registry_url___registry_url_3.1.0.tgz";
+      path = fetchurl {
+        name = "registry_url___registry_url_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz";
+        sha1 = "3d4ef870f73dde1d77f0cf9a381432444e174942";
+      };
+    }
+    {
+      name = "registry_url___registry_url_5.1.0.tgz";
+      path = fetchurl {
+        name = "registry_url___registry_url_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz";
+        sha1 = "e98334b50d5434b81136b44ec638d9c2009c5009";
+      };
+    }
+    {
+      name = "request___request_2.88.0.tgz";
+      path = fetchurl {
+        name = "request___request_2.88.0.tgz";
+        url  = "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz";
+        sha1 = "9c2fca4f7d35b592efe57c7f0a55e81052124fef";
+      };
+    }
+    {
+      name = "request___request_2.88.2.tgz";
+      path = fetchurl {
+        name = "request___request_2.88.2.tgz";
+        url  = "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz";
+        sha1 = "d73c918731cb5a87da047e207234146f664d12b3";
+      };
+    }
+    {
+      name = "require_directory___require_directory_2.1.1.tgz";
+      path = fetchurl {
+        name = "require_directory___require_directory_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz";
+        sha1 = "8c64ad5fd30dab1c976e2344ffe7f792a6a6df42";
+      };
+    }
+    {
+      name = "require_main_filename___require_main_filename_1.0.1.tgz";
+      path = fetchurl {
+        name = "require_main_filename___require_main_filename_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz";
+        sha1 = "97f717b69d48784f5f526a6c5aa8ffdda055a4d1";
+      };
+    }
+    {
+      name = "require_main_filename___require_main_filename_2.0.0.tgz";
+      path = fetchurl {
+        name = "require_main_filename___require_main_filename_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz";
+        sha1 = "d0b329ecc7cc0f61649f62215be69af54aa8989b";
+      };
+    }
+    {
+      name = "resolve_from___resolve_from_4.0.0.tgz";
+      path = fetchurl {
+        name = "resolve_from___resolve_from_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz";
+        sha1 = "4abcd852ad32dd7baabfe9b40e00a36db5f392e6";
+      };
+    }
+    {
+      name = "resolve___resolve_1.13.1.tgz";
+      path = fetchurl {
+        name = "resolve___resolve_1.13.1.tgz";
+        url  = "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz";
+        sha1 = "be0aa4c06acd53083505abb35f4d66932ab35d16";
+      };
+    }
+    {
+      name = "resolve___resolve_1.17.0.tgz";
+      path = fetchurl {
+        name = "resolve___resolve_1.17.0.tgz";
+        url  = "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz";
+        sha1 = "b25941b54968231cc2d1bb76a79cb7f2c0bf8444";
+      };
+    }
+    {
+      name = "responselike___responselike_1.0.2.tgz";
+      path = fetchurl {
+        name = "responselike___responselike_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz";
+        sha1 = "918720ef3b631c5642be068f15ade5a46f4ba1e7";
+      };
+    }
+    {
+      name = "restore_cursor___restore_cursor_3.1.0.tgz";
+      path = fetchurl {
+        name = "restore_cursor___restore_cursor_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz";
+        sha1 = "39f67c54b3a7a58cea5236d95cf0034239631f7e";
+      };
+    }
+    {
+      name = "retry___retry_0.10.1.tgz";
+      path = fetchurl {
+        name = "retry___retry_0.10.1.tgz";
+        url  = "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz";
+        sha1 = "e76388d217992c252750241d3d3956fed98d8ff4";
+      };
+    }
+    {
+      name = "retry___retry_0.12.0.tgz";
+      path = fetchurl {
+        name = "retry___retry_0.12.0.tgz";
+        url  = "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz";
+        sha1 = "1b42a6266a21f07421d1b0b54b7dc167b01c013b";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.6.3.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.6.3.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz";
+        sha1 = "b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab";
+      };
+    }
+    {
+      name = "rimraf___rimraf_2.7.1.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_2.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz";
+        sha1 = "35797f13a7fdadc566142c29d4f07ccad483e3ec";
+      };
+    }
+    {
+      name = "rimraf___rimraf_3.0.2.tgz";
+      path = fetchurl {
+        name = "rimraf___rimraf_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz";
+        sha1 = "f1a5402ba6220ad52cc1282bac1ae3aa49fd061a";
+      };
+    }
+    {
+      name = "run_async___run_async_2.4.1.tgz";
+      path = fetchurl {
+        name = "run_async___run_async_2.4.1.tgz";
+        url  = "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz";
+        sha1 = "8440eccf99ea3e70bd409d49aab88e10c189a455";
+      };
+    }
+    {
+      name = "run_queue___run_queue_1.0.3.tgz";
+      path = fetchurl {
+        name = "run_queue___run_queue_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz";
+        sha1 = "e848396f057d223f24386924618e25694161ec47";
+      };
+    }
+    {
+      name = "rxjs___rxjs_6.6.0.tgz";
+      path = fetchurl {
+        name = "rxjs___rxjs_6.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.0.tgz";
+        sha1 = "af2901eedf02e3a83ffa7f886240ff9018bbec84";
+      };
+    }
+    {
+      name = "safe_buffer___safe_buffer_5.2.0.tgz";
+      path = fetchurl {
+        name = "safe_buffer___safe_buffer_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz";
+        sha1 = "b74daec49b1148f88c64b68d49b1e815c1f2f519";
+      };
+    }
+    {
+      name = "safe_buffer___safe_buffer_5.1.2.tgz";
+      path = fetchurl {
+        name = "safe_buffer___safe_buffer_5.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha1 = "991ec69d296e0313747d59bdfd2b745c35f8828d";
+      };
+    }
+    {
+      name = "safe_buffer___safe_buffer_5.2.1.tgz";
+      path = fetchurl {
+        name = "safe_buffer___safe_buffer_5.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz";
+        sha1 = "1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6";
+      };
+    }
+    {
+      name = "safer_buffer___safer_buffer_2.1.2.tgz";
+      path = fetchurl {
+        name = "safer_buffer___safer_buffer_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha1 = "44fa161b0187b9549dd84bb91802f9bd8385cd6a";
+      };
+    }
+    {
+      name = "sanitize_filename___sanitize_filename_1.6.3.tgz";
+      path = fetchurl {
+        name = "sanitize_filename___sanitize_filename_1.6.3.tgz";
+        url  = "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz";
+        sha1 = "755ebd752045931977e30b2025d340d7c9090378";
+      };
+    }
+    {
+      name = "sax___sax_1.2.4.tgz";
+      path = fetchurl {
+        name = "sax___sax_1.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz";
+        sha1 = "2816234e2378bddc4e5354fab5caa895df7100d9";
+      };
+    }
+    {
+      name = "semver_diff___semver_diff_2.1.0.tgz";
+      path = fetchurl {
+        name = "semver_diff___semver_diff_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz";
+        sha1 = "4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36";
+      };
+    }
+    {
+      name = "semver_diff___semver_diff_3.1.1.tgz";
+      path = fetchurl {
+        name = "semver_diff___semver_diff_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz";
+        sha1 = "05f77ce59f325e00e2706afd67bb506ddb1ca32b";
+      };
+    }
+    {
+      name = "semver___semver_5.7.1.tgz";
+      path = fetchurl {
+        name = "semver___semver_5.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz";
+        sha1 = "a954f931aeba508d307bbf069eff0c01c96116f7";
+      };
+    }
+    {
+      name = "semver___semver_6.3.0.tgz";
+      path = fetchurl {
+        name = "semver___semver_6.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz";
+        sha1 = "ee0a64c8af5e8ceea67687b133761e1becbd1d3d";
+      };
+    }
+    {
+      name = "semver___semver_7.3.2.tgz";
+      path = fetchurl {
+        name = "semver___semver_7.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz";
+        sha1 = "604962b052b81ed0786aae84389ffba70ffd3938";
+      };
+    }
+    {
+      name = "semver___semver_7.3.4.tgz";
+      path = fetchurl {
+        name = "semver___semver_7.3.4.tgz";
+        url  = "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz";
+        sha1 = "27aaa7d2e4ca76452f98d3add093a72c943edc97";
+      };
+    }
+    {
+      name = "set_blocking___set_blocking_2.0.0.tgz";
+      path = fetchurl {
+        name = "set_blocking___set_blocking_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    }
+    {
+      name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz";
+      path = fetchurl {
+        name = "set_immediate_shim___set_immediate_shim_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz";
+        sha1 = "4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61";
+      };
+    }
+    {
+      name = "sha___sha_3.0.0.tgz";
+      path = fetchurl {
+        name = "sha___sha_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/sha/-/sha-3.0.0.tgz";
+        sha1 = "b2f2f90af690c16a3a839a6a6c680ea51fedd1ae";
+      };
+    }
+    {
+      name = "shebang_command___shebang_command_1.2.0.tgz";
+      path = fetchurl {
+        name = "shebang_command___shebang_command_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz";
+        sha1 = "44aac65b695b03398968c39f363fee5deafdf1ea";
+      };
+    }
+    {
+      name = "shebang_command___shebang_command_2.0.0.tgz";
+      path = fetchurl {
+        name = "shebang_command___shebang_command_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz";
+        sha1 = "ccd0af4f8835fbdc265b82461aaf0c36663f34ea";
+      };
+    }
+    {
+      name = "shebang_regex___shebang_regex_1.0.0.tgz";
+      path = fetchurl {
+        name = "shebang_regex___shebang_regex_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz";
+        sha1 = "da42f49740c0b42db2ca9728571cb190c98efea3";
+      };
+    }
+    {
+      name = "shebang_regex___shebang_regex_3.0.0.tgz";
+      path = fetchurl {
+        name = "shebang_regex___shebang_regex_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz";
+        sha1 = "ae16f1644d873ecad843b0307b143362d4c42172";
+      };
+    }
+    {
+      name = "side_channel___side_channel_1.0.2.tgz";
+      path = fetchurl {
+        name = "side_channel___side_channel_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz";
+        sha1 = "df5d1abadb4e4bf4af1cd8852bf132d2f7876947";
+      };
+    }
+    {
+      name = "signal_exit___signal_exit_3.0.2.tgz";
+      path = fetchurl {
+        name = "signal_exit___signal_exit_3.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz";
+        sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
+      };
+    }
+    {
+      name = "slice_ansi___slice_ansi_2.1.0.tgz";
+      path = fetchurl {
+        name = "slice_ansi___slice_ansi_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz";
+        sha1 = "cacd7693461a637a5788d92a7dd4fba068e81636";
+      };
+    }
+    {
+      name = "slide___slide_1.1.6.tgz";
+      path = fetchurl {
+        name = "slide___slide_1.1.6.tgz";
+        url  = "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz";
+        sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
+      };
+    }
+    {
+      name = "smart_buffer___smart_buffer_4.1.0.tgz";
+      path = fetchurl {
+        name = "smart_buffer___smart_buffer_4.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz";
+        sha1 = "91605c25d91652f4661ea69ccf45f1b331ca21ba";
+      };
+    }
+    {
+      name = "socks_proxy_agent___socks_proxy_agent_4.0.2.tgz";
+      path = fetchurl {
+        name = "socks_proxy_agent___socks_proxy_agent_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz";
+        sha1 = "3c8991f3145b2799e70e11bd5fbc8b1963116386";
+      };
+    }
+    {
+      name = "socks___socks_2.3.3.tgz";
+      path = fetchurl {
+        name = "socks___socks_2.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz";
+        sha1 = "01129f0a5d534d2b897712ed8aceab7ee65d78e3";
+      };
+    }
+    {
+      name = "sorted_object___sorted_object_2.0.1.tgz";
+      path = fetchurl {
+        name = "sorted_object___sorted_object_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/sorted-object/-/sorted-object-2.0.1.tgz";
+        sha1 = "7d631f4bd3a798a24af1dffcfbfe83337a5df5fc";
+      };
+    }
+    {
+      name = "sorted_union_stream___sorted_union_stream_2.1.3.tgz";
+      path = fetchurl {
+        name = "sorted_union_stream___sorted_union_stream_2.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/sorted-union-stream/-/sorted-union-stream-2.1.3.tgz";
+        sha1 = "c7794c7e077880052ff71a8d4a2dbb4a9a638ac7";
+      };
+    }
+    {
+      name = "source_map_support___source_map_support_0.5.19.tgz";
+      path = fetchurl {
+        name = "source_map_support___source_map_support_0.5.19.tgz";
+        url  = "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz";
+        sha1 = "a98b62f86dcaf4f67399648c085291ab9e8fed61";
+      };
+    }
+    {
+      name = "source_map___source_map_0.5.7.tgz";
+      path = fetchurl {
+        name = "source_map___source_map_0.5.7.tgz";
+        url  = "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz";
+        sha1 = "8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc";
+      };
+    }
+    {
+      name = "source_map___source_map_0.6.1.tgz";
+      path = fetchurl {
+        name = "source_map___source_map_0.6.1.tgz";
+        url  = "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz";
+        sha1 = "74722af32e9614e9c287a8d0bbde48b5e2f1a263";
+      };
+    }
+    {
+      name = "spdx_correct___spdx_correct_3.1.0.tgz";
+      path = fetchurl {
+        name = "spdx_correct___spdx_correct_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz";
+        sha1 = "fb83e504445268f154b074e218c87c003cd31df4";
+      };
+    }
+    {
+      name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz";
+      path = fetchurl {
+        name = "spdx_exceptions___spdx_exceptions_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz";
+        sha1 = "2ea450aee74f2a89bfb94519c07fcd6f41322977";
+      };
+    }
+    {
+      name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz";
+      path = fetchurl {
+        name = "spdx_expression_parse___spdx_expression_parse_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz";
+        sha1 = "99e119b7a5da00e05491c9fa338b7904823b41d0";
+      };
+    }
+    {
+      name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+      path = fetchurl {
+        name = "spdx_license_ids___spdx_license_ids_3.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz";
+        sha1 = "3694b5804567a458d3c8045842a6358632f62654";
+      };
+    }
+    {
+      name = "split_on_first___split_on_first_1.1.0.tgz";
+      path = fetchurl {
+        name = "split_on_first___split_on_first_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz";
+        sha1 = "f610afeee3b12bce1d0c30425e76398b78249a5f";
+      };
+    }
+    {
+      name = "sprintf_js___sprintf_js_1.0.3.tgz";
+      path = fetchurl {
+        name = "sprintf_js___sprintf_js_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz";
+        sha1 = "04e6926f662895354f3dd015203633b857297e2c";
+      };
+    }
+    {
+      name = "sshpk___sshpk_1.16.1.tgz";
+      path = fetchurl {
+        name = "sshpk___sshpk_1.16.1.tgz";
+        url  = "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz";
+        sha1 = "fb661c0bef29b39db40769ee39fa70093d6f6877";
+      };
+    }
+    {
+      name = "ssri___ssri_6.0.1.tgz";
+      path = fetchurl {
+        name = "ssri___ssri_6.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz";
+        sha1 = "2a3c41b28dd45b62b63676ecb74001265ae9edd8";
+      };
+    }
+    {
+      name = "stat_mode___stat_mode_1.0.0.tgz";
+      path = fetchurl {
+        name = "stat_mode___stat_mode_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz";
+        sha1 = "68b55cb61ea639ff57136f36b216a291800d1465";
+      };
+    }
+    {
+      name = "stream_each___stream_each_1.2.3.tgz";
+      path = fetchurl {
+        name = "stream_each___stream_each_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz";
+        sha1 = "ebe27a0c389b04fbcc233642952e10731afa9bae";
+      };
+    }
+    {
+      name = "stream_iterate___stream_iterate_1.2.0.tgz";
+      path = fetchurl {
+        name = "stream_iterate___stream_iterate_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/stream-iterate/-/stream-iterate-1.2.0.tgz";
+        sha1 = "2bd7c77296c1702a46488b8ad41f79865eecd4e1";
+      };
+    }
+    {
+      name = "stream_shift___stream_shift_1.0.1.tgz";
+      path = fetchurl {
+        name = "stream_shift___stream_shift_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz";
+        sha1 = "d7088281559ab2778424279b0877da3c392d5a3d";
+      };
+    }
+    {
+      name = "strict_uri_encode___strict_uri_encode_2.0.0.tgz";
+      path = fetchurl {
+        name = "strict_uri_encode___strict_uri_encode_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz";
+        sha1 = "b9c7330c7042862f6b142dc274bbcc5866ce3546";
+      };
+    }
+    {
+      name = "string_width___string_width_1.0.2.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+      };
+    }
+    {
+      name = "string_width___string_width_2.1.1.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz";
+        sha1 = "ab93f27a8dc13d28cac815c462143a6d9012ae9e";
+      };
+    }
+    {
+      name = "string_width___string_width_3.1.0.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz";
+        sha1 = "22767be21b62af1081574306f69ac51b62203961";
+      };
+    }
+    {
+      name = "string_width___string_width_4.2.0.tgz";
+      path = fetchurl {
+        name = "string_width___string_width_4.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz";
+        sha1 = "952182c46cc7b2c313d1596e623992bd163b72b5";
+      };
+    }
+    {
+      name = "string.prototype.matchall___string.prototype.matchall_4.0.2.tgz";
+      path = fetchurl {
+        name = "string.prototype.matchall___string.prototype.matchall_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz";
+        sha1 = "48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e";
+      };
+    }
+    {
+      name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimend___string.prototype.trimend_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz";
+        sha1 = "85812a6b847ac002270f5808146064c995fb6913";
+      };
+    }
+    {
+      name = "string.prototype.trimleft___string.prototype.trimleft_2.1.0.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimleft___string.prototype.trimleft_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz";
+        sha1 = "6cc47f0d7eb8d62b0f3701611715a3954591d634";
+      };
+    }
+    {
+      name = "string.prototype.trimright___string.prototype.trimright_2.1.0.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimright___string.prototype.trimright_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz";
+        sha1 = "669d164be9df9b6f7559fa8e89945b168a5a6c58";
+      };
+    }
+    {
+      name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+      path = fetchurl {
+        name = "string.prototype.trimstart___string.prototype.trimstart_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz";
+        sha1 = "14af6d9f34b053f7cfc89b72f8f2ee14b9039a54";
+      };
+    }
+    {
+      name = "string_decoder___string_decoder_1.3.0.tgz";
+      path = fetchurl {
+        name = "string_decoder___string_decoder_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz";
+        sha1 = "42f114594a46cf1a8e30b0a84f56c78c3edac21e";
+      };
+    }
+    {
+      name = "string_decoder___string_decoder_0.10.31.tgz";
+      path = fetchurl {
+        name = "string_decoder___string_decoder_0.10.31.tgz";
+        url  = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz";
+        sha1 = "62e203bc41766c6c28c9fc84301dab1c5310fa94";
+      };
+    }
+    {
+      name = "string_decoder___string_decoder_1.1.1.tgz";
+      path = fetchurl {
+        name = "string_decoder___string_decoder_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha1 = "9cf1611ba62685d7030ae9e4ba34149c3af03fc8";
+      };
+    }
+    {
+      name = "stringify_package___stringify_package_1.0.1.tgz";
+      path = fetchurl {
+        name = "stringify_package___stringify_package_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz";
+        sha1 = "e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_3.0.1.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_4.0.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz";
+        sha1 = "a8479022eb1ac368a871389b635262c505ee368f";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_5.2.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_5.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz";
+        sha1 = "8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae";
+      };
+    }
+    {
+      name = "strip_ansi___strip_ansi_6.0.0.tgz";
+      path = fetchurl {
+        name = "strip_ansi___strip_ansi_6.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz";
+        sha1 = "0b1571dd7669ccd4f3e06e14ef1eed26225ae532";
+      };
+    }
+    {
+      name = "strip_bom___strip_bom_3.0.0.tgz";
+      path = fetchurl {
+        name = "strip_bom___strip_bom_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz";
+        sha1 = "2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3";
+      };
+    }
+    {
+      name = "strip_eof___strip_eof_1.0.0.tgz";
+      path = fetchurl {
+        name = "strip_eof___strip_eof_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz";
+        sha1 = "bb43ff5598a6eb05d89b59fcd129c983313606bf";
+      };
+    }
+    {
+      name = "strip_json_comments___strip_json_comments_3.1.1.tgz";
+      path = fetchurl {
+        name = "strip_json_comments___strip_json_comments_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz";
+        sha1 = "31f1281b3832630434831c310c01cccda8cbe006";
+      };
+    }
+    {
+      name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
+      path = fetchurl {
+        name = "strip_json_comments___strip_json_comments_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
+      };
+    }
+    {
+      name = "supports_color___supports_color_5.5.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_5.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz";
+        sha1 = "e2e69a44ac8772f78a1ec0b35b689df6530efc8f";
+      };
+    }
+    {
+      name = "supports_color___supports_color_7.1.0.tgz";
+      path = fetchurl {
+        name = "supports_color___supports_color_7.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz";
+        sha1 = "68e32591df73e25ad1c4b49108a2ec507962bfd1";
+      };
+    }
+    {
+      name = "table___table_5.4.6.tgz";
+      path = fetchurl {
+        name = "table___table_5.4.6.tgz";
+        url  = "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz";
+        sha1 = "1292d19500ce3f86053b05f0e8e7e4a3bb21079e";
+      };
+    }
+    {
+      name = "tar_stream___tar_stream_2.2.0.tgz";
+      path = fetchurl {
+        name = "tar_stream___tar_stream_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz";
+        sha1 = "acad84c284136b060dc3faa64474aa9aebd77287";
+      };
+    }
+    {
+      name = "tar___tar_4.4.13.tgz";
+      path = fetchurl {
+        name = "tar___tar_4.4.13.tgz";
+        url  = "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz";
+        sha1 = "43b364bc52888d555298637b10d60790254ab525";
+      };
+    }
+    {
+      name = "tar___tar_6.1.0.tgz";
+      path = fetchurl {
+        name = "tar___tar_6.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/tar/-/tar-6.1.0.tgz";
+        sha1 = "d1724e9bcc04b977b18d5c573b333a2207229a83";
+      };
+    }
+    {
+      name = "temp_file___temp_file_3.3.7.tgz";
+      path = fetchurl {
+        name = "temp_file___temp_file_3.3.7.tgz";
+        url  = "https://registry.yarnpkg.com/temp-file/-/temp-file-3.3.7.tgz";
+        sha1 = "686885d635f872748e384e871855958470aeb18a";
+      };
+    }
+    {
+      name = "term_size___term_size_1.2.0.tgz";
+      path = fetchurl {
+        name = "term_size___term_size_1.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz";
+        sha1 = "458b83887f288fc56d6fffbfad262e26638efa69";
+      };
+    }
+    {
+      name = "term_size___term_size_2.2.0.tgz";
+      path = fetchurl {
+        name = "term_size___term_size_2.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz";
+        sha1 = "1f16adedfe9bdc18800e1776821734086fcc6753";
+      };
+    }
+    {
+      name = "text_table___text_table_0.2.0.tgz";
+      path = fetchurl {
+        name = "text_table___text_table_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz";
+        sha1 = "7f5ee823ae805207c00af2df4a84ec3fcfa570b4";
+      };
+    }
+    {
+      name = "through2___through2_2.0.5.tgz";
+      path = fetchurl {
+        name = "through2___through2_2.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz";
+        sha1 = "01c1e39eb31d07cb7d03a96a70823260b23132cd";
+      };
+    }
+    {
+      name = "through___through_2.3.8.tgz";
+      path = fetchurl {
+        name = "through___through_2.3.8.tgz";
+        url  = "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz";
+        sha1 = "0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5";
+      };
+    }
+    {
+      name = "timed_out___timed_out_4.0.1.tgz";
+      path = fetchurl {
+        name = "timed_out___timed_out_4.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz";
+        sha1 = "f32eacac5a175bea25d7fab565ab3ed8741ef56f";
+      };
+    }
+    {
+      name = "timm___timm_1.7.1.tgz";
+      path = fetchurl {
+        name = "timm___timm_1.7.1.tgz";
+        url  = "https://registry.yarnpkg.com/timm/-/timm-1.7.1.tgz";
+        sha1 = "96bab60c7d45b5a10a8a4d0f0117c6b7e5aff76f";
+      };
+    }
+    {
+      name = "tiny_relative_date___tiny_relative_date_1.3.0.tgz";
+      path = fetchurl {
+        name = "tiny_relative_date___tiny_relative_date_1.3.0.tgz";
+        url  = "https://registry.yarnpkg.com/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz";
+        sha1 = "fa08aad501ed730f31cc043181d995c39a935e07";
+      };
+    }
+    {
+      name = "tinycolor2___tinycolor2_1.4.2.tgz";
+      path = fetchurl {
+        name = "tinycolor2___tinycolor2_1.4.2.tgz";
+        url  = "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.2.tgz";
+        sha1 = "3f6a4d1071ad07676d7fa472e1fac40a719d8803";
+      };
+    }
+    {
+      name = "tmp_promise___tmp_promise_1.1.0.tgz";
+      path = fetchurl {
+        name = "tmp_promise___tmp_promise_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz";
+        sha1 = "bb924d239029157b9bc1d506a6aa341f8b13e64c";
+      };
+    }
+    {
+      name = "tmp___tmp_0.1.0.tgz";
+      path = fetchurl {
+        name = "tmp___tmp_0.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz";
+        sha1 = "ee434a4e22543082e294ba6201dcc6eafefa2877";
+      };
+    }
+    {
+      name = "tmp___tmp_0.0.33.tgz";
+      path = fetchurl {
+        name = "tmp___tmp_0.0.33.tgz";
+        url  = "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz";
+        sha1 = "6d34335889768d21b2bcda0aa277ced3b1bfadf9";
+      };
+    }
+    {
+      name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+      path = fetchurl {
+        name = "to_fast_properties___to_fast_properties_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz";
+        sha1 = "dc5e698cbd079265bc73e0377681a4e4e83f616e";
+      };
+    }
+    {
+      name = "to_readable_stream___to_readable_stream_1.0.0.tgz";
+      path = fetchurl {
+        name = "to_readable_stream___to_readable_stream_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz";
+        sha1 = "ce0aa0c2f3df6adf852efb404a783e77c0475771";
+      };
+    }
+    {
+      name = "tough_cookie___tough_cookie_2.4.3.tgz";
+      path = fetchurl {
+        name = "tough_cookie___tough_cookie_2.4.3.tgz";
+        url  = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz";
+        sha1 = "53f36da3f47783b0925afa06ff9f3b165280f781";
+      };
+    }
+    {
+      name = "tough_cookie___tough_cookie_2.5.0.tgz";
+      path = fetchurl {
+        name = "tough_cookie___tough_cookie_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz";
+        sha1 = "cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2";
+      };
+    }
+    {
+      name = "truncate_utf8_bytes___truncate_utf8_bytes_1.0.2.tgz";
+      path = fetchurl {
+        name = "truncate_utf8_bytes___truncate_utf8_bytes_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz";
+        sha1 = "405923909592d56f78a5818434b0b78489ca5f2b";
+      };
+    }
+    {
+      name = "tsconfig_paths___tsconfig_paths_3.9.0.tgz";
+      path = fetchurl {
+        name = "tsconfig_paths___tsconfig_paths_3.9.0.tgz";
+        url  = "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz";
+        sha1 = "098547a6c4448807e8fcb8eae081064ee9a3c90b";
+      };
+    }
+    {
+      name = "tslib___tslib_1.13.0.tgz";
+      path = fetchurl {
+        name = "tslib___tslib_1.13.0.tgz";
+        url  = "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz";
+        sha1 = "c881e13cc7015894ed914862d276436fa9a47043";
+      };
+    }
+    {
+      name = "tslib___tslib_1.10.0.tgz";
+      path = fetchurl {
+        name = "tslib___tslib_1.10.0.tgz";
+        url  = "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz";
+        sha1 = "c3c19f95973fb0a62973fb09d90d961ee43e5c8a";
+      };
+    }
+    {
+      name = "tsutils___tsutils_3.17.1.tgz";
+      path = fetchurl {
+        name = "tsutils___tsutils_3.17.1.tgz";
+        url  = "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz";
+        sha1 = "ed719917f11ca0dee586272b2ac49e015a2dd759";
+      };
+    }
+    {
+      name = "tunnel_agent___tunnel_agent_0.6.0.tgz";
+      path = fetchurl {
+        name = "tunnel_agent___tunnel_agent_0.6.0.tgz";
+        url  = "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    }
+    {
+      name = "tweetnacl___tweetnacl_0.14.5.tgz";
+      path = fetchurl {
+        name = "tweetnacl___tweetnacl_0.14.5.tgz";
+        url  = "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    }
+    {
+      name = "type_check___type_check_0.4.0.tgz";
+      path = fetchurl {
+        name = "type_check___type_check_0.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz";
+        sha1 = "07b8203bfa7056c0657050e3ccd2c37730bab8f1";
+      };
+    }
+    {
+      name = "type_check___type_check_0.3.2.tgz";
+      path = fetchurl {
+        name = "type_check___type_check_0.3.2.tgz";
+        url  = "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz";
+        sha1 = "5884cab512cf1d355e3fb784f30804b2b520db72";
+      };
+    }
+    {
+      name = "type_fest___type_fest_0.11.0.tgz";
+      path = fetchurl {
+        name = "type_fest___type_fest_0.11.0.tgz";
+        url  = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz";
+        sha1 = "97abf0872310fed88a5c466b25681576145e33f1";
+      };
+    }
+    {
+      name = "type_fest___type_fest_0.16.0.tgz";
+      path = fetchurl {
+        name = "type_fest___type_fest_0.16.0.tgz";
+        url  = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz";
+        sha1 = "3240b891a78b0deae910dbeb86553e552a148860";
+      };
+    }
+    {
+      name = "type_fest___type_fest_0.8.1.tgz";
+      path = fetchurl {
+        name = "type_fest___type_fest_0.8.1.tgz";
+        url  = "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz";
+        sha1 = "09e249ebde851d3b1e48d27c105444667f17b83d";
+      };
+    }
+    {
+      name = "typedarray_to_buffer___typedarray_to_buffer_3.1.5.tgz";
+      path = fetchurl {
+        name = "typedarray_to_buffer___typedarray_to_buffer_3.1.5.tgz";
+        url  = "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz";
+        sha1 = "a97ee7a9ff42691b9f783ff1bc5112fe3fca9080";
+      };
+    }
+    {
+      name = "typedarray___typedarray_0.0.6.tgz";
+      path = fetchurl {
+        name = "typedarray___typedarray_0.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz";
+        sha1 = "867ac74e3864187b1d3d47d996a78ec5c8830777";
+      };
+    }
+    {
+      name = "typescript___typescript_3.9.7.tgz";
+      path = fetchurl {
+        name = "typescript___typescript_3.9.7.tgz";
+        url  = "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz";
+        sha1 = "98d600a5ebdc38f40cb277522f12dc800e9e25fa";
+      };
+    }
+    {
+      name = "uid_number___uid_number_0.0.6.tgz";
+      path = fetchurl {
+        name = "uid_number___uid_number_0.0.6.tgz";
+        url  = "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz";
+        sha1 = "0ea10e8035e8eb5b8e4449f06da1c730663baa81";
+      };
+    }
+    {
+      name = "umask___umask_1.1.0.tgz";
+      path = fetchurl {
+        name = "umask___umask_1.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz";
+        sha1 = "f29cebf01df517912bb58ff9c4e50fde8e33320d";
+      };
+    }
+    {
+      name = "unique_filename___unique_filename_1.1.1.tgz";
+      path = fetchurl {
+        name = "unique_filename___unique_filename_1.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz";
+        sha1 = "1d69769369ada0583103a1e6ae87681b56573230";
+      };
+    }
+    {
+      name = "unique_slug___unique_slug_2.0.2.tgz";
+      path = fetchurl {
+        name = "unique_slug___unique_slug_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz";
+        sha1 = "baabce91083fc64e945b0f3ad613e264f7cd4e6c";
+      };
+    }
+    {
+      name = "unique_string___unique_string_1.0.0.tgz";
+      path = fetchurl {
+        name = "unique_string___unique_string_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz";
+        sha1 = "9e1057cca851abb93398f8b33ae187b99caec11a";
+      };
+    }
+    {
+      name = "unique_string___unique_string_2.0.0.tgz";
+      path = fetchurl {
+        name = "unique_string___unique_string_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz";
+        sha1 = "39c6451f81afb2749de2b233e3f7c5e8843bd89d";
+      };
+    }
+    {
+      name = "universalify___universalify_0.1.2.tgz";
+      path = fetchurl {
+        name = "universalify___universalify_0.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz";
+        sha1 = "b646f69be3942dabcecc9d6639c80dc105efaa66";
+      };
+    }
+    {
+      name = "universalify___universalify_1.0.0.tgz";
+      path = fetchurl {
+        name = "universalify___universalify_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz";
+        sha1 = "b61a1da173e8435b2fe3c67d29b9adf8594bd16d";
+      };
+    }
+    {
+      name = "unpipe___unpipe_1.0.0.tgz";
+      path = fetchurl {
+        name = "unpipe___unpipe_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz";
+        sha1 = "b2bf4ee8514aae6165b4817829d21b2ef49904ec";
+      };
+    }
+    {
+      name = "untildify___untildify_3.0.3.tgz";
+      path = fetchurl {
+        name = "untildify___untildify_3.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz";
+        sha1 = "1e7b42b140bcfd922b22e70ca1265bfe3634c7c9";
+      };
+    }
+    {
+      name = "unzip_crx_3___unzip_crx_3_0.2.0.tgz";
+      path = fetchurl {
+        name = "unzip_crx_3___unzip_crx_3_0.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/unzip-crx-3/-/unzip-crx-3-0.2.0.tgz";
+        sha1 = "d5324147b104a8aed9ae8639c95521f6f7cda292";
+      };
+    }
+    {
+      name = "unzip_response___unzip_response_2.0.1.tgz";
+      path = fetchurl {
+        name = "unzip_response___unzip_response_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz";
+        sha1 = "d2f0f737d16b0615e72a6935ed04214572d56f97";
+      };
+    }
+    {
+      name = "update_notifier___update_notifier_2.5.0.tgz";
+      path = fetchurl {
+        name = "update_notifier___update_notifier_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz";
+        sha1 = "d0744593e13f161e406acb1d9408b72cad08aff6";
+      };
+    }
+    {
+      name = "update_notifier___update_notifier_4.1.3.tgz";
+      path = fetchurl {
+        name = "update_notifier___update_notifier_4.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz";
+        sha1 = "be86ee13e8ce48fb50043ff72057b5bd598e1ea3";
+      };
+    }
+    {
+      name = "uri_js___uri_js_4.2.2.tgz";
+      path = fetchurl {
+        name = "uri_js___uri_js_4.2.2.tgz";
+        url  = "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz";
+        sha1 = "94c540e1ff772956e2299507c010aea6c8838eb0";
+      };
+    }
+    {
+      name = "url_parse_lax___url_parse_lax_1.0.0.tgz";
+      path = fetchurl {
+        name = "url_parse_lax___url_parse_lax_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz";
+        sha1 = "7af8f303645e9bd79a272e7a14ac68bc0609da73";
+      };
+    }
+    {
+      name = "url_parse_lax___url_parse_lax_3.0.0.tgz";
+      path = fetchurl {
+        name = "url_parse_lax___url_parse_lax_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz";
+        sha1 = "16b5cafc07dbe3676c1b1999177823d6503acb0c";
+      };
+    }
+    {
+      name = "utf8_byte_length___utf8_byte_length_1.0.4.tgz";
+      path = fetchurl {
+        name = "utf8_byte_length___utf8_byte_length_1.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz";
+        sha1 = "f45f150c4c66eee968186505ab93fcbb8ad6bf61";
+      };
+    }
+    {
+      name = "utif___utif_2.0.1.tgz";
+      path = fetchurl {
+        name = "utif___utif_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/utif/-/utif-2.0.1.tgz";
+        sha1 = "9e1582d9bbd20011a6588548ed3266298e711759";
+      };
+    }
+    {
+      name = "util_deprecate___util_deprecate_1.0.2.tgz";
+      path = fetchurl {
+        name = "util_deprecate___util_deprecate_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    }
+    {
+      name = "util_extend___util_extend_1.0.3.tgz";
+      path = fetchurl {
+        name = "util_extend___util_extend_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/util-extend/-/util-extend-1.0.3.tgz";
+        sha1 = "a7c216d267545169637b3b6edc6ca9119e2ff93f";
+      };
+    }
+    {
+      name = "util_promisify___util_promisify_2.1.0.tgz";
+      path = fetchurl {
+        name = "util_promisify___util_promisify_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz";
+        sha1 = "3c2236476c4d32c5ff3c47002add7c13b9a82a53";
+      };
+    }
+    {
+      name = "util.promisify___util.promisify_1.0.0.tgz";
+      path = fetchurl {
+        name = "util.promisify___util.promisify_1.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz";
+        sha1 = "440f7165a459c9a16dc145eb8e72f35687097030";
+      };
+    }
+    {
+      name = "uuid___uuid_3.3.3.tgz";
+      path = fetchurl {
+        name = "uuid___uuid_3.3.3.tgz";
+        url  = "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz";
+        sha1 = "4568f0216e78760ee1dbf3a4d2cf53e224112866";
+      };
+    }
+    {
+      name = "uuid___uuid_3.4.0.tgz";
+      path = fetchurl {
+        name = "uuid___uuid_3.4.0.tgz";
+        url  = "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz";
+        sha1 = "b23e4358afa8a202fe7a100af1f5f883f02007ee";
+      };
+    }
+    {
+      name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz";
+      path = fetchurl {
+        name = "v8_compile_cache___v8_compile_cache_2.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz";
+        sha1 = "54bc3cdd43317bca91e35dcaf305b1a7237de745";
+      };
+    }
+    {
+      name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+      path = fetchurl {
+        name = "validate_npm_package_license___validate_npm_package_license_3.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz";
+        sha1 = "fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a";
+      };
+    }
+    {
+      name = "validate_npm_package_name___validate_npm_package_name_3.0.0.tgz";
+      path = fetchurl {
+        name = "validate_npm_package_name___validate_npm_package_name_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz";
+        sha1 = "5fa912d81eb7d0c74afc140de7317f0ca7df437e";
+      };
+    }
+    {
+      name = "verror___verror_1.10.0.tgz";
+      path = fetchurl {
+        name = "verror___verror_1.10.0.tgz";
+        url  = "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    }
+    {
+      name = "wcwidth___wcwidth_1.0.1.tgz";
+      path = fetchurl {
+        name = "wcwidth___wcwidth_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz";
+        sha1 = "f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8";
+      };
+    }
+    {
+      name = "which_module___which_module_2.0.0.tgz";
+      path = fetchurl {
+        name = "which_module___which_module_2.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz";
+        sha1 = "d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a";
+      };
+    }
+    {
+      name = "which___which_1.3.1.tgz";
+      path = fetchurl {
+        name = "which___which_1.3.1.tgz";
+        url  = "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz";
+        sha1 = "a45043d54f5805316da8d62f9f50918d3da70b0a";
+      };
+    }
+    {
+      name = "which___which_2.0.2.tgz";
+      path = fetchurl {
+        name = "which___which_2.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz";
+        sha1 = "7c6a8dd0a636a0327e10b59c9286eee93f3f51b1";
+      };
+    }
+    {
+      name = "wide_align___wide_align_1.1.3.tgz";
+      path = fetchurl {
+        name = "wide_align___wide_align_1.1.3.tgz";
+        url  = "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz";
+        sha1 = "ae074e6bdc0c14a431e804e624549c633b000457";
+      };
+    }
+    {
+      name = "widest_line___widest_line_2.0.1.tgz";
+      path = fetchurl {
+        name = "widest_line___widest_line_2.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz";
+        sha1 = "7438764730ec7ef4381ce4df82fb98a53142a3fc";
+      };
+    }
+    {
+      name = "widest_line___widest_line_3.1.0.tgz";
+      path = fetchurl {
+        name = "widest_line___widest_line_3.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz";
+        sha1 = "8292333bbf66cb45ff0de1603b136b7ae1496eca";
+      };
+    }
+    {
+      name = "winreg___winreg_1.2.4.tgz";
+      path = fetchurl {
+        name = "winreg___winreg_1.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/winreg/-/winreg-1.2.4.tgz";
+        sha1 = "ba065629b7a925130e15779108cf540990e98d1b";
+      };
+    }
+    {
+      name = "word_wrap___word_wrap_1.2.3.tgz";
+      path = fetchurl {
+        name = "word_wrap___word_wrap_1.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz";
+        sha1 = "610636f6b1f703891bd34771ccb17fb93b47079c";
+      };
+    }
+    {
+      name = "worker_farm___worker_farm_1.7.0.tgz";
+      path = fetchurl {
+        name = "worker_farm___worker_farm_1.7.0.tgz";
+        url  = "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz";
+        sha1 = "26a94c5391bbca926152002f69b84a4bf772e5a8";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_2.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz";
+        sha1 = "d8fc3d284dd05794fe84973caecdd1cf824fdd85";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_5.1.0.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_5.1.0.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz";
+        sha1 = "1fd1f67235d5b6d0fee781056001bfb694c03b09";
+      };
+    }
+    {
+      name = "wrap_ansi___wrap_ansi_7.0.0.tgz";
+      path = fetchurl {
+        name = "wrap_ansi___wrap_ansi_7.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz";
+        sha1 = "67e145cff510a6a6984bdf1152911d69d2eb9e43";
+      };
+    }
+    {
+      name = "wrappy___wrappy_1.0.2.tgz";
+      path = fetchurl {
+        name = "wrappy___wrappy_1.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    }
+    {
+      name = "write_file_atomic___write_file_atomic_2.4.3.tgz";
+      path = fetchurl {
+        name = "write_file_atomic___write_file_atomic_2.4.3.tgz";
+        url  = "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz";
+        sha1 = "1fd2e9ae1df3e75b8d8c367443c692d4ca81f481";
+      };
+    }
+    {
+      name = "write_file_atomic___write_file_atomic_3.0.1.tgz";
+      path = fetchurl {
+        name = "write_file_atomic___write_file_atomic_3.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.1.tgz";
+        sha1 = "558328352e673b5bb192cf86500d60b230667d4b";
+      };
+    }
+    {
+      name = "write___write_1.0.3.tgz";
+      path = fetchurl {
+        name = "write___write_1.0.3.tgz";
+        url  = "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz";
+        sha1 = "0800e14523b923a387e415123c865616aae0f5c3";
+      };
+    }
+    {
+      name = "xdg_basedir___xdg_basedir_3.0.0.tgz";
+      path = fetchurl {
+        name = "xdg_basedir___xdg_basedir_3.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz";
+        sha1 = "496b2cc109eca8dbacfe2dc72b603c17c5870ad4";
+      };
+    }
+    {
+      name = "xdg_basedir___xdg_basedir_4.0.0.tgz";
+      path = fetchurl {
+        name = "xdg_basedir___xdg_basedir_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz";
+        sha1 = "4bc8d9984403696225ef83a1573cbbcb4e79db13";
+      };
+    }
+    {
+      name = "xhr___xhr_2.5.0.tgz";
+      path = fetchurl {
+        name = "xhr___xhr_2.5.0.tgz";
+        url  = "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz";
+        sha1 = "bed8d1676d5ca36108667692b74b316c496e49dd";
+      };
+    }
+    {
+      name = "xml_parse_from_string___xml_parse_from_string_1.0.1.tgz";
+      path = fetchurl {
+        name = "xml_parse_from_string___xml_parse_from_string_1.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz";
+        sha1 = "a9029e929d3dbcded169f3c6e28238d95a5d5a28";
+      };
+    }
+    {
+      name = "xml2js___xml2js_0.4.22.tgz";
+      path = fetchurl {
+        name = "xml2js___xml2js_0.4.22.tgz";
+        url  = "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.22.tgz";
+        sha1 = "4fa2d846ec803237de86f30aa9b5f70b6600de02";
+      };
+    }
+    {
+      name = "xmlbuilder___xmlbuilder_11.0.1.tgz";
+      path = fetchurl {
+        name = "xmlbuilder___xmlbuilder_11.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz";
+        sha1 = "be9bae1c8a046e76b31127726347d0ad7002beb3";
+      };
+    }
+    {
+      name = "xtend___xtend_4.0.2.tgz";
+      path = fetchurl {
+        name = "xtend___xtend_4.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz";
+        sha1 = "bb72779f5fa465186b1f438f674fa347fdb5db54";
+      };
+    }
+    {
+      name = "y18n___y18n_3.2.1.tgz";
+      path = fetchurl {
+        name = "y18n___y18n_3.2.1.tgz";
+        url  = "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz";
+        sha1 = "6d15fba884c08679c0d77e88e7759e811e07fa41";
+      };
+    }
+    {
+      name = "y18n___y18n_4.0.0.tgz";
+      path = fetchurl {
+        name = "y18n___y18n_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz";
+        sha1 = "95ef94f85ecc81d007c264e190a120f0a3c8566b";
+      };
+    }
+    {
+      name = "y18n___y18n_5.0.5.tgz";
+      path = fetchurl {
+        name = "y18n___y18n_5.0.5.tgz";
+        url  = "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz";
+        sha1 = "8769ec08d03b1ea2df2500acef561743bbb9ab18";
+      };
+    }
+    {
+      name = "yaku___yaku_0.16.7.tgz";
+      path = fetchurl {
+        name = "yaku___yaku_0.16.7.tgz";
+        url  = "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz";
+        sha1 = "1d195c78aa9b5bf8479c895b9504fd4f0847984e";
+      };
+    }
+    {
+      name = "yallist___yallist_2.1.2.tgz";
+      path = fetchurl {
+        name = "yallist___yallist_2.1.2.tgz";
+        url  = "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz";
+        sha1 = "1c11f9218f076089a47dd512f93c6699a6a81d52";
+      };
+    }
+    {
+      name = "yallist___yallist_3.1.1.tgz";
+      path = fetchurl {
+        name = "yallist___yallist_3.1.1.tgz";
+        url  = "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz";
+        sha1 = "dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd";
+      };
+    }
+    {
+      name = "yallist___yallist_4.0.0.tgz";
+      path = fetchurl {
+        name = "yallist___yallist_4.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz";
+        sha1 = "9bb92790d9c0effec63be73519e11a35019a3a72";
+      };
+    }
+    {
+      name = "yargs_parser___yargs_parser_15.0.1.tgz";
+      path = fetchurl {
+        name = "yargs_parser___yargs_parser_15.0.1.tgz";
+        url  = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.1.tgz";
+        sha1 = "54786af40b820dcb2fb8025b11b4d659d76323b3";
+      };
+    }
+    {
+      name = "yargs_parser___yargs_parser_20.2.4.tgz";
+      path = fetchurl {
+        name = "yargs_parser___yargs_parser_20.2.4.tgz";
+        url  = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz";
+        sha1 = "b42890f14566796f85ae8e3a25290d205f154a54";
+      };
+    }
+    {
+      name = "yargs_parser___yargs_parser_7.0.0.tgz";
+      path = fetchurl {
+        name = "yargs_parser___yargs_parser_7.0.0.tgz";
+        url  = "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz";
+        sha1 = "8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9";
+      };
+    }
+    {
+      name = "yargs___yargs_14.2.3.tgz";
+      path = fetchurl {
+        name = "yargs___yargs_14.2.3.tgz";
+        url  = "https://registry.yarnpkg.com/yargs/-/yargs-14.2.3.tgz";
+        sha1 = "1a1c3edced1afb2a2fea33604bc6d1d8d688a414";
+      };
+    }
+    {
+      name = "yargs___yargs_16.2.0.tgz";
+      path = fetchurl {
+        name = "yargs___yargs_16.2.0.tgz";
+        url  = "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz";
+        sha1 = "1c82bf0f6b6a66eafce7ef30e376f49a12477f66";
+      };
+    }
+    {
+      name = "yargs___yargs_8.0.2.tgz";
+      path = fetchurl {
+        name = "yargs___yargs_8.0.2.tgz";
+        url  = "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz";
+        sha1 = "6299a9055b1cefc969ff7e79c1d918dceb22c360";
+      };
+    }
+    {
+      name = "zip_stream___zip_stream_4.0.4.tgz";
+      path = fetchurl {
+        name = "zip_stream___zip_stream_4.0.4.tgz";
+        url  = "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.0.4.tgz";
+        sha1 = "3a8f100b73afaa7d1ae9338d910b321dec77ff3a";
+      };
+    }
+  ];
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
new file mode 100644
index 000000000000..7da0186022a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-desktop.nix
@@ -0,0 +1,80 @@
+{ lib, fetchFromGitHub
+, makeWrapper, makeDesktopItem, mkYarnPackage
+, electron, element-web
+}:
+# Notes for maintainers:
+# * versions of `element-web` and `element-desktop` should be kept in sync.
+# * the Yarn dependency expression must be updated with `./update-element-desktop.sh <git release tag>`
+
+let
+  executableName = "element-desktop";
+  version = "1.7.20";
+  src = fetchFromGitHub {
+    owner = "vector-im";
+    repo = "element-desktop";
+    rev = "v${version}";
+    sha256 = "sha256-kQMswcEGsefQ8HCWxYPgvxOKP5cgvXx8oCl5Inh6sOg=";
+  };
+in mkYarnPackage rec {
+  name = "element-desktop-${version}";
+  inherit version src;
+
+  packageJSON = ./element-desktop-package.json;
+  yarnNix = ./element-desktop-yarndeps.nix;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    # resources
+    mkdir -p "$out/share/element"
+    ln -s '${element-web}' "$out/share/element/webapp"
+    cp -r './deps/element-desktop' "$out/share/element/electron"
+    cp -r './deps/element-desktop/res/img' "$out/share/element"
+    rm "$out/share/element/electron/node_modules"
+    cp -r './node_modules' "$out/share/element/electron"
+
+    # icons
+    for icon in $out/share/element/electron/build/icons/*.png; do
+      mkdir -p "$out/share/icons/hicolor/$(basename $icon .png)/apps"
+      ln -s "$icon" "$out/share/icons/hicolor/$(basename $icon .png)/apps/element.png"
+    done
+
+    # desktop item
+    mkdir -p "$out/share"
+    ln -s "${desktopItem}/share/applications" "$out/share/applications"
+
+    # executable wrapper
+    makeWrapper '${electron}/bin/electron' "$out/bin/${executableName}" \
+      --add-flags "$out/share/element/electron"
+  '';
+
+  # Do not attempt generating a tarball for element-web again.
+  # note: `doDist = false;` does not work.
+  distPhase = ''
+    true
+  '';
+
+  # The desktop item properties should be kept in sync with data from upstream:
+  # https://github.com/vector-im/element-desktop/blob/develop/package.json
+  desktopItem = makeDesktopItem {
+    name = "element-desktop";
+    exec = "${executableName} %u";
+    icon = "element";
+    desktopName = "Element (Riot)";
+    genericName = "Matrix Client";
+    comment = meta.description;
+    categories = "Network;InstantMessaging;Chat;";
+    extraEntries = ''
+      StartupWMClass=element
+      MimeType=x-scheme-handler/element;
+    '';
+  };
+
+  meta = with lib; {
+    description = "A feature-rich client for Matrix.org";
+    homepage = "https://element.io/";
+    license = licenses.asl20;
+    maintainers = teams.matrix.members;
+    inherit (electron.meta) platforms;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix
new file mode 100644
index 000000000000..6ee48d53288c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/element-web.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, writeText, jq, conf ? {} }:
+
+# Note for maintainers:
+# Versions of `element-web` and `element-desktop` should be kept in sync.
+
+let
+  noPhoningHome = {
+    disable_guests = true; # disable automatic guest account registration at matrix.org
+    piwik = false; # disable analytics
+  };
+  configOverrides = writeText "element-config-overrides.json" (builtins.toJSON (noPhoningHome // conf));
+
+in stdenv.mkDerivation rec {
+  pname = "element-web";
+  version = "1.7.20";
+
+  src = fetchurl {
+    url = "https://github.com/vector-im/element-web/releases/download/v${version}/element-v${version}.tar.gz";
+    sha256 = "sha256-8R7l/Pmymd5+/Fri7z2/TDj1h2FL0QgLICoXajePing=";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/
+    cp -R . $out/
+    ${jq}/bin/jq -s '.[0] * .[1]' "config.sample.json" "${configOverrides}" > "$out/config.json"
+
+    runHook postInstall
+  '';
+
+  meta = {
+    description = "A glossy Matrix collaboration client for the web";
+    homepage = "https://element.io/";
+    maintainers = lib.teams.matrix.members;
+    license = lib.licenses.asl20;
+    platforms = lib.platforms.all;
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/element/update-element-desktop.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/element/update-element-desktop.sh
new file mode 100755
index 000000000000..69d0d3d70728
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/element/update-element-desktop.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=../../../../../ -i bash -p wget yarn2nix
+
+set -euo pipefail
+
+if [ "$#" -ne 1 ] || [[ "$1" == -* ]]; then
+  echo "Regenerates the Yarn dependency lock files for the element-desktop package."
+  echo "Usage: $0 <git release tag>"
+  exit 1
+fi
+
+RIOT_WEB_SRC="https://raw.githubusercontent.com/vector-im/element-desktop/$1"
+
+wget "$RIOT_WEB_SRC/package.json" -O element-desktop-package.json
+wget "$RIOT_WEB_SRC/yarn.lock" -O element-desktop-yarndeps.lock
+yarn2nix --lockfile=element-desktop-yarndeps.lock > element-desktop-yarndeps.nix
+rm element-desktop-yarndeps.lock
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix
new file mode 100644
index 000000000000..e4f8d3c99ee9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ferdi/default.nix
@@ -0,0 +1,19 @@
+{ lib, mkFranzDerivation, fetchurl }:
+
+mkFranzDerivation rec {
+  pname = "ferdi";
+  name = "Ferdi";
+  version = "5.5.0";
+  src = fetchurl {
+    url = "https://github.com/getferdi/ferdi/releases/download/v${version}/ferdi_${version}_amd64.deb";
+    sha256 = "0i24vcnq4iz5amqmn2fgk92ff9x9y7fg8jhc3g6ksvmcfly7af3k";
+  };
+  meta = with lib; {
+    description = "Combine your favorite messaging services into one application";
+    homepage = "https://getferdi.com/";
+    license = licenses.free;
+    maintainers = [ maintainers.davidtwco ];
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix
new file mode 100644
index 000000000000..14cf45e97bbd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/fractal/default.nix
@@ -0,0 +1,98 @@
+{ lib, stdenv
+, fetchFromGitLab
+, nix-update-script
+, fetchpatch
+, meson
+, ninja
+, gettext
+, cargo
+, rustc
+, python3
+, rustPlatform
+, pkg-config
+, gtksourceview4
+, glib
+, libhandy_0
+, gtk3
+, dbus
+, openssl
+, sqlite
+, gst_all_1
+, cairo
+, gdk-pixbuf
+, gspell
+, wrapGAppsHook
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "fractal";
+  version = "4.4.0";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.gnome.org";
+    owner = "GNOME";
+    repo = "fractal";
+    rev = version;
+    sha256 = "DSNVd9YvI7Dd3s3+M0+wE594tmL1yPNMnD1W9wLhSuw=";
+  };
+
+  cargoSha256 = "xim5sOzeXJjRXbTOg2Gk/LHU0LioiyMK5nSr1LwMPjc=";
+
+  nativeBuildInputs = [
+    cargo
+    gettext
+    meson
+    ninja
+    pkg-config
+    python3
+    rustc
+    wrapGAppsHook
+    glib
+  ];
+
+  buildInputs = [
+    cairo
+    dbus
+    gdk-pixbuf
+    glib
+    gspell
+    gst_all_1.gst-editing-services
+    gst_all_1.gst-plugins-bad
+    gst_all_1.gst-plugins-base
+    (gst_all_1.gst-plugins-good.override {
+      gtkSupport = true;
+    })
+    gst_all_1.gstreamer
+    gst_all_1.gst-devtools
+    gtk3
+    gtksourceview4
+    libhandy_0
+    openssl
+    sqlite
+  ];
+
+  postPatch = ''
+    chmod +x scripts/test.sh
+    patchShebangs scripts/meson_post_install.py scripts/test.sh
+  '';
+
+  # Don't use buildRustPackage phases, only use it for rust deps setup
+  configurePhase = null;
+  buildPhase = null;
+  checkPhase = null;
+  installPhase = null;
+
+  passthru = {
+    updateScript = nix-update-script {
+      attrPath = pname;
+    };
+  };
+
+  meta = with lib; {
+    description = "Matrix group messaging app";
+    homepage = "https://gitlab.gnome.org/GNOME/fractal";
+    license = licenses.gpl3;
+    broken = stdenv.isDarwin;
+    maintainers = with maintainers; [ dtzWill worldofpeace ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix
new file mode 100644
index 000000000000..9f772bf3f6d7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/default.nix
@@ -0,0 +1,19 @@
+{ lib, mkFranzDerivation, fetchurl }:
+
+mkFranzDerivation rec {
+  pname = "franz";
+  name = "Franz";
+  version = "5.6.1";
+  src = fetchurl {
+    url = "https://github.com/meetfranz/franz/releases/download/v${version}/franz_${version}_amd64.deb";
+    sha256 = "1gn0n1hr6z2gsdnpxysyq6sm8y7cjr9jafhsam8ffw0bq74kph7p";
+  };
+  meta = with lib; {
+    description = "A free messaging app that combines chat & messaging services into one application";
+    homepage = "https://meetfranz.com";
+    license = licenses.free;
+    maintainers = [ maintainers.davidtwco ];
+    platforms = [ "x86_64-linux" ];
+    hydraPlatforms = [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix
new file mode 100644
index 000000000000..7bbad7982332
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/franz/generic.nix
@@ -0,0 +1,91 @@
+{ stdenv
+, lib
+, makeWrapper
+, wrapGAppsHook
+, autoPatchelfHook
+, dpkg
+, xorg
+, atk
+, glib
+, pango
+, gdk-pixbuf
+, cairo
+, freetype
+, fontconfig
+, gtk3
+, gnome2
+, dbus
+, nss
+, nspr
+, alsaLib
+, cups
+, expat
+, udev
+, libnotify
+, xdg-utils
+}:
+
+# Helper function for building a derivation for Franz and forks.
+
+{ pname, name, version, src, meta }:
+stdenv.mkDerivation rec {
+  inherit pname version src meta;
+
+  # Don't remove runtime deps.
+  dontPatchELF = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper wrapGAppsHook dpkg ];
+  buildInputs = (with xorg; [
+    libXi
+    libXcursor
+    libXdamage
+    libXrandr
+    libXcomposite
+    libXext
+    libXfixes
+    libXrender
+    libX11
+    libXtst
+    libXScrnSaver
+  ]) ++ [
+    gtk3
+    atk
+    glib
+    pango
+    gdk-pixbuf
+    cairo
+    freetype
+    fontconfig
+    dbus
+    gnome2.GConf
+    nss
+    nspr
+    alsaLib
+    cups
+    expat
+    stdenv.cc.cc
+  ];
+  runtimeDependencies = [ stdenv.cc.cc.lib (lib.getLib udev) libnotify ];
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r opt $out
+    ln -s $out/opt/${name}/${pname} $out/bin
+
+    # Provide desktop item and icon.
+    cp -r usr/share $out
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace /opt/${name}/${pname} ${pname}
+  '';
+
+  dontWrapGApps = true;
+
+  postFixup = ''
+    wrapProgram $out/opt/${name}/${pname} \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath runtimeDependencies}" \
+      --prefix PATH : ${xdg-utils}/bin \
+      "''${gappsWrapperArgs[@]}"
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix
new file mode 100644
index 000000000000..4c28e346a124
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/freetalk/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchFromGitHub
+, guile, pkg-config, glib, loudmouth, gmp, libidn, readline, libtool
+, libunwind, ncurses, curl, jansson, texinfo
+, automake, autoconf }:
+stdenv.mkDerivation rec {
+  pname = "freetalk";
+  version = "4.1";
+
+  src = fetchFromGitHub {
+    owner = "GNUFreetalk";
+    repo = "freetalk";
+    rev = "v${version}";
+    sha256 = "09jwk2i8qd8c7wrn9xbqcwm32720dwxis22kf3jpbg8mn6w6i757";
+  };
+
+  preConfigure = ''
+    ./autogen.sh
+  '';
+
+  nativeBuildInputs = [ pkg-config texinfo autoconf automake ];
+  buildInputs = [
+    guile glib loudmouth gmp libidn readline libtool
+    libunwind ncurses curl jansson
+  ];
+
+  meta = with lib; {
+    description =  "Console XMPP client";
+    license = licenses.gpl3Plus ;
+    maintainers = with maintainers; [ raskin ];
+    platforms = platforms.linux;
+    downloadPage = "https://www.gnu.org/software/freetalk/";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix
new file mode 100644
index 000000000000..eef24f75f155
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gajim/default.nix
@@ -0,0 +1,75 @@
+{ lib, fetchurl, gettext, wrapGAppsHook
+
+# Native dependencies
+, python3, gtk3, gobject-introspection, gnome3
+, glib-networking
+
+# Test dependencies
+, xvfb_run, dbus
+
+# Optional dependencies
+, enableJingle ? true, farstream, gstreamer, gst-plugins-base, gst-libav, gst-plugins-good, libnice
+, enableE2E ? true
+, enableSecrets ? true, libsecret
+, enableRST ? true, docutils
+, enableSpelling ? true, gspell
+, enableUPnP ? true, gupnp-igd
+, enableOmemoPluginDependencies ? true
+, extraPythonPackages ? ps: []
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "gajim";
+  version = "1.2.2";
+
+  src = fetchurl {
+    url = "https://gajim.org/downloads/${lib.versions.majorMinor version}/gajim-${version}.tar.gz";
+    sha256 = "1gfcp3b5nq43xxz5my8vfhfxnnli726j3hzcgwh9fzrzzd9ic3gx";
+  };
+
+  buildInputs = [
+    gobject-introspection gtk3 gnome3.adwaita-icon-theme
+    glib-networking
+  ] ++ lib.optionals enableJingle [ farstream gstreamer gst-plugins-base gst-libav gst-plugins-good libnice ]
+    ++ lib.optional enableSecrets libsecret
+    ++ lib.optional enableSpelling gspell
+    ++ lib.optional enableUPnP gupnp-igd;
+
+  nativeBuildInputs = [
+    gettext wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
+
+  propagatedBuildInputs = with python3.pkgs; [
+    nbxmpp pygobject3 dbus-python pillow css-parser precis-i18n keyring setuptools
+  ] ++ lib.optionals enableE2E [ pycrypto python-gnupg ]
+    ++ lib.optional enableRST docutils
+    ++ lib.optionals enableOmemoPluginDependencies [ python-axolotl qrcode ]
+    ++ extraPythonPackages python3.pkgs;
+
+  checkInputs = [ xvfb_run dbus.daemon ];
+
+  checkPhase = ''
+    xvfb-run dbus-run-session \
+      --config-file=${dbus.daemon}/share/dbus-1/session.conf \
+      ${python3.interpreter} setup.py test
+  '';
+
+  # necessary for wrapGAppsHook
+  strictDeps = false;
+
+  meta = {
+    homepage = "http://gajim.org/";
+    description = "Jabber client written in PyGTK";
+    license = lib.licenses.gpl3Plus;
+    maintainers = with lib.maintainers; [ raskin abbradar ];
+    downloadPage = "http://gajim.org/downloads.php";
+    updateWalker = true;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix
new file mode 100644
index 000000000000..6fe0e3b13b27
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gitter/default.nix
@@ -0,0 +1,102 @@
+{ lib, stdenv, alsaLib, atk, at-spi2-core, cairo, cups, dbus, dpkg, expat, fetchurl
+, fontconfig, freetype, gdk-pixbuf, glib, gnome2, gtk3,  libdrm, libX11
+, libXScrnSaver, libXcomposite, libXcursor, libXdamage, libXext, libXfixes
+, libXi, libXrandr, libXrender, libXtst, libappindicator-gtk3, libcxx
+, libnotify, libpulseaudio, libxcb, makeDesktopItem, makeWrapper, mesa, nspr, nss
+, pango, systemd }:
+
+let gitterDirectorySuffix = "opt/gitter";
+   libPath = lib.makeLibraryPath [
+     alsaLib
+     atk
+     at-spi2-core
+     cairo
+     cups
+     dbus
+     expat
+     fontconfig
+     freetype
+     gdk-pixbuf
+     glib
+     gnome2.GConf
+     gtk3
+     libX11
+     libXScrnSaver
+     libXcomposite
+     libXcursor
+     libXdamage
+     libXext
+     libXfixes
+     libXi
+     libXrandr
+     libXrender
+     libXtst
+     libappindicator-gtk3
+     libcxx
+     libdrm
+     libnotify
+     libpulseaudio
+     libxcb
+     mesa
+     nspr
+     nss
+     pango
+     stdenv.cc.cc
+     systemd
+  ];
+    doELFPatch = target: ''
+      patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} \
+         --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \
+         $out/${gitterDirectorySuffix}/${target}
+       '';
+in stdenv.mkDerivation rec {
+  pname = "gitter";
+  version = "5.0.1";
+
+  src = fetchurl {
+    url = "https://update.gitter.im/linux64/${pname}_${version}_amd64.deb";
+    sha256 = "1ps9akylqrril4902r8mi0mprm0hb5wra51ry6c1rb5xz5nrzgh1";
+  };
+
+  nativeBuildInputs = [ makeWrapper dpkg ];
+
+  unpackPhase = "dpkg -x $src .";
+
+  installPhase = ''
+    mkdir -p $out/{bin,opt/gitter,share/pixmaps}
+    mv ./opt/Gitter/linux64/* $out/opt/gitter
+
+    ${doELFPatch "Gitter"}
+    ${doELFPatch "nacl_helper"}
+    ${doELFPatch "minidump_stackwalk"}
+    ${doELFPatch "nwjc"}
+    ${doELFPatch "chromedriver"}
+    ${doELFPatch "payload"}
+
+    patchelf --set-rpath "$out/${gitterDirectorySuffix}/lib:${libPath}" \
+         $out/${gitterDirectorySuffix}/lib/libnw.so
+
+    wrapProgram $out/${gitterDirectorySuffix}/Gitter --prefix LD_LIBRARY_PATH : ${libPath}
+
+    ln -s $out/${gitterDirectorySuffix}/Gitter $out/bin/
+    ln -s $out/${gitterDirectorySuffix}/logo.png $out/share/pixmaps/gitter.png
+    ln -s "${desktopItem}/share/applications" $out/share/
+  '';
+
+  desktopItem = makeDesktopItem {
+    name = pname;
+    exec = "Gitter";
+    icon = pname;
+    desktopName = "Gitter";
+    genericName = meta.description;
+    categories = "Network;InstantMessaging;";
+  };
+
+  meta = with lib; {
+    description = "Where developers come to talk";
+    downloadPage = "https://gitter.im/apps";
+    license = licenses.mit;
+    maintainers = [ maintainers.imalison ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix
new file mode 100644
index 000000000000..04418dc64fcf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/default.nix
@@ -0,0 +1,29 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests }:
+
+buildGoModule {
+  pname = "go-neb";
+  version = "unstable-2020-04-09";
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = "go-neb";
+    rev = "1e297c50ad2938e511a3c86f4b190fd3fc3559d6";
+    sha256 = "1azwy4s4kmypps1fjbz76flpi1b7sjzjj4qwx94cry0hn3qfnrc6";
+  };
+
+  subPackages = [ "." ];
+
+  patches = [ ./go-mod.patch ];
+
+  vendorSha256 = "1k3980yf6zl00dkd1djwhm2f9nnffzrsbs3kq3alpw2gm0aln739";
+
+  doCheck = false;
+
+  passthru.tests.go-neb = nixosTests.go-neb;
+
+  meta = with lib; {
+    description = "Extensible matrix bot written in Go";
+    homepage = "https://github.com/matrix-org/go-neb";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ hexa maralorn ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/go-mod.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/go-mod.patch
new file mode 100644
index 000000000000..1c725652d431
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/go-neb/go-mod.patch
@@ -0,0 +1,50 @@
+diff --git a/go.mod b/go.mod
+index 8ed4e68..83526e7 100644
+--- a/go.mod
++++ b/go.mod
+@@ -4,24 +4,15 @@ go 1.14
+ 
+ require (
+ 	github.com/PuerkitoBio/goquery v1.5.1 // indirect
+-	github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
+-	github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 // indirect
+ 	github.com/andygrunwald/go-jira v1.11.0
+ 	github.com/beorn7/perks v1.0.1 // indirect
+-	github.com/cespare/xxhash/v2 v2.1.1 // indirect
+ 	github.com/dghubble/oauth1 v0.6.0
+ 	github.com/die-net/lrucache v0.0.0-20190707192454-883874fe3947
+-	github.com/go-kit/kit v0.9.0 // indirect
+-	github.com/go-logfmt/logfmt v0.4.0 // indirect
+-	github.com/go-stack/stack v1.8.0 // indirect
+-	github.com/gogo/protobuf v1.1.1 // indirect
+ 	github.com/golang/protobuf v1.3.2 // indirect
+ 	github.com/google/go-cmp v0.4.0 // indirect
+ 	github.com/google/go-github v2.0.1-0.20160719063544-b5e5babef39c+incompatible
+ 	github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79
+ 	github.com/jaytaylor/html2text v0.0.0-20200220170450-61d9dc4d7195
+-	github.com/json-iterator/go v1.1.9 // indirect
+-	github.com/julienschmidt/httprouter v1.2.0 // indirect
+ 	github.com/kr/pretty v0.1.0 // indirect
+ 	github.com/lib/pq v1.3.0
+ 	github.com/matrix-org/dugong v0.0.0-20180820122854-51a565b5666b
+@@ -32,9 +23,6 @@ require (
+ 	github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
+ 	github.com/mmcdole/gofeed v1.0.0-beta2
+ 	github.com/mmcdole/goxpp v0.0.0-20181012175147-0068e33feabf // indirect
+-	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+-	github.com/modern-go/reflect2 v1.0.1 // indirect
+-	github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 // indirect
+ 	github.com/olekukonko/tablewriter v0.0.4 // indirect
+ 	github.com/pkg/errors v0.8.1 // indirect
+ 	github.com/prometheus/client_golang v0.8.1-0.20160916180340-5636dc67ae77
+@@ -47,10 +35,7 @@ require (
+ 	github.com/stretchr/testify v1.4.0 // indirect
+ 	golang.org/x/net v0.0.0-20200301022130-244492dfa37a
+ 	golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
+-	golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect
+ 	golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 // indirect
+-	golang.org/x/tools v0.0.0-20200311090712-aafaee8bce8c // indirect
+-	gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
+ 	gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
+ 	gopkg.in/yaml.v2 v2.2.8
+ )
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix
new file mode 100644
index 000000000000..a2d12124dbf1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/default.nix
@@ -0,0 +1,61 @@
+{ lib
+, stdenv
+, substituteAll
+, buildGoModule
+, fetchFromGitHub
+, makeDesktopItem
+, makeWrapper
+, libnotify
+, olm
+, pulseaudio
+, sound-theme-freedesktop
+}:
+
+buildGoModule rec {
+  pname = "gomuks";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "tulir";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "169xyd44jyfh5njwmhsmkah8njfgnp9q9c2b13p0ry5saicwm5h5";
+  };
+
+  vendorSha256 = "1l8qnz0qy90zpywfx7pbkqpxg7rkvc9j622zcmkf38kdc1z6w20a";
+
+  doCheck = false;
+
+  buildInputs = [ makeWrapper olm ];
+
+  # Upstream issue: https://github.com/tulir/gomuks/issues/260
+  patches = lib.optional stdenv.isLinux (substituteAll {
+    src = ./hardcoded_path.patch;
+    soundTheme = sound-theme-freedesktop;
+  });
+
+  postInstall = ''
+    cp -r ${
+      makeDesktopItem {
+        name = "net.maunium.gomuks.desktop";
+        exec = "@out@/bin/gomuks";
+        terminal = "true";
+        desktopName = "Gomuks";
+        genericName = "Matrix client";
+        categories = "Network;Chat";
+        comment = meta.description;
+      }
+    }/* $out/
+    substituteAllInPlace $out/share/applications/*
+    wrapProgram $out/bin/gomuks \
+      --prefix PATH : "${lib.makeBinPath (lib.optionals stdenv.isLinux [ libnotify pulseaudio ])}"
+  '';
+
+  meta = with lib; {
+    homepage = "https://maunium.net/go/gomuks/";
+    description = "A terminal based Matrix client written in Go";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ charvp emily ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/hardcoded_path.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/hardcoded_path.patch
new file mode 100644
index 000000000000..0e0d4e28b0a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gomuks/hardcoded_path.patch
@@ -0,0 +1,13 @@
+diff --git a/lib/notification/notify_linux.go b/lib/notification/notify_linux.go
+index f93a95f..da6a61d 100644
+--- a/lib/notification/notify_linux.go
++++ b/lib/notification/notify_linux.go
+@@ -32,7 +32,7 @@ func Send(title, text string, critical, sound bool) error {
+ 		if critical {
+ 			soundName = "complete"
+ 		}
+-		exec.Command("paplay", "/usr/share/sounds/freedesktop/stereo/"+soundName+".oga").Run()
++		exec.Command("paplay", "@soundTheme@/share/sounds/freedesktop/stereo/"+soundName+".oga").Run()
+ 	}
+ 	return exec.Command("notify-send", args...).Run()
+ }
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/gtmess/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/gtmess/default.nix
new file mode 100644
index 000000000000..fec5462c47a7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/gtmess/default.nix
@@ -0,0 +1,19 @@
+{lib, stdenv, fetchurl, ncurses, openssl, tcl, tk}:
+
+stdenv.mkDerivation {
+  name = "gtmess-0.97";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/gtmess/gtmess-0.97.tar.gz";
+    sha256 = "1ipmqsrj0r1ssbgs2fpr4x5vnzlxlqhx9jrnadp1jw7s0sxpjqv0";
+  };
+
+  buildInputs = [ ncurses openssl tcl tk];
+
+  meta = {
+    description = "Console MSN Messenger client for Linux and other unix systems";
+    homepage = "http://gtmess.sourceforge.net/";
+    license = lib.licenses.gpl2Plus;
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix
new file mode 100644
index 000000000000..f3736bfc64f6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/hipchat/default.nix
@@ -0,0 +1,88 @@
+{ lib, stdenv, fetchurl, xorg, freetype, fontconfig, openssl, glib, nss, nspr, expat
+, alsaLib, dbus, zlib, libxml2, libxslt, makeWrapper, xkeyboard_config, systemd
+, libGL, xcbutilkeysyms, xdg-utils, libtool }:
+
+let
+  version = "4.30.5.1682";
+
+  rpath = lib.makeLibraryPath [
+    xdg-utils
+    xorg.libXext
+    xorg.libSM
+    xorg.libICE
+    xorg.libX11
+    xorg.libXrandr
+    xorg.libXdamage
+    xorg.libXrender
+    xorg.libXfixes
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libxcb
+    xorg.libXi
+    xorg.libXScrnSaver
+    xorg.libXtst
+    freetype
+    fontconfig
+    openssl
+    glib
+    nss
+    nspr
+    dbus
+    alsaLib
+    zlib
+    libtool
+    libxml2
+    libxslt
+    expat
+    xcbutilkeysyms
+    systemd
+    libGL
+  ] + ":${stdenv.cc.cc.lib}/lib64";
+in stdenv.mkDerivation {
+  pname = "hipchat";
+  inherit version;
+
+  src = fetchurl {
+    url = "https://atlassian.artifactoryonline.com/artifactory/hipchat-apt-client/pool/HipChat4-${version}-Linux.deb";
+    sha256 = "03pz8wskafn848yvciq29kwdvqcgjrk6sjnm8nk9acl89xf0sn96";
+  };
+
+  buildInputs = [ makeWrapper ];
+
+  buildCommand = ''
+    ar x $src
+    tar xfvz data.tar.gz
+
+    mkdir -p $out/libexec/hipchat
+    d=$out/libexec/hipchat/lib
+    mv opt/HipChat4/* $out/libexec/hipchat/
+    mv usr/share $out
+
+    for file in $(find $d -type f); do
+        patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $file || true
+        patchelf --set-rpath ${rpath}:$out/libexec/hipchat/lib:\$ORIGIN $file || true
+    done
+
+    patchShebangs $d/linuxbrowserlaunch.sh
+
+    substituteInPlace $out/share/applications/hipchat4.desktop \
+      --replace /opt/HipChat4/bin/HipChat4 $out/bin/hipchat
+
+    makeWrapper $d/HipChat.bin $out/bin/hipchat \
+      --run 'export HIPCHAT_LD_LIBRARY_PATH=$LD_LIBRARY_PATH' \
+      --run 'export HIPCHAT_QT_PLUGIN_PATH=$QT_PLUGIN_PATH' \
+      --set QT_XKB_CONFIG_ROOT ${xkeyboard_config}/share/X11/xkb \
+      --set QTWEBENGINEPROCESS_PATH $d/QtWebEngineProcess
+
+    makeWrapper $d/QtWebEngineProcess.bin $d/QtWebEngineProcess \
+      --set QT_PLUGIN_PATH "$d/plugins"
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for HipChat services";
+    homepage = "http://www.hipchat.com";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ puffnfresh ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix
new file mode 100644
index 000000000000..4c067e384f95
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jackline/default.nix
@@ -0,0 +1,53 @@
+{ lib, fetchFromGitHub, ocamlPackages }:
+
+with ocamlPackages;
+
+buildDunePackage rec {
+  pname = "jackline";
+  version = "unstable-2020-09-03";
+
+  minimumOCamlVersion = "4.08";
+
+  useDune2 = true;
+
+  src = fetchFromGitHub {
+    owner  = "hannesm";
+    repo   = "jackline";
+    rev    = "dd5f19636c9b99b72c348f0f639452d87b7c017c";
+    sha256 = "076smdgig4nwvqsqxa6gsl0c3daq5agwgzp4n2y8xxm3qiq91y89";
+  };
+
+  nativeBuildInpts = [
+    ppx_sexp_conv
+    ppx_deriving
+  ];
+
+  buildInputs = [
+    erm_xmpp
+    tls
+    mirage-crypto-pk
+    x509
+    domain-name
+    ocaml_lwt
+    otr
+    astring
+    ptime
+    notty
+    sexplib
+    hex
+    uutf
+    uchar
+    uuseg
+    uucp
+    dns-client
+    cstruct
+    base64
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/hannesm/jackline";
+    description = "minimalistic secure XMPP client in OCaml";
+    license = licenses.bsd2;
+    maintainers = with maintainers; [ sternenseemann ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix
new file mode 100644
index 000000000000..feffbe312d5e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi-meet-electron/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv
+, fetchurl
+, appimageTools
+, makeWrapper
+, electron_10
+}:
+
+let
+  electron = electron_10;
+in
+stdenv.mkDerivation rec {
+  pname = "jitsi-meet-electron";
+  version = "2.4.2";
+
+  src = fetchurl {
+    url = "https://github.com/jitsi/jitsi-meet-electron/releases/download/v${version}/jitsi-meet-x86_64.AppImage";
+    sha256 = "1lv3ca9qlggyb8vcg8zlxv46i8fgx5qrx7i7y71dlqblajalf42p";
+    name = "${pname}-${version}.AppImage";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    name = "${pname}-${version}";
+    inherit src;
+  };
+
+  dontUnpack = true;
+  dontConfigure = true;
+  dontBuild = true;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out/bin $out/share/${pname} $out/share/applications
+
+    cp -a ${appimageContents}/{locales,resources} $out/share/${pname}
+    cp -a ${appimageContents}/jitsi-meet.desktop $out/share/applications/${pname}.desktop
+    cp -a ${appimageContents}/usr/share/icons $out/share
+
+    substituteInPlace $out/share/applications/${pname}.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    makeWrapper ${electron}/bin/electron $out/bin/${pname} \
+      --add-flags $out/share/${pname}/resources/app.asar \
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ]}"
+  '';
+
+  meta = with lib; {
+    description = "Jitsi Meet desktop application powered by Electron";
+    homepage = "https://github.com/jitsi/jitsi-meet-electron";
+    license = licenses.asl20;
+    maintainers = teams.jitsi.members;
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix
new file mode 100644
index 000000000000..5fa5c2a28641
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/default.nix
@@ -0,0 +1,72 @@
+{ stdenv, lib, fetchurl, makeDesktopItem, unzip, ant, jdk8
+# Optional, Jitsi still runs without, but you may pass null:
+, alsaLib, dbus, gtk2, libpulseaudio, openssl, xorg
+}:
+
+let jdk = jdk8; in
+stdenv.mkDerivation rec {
+  pname = "jitsi";
+  version = "2.10.5550";
+
+  src = fetchurl {
+    url = "https://download.jitsi.org/jitsi/src/jitsi-src-${version}.zip";
+    sha256 = "11vjchc3dnzj55x7c62wsm6masvwmij1ifkds917r1qvil1nzz6d";
+  };
+
+  patches = [ ./jitsi.patch ];
+
+  jitsiItem = makeDesktopItem {
+    name = "Jitsi";
+    exec = "jitsi";
+    comment = "VoIP and Instant Messaging client";
+    desktopName = "Jitsi";
+    genericName = "Instant Messaging";
+    categories = "Chat";
+  };
+
+  libPath = lib.makeLibraryPath ([
+    stdenv.cc.cc  # For libstdc++.
+    alsaLib
+    dbus
+    gtk2
+    libpulseaudio
+    openssl
+    xorg.libX11
+    xorg.libXext
+    xorg.libXScrnSaver
+    xorg.libXv
+  ]);
+
+  nativeBuildInputs = [ unzip ];
+  buildInputs = [ ant jdk ];
+
+  buildPhase = "ant make";
+
+  installPhase = ''
+    mkdir -p $out
+    cp -a lib $out/
+    rm -rf $out/lib/native/solaris
+    cp -a sc-bundles $out/
+    mkdir $out/bin
+    cp resources/install/generic/run.sh $out/bin/jitsi
+    chmod +x $out/bin/jitsi
+    substituteInPlace $out/bin/jitsi \
+      --subst-var-by JAVA ${jdk}/bin/java \
+      --subst-var-by EXTRALIBS ${gtk2.out}/lib
+    sed -e 's,^java\ ,${jdk}/bin/java ,' -i $out/bin/jitsi
+    patchShebangs $out
+    libPath="$libPath:${jdk.home}/lib/${jdk.architecture}"
+    find $out/ -type f -name '*.so' | while read file; do
+      patchelf --set-rpath "$libPath" "$file" && \
+          patchelf --shrink-rpath "$file"
+    done
+  '';
+
+  meta = with lib; {
+    homepage = "https://jitsi.org/";
+    description = "Open Source Video Calls and Chat";
+    license = licenses.lgpl21Plus;
+    platforms = platforms.linux;
+    maintainers = teams.jitsi.members;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch
new file mode 100644
index 000000000000..07b16b919962
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/jitsi/jitsi.patch
@@ -0,0 +1,27 @@
+--- /home/dario/Downloads/jitsi/resources/install/generic/run.sh	2013-11-01 15:37:21.000000000 +0000
++++ jitsi/resources/install/generic/run.sh	2014-03-04 11:52:30.796397567 +0000
+@@ -1,4 +1,9 @@
+-mkdir -p $HOME/.sip-communicator/log
++#! /bin/bash
++# A modified version of the generic run.sh
++
++#mkdir -p $HOME/.sip-communicator/log
++
++cd "$(dirname "$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")")"
+
+ # Get architecture
+ ARCH=`uname -m | sed -e s/x86_64/64/ -e s/i.86/32/`
+@@ -6,10 +11,12 @@
+ # Additionnal JVM arguments
+ CLIENTARGS=""
+
++NATIVELIBS="lib/native/linux-64"
+ if [ $ARCH = 32 ]
+ then
+     CLIENTARGS="-client -Xmx256m"
++    NATIVELIBS="lib/native/linux"
+ fi
+
+ export PATH=$PATH:native
+-java $CLIENTARGS -classpath "lib/felix.jar:sc-bundles/sc-launcher.jar:sc-bundles/util.jar:lib/" -Djava.library.path=native -Dfelix.config.properties=file:./lib/felix.client.run.properties -Djava.util.logging.config.file=lib/logging.properties net.java.sip.communicator.launcher.SIPCommunicator
++LD_LIBRARY_PATH=@EXTRALIBS@ exec @JAVA@ $CLIENTARGS -classpath "lib/felix.jar:sc-bundles/sc-launcher.jar:sc-bundles/util.jar:lib/" -Djava.library.path=$NATIVELIBS -Dfelix.config.properties=file:lib/felix.client.run.properties -Djava.util.logging.config.file=lib/logging.properties net.java.sip.communicator.launcher.SIPCommunicator
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix
new file mode 100644
index 000000000000..f0846fc63f7e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/default.nix
@@ -0,0 +1,187 @@
+{ bcg729
+, bctoolbox
+, bcunit
+, belcard
+, belle-sip
+, belr
+, bzrtp
+, cairo
+, cmake
+, cyrus_sasl
+, fetchFromGitLab
+, fetchurl
+, ffmpeg_3
+, gdk-pixbuf
+, glib
+, gnused
+, graphviz
+, gtk2
+, intltool
+, lib
+, libexosip
+, liblinphone
+, libmatroska
+, libnotify
+, libosip
+, libsoup
+, libupnp
+, libX11
+, libxml2
+, makeWrapper
+, mbedtls
+, mediastreamer
+, mediastreamer-openh264
+, minizip2
+, mkDerivation
+, openldap
+, ortp
+, pango
+, pkg-config
+, python
+, qtbase
+, qtgraphicaleffects
+, qtquickcontrols2
+, qttranslations
+, readline
+, speex
+, sqlite
+
+, udev
+, zlib
+}:
+
+mkDerivation rec {
+  pname = "linphone-desktop";
+  version = "4.2.5";
+
+  src = fetchFromGitLab {
+    domain = "gitlab.linphone.org";
+    owner = "public";
+    group = "BC";
+    repo = pname;
+    rev = version;
+    sha256 = "1gq4l9p21rbrcksa7fbkzn9fzbbynqmn6ni6lhnvzk359sb1xvbz";
+  };
+
+  patches = [
+    ./do-not-build-linphone-sdk.patch
+    ./remove-bc_compute_full_version-usage.patch
+  ];
+
+  # See: https://gitlab.linphone.org/BC/public/linphone-desktop/issues/21
+  postPatch = ''
+    echo "project(linphoneqt VERSION ${version})" >linphone-app/linphoneqt_version.cmake
+    substituteInPlace linphone-app/src/app/AppController.cpp \
+      --replace "LINPHONE_QT_GIT_VERSION" "\"${version}\""
+  '';
+
+  # TODO: After linphone-desktop and liblinphone split into separate packages,
+  # there might be some build inputs here that aren't needed for
+  # linphone-desktop.
+  buildInputs = [
+    bcg729
+    bctoolbox
+    belcard
+    belle-sip
+    belr
+    bzrtp
+    cairo
+    cyrus_sasl
+    ffmpeg_3
+    gdk-pixbuf
+    glib
+    gtk2
+    libX11
+    libexosip
+    liblinphone
+    libmatroska
+    libnotify
+    libosip
+    libsoup
+    libupnp
+    libxml2
+    mbedtls
+    mediastreamer
+    mediastreamer-openh264
+    minizip2
+    openldap
+    ortp
+    pango
+    qtbase
+    qtgraphicaleffects
+    qtquickcontrols2
+    qttranslations
+    readline
+    speex
+    sqlite
+    udev
+    zlib
+  ];
+
+  nativeBuildInputs = [
+    bcunit
+    cmake
+    gnused
+    graphviz
+    intltool
+    makeWrapper
+    pkg-config
+  ];
+
+  cmakeFlags = [
+    "-DCMAKE_BUILD_TYPE=RelWithDebInfo"
+    "-DMINIZIP_INCLUDE_DIRS=${minizip2}/include"
+    "-DMINIZIP_LIBRARIES=minizip"
+  ];
+
+  # The default install phase fails because the paths are somehow messed up in
+  # the makefiles. The errors were like:
+  #
+  #   CMake Error at cmake_builder/linphone_package/cmake_install.cmake:49 (file):
+  #     file INSTALL cannot find
+  #     "/build/linphone-desktop-.../build/linphone-sdk/desktop//nix/store/.../bin":
+  #     No such file or directory.
+  #
+  # If someone is able to figure out how to fix that, great. For now, just
+  # trying to pick all the relevant files to the output.
+  #
+  # Also, the exec path in linphone.desktop file remains invalid, pointing to
+  # the build directory, after the whole nix build process. So, let's use sed to
+  # manually fix that path.
+  #
+  # In order to find mediastreamer plugins, mediastreamer package was patched to
+  # support an environment variable pointing to the plugin directory. Set that
+  # environment variable by wrapping the Linphone executable.
+  #
+  # Also, some grammar files needed to be copied too from some dependencies. I
+  # suppose if one define a dependency in such a way that its share directory is
+  # found, then this copying would be unnecessary. These missing grammar files
+  # were discovered when linphone crashed at startup and it was run with
+  # --verbose flag. Instead of actually copying these files, create symlinks.
+  #
+  # It is quite likely that there are some other files still missing and
+  # Linphone will randomly crash when it tries to access those files. Then,
+  # those just need to be copied manually below.
+  installPhase = ''
+    mkdir -p $out/bin
+    cp linphone-app/linphone $out/bin/
+    wrapProgram $out/bin/linphone \
+      --set MEDIASTREAMER_PLUGINS_DIR \
+            ${mediastreamer-openh264}/lib/mediastreamer/plugins
+    mkdir -p $out/share/applications
+    cp linphone-app/linphone.desktop $out/share/applications/
+    cp -r ../linphone-app/assets/icons $out/share/
+    mkdir -p $out/share/belr/grammars
+    ln -s ${liblinphone}/share/belr/grammars/* $out/share/belr/grammars/
+    mkdir -p $out/share/linphone
+    ln -s ${liblinphone}/share/linphone/* $out/share/linphone/
+  '';
+
+  meta = with lib; {
+    homepage = "https://www.linphone.org/";
+    description = "Open source SIP phone for voice/video calls and instant messaging";
+    license = licenses.gpl3Plus;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ jluttine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch
new file mode 100644
index 000000000000..fe774a479fac
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/do-not-build-linphone-sdk.patch
@@ -0,0 +1,118 @@
+From 08b8b1811a1ad079fa713d19a8cc6bf2dc782bb7 Mon Sep 17 00:00:00 2001
+From: David P <megver83@parabola.nu>
+Date: Thu, 26 Nov 2020 15:56:30 -0300
+Subject: [PATCH 1/2] do not build linphone-sdk
+
+Signed-off-by: David P <megver83@parabola.nu>
+---
+ CMakeLists.txt                                | 61 +------------------
+ .../cmake_builder/additional_steps.cmake      |  9 ---
+ 2 files changed, 3 insertions(+), 67 deletions(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index f7eb05f2..5921ee5b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -118,7 +118,6 @@ list(APPEND APP_OPTIONS "-DENABLE_RELATIVE_PREFIX=${ENABLE_RELATIVE_PREFIX}")
+ 
+ list(APPEND APP_OPTIONS "-DLINPHONE_OUTPUT_DIR=${LINPHONE_OUTPUT_DIR}")
+ 
+-include(ExternalProject)
+ set(PROJECT_BUILD_COMMAND "")
+ if(CMAKE_BUILD_PARALLEL_LEVEL)
+ 	list(APPEND APP_OPTIONS "-DCMAKE_BUILD_PARALLEL_LEVEL=${CMAKE_BUILD_PARALLEL_LEVEL}")
+@@ -136,29 +135,8 @@ if(UNIX AND NOT APPLE)
+ 	set(CMAKE_INSTALL_RPATH "$ORIGIN:$ORIGIN/lib64:$ORIGIN/../lib64:$ORIGIN/lib:$ORIGIN/../lib:${LINPHONE_OUTPUT_DIR}/${CMAKE_INSTALL_LIBDIR}")
+ 	list(APPEND APP_OPTIONS "-DCMAKE_INSTALL_RPATH=${CMAKE_INSTALL_RPATH}")
+ endif()
+-ExternalProject_Add(sdk PREFIX "${CMAKE_BINARY_DIR}/sdk"
+-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-sdk"
+-    INSTALL_DIR "${LINPHONE_OUTPUT_DIR}"
+-    STAMP_DIR "${SDK_BUILD_DIR}/stamp"
+-    BINARY_DIR "${SDK_BUILD_DIR}"
+-    STEP_TARGETS build
+-    BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-    LIST_SEPARATOR | # Use the alternate list separator
+-    CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-    #BUILD_ALWAYS NO #${DO_BUILD}
+-)
+-ExternalProject_Add_Step(sdk force_build
+-	COMMENT "Forcing build for 'desktop'"
+-	DEPENDEES configure
+-	DEPENDERS build
+-	ALWAYS 1
+-)
+ include(FindPkgConfig)
+ 
+-set(APP_DEPENDS sdk)
+-
+-
+ find_package(Qt5 5.12 COMPONENTS Core REQUIRED)
+ 
+ if ( NOT Qt5_FOUND )
+@@ -173,39 +151,6 @@ find_package(Mediastreamer2 CONFIG QUIET)
+ find_package(ortp CONFIG QUIET)
+ 
+ 
+-if(NOT (LinphoneCxx_FOUND) OR NOT (Linphone_FOUND) OR NOT (bctoolbox_FOUND) OR NOT (belcard_FOUND) OR NOT (Mediastreamer2_FOUND) OR NOT (ortp_FOUND) OR FORCE_APP_EXTERNAL_PROJECTS)
+-	message("Projects are set as External projects. You can start building them by using for example : cmake --build . --target install")
+-	ExternalProject_Add(linphone-qt PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
+-		SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
+-		INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-		BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
+-		DEPENDS ${APP_DEPENDS}
+-		BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-		INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step will not be done by external project"
+-		LIST_SEPARATOR | # Use the alternate list separator
+-		CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-	# ${APP_OPTIONS}
+-		BUILD_ALWAYS ON
+-	)
+-	install(CODE "message(STATUS Running install)")
+-	set(AUTO_REGENERATION auto_regeneration)
+-	add_custom_target(${AUTO_REGENERATION} ALL
+-		COMMAND ${CMAKE_COMMAND} ${CMAKE_CURRENT_SOURCE_DIR}
+-		DEPENDS linphone-qt)
+-else()
+-	message("Adding Linphone Desktop in an IDE-friendly state")
+-	set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
+-	add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
+-	add_dependencies(app-library ${APP_DEPENDS})
+-endif()
+-ExternalProject_Add(linphone-qt-only PREFIX "${CMAKE_BINARY_DIR}/linphone-app"
+-    SOURCE_DIR "${CMAKE_SOURCE_DIR}/linphone-app"
+-    INSTALL_DIR "${APPLICATION_OUTPUT_DIR}"
+-    BINARY_DIR "${CMAKE_BINARY_DIR}/linphone-app"
+-    BUILD_COMMAND ${CMAKE_COMMAND} --build <BINARY_DIR> --config $<CONFIG> ${PROJECT_BUILD_COMMAND}
+-#    INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Install step is already done at build time."
+-    LIST_SEPARATOR | # Use the alternate list separator
+-    CMAKE_ARGS ${APP_OPTIONS} ${USER_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> -DCMAKE_PREFIX_PATH=${PREFIX_PATH}
+-    EXCLUDE_FROM_ALL ON
+-    BUILD_ALWAYS ON
+-)
++message("Adding Linphone Desktop in an IDE-friendly state")
++set(CMAKE_INSTALL_PREFIX "${APPLICATION_OUTPUT_DIR}")
++add_subdirectory(${CMAKE_SOURCE_DIR}/linphone-app)
+diff --git a/linphone-app/cmake_builder/additional_steps.cmake b/linphone-app/cmake_builder/additional_steps.cmake
+index 7f7fd573..a69a04e8 100644
+--- a/linphone-app/cmake_builder/additional_steps.cmake
++++ b/linphone-app/cmake_builder/additional_steps.cmake
+@@ -54,14 +54,5 @@ if (ENABLE_PACKAGING)
+     linphone_builder_apply_flags()
+     linphone_builder_set_ep_directories(linphone_package)
+     linphone_builder_expand_external_project_vars()
+-    ExternalProject_Add(TARGET_linphone_package
+-      DEPENDS TARGET_linphone_builder
+-      TMP_DIR ${ep_tmp}
+-      BINARY_DIR ${ep_build}
+-      SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/linphone_package"
+-      DOWNLOAD_COMMAND ""
+-      CMAKE_GENERATOR ${CMAKE_GENERATOR}
+-      CMAKE_ARGS ${LINPHONE_BUILDER_EP_ARGS} -DCMAKE_INSTALL_PREFIX=${LINPHONE_BUILDER_WORK_DIR}/PACKAGE -DTOOLS_DIR=${CMAKE_BINARY_DIR}/programs -DLINPHONE_OUTPUT_DIR=${CMAKE_INSTALL_PREFIX} -DLINPHONE_DESKTOP_DIR=${CMAKE_CURRENT_LIST_DIR}/.. -DLINPHONE_SOURCE_DIR=${EP_linphone_SOURCE_DIR} ${ENABLE_VARIABLES} -DLINPHONE_BUILDER_SIGNING_IDENTITY=${LINPHONE_BUILDER_SIGNING_IDENTITY}
+-    )
+   endif ()
+ endif ()
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch
new file mode 100644
index 000000000000..547652d3af7f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/linphone/remove-bc_compute_full_version-usage.patch
@@ -0,0 +1,74 @@
+From 6fc23da651d54979e73776fcda38614e290d65dc Mon Sep 17 00:00:00 2001
+From: David P <megver83@parabola.nu>
+Date: Fri, 23 Oct 2020 16:44:17 -0300
+Subject: [PATCH 2/2] remove bc_compute_full_version usage
+
+---
+ linphone-app/CMakeLists.txt                           | 11 +----------
+ linphone-app/build/CMakeLists.txt                     |  5 -----
+ .../cmake_builder/linphone_package/CMakeLists.txt     | 10 +---------
+ 3 files changed, 2 insertions(+), 24 deletions(-)
+
+diff --git a/linphone-app/CMakeLists.txt b/linphone-app/CMakeLists.txt
+index 3bc9420a..27b418ee 100644
+--- a/linphone-app/CMakeLists.txt
++++ b/linphone-app/CMakeLists.txt
+@@ -21,17 +21,8 @@
+ ################################################################################
+ cmake_minimum_required(VERSION 3.1)
+ 
++include(linphoneqt_version.cmake)
+ find_package(bctoolbox CONFIG)
+-set(FULL_VERSION )
+-bc_compute_full_version(FULL_VERSION)
+-set(version_major )
+-set(version_minor )
+-set(version_patch )
+-set(identifiers )
+-set(metadata )
+-bc_parse_full_version("${FULL_VERSION}" version_major version_minor version_patch identifiers metadata)
+-
+-project(linphoneqt VERSION "${version_major}.${version_minor}.${version_patch}")
+ 
+ if(ENABLE_BUILD_VERBOSE)
+ 	#message("CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH}")
+diff --git a/linphone-app/build/CMakeLists.txt b/linphone-app/build/CMakeLists.txt
+index 8ef03faa..97d94bd6 100644
+--- a/linphone-app/build/CMakeLists.txt
++++ b/linphone-app/build/CMakeLists.txt
+@@ -46,11 +46,6 @@ set(CPACK_SOURCE_IGNORE_FILES
+   "libmng.spec"
+ )
+ 
+-bc_compute_full_version(PROJECT_VERSION_BUILD)
+-if(PROJECT_VERSION_BUILD)
+-  set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${PROJECT_VERSION_BUILD}")
+-endif()
+-
+ message("-- Package file name is ${CPACK_PACKAGE_FILE_NAME}")
+ 
+ set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME})
+diff --git a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+index baea03cf..08ffc1b5 100644
+--- a/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
++++ b/linphone-app/cmake_builder/linphone_package/CMakeLists.txt
+@@ -38,15 +38,7 @@ set(LINPHONE_QML_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../ui")
+ # ==============================================================================
+ # Build package version.
+ # ==============================================================================
+-bc_compute_full_version(APP_PROJECT_VERSION)
+-if (GIT_EXECUTABLE AND NOT(APP_PROJECT_VERSION))
+-  execute_process(
+-    COMMAND ${GIT_EXECUTABLE} describe --always
+-    OUTPUT_VARIABLE APP_PROJECT_VERSION
+-    OUTPUT_STRIP_TRAILING_WHITESPACE
+-    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../.."
+-  )
+-elseif (NOT(APP_PROJECT_VERSION))
++if (NOT(APP_PROJECT_VERSION))
+   set(APP_PROJECT_VERSION "0.0.0")
+ endif ()
+ string(REGEX REPLACE "([0-9.]+)-?.*" "\\1" LINPHONE_VERSION "${APP_PROJECT_VERSION}")
+-- 
+2.29.2
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix
new file mode 100644
index 000000000000..caf6669e120b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-dl/default.nix
@@ -0,0 +1,25 @@
+{ lib, python3Packages, fetchFromGitHub }:
+
+python3Packages.buildPythonApplication rec {
+  pname = "matrix-dl";
+  version = "unstable-2020-07-14";
+
+  src = fetchFromGitHub {
+    owner = "rubo77";
+    repo = pname;
+    rev = "b1a86d1421f39ee327284e1023f09dc165e3c8a5";
+    sha256 = "1l8nh8z7kz24v0wcy3ll3w6in2yxwa1yz8lyc3x0blz37d8ss4ql";
+  };
+
+  propagatedBuildInputs = with python3Packages; [
+    matrix-client
+  ];
+
+  meta = with lib; {
+    description = "Download backlogs from Matrix as raw text";
+    homepage = src.meta.homepage;
+    license = licenses.gpl1Plus;
+    maintainers = with maintainers; [ aw ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/composition.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/composition.nix
new file mode 100644
index 000000000000..2992bf22cb31
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/composition.nix
@@ -0,0 +1,20 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{pkgs ? import <nixpkgs> {
+    inherit system;
+  }, system ? builtins.currentSystem, nodejs ? pkgs."nodejs-12_x"}:
+
+let
+  nodeEnv = import ./node-env.nix {
+    inherit (pkgs) lib stdenv python2 util-linux runCommand writeTextFile;
+    inherit nodejs;
+    libtool = if pkgs.stdenv.isDarwin then pkgs.darwin.cctools else null;
+  };
+locpkgs = import ./node-packages.nix {
+  inherit (pkgs) fetchurl fetchgit;
+  inherit nodeEnv;
+  globalBuildInputs = [
+    locpkgs.node-pre-gyp
+  ];
+};
+in locpkgs
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/default.nix
new file mode 100644
index 000000000000..9e3527948818
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, pkgs }:
+(import ./composition.nix {
+  inherit pkgs;
+  inherit (stdenv.hostPlatform) system;
+})."package".override {
+  postInstall = ''
+    mkdir "$out/bin"
+    echo '#!/bin/sh' >> "$out/bin/matrix-recorder"
+    echo "'${pkgs.nodejs-12_x}/bin/node'" \
+         "'$out/lib/node_modules/matrix-recorder/matrix-recorder.js'" \
+         '"$@"' >> "$out/bin/matrix-recorder"
+    echo '#!/bin/sh' >> "$out/bin/matrix-recorder-to-html"
+    echo 'cd "$1"' >> "$out/bin/matrix-recorder-to-html"
+    echo "test -d templates/ || ln -sfT '$out/lib/node_modules/matrix-recorder/templates' templates" >> "$out/bin/matrix-recorder-to-html"
+    echo "'${pkgs.nodejs-12_x}/bin/node'" \
+         "'$out/lib/node_modules/matrix-recorder/recorder-to-html.js'" \
+         '.' >> "$out/bin/matrix-recorder-to-html"
+    chmod a+x "$out/bin/matrix-recorder"
+    chmod a+x "$out/bin/matrix-recorder-to-html"
+  '';
+  meta = {
+    description = "Matrix message recorder";
+    homepage = "https://gitlab.com/argit/matrix-recorder/";
+    license = lib.licenses.mit;
+    maintainers = [ lib.maintainers.raskin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-env.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-env.nix
new file mode 100644
index 000000000000..e6131fe8e771
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-env.nix
@@ -0,0 +1,540 @@
+# This file originates from node2nix
+
+{lib, stdenv, nodejs, python2, util-linux, libtool, runCommand, writeTextFile}:
+
+let
+  python = if nodejs ? python then nodejs.python else python2;
+
+  # Create a tar wrapper that filters all the 'Ignoring unknown extended header keyword' noise
+  tarWrapper = runCommand "tarWrapper" {} ''
+    mkdir -p $out/bin
+
+    cat > $out/bin/tar <<EOF
+    #! ${stdenv.shell} -e
+    $(type -p tar) "\$@" --warning=no-unknown-keyword --delay-directory-restore
+    EOF
+
+    chmod +x $out/bin/tar
+  '';
+
+  # Function that generates a TGZ file from a NPM project
+  buildNodeSourceDist =
+    { name, version, src, ... }:
+
+    stdenv.mkDerivation {
+      name = "node-tarball-${name}-${version}";
+      inherit src;
+      buildInputs = [ nodejs ];
+      buildPhase = ''
+        export HOME=$TMPDIR
+        tgzFile=$(npm pack | tail -n 1) # Hooks to the pack command will add output (https://docs.npmjs.com/misc/scripts)
+      '';
+      installPhase = ''
+        mkdir -p $out/tarballs
+        mv $tgzFile $out/tarballs
+        mkdir -p $out/nix-support
+        echo "file source-dist $out/tarballs/$tgzFile" >> $out/nix-support/hydra-build-products
+      '';
+    };
+
+  includeDependencies = {dependencies}:
+    lib.optionalString (dependencies != [])
+      (lib.concatMapStrings (dependency:
+        ''
+          # Bundle the dependencies of the package
+          mkdir -p node_modules
+          cd node_modules
+
+          # Only include dependencies if they don't exist. They may also be bundled in the package.
+          if [ ! -e "${dependency.name}" ]
+          then
+              ${composePackage dependency}
+          fi
+
+          cd ..
+        ''
+      ) dependencies);
+
+  # Recursively composes the dependencies of a package
+  composePackage = { name, packageName, src, dependencies ? [], ... }@args:
+    ''
+      DIR=$(pwd)
+      cd $TMPDIR
+
+      unpackFile ${src}
+
+      # Make the base dir in which the target dependency resides first
+      mkdir -p "$(dirname "$DIR/${packageName}")"
+
+      if [ -f "${src}" ]
+      then
+          # Figure out what directory has been unpacked
+          packageDir="$(find . -maxdepth 1 -type d | tail -1)"
+
+          # Restore write permissions to make building work
+          find "$packageDir" -type d -exec chmod u+x {} \;
+          chmod -R u+w "$packageDir"
+
+          # Move the extracted tarball into the output folder
+          mv "$packageDir" "$DIR/${packageName}"
+      elif [ -d "${src}" ]
+      then
+          # Get a stripped name (without hash) of the source directory.
+          # On old nixpkgs it's already set internally.
+          if [ -z "$strippedName" ]
+          then
+              strippedName="$(stripHash ${src})"
+          fi
+
+          # Restore write permissions to make building work
+          chmod -R u+w "$strippedName"
+
+          # Move the extracted directory into the output folder
+          mv "$strippedName" "$DIR/${packageName}"
+      fi
+
+      # Unset the stripped name to not confuse the next unpack step
+      unset strippedName
+
+      # Include the dependencies of the package
+      cd "$DIR/${packageName}"
+      ${includeDependencies { inherit dependencies; }}
+      cd ..
+      ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+    '';
+
+  pinpointDependencies = {dependencies, production}:
+    let
+      pinpointDependenciesFromPackageJSON = writeTextFile {
+        name = "pinpointDependencies.js";
+        text = ''
+          var fs = require('fs');
+          var path = require('path');
+
+          function resolveDependencyVersion(location, name) {
+              if(location == process.env['NIX_STORE']) {
+                  return null;
+              } else {
+                  var dependencyPackageJSON = path.join(location, "node_modules", name, "package.json");
+
+                  if(fs.existsSync(dependencyPackageJSON)) {
+                      var dependencyPackageObj = JSON.parse(fs.readFileSync(dependencyPackageJSON));
+
+                      if(dependencyPackageObj.name == name) {
+                          return dependencyPackageObj.version;
+                      }
+                  } else {
+                      return resolveDependencyVersion(path.resolve(location, ".."), name);
+                  }
+              }
+          }
+
+          function replaceDependencies(dependencies) {
+              if(typeof dependencies == "object" && dependencies !== null) {
+                  for(var dependency in dependencies) {
+                      var resolvedVersion = resolveDependencyVersion(process.cwd(), dependency);
+
+                      if(resolvedVersion === null) {
+                          process.stderr.write("WARNING: cannot pinpoint dependency: "+dependency+", context: "+process.cwd()+"\n");
+                      } else {
+                          dependencies[dependency] = resolvedVersion;
+                      }
+                  }
+              }
+          }
+
+          /* Read the package.json configuration */
+          var packageObj = JSON.parse(fs.readFileSync('./package.json'));
+
+          /* Pinpoint all dependencies */
+          replaceDependencies(packageObj.dependencies);
+          if(process.argv[2] == "development") {
+              replaceDependencies(packageObj.devDependencies);
+          }
+          replaceDependencies(packageObj.optionalDependencies);
+
+          /* Write the fixed package.json file */
+          fs.writeFileSync("package.json", JSON.stringify(packageObj, null, 2));
+        '';
+      };
+    in
+    ''
+      node ${pinpointDependenciesFromPackageJSON} ${if production then "production" else "development"}
+
+      ${lib.optionalString (dependencies != [])
+        ''
+          if [ -d node_modules ]
+          then
+              cd node_modules
+              ${lib.concatMapStrings (dependency: pinpointDependenciesOfPackage dependency) dependencies}
+              cd ..
+          fi
+        ''}
+    '';
+
+  # Recursively traverses all dependencies of a package and pinpoints all
+  # dependencies in the package.json file to the versions that are actually
+  # being used.
+
+  pinpointDependenciesOfPackage = { packageName, dependencies ? [], production ? true, ... }@args:
+    ''
+      if [ -d "${packageName}" ]
+      then
+          cd "${packageName}"
+          ${pinpointDependencies { inherit dependencies production; }}
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+      fi
+    '';
+
+  # Extract the Node.js source code which is used to compile packages with
+  # native bindings
+  nodeSources = runCommand "node-sources" {} ''
+    tar --no-same-owner --no-same-permissions -xf ${nodejs.src}
+    mv node-* $out
+  '';
+
+  # Script that adds _integrity fields to all package.json files to prevent NPM from consulting the cache (that is empty)
+  addIntegrityFieldsScript = writeTextFile {
+    name = "addintegrityfields.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      function augmentDependencies(baseDir, dependencies) {
+          for(var dependencyName in dependencies) {
+              var dependency = dependencies[dependencyName];
+
+              // Open package.json and augment metadata fields
+              var packageJSONDir = path.join(baseDir, "node_modules", dependencyName);
+              var packageJSONPath = path.join(packageJSONDir, "package.json");
+
+              if(fs.existsSync(packageJSONPath)) { // Only augment packages that exist. Sometimes we may have production installs in which development dependencies can be ignored
+                  console.log("Adding metadata fields to: "+packageJSONPath);
+                  var packageObj = JSON.parse(fs.readFileSync(packageJSONPath));
+
+                  if(dependency.integrity) {
+                      packageObj["_integrity"] = dependency.integrity;
+                  } else {
+                      packageObj["_integrity"] = "sha1-000000000000000000000000000="; // When no _integrity string has been provided (e.g. by Git dependencies), add a dummy one. It does not seem to harm and it bypasses downloads.
+                  }
+
+                  if(dependency.resolved) {
+                      packageObj["_resolved"] = dependency.resolved; // Adopt the resolved property if one has been provided
+                  } else {
+                      packageObj["_resolved"] = dependency.version; // Set the resolved version to the version identifier. This prevents NPM from cloning Git repositories.
+                  }
+
+                  if(dependency.from !== undefined) { // Adopt from property if one has been provided
+                      packageObj["_from"] = dependency.from;
+                  }
+
+                  fs.writeFileSync(packageJSONPath, JSON.stringify(packageObj, null, 2));
+              }
+
+              // Augment transitive dependencies
+              if(dependency.dependencies !== undefined) {
+                  augmentDependencies(packageJSONDir, dependency.dependencies);
+              }
+          }
+      }
+
+      if(fs.existsSync("./package-lock.json")) {
+          var packageLock = JSON.parse(fs.readFileSync("./package-lock.json"));
+
+          if(packageLock.lockfileVersion !== 1) {
+             process.stderr.write("Sorry, I only understand lock file version 1!\n");
+             process.exit(1);
+          }
+
+          if(packageLock.dependencies !== undefined) {
+              augmentDependencies(".", packageLock.dependencies);
+          }
+      }
+    '';
+  };
+
+  # Reconstructs a package-lock file from the node_modules/ folder structure and package.json files with dummy sha1 hashes
+  reconstructPackageLock = writeTextFile {
+    name = "addintegrityfields.js";
+    text = ''
+      var fs = require('fs');
+      var path = require('path');
+
+      var packageObj = JSON.parse(fs.readFileSync("package.json"));
+
+      var lockObj = {
+          name: packageObj.name,
+          version: packageObj.version,
+          lockfileVersion: 1,
+          requires: true,
+          dependencies: {}
+      };
+
+      function augmentPackageJSON(filePath, dependencies) {
+          var packageJSON = path.join(filePath, "package.json");
+          if(fs.existsSync(packageJSON)) {
+              var packageObj = JSON.parse(fs.readFileSync(packageJSON));
+              dependencies[packageObj.name] = {
+                  version: packageObj.version,
+                  integrity: "sha1-000000000000000000000000000=",
+                  dependencies: {}
+              };
+              processDependencies(path.join(filePath, "node_modules"), dependencies[packageObj.name].dependencies);
+          }
+      }
+
+      function processDependencies(dir, dependencies) {
+          if(fs.existsSync(dir)) {
+              var files = fs.readdirSync(dir);
+
+              files.forEach(function(entry) {
+                  var filePath = path.join(dir, entry);
+                  var stats = fs.statSync(filePath);
+
+                  if(stats.isDirectory()) {
+                      if(entry.substr(0, 1) == "@") {
+                          // When we encounter a namespace folder, augment all packages belonging to the scope
+                          var pkgFiles = fs.readdirSync(filePath);
+
+                          pkgFiles.forEach(function(entry) {
+                              if(stats.isDirectory()) {
+                                  var pkgFilePath = path.join(filePath, entry);
+                                  augmentPackageJSON(pkgFilePath, dependencies);
+                              }
+                          });
+                      } else {
+                          augmentPackageJSON(filePath, dependencies);
+                      }
+                  }
+              });
+          }
+      }
+
+      processDependencies("node_modules", lockObj.dependencies);
+
+      fs.writeFileSync("package-lock.json", JSON.stringify(lockObj, null, 2));
+    '';
+  };
+
+  prepareAndInvokeNPM = {packageName, bypassCache, reconstructLock, npmFlags, production}:
+    let
+      forceOfflineFlag = if bypassCache then "--offline" else "--registry http://www.example.com";
+    in
+    ''
+        # Pinpoint the versions of all dependencies to the ones that are actually being used
+        echo "pinpointing versions of dependencies..."
+        source $pinpointDependenciesScriptPath
+
+        # Patch the shebangs of the bundled modules to prevent them from
+        # calling executables outside the Nix store as much as possible
+        patchShebangs .
+
+        # Deploy the Node.js package by running npm install. Since the
+        # dependencies have been provided already by ourselves, it should not
+        # attempt to install them again, which is good, because we want to make
+        # it Nix's responsibility. If it needs to install any dependencies
+        # anyway (e.g. because the dependency parameters are
+        # incomplete/incorrect), it fails.
+        #
+        # The other responsibilities of NPM are kept -- version checks, build
+        # steps, postprocessing etc.
+
+        export HOME=$TMPDIR
+        cd "${packageName}"
+        runHook preRebuild
+
+        ${lib.optionalString bypassCache ''
+          ${lib.optionalString reconstructLock ''
+            if [ -f package-lock.json ]
+            then
+                echo "WARNING: Reconstruct lock option enabled, but a lock file already exists!"
+                echo "This will most likely result in version mismatches! We will remove the lock file and regenerate it!"
+                rm package-lock.json
+            else
+                echo "No package-lock.json file found, reconstructing..."
+            fi
+
+            node ${reconstructPackageLock}
+          ''}
+
+          node ${addIntegrityFieldsScript}
+        ''}
+
+        npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} rebuild
+
+        if [ "$dontNpmInstall" != "1" ]
+        then
+            # NPM tries to download packages even when they already exist if npm-shrinkwrap is used.
+            rm -f npm-shrinkwrap.json
+
+            npm ${forceOfflineFlag} --nodedir=${nodeSources} ${npmFlags} ${lib.optionalString production "--production"} install
+        fi
+    '';
+
+  # Builds and composes an NPM package including all its dependencies
+  buildNodePackage =
+    { name
+    , packageName
+    , version
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , preRebuild ? ""
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" "dontStrip" "dontNpmInstall" "preRebuild" "unpackPhase" "buildPhase" ];
+    in
+    stdenv.mkDerivation ({
+      name = "node_${name}-${version}";
+      buildInputs = [ tarWrapper python nodejs ]
+        ++ lib.optional (stdenv.isLinux) util-linux
+        ++ lib.optional (stdenv.isDarwin) libtool
+        ++ buildInputs;
+
+      inherit dontStrip; # Stripping may fail a build for some package deployments
+      inherit dontNpmInstall preRebuild unpackPhase buildPhase;
+
+      compositionScript = composePackage args;
+      pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+      passAsFile = [ "compositionScript" "pinpointDependenciesScript" ];
+
+      installPhase = ''
+        # Create and enter a root node_modules/ folder
+        mkdir -p $out/lib/node_modules
+        cd $out/lib/node_modules
+
+        # Compose the package and all its dependencies
+        source $compositionScriptPath
+
+        ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+        # Create symlink to the deployed executable folder, if applicable
+        if [ -d "$out/lib/node_modules/.bin" ]
+        then
+            ln -s $out/lib/node_modules/.bin $out/bin
+        fi
+
+        # Create symlinks to the deployed manual page folders, if applicable
+        if [ -d "$out/lib/node_modules/${packageName}/man" ]
+        then
+            mkdir -p $out/share
+            for dir in "$out/lib/node_modules/${packageName}/man/"*
+            do
+                mkdir -p $out/share/man/$(basename "$dir")
+                for page in "$dir"/*
+                do
+                    ln -s $page $out/share/man/$(basename "$dir")
+                done
+            done
+        fi
+
+        # Run post install hook, if provided
+        runHook postInstall
+      '';
+    } // extraArgs);
+
+  # Builds a development shell
+  buildNodeShell =
+    { name
+    , packageName
+    , version
+    , src
+    , dependencies ? []
+    , buildInputs ? []
+    , production ? true
+    , npmFlags ? ""
+    , dontNpmInstall ? false
+    , bypassCache ? false
+    , reconstructLock ? false
+    , dontStrip ? true
+    , unpackPhase ? "true"
+    , buildPhase ? "true"
+    , ... }@args:
+
+    let
+      extraArgs = removeAttrs args [ "name" "dependencies" "buildInputs" ];
+
+      nodeDependencies = stdenv.mkDerivation ({
+        name = "node-dependencies-${name}-${version}";
+
+        buildInputs = [ tarWrapper python nodejs ]
+          ++ lib.optional (stdenv.isLinux) util-linux
+          ++ lib.optional (stdenv.isDarwin) libtool
+          ++ buildInputs;
+
+        inherit dontStrip; # Stripping may fail a build for some package deployments
+        inherit dontNpmInstall unpackPhase buildPhase;
+
+        includeScript = includeDependencies { inherit dependencies; };
+        pinpointDependenciesScript = pinpointDependenciesOfPackage args;
+
+        passAsFile = [ "includeScript" "pinpointDependenciesScript" ];
+
+        installPhase = ''
+          mkdir -p $out/${packageName}
+          cd $out/${packageName}
+
+          source $includeScriptPath
+
+          # Create fake package.json to make the npm commands work properly
+          cp ${src}/package.json .
+          chmod 644 package.json
+          ${lib.optionalString bypassCache ''
+            if [ -f ${src}/package-lock.json ]
+            then
+                cp ${src}/package-lock.json .
+            fi
+          ''}
+
+          # Go to the parent folder to make sure that all packages are pinpointed
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+          ${prepareAndInvokeNPM { inherit packageName bypassCache reconstructLock npmFlags production; }}
+
+          # Expose the executables that were installed
+          cd ..
+          ${lib.optionalString (builtins.substring 0 1 packageName == "@") "cd .."}
+
+          mv ${packageName} lib
+          ln -s $out/lib/node_modules/.bin $out/bin
+        '';
+      } // extraArgs);
+    in
+    stdenv.mkDerivation {
+      name = "node-shell-${name}-${version}";
+
+      buildInputs = [ python nodejs ] ++ lib.optional (stdenv.isLinux) util-linux ++ buildInputs;
+      buildCommand = ''
+        mkdir -p $out/bin
+        cat > $out/bin/shell <<EOF
+        #! ${stdenv.shell} -e
+        $shellHook
+        exec ${stdenv.shell}
+        EOF
+        chmod +x $out/bin/shell
+      '';
+
+      # Provide the dependencies in a development shell through the NODE_PATH environment variable
+      inherit nodeDependencies;
+      shellHook = lib.optionalString (dependencies != []) ''
+        export NODE_PATH=$nodeDependencies/lib/node_modules
+        export PATH="$nodeDependencies/bin:$PATH"
+      '';
+    };
+in
+{
+  buildNodeSourceDist = lib.makeOverridable buildNodeSourceDist;
+  buildNodePackage = lib.makeOverridable buildNodePackage;
+  buildNodeShell = lib.makeOverridable buildNodeShell;
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-packages.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-packages.nix
new file mode 100644
index 000000000000..1f968a62c9f9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/node-packages.nix
@@ -0,0 +1,1426 @@
+# This file has been generated by node2nix 1.7.0. Do not edit!
+
+{nodeEnv, fetchurl, fetchgit, globalBuildInputs ? []}:
+
+let
+  sources = {
+    "abbrev-1.1.1" = {
+      name = "abbrev";
+      packageName = "abbrev";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";
+        sha512 = "38s4f3id97wsb0rg9nm9zvxyq0nvwrmrpa5dzvrkp36mf5ibs98b4z6lvsbrwzzs0sbcank6c7gpp06vcwp9acfhp41rzlhi3ybsxwy";
+      };
+    };
+    "ajv-6.10.2" = {
+      name = "ajv";
+      packageName = "ajv";
+      version = "6.10.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz";
+        sha512 = "13mb943karizrqc9k4wpfs02jcrjzqyaysld4pmqacald7yj8wsjbx8gk2pbn6kc85fzjyb22x836g65fjj0mmndk2a9f878r858ysd";
+      };
+    };
+    "another-json-0.2.0" = {
+      name = "another-json";
+      packageName = "another-json";
+      version = "0.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/another-json/-/another-json-0.2.0.tgz";
+        sha1 = "b5f4019c973b6dd5c6506a2d93469cb6d32aeedc";
+      };
+    };
+    "ansi-regex-2.1.1" = {
+      name = "ansi-regex";
+      packageName = "ansi-regex";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz";
+        sha1 = "c3b33ab5ee360d86e0e628f0468ae7ef27d654df";
+      };
+    };
+    "aproba-1.2.0" = {
+      name = "aproba";
+      packageName = "aproba";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz";
+        sha512 = "13mgnbmdhdq0qncijvpip1l39q1a8labcvj3hc3n1yl2zch106mdkn7p7bd5knvmfkkn1js9nd47nzyjk1himbm8ry8i8gd6mk7mlk3";
+      };
+    };
+    "are-we-there-yet-1.1.5" = {
+      name = "are-we-there-yet";
+      packageName = "are-we-there-yet";
+      version = "1.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz";
+        sha512 = "3mizm1yfxynlhaavbimv7n9qljrbhni22v4fch6zr89x6ps0gpjcxm5yfvv05n8vc3r17hmglyswgq9w0s598xv70nnyw358q11s5p6";
+      };
+    };
+    "asn1-0.2.4" = {
+      name = "asn1";
+      packageName = "asn1";
+      version = "0.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz";
+        sha512 = "1v2z1ll0l8rif8hh0d03jc49kz3p8hym63q8ixbas48w4a8akl413hwn08nx83m89sj3mxl06aa0grp7n8hj6hcbsb2k3fhj913674g";
+      };
+    };
+    "assert-plus-1.0.0" = {
+      name = "assert-plus";
+      packageName = "assert-plus";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz";
+        sha1 = "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525";
+      };
+    };
+    "asynckit-0.4.0" = {
+      name = "asynckit";
+      packageName = "asynckit";
+      version = "0.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz";
+        sha1 = "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79";
+      };
+    };
+    "aws-sign2-0.7.0" = {
+      name = "aws-sign2";
+      packageName = "aws-sign2";
+      version = "0.7.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz";
+        sha1 = "b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8";
+      };
+    };
+    "aws4-1.9.0" = {
+      name = "aws4";
+      packageName = "aws4";
+      version = "1.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz";
+        sha512 = "3h6cs1b1kw3rsfczqb8jzjlsha24ax4hyhgrk4smwj1i66lgc63kv03cvkn7zbivqvnrpmk640mp3c1bnmm49v1v40kvl5xay2vmyjj";
+      };
+    };
+    "balanced-match-1.0.0" = {
+      name = "balanced-match";
+      packageName = "balanced-match";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz";
+        sha1 = "89b4d199ab2bee49de164ea02b89ce462d71b767";
+      };
+    };
+    "bcrypt-pbkdf-1.0.2" = {
+      name = "bcrypt-pbkdf";
+      packageName = "bcrypt-pbkdf";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz";
+        sha1 = "a4301d389b6a43f9b67ff3ca11a3f6637e360e9e";
+      };
+    };
+    "brace-expansion-1.1.11" = {
+      name = "brace-expansion";
+      packageName = "brace-expansion";
+      version = "1.1.11";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz";
+        sha512 = "248cnpbbf0p32h53rd3g8wzpgrkaj4p078ra1g6l16f82i6bzkvmhwqan5rk88apbll9ly1476kngd7f7z27i3b3zxpbb3064f8yaw8";
+      };
+    };
+    "browser-request-0.3.3" = {
+      name = "browser-request";
+      packageName = "browser-request";
+      version = "0.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/browser-request/-/browser-request-0.3.3.tgz";
+        sha1 = "9ece5b5aca89a29932242e18bf933def9876cc17";
+      };
+    };
+    "caseless-0.12.0" = {
+      name = "caseless";
+      packageName = "caseless";
+      version = "0.12.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz";
+        sha1 = "1b681c21ff84033c826543090689420d187151dc";
+      };
+    };
+    "chownr-1.1.3" = {
+      name = "chownr";
+      packageName = "chownr";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz";
+        sha512 = "1gqsfnpd5kpc4vi8v5b2dr480pk56d674a49bi0505qrjf9iash3n016cyz7qq1iwa41qny8dixp24w9vvam9sy9vnp0mv6g1a1zgcb";
+      };
+    };
+    "code-point-at-1.1.0" = {
+      name = "code-point-at";
+      packageName = "code-point-at";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz";
+        sha1 = "0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77";
+      };
+    };
+    "combined-stream-1.0.8" = {
+      name = "combined-stream";
+      packageName = "combined-stream";
+      version = "1.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz";
+        sha512 = "1v09nkip7zpn3k3prkkg53w331rhczpfgcqb0q42i97nafra43l2khl5zvhd4ar0qmh145nmw7944jy8p108ny0xpgy29gf2wqph0qm";
+      };
+    };
+    "concat-map-0.0.1" = {
+      name = "concat-map";
+      packageName = "concat-map";
+      version = "0.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";
+        sha1 = "d8a96bd77fd68df7793a73036a3ba0d5405d477b";
+      };
+    };
+    "console-control-strings-1.1.0" = {
+      name = "console-control-strings";
+      packageName = "console-control-strings";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz";
+        sha1 = "3d7cf4464db6446ea644bf4b39507f9851008e8e";
+      };
+    };
+    "core-util-is-1.0.2" = {
+      name = "core-util-is";
+      packageName = "core-util-is";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz";
+        sha1 = "b5fd54220aa2bc5ab57aab7140c940754503c1a7";
+      };
+    };
+    "dashdash-1.14.1" = {
+      name = "dashdash";
+      packageName = "dashdash";
+      version = "1.14.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";
+        sha1 = "853cfa0f7cbe2fed5de20326b8dd581035f6e2f0";
+      };
+    };
+    "debug-3.2.6" = {
+      name = "debug";
+      packageName = "debug";
+      version = "3.2.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz";
+        sha512 = "1cyv14044rfh792n1hhsa44kk8dk95zk14w96i49gwq6g9wi6h9vn90xaragfy7rvggqvj178l5f16c78g47xgrwhjx3bp7zs6pxscr";
+      };
+    };
+    "deep-extend-0.6.0" = {
+      name = "deep-extend";
+      packageName = "deep-extend";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz";
+        sha512 = "0wc0sqg1aqx864bxf8xa4j8ncrc8rcvmiaj1sp3x1np2i8hdjybzjfd0w9gbf1yasmwycwzzg1mz6smr3q42hhv4pjx2qcgwqhg3q9c";
+      };
+    };
+    "delayed-stream-1.0.0" = {
+      name = "delayed-stream";
+      packageName = "delayed-stream";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz";
+        sha1 = "df3ae199acadfb7d440aaae0b29e2272b24ec619";
+      };
+    };
+    "delegates-1.0.0" = {
+      name = "delegates";
+      packageName = "delegates";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz";
+        sha1 = "84c6e159b81904fdca59a0ef44cd870d31250f9a";
+      };
+    };
+    "detect-libc-1.0.3" = {
+      name = "detect-libc";
+      packageName = "detect-libc";
+      version = "1.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz";
+        sha1 = "fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b";
+      };
+    };
+    "ecc-jsbn-0.1.2" = {
+      name = "ecc-jsbn";
+      packageName = "ecc-jsbn";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz";
+        sha1 = "3a83a904e54353287874c564b7549386849a98c9";
+      };
+    };
+    "encoding-0.1.12" = {
+      name = "encoding";
+      packageName = "encoding";
+      version = "0.1.12";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz";
+        sha1 = "538b66f3ee62cd1ab51ec323829d1f9480c74beb";
+      };
+    };
+    "extend-3.0.2" = {
+      name = "extend";
+      packageName = "extend";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";
+        sha512 = "3zad2109w3q3gh46s5msrnzfy2nl581sqpy20b52fs7v5pdjh3irpg7szl3xvh4sfy63218jy8ry6qlnir3baxbbfrb03swkw5swfky";
+      };
+    };
+    "extsprintf-1.3.0" = {
+      name = "extsprintf";
+      packageName = "extsprintf";
+      version = "1.3.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz";
+        sha1 = "96918440e3041a7a414f8c52e3c574eb3c3e1e05";
+      };
+    };
+    "fast-deep-equal-2.0.1" = {
+      name = "fast-deep-equal";
+      packageName = "fast-deep-equal";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz";
+        sha1 = "7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49";
+      };
+    };
+    "fast-json-stable-stringify-2.0.0" = {
+      name = "fast-json-stable-stringify";
+      packageName = "fast-json-stable-stringify";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";
+        sha1 = "d5142c0caee6b1189f87d3a76111064f86c8bbf2";
+      };
+    };
+    "forever-agent-0.6.1" = {
+      name = "forever-agent";
+      packageName = "forever-agent";
+      version = "0.6.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz";
+        sha1 = "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91";
+      };
+    };
+    "form-data-2.3.3" = {
+      name = "form-data";
+      packageName = "form-data";
+      version = "2.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz";
+        sha512 = "0jj3hgqp9pmxmfavx6rvdfl3r4yf98clpsarqadz3hq0dxhjlh2ppd9x8bvmaq3nwjdqpdvqx25pwyin4ipixhgsn7s3p9fcc3wllnn";
+      };
+    };
+    "fs-minipass-1.2.7" = {
+      name = "fs-minipass";
+      packageName = "fs-minipass";
+      version = "1.2.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz";
+        sha512 = "1644yfnzfqikaff5s68dm4qfrblxrz68ynigkyzyixjqazxlli0svj1nxkawz35sv2vb3vjh41f1rhg0j4nr770a53fzqbjc4j94r0r";
+      };
+    };
+    "fs.realpath-1.0.0" = {
+      name = "fs.realpath";
+      packageName = "fs.realpath";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz";
+        sha1 = "1504ad2523158caa40db4a2787cb01411994ea4f";
+      };
+    };
+    "gauge-2.7.4" = {
+      name = "gauge";
+      packageName = "gauge";
+      version = "2.7.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz";
+        sha1 = "2c03405c7538c39d7eb37b317022e325fb018bf7";
+      };
+    };
+    "getpass-0.1.7" = {
+      name = "getpass";
+      packageName = "getpass";
+      version = "0.1.7";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";
+        sha1 = "5eff8e3e684d569ae4cb2b1282604e8ba62149fa";
+      };
+    };
+    "glob-7.1.6" = {
+      name = "glob";
+      packageName = "glob";
+      version = "7.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz";
+        sha512 = "020qv13jbi1v4y5xavf6fw08h9svy4q9p67m4avkrrhgdjmk0c5k3h19bv7k6yn1vfxljpjw9kg81fbdg9v83cjplxvkn3v4v1v21ig";
+      };
+    };
+    "graceful-fs-4.2.3" = {
+      name = "graceful-fs";
+      packageName = "graceful-fs";
+      version = "4.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz";
+        sha512 = "12xdl6ai5jdxcpcavw2hk4zpiknz7g7f2cvgawzwlzv7cy7qf7riq8ymkgqdqxjkpl1mg627dxa65zc9b0yqhflsmqlfg5q3481azbb";
+      };
+    };
+    "har-schema-2.0.0" = {
+      name = "har-schema";
+      packageName = "har-schema";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz";
+        sha1 = "a94c2224ebcac04782a0d9035521f24735b7ec92";
+      };
+    };
+    "har-validator-5.1.3" = {
+      name = "har-validator";
+      packageName = "har-validator";
+      version = "5.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz";
+        sha512 = "3kaldgfsh3lfvgvw31s8b7q345zf7ixjahllncdckcw6qfs3gnbsamdxgs9kfigq7rwmja7v51ghh7y0rsp6q7jmvmbydhh645wxnxh";
+      };
+    };
+    "has-unicode-2.0.1" = {
+      name = "has-unicode";
+      packageName = "has-unicode";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz";
+        sha1 = "e0e6fe6a28cf51138855e086d1691e771de2a8b9";
+      };
+    };
+    "http-signature-1.2.0" = {
+      name = "http-signature";
+      packageName = "http-signature";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";
+        sha1 = "9aecd925114772f3d95b65a60abb8f7c18fbace1";
+      };
+    };
+    "iconv-lite-0.4.24" = {
+      name = "iconv-lite";
+      packageName = "iconv-lite";
+      version = "0.4.24";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz";
+        sha512 = "2n3ygx6km56rdcd5kq52bs2113xqm3vlw2kb9r7pnmxd2qhxrfahp2ngc4w7x8x76fyfpapnixnbjq1i24nc11mj6q7rghwj2fifwxz";
+      };
+    };
+    "ignore-walk-3.0.3" = {
+      name = "ignore-walk";
+      packageName = "ignore-walk";
+      version = "3.0.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz";
+        sha512 = "0mlk9s23jc3avly1bv6s5j7hs0aafxabmgn7iqi0bjag4b03nqckvcdrgnarpmysdq8yr1rgxh6k7p82vzjj1z6hnm5ckwswg33mflv";
+      };
+    };
+    "imurmurhash-0.1.4" = {
+      name = "imurmurhash";
+      packageName = "imurmurhash";
+      version = "0.1.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz";
+        sha1 = "9218b9b2b928a238b13dc4fb6b6d576f231453ea";
+      };
+    };
+    "inflight-1.0.6" = {
+      name = "inflight";
+      packageName = "inflight";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz";
+        sha1 = "49bd6331d7d02d0c09bc910a1075ba8165b56df9";
+      };
+    };
+    "inherits-2.0.4" = {
+      name = "inherits";
+      packageName = "inherits";
+      version = "2.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz";
+        sha512 = "30rw2i1k63pbf0n5dbwly05h95cdp1kj8c9r15gv1cwha141g61k56fx4qwsvhpm1ksnf7agch1wxirs3s0m31wbfvmcqizgrlwdywk";
+      };
+    };
+    "ini-1.3.5" = {
+      name = "ini";
+      packageName = "ini";
+      version = "1.3.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz";
+        sha512 = "1rjbvf1rg5ywhnba08sgagn2qf23lab330qrqmh7d891zap3xpxcyfyj1cblpf0f0rypglcfacybzyrpd4996aa1mbc820awa33k5j5";
+      };
+    };
+    "is-fullwidth-code-point-1.0.0" = {
+      name = "is-fullwidth-code-point";
+      packageName = "is-fullwidth-code-point";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz";
+        sha1 = "ef9e31386f031a7f0d643af82fde50c457ef00cb";
+      };
+    };
+    "is-stream-1.1.0" = {
+      name = "is-stream";
+      packageName = "is-stream";
+      version = "1.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz";
+        sha1 = "12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44";
+      };
+    };
+    "is-typedarray-1.0.0" = {
+      name = "is-typedarray";
+      packageName = "is-typedarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz";
+        sha1 = "e479c80858df0c1b11ddda6940f96011fcda4a9a";
+      };
+    };
+    "isarray-1.0.0" = {
+      name = "isarray";
+      packageName = "isarray";
+      version = "1.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz";
+        sha1 = "bb935d48582cba168c06834957a54a3e07124f11";
+      };
+    };
+    "isstream-0.1.2" = {
+      name = "isstream";
+      packageName = "isstream";
+      version = "0.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz";
+        sha1 = "47e63f7af55afa6f92e1500e690eb8b8529c099a";
+      };
+    };
+    "jsbn-0.1.1" = {
+      name = "jsbn";
+      packageName = "jsbn";
+      version = "0.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz";
+        sha1 = "a5e654c2e5a2deb5f201d96cefbca80c0ef2f513";
+      };
+    };
+    "json-schema-0.2.3" = {
+      name = "json-schema";
+      packageName = "json-schema";
+      version = "0.2.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";
+        sha1 = "b480c892e59a2f05954ce727bd3f2a4e882f9e13";
+      };
+    };
+    "json-schema-traverse-0.4.1" = {
+      name = "json-schema-traverse";
+      packageName = "json-schema-traverse";
+      version = "0.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz";
+        sha512 = "1bbgxs4777gn3q3yxi0n792cgz9pimf85pypr0w4wzpb22nr8fl9xi98pkcqd3n4fn7lnzffpq7qwpcl4dqc15py19lwqa2jwgw5dn5";
+      };
+    };
+    "json-stringify-safe-5.0.1" = {
+      name = "json-stringify-safe";
+      packageName = "json-stringify-safe";
+      version = "5.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";
+        sha1 = "1296a2d58fd45f19a0f6ce01d65701e2c735b6eb";
+      };
+    };
+    "jsprim-1.4.1" = {
+      name = "jsprim";
+      packageName = "jsprim";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz";
+        sha1 = "313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2";
+      };
+    };
+    "marked-0.6.3" = {
+      name = "marked";
+      packageName = "marked";
+      version = "0.6.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/marked/-/marked-0.6.3.tgz";
+        sha512 = "0wnipqyl61ks0g90fa5pmgmzjcc16j8mbvs1h5s9lbqskdp7b76wwxr7xglzqrizggpilwd8pih983ynav61cramv61fswlmxxbp9hn";
+      };
+    };
+    "matrix-js-sdk-0.7.13" = {
+      name = "matrix-js-sdk";
+      packageName = "matrix-js-sdk";
+      version = "0.7.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/matrix-js-sdk/-/matrix-js-sdk-0.7.13.tgz";
+        sha1 = "283accc710009f5a0b02367682f2e86155fd00c4";
+      };
+    };
+    "mime-db-1.42.0" = {
+      name = "mime-db";
+      packageName = "mime-db";
+      version = "1.42.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz";
+        sha512 = "1hipkh3wjfb7m6qid0nrqdas0bj5c2hj3123pcwhcdb1qxxwyacnidn1nhdp01nnrkycwzymrf81jg6yin24pyah16m808l3q4wkdsi";
+      };
+    };
+    "mime-types-2.1.25" = {
+      name = "mime-types";
+      packageName = "mime-types";
+      version = "2.1.25";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz";
+        sha512 = "1b88jc29kn9ksarmd9ad8d4y4q1cn977g7nvfqyj7grmsll6y9zlfx4wwpcq0426y8dgvm412fhr9n1401h92kag3099ikrl2v55a74";
+      };
+    };
+    "minimatch-3.0.4" = {
+      name = "minimatch";
+      packageName = "minimatch";
+      version = "3.0.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz";
+        sha512 = "1879a3j85h92ypvb7lpv1dqpcxl49rqnbgs5la18zmj1yqhwl60c2m74254wbr5pp3znckqpkg9dvjyrz6hfz8b9vag5a3j910db4f8";
+      };
+    };
+    "minimist-0.0.8" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "0.0.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz";
+        sha1 = "857fcabfc3397d2625b8228262e86aa7a011b05d";
+      };
+    };
+    "minimist-1.2.0" = {
+      name = "minimist";
+      packageName = "minimist";
+      version = "1.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz";
+        sha1 = "a35008b20f41383eec1fb914f4cd5df79a264284";
+      };
+    };
+    "minipass-2.9.0" = {
+      name = "minipass";
+      packageName = "minipass";
+      version = "2.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz";
+        sha512 = "1x0k2ycn1r5fig2zy7jj5vjsc7sxdl2a8lidvzsfyhcbrmvyvlbkmb3ga6l8njclvhjz2yrcx57jn26bckzrms017zb2yan1y7d85y3";
+      };
+    };
+    "minizlib-1.3.3" = {
+      name = "minizlib";
+      packageName = "minizlib";
+      version = "1.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz";
+        sha512 = "3slcgy5kqasjl8k1n2indaaw0k6j2ipapzxrcqyy2zrwpv8z9w2im5i8c2c73pqdgkd31rwf5bajgv4pm2i6m9jg51cfmp694w0r5p9";
+      };
+    };
+    "mkdirp-0.5.1" = {
+      name = "mkdirp";
+      packageName = "mkdirp";
+      version = "0.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz";
+        sha1 = "30057438eac6cf7f8c4767f38648d6697d75c903";
+      };
+    };
+    "ms-2.1.2" = {
+      name = "ms";
+      packageName = "ms";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz";
+        sha512 = "3dqfiiw6nxvvi24fndbzlccnjcas99bsd1kz5m2r78lzgpp6vx57jzbmxq3k1m7bsw88rwra0n4848l720fxxn5x20djck3wp3hysdh";
+      };
+    };
+    "mustache-2.3.2" = {
+      name = "mustache";
+      packageName = "mustache";
+      version = "2.3.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz";
+        sha512 = "1aihy6k9338c8w0cip0c3v4s2h5yqd8xksqrv17rjybj01nsrpplbniiv09fvjadwhbyjbhkr82lyx3gyidcli0zp73sqrcsk0hv4ra";
+      };
+    };
+    "nan-2.14.0" = {
+      name = "nan";
+      packageName = "nan";
+      version = "2.14.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz";
+        sha512 = "115f4m91pjscflwskc29clsspd2z02gdbz0dbj63ja8bf67nraw14gvppl4872y9z2f5vbjlkpg1i4625zvalx3gp04vvn2gs7qblr0";
+      };
+    };
+    "needle-2.4.0" = {
+      name = "needle";
+      packageName = "needle";
+      version = "2.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz";
+        sha512 = "1k9220dhvc3m78hzd1xh2135p19z15y964hmhsajayvj11j2p3rv5w0gii7lmgr8w57bqkjg0xby5f1gkcph60kxvyr52z6pp7g0yg0";
+      };
+    };
+    "node-fetch-1.7.3" = {
+      name = "node-fetch";
+      packageName = "node-fetch";
+      version = "1.7.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz";
+        sha512 = "0lz5m15w7qaks0a0s3dm0crsjrsd123dy00pn6qwcp50zfjykxkp22i5ymh6smlc0ags38nmdxlxw9yyq509azlv8kcdvdiq857h5in";
+      };
+    };
+    "node-localstorage-1.3.1" = {
+      name = "node-localstorage";
+      packageName = "node-localstorage";
+      version = "1.3.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-localstorage/-/node-localstorage-1.3.1.tgz";
+        sha512 = "1lwiz287h6lgv0xjnz0n1fzj3bpq1rbxawlrddympi9hrwwji839wwk6y7w36k2nrkpaq86z3n2nbysad9mmwlk9z3rds4wcm4q5i9l";
+      };
+    };
+    "node-pre-gyp-0.11.0" = {
+      name = "node-pre-gyp";
+      packageName = "node-pre-gyp";
+      version = "0.11.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz";
+        sha512 = "38q9mq0yq7pjnlqnxjiq8qz38jrgj7rccdf4n6dk95zwamncxmvb88192zabdccpnjhvd9rl4nmqxn727mzb7v6g2yvg3zljqwq01ag";
+      };
+    };
+    "nopt-4.0.1" = {
+      name = "nopt";
+      packageName = "nopt";
+      version = "4.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz";
+        sha1 = "d0d4685afd5415193c8c7505602d0d17cd64474d";
+      };
+    };
+    "npm-bundled-1.0.6" = {
+      name = "npm-bundled";
+      packageName = "npm-bundled";
+      version = "1.0.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz";
+        sha512 = "395ysq8prylnnimwxy4w37dwaxlk56dxwdc4jif41qghhcpdmignikigrpg6sfxxb0mr92z2p1kbad72sqxmcjfzrzvgha7zdll5wpk";
+      };
+    };
+    "npm-packlist-1.4.6" = {
+      name = "npm-packlist";
+      packageName = "npm-packlist";
+      version = "1.4.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz";
+        sha512 = "2b0xwi30n7mqd43xc06yx3ck4j7ny8xaph36qs1zj2zxr64bn6m79cxfd9vxawcqpkdcy1apf1mfvc120wgqqa2pi30pazysr0nxbmv";
+      };
+    };
+    "npmlog-4.1.2" = {
+      name = "npmlog";
+      packageName = "npmlog";
+      version = "4.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz";
+        sha512 = "2967mavp7zw0aawf5fadqf4pmn7vy5gya1yx2s9wwppvivhd9q4mpdnszfqvd7p6yks649bwbpj8iviw86g0hpp4f93d5ca7dmjmrfs";
+      };
+    };
+    "number-is-nan-1.0.1" = {
+      name = "number-is-nan";
+      packageName = "number-is-nan";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz";
+        sha1 = "097b602b53422a522c1afb8790318336941a011d";
+      };
+    };
+    "oauth-sign-0.9.0" = {
+      name = "oauth-sign";
+      packageName = "oauth-sign";
+      version = "0.9.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz";
+        sha512 = "1jz644r7ybsq688ifahm64ih3ljqjjskm533bgir20pvc350f9cl0z162scih0r1idx8lpw5f8hxa2pkf0lhbdhr5y6ak2ga5863v3x";
+      };
+    };
+    "object-assign-4.1.1" = {
+      name = "object-assign";
+      packageName = "object-assign";
+      version = "4.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz";
+        sha1 = "2109adc7965887cfc05cbbd442cac8bfbb360863";
+      };
+    };
+    "olm-https://packages.matrix.org/npm/olm/olm-2.3.0.tgz" = {
+      name = "olm";
+      packageName = "olm";
+      version = "2.3.0";
+      src = fetchurl {
+        name = "olm-2.3.0.tar.gz";
+        url = "https://packages.matrix.org/npm/olm/olm-2.3.0.tgz";
+        sha256 = "1f0f037a025a44509646cb849ded7c1a1f55e7bfed240fad19676c002fcd953a";
+      };
+    };
+    "once-1.4.0" = {
+      name = "once";
+      packageName = "once";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/once/-/once-1.4.0.tgz";
+        sha1 = "583b1aa775961d4b113ac17d9c50baef9dd76bd1";
+      };
+    };
+    "os-homedir-1.0.2" = {
+      name = "os-homedir";
+      packageName = "os-homedir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";
+        sha1 = "ffbc4988336e0e833de0c168c7ef152121aa7fb3";
+      };
+    };
+    "os-tmpdir-1.0.2" = {
+      name = "os-tmpdir";
+      packageName = "os-tmpdir";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz";
+        sha1 = "bbe67406c79aa85c5cfec766fe5734555dfa1274";
+      };
+    };
+    "osenv-0.1.5" = {
+      name = "osenv";
+      packageName = "osenv";
+      version = "0.1.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz";
+        sha512 = "3ddw0y41pxv08ls5xhmq1bi81hppjbr45k78cjfx99vznh5znrj5g1b1wab9caj1mqlsvmfms0zm9cfb47ygm0d8wv5fccx8049q9fh";
+      };
+    };
+    "path-is-absolute-1.0.1" = {
+      name = "path-is-absolute";
+      packageName = "path-is-absolute";
+      version = "1.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz";
+        sha1 = "174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f";
+      };
+    };
+    "performance-now-2.1.0" = {
+      name = "performance-now";
+      packageName = "performance-now";
+      version = "2.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz";
+        sha1 = "6309f4e0e5fa913ec1c69307ae364b4b377c9e7b";
+      };
+    };
+    "process-nextick-args-2.0.1" = {
+      name = "process-nextick-args";
+      packageName = "process-nextick-args";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz";
+        sha512 = "1mgan8li4i2l4y7lsr7snks85n6xg5x693cqmzpid3fkk9br7v5xzgvh1zlfs08zkxn6s0n6qhykr64mszjfyxd77dhmdi1jhx992yy";
+      };
+    };
+    "psl-1.4.0" = {
+      name = "psl";
+      packageName = "psl";
+      version = "1.4.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz";
+        sha512 = "0bjwkcvqqwlhg86aa7pmd3n65y9hhiv5np25mw6g2phqx3mp9iv0d8sxl8r2j50hiniwz00k569h8hdxsviry8ql7r54w6ycc4fm70x";
+      };
+    };
+    "punycode-1.4.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "1.4.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz";
+        sha1 = "c0d5a63b2718800ad8e1eb0fa5269c84dd41845e";
+      };
+    };
+    "punycode-2.1.1" = {
+      name = "punycode";
+      packageName = "punycode";
+      version = "2.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz";
+        sha512 = "381vqgh5xkqzrr6cxbzfykgnnk83m7qgpx3wjwj1hddn3sg2aibjxyr30rajpgv4js0cqknrbzwbfk5ryhiiyigzfjrk3zysy6i26sx";
+      };
+    };
+    "q-1.5.1" = {
+      name = "q";
+      packageName = "q";
+      version = "1.5.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/q/-/q-1.5.1.tgz";
+        sha1 = "7e32f75b41381291d04611f1bf14109ac00651d7";
+      };
+    };
+    "qs-6.5.2" = {
+      name = "qs";
+      packageName = "qs";
+      version = "6.5.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz";
+        sha512 = "0c46ws0x9g3mmkgfmvd78bzvnmv2b8ryg4ah6jvyyqgjv9v994z7xdyvsc4vg9sf98gg7phvy3q1ahgaj5fy3dwzf2rki6bixgl15ip";
+      };
+    };
+    "rc-1.2.8" = {
+      name = "rc";
+      packageName = "rc";
+      version = "1.2.8";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz";
+        sha512 = "0xhy1n9n3y6cp28f8f0f2mi0xzc7ay1g5nhbp64fyvcwv9q30zq2zvyc5q2d0al8aa0hx101yq2y6d2ln4r5jxnqifh1pd3la1ccxnb";
+      };
+    };
+    "readable-stream-2.3.6" = {
+      name = "readable-stream";
+      packageName = "readable-stream";
+      version = "2.3.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz";
+        sha512 = "0mj9b6190amln9rg89x5pq2n195s3v0gzicpdamv1kbabg69aw5m71l34jsjn7bqil7405l6l35x9ijnb3h4jz5vx2i00l8sl1ll2xm";
+      };
+    };
+    "request-2.88.0" = {
+      name = "request";
+      packageName = "request";
+      version = "2.88.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/request/-/request-2.88.0.tgz";
+        sha512 = "2339w6v6d7n7pj0085vkfvk0864gs8kfh1kghbl3smj7s21ny3k265in140frsaipc6bvqbi4k696ic4z13d6a56dfvc653p15822il";
+      };
+    };
+    "rimraf-2.7.1" = {
+      name = "rimraf";
+      packageName = "rimraf";
+      version = "2.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz";
+        sha512 = "3ixwnv4h7x38jd12vyzhx6m6adnfhz1zv881allalyqs8sy3q3zgwldngk4cqslnn2d46l0g91yz8wprmzcsvas9573vp8al9ldns5r";
+      };
+    };
+    "safe-buffer-5.1.2" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz";
+        sha512 = "3xbm0dkya4bc3zwfwpdzbl8ngq0aai5ihlp2v3s39y7162c7wyvv9izj3g8hv6dy6vm2lq48lmfzygk0kxwbjb6xic7k4a329j99p8r";
+      };
+    };
+    "safe-buffer-5.2.0" = {
+      name = "safe-buffer";
+      packageName = "safe-buffer";
+      version = "5.2.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz";
+        sha512 = "1pb164cfv1ip3s1rp008433rak88mdcch24q84cbfndg0dzky2ij8vjvsiyx2qf3rg4dgs82zk7vnrd9hkqqdcvp4lbk5ymcr8314bx";
+      };
+    };
+    "safer-buffer-2.1.2" = {
+      name = "safer-buffer";
+      packageName = "safer-buffer";
+      version = "2.1.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz";
+        sha512 = "2v99f22kh56y72d3s8wrgdvf5n10ry40dh3fwnsxr4d5rfvxdfxfmc3qyqkscnj4f8799jy9bpg6cm21x2d811dr9ib83wjrlmkg6k1";
+      };
+    };
+    "sax-1.2.4" = {
+      name = "sax";
+      packageName = "sax";
+      version = "1.2.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";
+        sha512 = "1dn291mjsda42w8kldlbmngk6dhjxfbvvd5lckyqmwbjaj6069iq3wx0nvcfglwnpddz2qa93lzf4hv77iz43bd2qixa079sjzl799n";
+      };
+    };
+    "semver-5.7.1" = {
+      name = "semver";
+      packageName = "semver";
+      version = "5.7.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz";
+        sha512 = "0cl68vp0ymkjpvim4s24v3awyk37d1bfbqrqv4ybwfi8yxga3d8fma2d6bh8dd4i2dsfwca324vaxm5dms61kdlmihdarfgzw6rmaxi";
+      };
+    };
+    "set-blocking-2.0.0" = {
+      name = "set-blocking";
+      packageName = "set-blocking";
+      version = "2.0.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz";
+        sha1 = "045f9782d011ae9a6803ddd382b24392b3d890f7";
+      };
+    };
+    "signal-exit-3.0.2" = {
+      name = "signal-exit";
+      packageName = "signal-exit";
+      version = "3.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz";
+        sha1 = "b5fdc08f1287ea1178628e415e25132b73646c6d";
+      };
+    };
+    "slide-1.1.6" = {
+      name = "slide";
+      packageName = "slide";
+      version = "1.1.6";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz";
+        sha1 = "56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707";
+      };
+    };
+    "sqlite3-4.1.0" = {
+      name = "sqlite3";
+      packageName = "sqlite3";
+      version = "4.1.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sqlite3/-/sqlite3-4.1.0.tgz";
+        sha512 = "1my61d8alqzqpi3xm9qvkb3sqvypxa511xq72h2v4f9p04zvw75rcz4jn9h1ajxldwnmnalwy5pq78mdiy6jfwsn33r1wmy38msiyj6";
+      };
+    };
+    "sshpk-1.16.1" = {
+      name = "sshpk";
+      packageName = "sshpk";
+      version = "1.16.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz";
+        sha512 = "0i4jnrxh6i17qij2vfki7qxmk435cnacvg363qg0hya5incfj57akgbas8zcx2cl5pds9jfgfyhqm8wlqz6damsg059gymv99aylx8x";
+      };
+    };
+    "string-width-1.0.2" = {
+      name = "string-width";
+      packageName = "string-width";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz";
+        sha1 = "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3";
+      };
+    };
+    "string_decoder-1.1.1" = {
+      name = "string_decoder";
+      packageName = "string_decoder";
+      version = "1.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz";
+        sha512 = "315yd4vzwrwk3vwj1klf46y1cj2jbvf88066y2rnwhksb98phj46jkxixbwsp3h607w7czy7cby522s7sx8mvspdpdm3s72y2ga3x4z";
+      };
+    };
+    "strip-ansi-3.0.1" = {
+      name = "strip-ansi";
+      packageName = "strip-ansi";
+      version = "3.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz";
+        sha1 = "6a385fb8853d952d5ff05d0e8aaf94278dc63dcf";
+      };
+    };
+    "strip-json-comments-2.0.1" = {
+      name = "strip-json-comments";
+      packageName = "strip-json-comments";
+      version = "2.0.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz";
+        sha1 = "3c531942e908c2697c0ec344858c286c7ca0a60a";
+      };
+    };
+    "tar-4.4.13" = {
+      name = "tar";
+      packageName = "tar";
+      version = "4.4.13";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz";
+        sha512 = "10gwhmgx7fh619zv48r2lnm42qr7rw4qa9ph7142rizcn8in9dpi49jbmmv8ism60rcg1a7b4103r598jngi1rcn50sw7b8n1570rf3";
+      };
+    };
+    "tough-cookie-2.4.3" = {
+      name = "tough-cookie";
+      packageName = "tough-cookie";
+      version = "2.4.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz";
+        sha512 = "2akhyixx49dkqadghzwj53xwfa1aikf0iv04ib9zj0kbilkzxxh16j5c6vfkcwm3cy29y46q3d8lzinsy6ql2cvb1wcw31gzs9jp6s3";
+      };
+    };
+    "tunnel-agent-0.6.0" = {
+      name = "tunnel-agent";
+      packageName = "tunnel-agent";
+      version = "0.6.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";
+        sha1 = "27a5dea06b36b04a0a9966774b290868f0fc40fd";
+      };
+    };
+    "tweetnacl-0.14.5" = {
+      name = "tweetnacl";
+      packageName = "tweetnacl";
+      version = "0.14.5";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz";
+        sha1 = "5ae68177f192d4456269d108afa93ff8743f4f64";
+      };
+    };
+    "uri-js-4.2.2" = {
+      name = "uri-js";
+      packageName = "uri-js";
+      version = "4.2.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz";
+        sha512 = "2fz60s71ghl56ddfiiaws81xpiidlbjk69jyjmahz190d2advy9zdbcwh5if4rgg5hxdbfxhkwiipjrnjy8w834bxsmzambd2p4b3r9";
+      };
+    };
+    "util-deprecate-1.0.2" = {
+      name = "util-deprecate";
+      packageName = "util-deprecate";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";
+        sha1 = "450d4dc9fa70de732762fbd2d4a28981419a0ccf";
+      };
+    };
+    "uuid-3.3.3" = {
+      name = "uuid";
+      packageName = "uuid";
+      version = "3.3.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz";
+        sha512 = "14s78i0nwzf5q1xz1d5rjlsm2rk5rf75nizydkj19mhbk1hw00lwzilkncx3bqzqhsni41i88wajwmc2mxxckkjlkjhq7j6ajihsvd5";
+      };
+    };
+    "verror-1.10.0" = {
+      name = "verror";
+      packageName = "verror";
+      version = "1.10.0";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";
+        sha1 = "3a105ca17053af55d6e270c1f8288682e18da400";
+      };
+    };
+    "wide-align-1.1.3" = {
+      name = "wide-align";
+      packageName = "wide-align";
+      version = "1.1.3";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz";
+        sha512 = "2224a32flpf40nhq6rj4idzkcdz0vx65bfxp90hd06db18l6fiqgxz1xnaygm3pbfb1a6v73hl8ryq4996b09zwwins0bqprx0hwsa0";
+      };
+    };
+    "wrappy-1.0.2" = {
+      name = "wrappy";
+      packageName = "wrappy";
+      version = "1.0.2";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz";
+        sha1 = "b5243d8f3ec1aa35f1364605bc0d1036e30ab69f";
+      };
+    };
+    "write-file-atomic-1.3.4" = {
+      name = "write-file-atomic";
+      packageName = "write-file-atomic";
+      version = "1.3.4";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz";
+        sha1 = "f807a4f0b1d9e913ae7a48112e6cc3af1991b45f";
+      };
+    };
+    "yallist-3.1.1" = {
+      name = "yallist";
+      packageName = "yallist";
+      version = "3.1.1";
+      src = fetchurl {
+        url = "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz";
+        sha512 = "3ig31a6zfbdlrs3l77a8avpp17hajryhyq2xk4h3ayc4dmxch146rdk7q1s1jgx9qvmxq125r0xq2bvnq0rq63m75k9y7wglm0hd1bb";
+      };
+    };
+  };
+  node-pre-gyp = nodeEnv.buildNodePackage {
+    name = "node-pre-gyp";
+    packageName = "node-pre-gyp";
+    version = "0.14.0";
+    src = fetchurl {
+      url = "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz";
+      sha512 = "32drv6q9sh4i2ff2djd1dhxxxiaiymmgycbm12wpkz9vxspnldxgmppf9sazp3c72771a1p5s4kkzgwn4w1csyz9bn4zdbdnq5w6azq";
+    };
+    dependencies = [
+      sources."abbrev-1.1.1"
+      sources."ansi-regex-2.1.1"
+      sources."aproba-1.2.0"
+      sources."are-we-there-yet-1.1.5"
+      sources."balanced-match-1.0.0"
+      sources."brace-expansion-1.1.11"
+      sources."chownr-1.1.3"
+      sources."code-point-at-1.1.0"
+      sources."concat-map-0.0.1"
+      sources."console-control-strings-1.1.0"
+      sources."core-util-is-1.0.2"
+      sources."debug-3.2.6"
+      sources."deep-extend-0.6.0"
+      sources."delegates-1.0.0"
+      sources."detect-libc-1.0.3"
+      sources."fs-minipass-1.2.7"
+      sources."fs.realpath-1.0.0"
+      sources."gauge-2.7.4"
+      sources."glob-7.1.6"
+      sources."has-unicode-2.0.1"
+      sources."iconv-lite-0.4.24"
+      sources."ignore-walk-3.0.3"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.4"
+      sources."ini-1.3.5"
+      sources."is-fullwidth-code-point-1.0.0"
+      sources."isarray-1.0.0"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."minipass-2.9.0"
+      sources."minizlib-1.3.3"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.1.2"
+      sources."needle-2.4.0"
+      sources."nopt-4.0.1"
+      sources."npm-bundled-1.0.6"
+      sources."npm-packlist-1.4.6"
+      sources."npmlog-4.1.2"
+      sources."number-is-nan-1.0.1"
+      sources."object-assign-4.1.1"
+      sources."once-1.4.0"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."osenv-0.1.5"
+      sources."path-is-absolute-1.0.1"
+      sources."process-nextick-args-2.0.1"
+      (sources."rc-1.2.8" // {
+        dependencies = [
+          sources."minimist-1.2.0"
+        ];
+      })
+      sources."readable-stream-2.3.6"
+      sources."rimraf-2.7.1"
+      sources."safe-buffer-5.1.2"
+      sources."safer-buffer-2.1.2"
+      sources."sax-1.2.4"
+      sources."semver-5.7.1"
+      sources."set-blocking-2.0.0"
+      sources."signal-exit-3.0.2"
+      sources."string-width-1.0.2"
+      sources."string_decoder-1.1.1"
+      sources."strip-ansi-3.0.1"
+      sources."strip-json-comments-2.0.1"
+      sources."tar-4.4.13"
+      sources."util-deprecate-1.0.2"
+      sources."wide-align-1.1.3"
+      sources."wrappy-1.0.2"
+      sources."yallist-3.1.1"
+    ];
+    buildInputs = [];
+    meta = {
+      description = "Node.js native addon binary install tool";
+      homepage = "https://github.com/mapbox/node-pre-gyp#readme";
+      license = "BSD-3-Clause";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+  args = {
+    name = "matrix-recorder";
+    packageName = "matrix-recorder";
+    version = "0.0.6";
+    src = fetchgit {
+      url = "https://gitlab.com/argit/matrix-recorder/";
+      rev = "006b78c8a4ddc636be8f6f1e3875b13a4a6d2c7c";
+      sha256 = "0m3kzwbrxymwl6hr981q6fsf752fqxwzbpxryx25j4lkwc23nmj3";
+    };
+    dependencies = [
+      sources."abbrev-1.1.1"
+      sources."ajv-6.10.2"
+      sources."another-json-0.2.0"
+      sources."ansi-regex-2.1.1"
+      sources."aproba-1.2.0"
+      sources."are-we-there-yet-1.1.5"
+      sources."asn1-0.2.4"
+      sources."assert-plus-1.0.0"
+      sources."asynckit-0.4.0"
+      sources."aws-sign2-0.7.0"
+      sources."aws4-1.9.0"
+      sources."balanced-match-1.0.0"
+      sources."bcrypt-pbkdf-1.0.2"
+      sources."brace-expansion-1.1.11"
+      sources."browser-request-0.3.3"
+      sources."caseless-0.12.0"
+      sources."chownr-1.1.3"
+      sources."code-point-at-1.1.0"
+      sources."combined-stream-1.0.8"
+      sources."concat-map-0.0.1"
+      sources."console-control-strings-1.1.0"
+      sources."core-util-is-1.0.2"
+      sources."dashdash-1.14.1"
+      sources."debug-3.2.6"
+      sources."deep-extend-0.6.0"
+      sources."delayed-stream-1.0.0"
+      sources."delegates-1.0.0"
+      sources."detect-libc-1.0.3"
+      sources."ecc-jsbn-0.1.2"
+      sources."encoding-0.1.12"
+      sources."extend-3.0.2"
+      sources."extsprintf-1.3.0"
+      sources."fast-deep-equal-2.0.1"
+      sources."fast-json-stable-stringify-2.0.0"
+      sources."forever-agent-0.6.1"
+      sources."form-data-2.3.3"
+      sources."fs-minipass-1.2.7"
+      sources."fs.realpath-1.0.0"
+      sources."gauge-2.7.4"
+      sources."getpass-0.1.7"
+      sources."glob-7.1.6"
+      sources."graceful-fs-4.2.3"
+      sources."har-schema-2.0.0"
+      sources."har-validator-5.1.3"
+      sources."has-unicode-2.0.1"
+      sources."http-signature-1.2.0"
+      sources."iconv-lite-0.4.24"
+      sources."ignore-walk-3.0.3"
+      sources."imurmurhash-0.1.4"
+      sources."inflight-1.0.6"
+      sources."inherits-2.0.4"
+      sources."ini-1.3.5"
+      sources."is-fullwidth-code-point-1.0.0"
+      sources."is-stream-1.1.0"
+      sources."is-typedarray-1.0.0"
+      sources."isarray-1.0.0"
+      sources."isstream-0.1.2"
+      sources."jsbn-0.1.1"
+      sources."json-schema-0.2.3"
+      sources."json-schema-traverse-0.4.1"
+      sources."json-stringify-safe-5.0.1"
+      sources."jsprim-1.4.1"
+      sources."marked-0.6.3"
+      sources."matrix-js-sdk-0.7.13"
+      sources."mime-db-1.42.0"
+      sources."mime-types-2.1.25"
+      sources."minimatch-3.0.4"
+      sources."minimist-0.0.8"
+      sources."minipass-2.9.0"
+      sources."minizlib-1.3.3"
+      sources."mkdirp-0.5.1"
+      sources."ms-2.1.2"
+      sources."mustache-2.3.2"
+      sources."nan-2.14.0"
+      sources."needle-2.4.0"
+      sources."node-fetch-1.7.3"
+      sources."node-localstorage-1.3.1"
+      sources."node-pre-gyp-0.11.0"
+      sources."nopt-4.0.1"
+      sources."npm-bundled-1.0.6"
+      sources."npm-packlist-1.4.6"
+      sources."npmlog-4.1.2"
+      sources."number-is-nan-1.0.1"
+      sources."oauth-sign-0.9.0"
+      sources."object-assign-4.1.1"
+      sources."olm-https://packages.matrix.org/npm/olm/olm-2.3.0.tgz"
+      sources."once-1.4.0"
+      sources."os-homedir-1.0.2"
+      sources."os-tmpdir-1.0.2"
+      sources."osenv-0.1.5"
+      sources."path-is-absolute-1.0.1"
+      sources."performance-now-2.1.0"
+      sources."process-nextick-args-2.0.1"
+      sources."psl-1.4.0"
+      sources."punycode-2.1.1"
+      sources."q-1.5.1"
+      sources."qs-6.5.2"
+      (sources."rc-1.2.8" // {
+        dependencies = [
+          sources."minimist-1.2.0"
+        ];
+      })
+      (sources."readable-stream-2.3.6" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."request-2.88.0"
+      sources."rimraf-2.7.1"
+      sources."safe-buffer-5.2.0"
+      sources."safer-buffer-2.1.2"
+      sources."sax-1.2.4"
+      sources."semver-5.7.1"
+      sources."set-blocking-2.0.0"
+      sources."signal-exit-3.0.2"
+      sources."slide-1.1.6"
+      sources."sqlite3-4.1.0"
+      sources."sshpk-1.16.1"
+      sources."string-width-1.0.2"
+      (sources."string_decoder-1.1.1" // {
+        dependencies = [
+          sources."safe-buffer-5.1.2"
+        ];
+      })
+      sources."strip-ansi-3.0.1"
+      sources."strip-json-comments-2.0.1"
+      sources."tar-4.4.13"
+      (sources."tough-cookie-2.4.3" // {
+        dependencies = [
+          sources."punycode-1.4.1"
+        ];
+      })
+      sources."tunnel-agent-0.6.0"
+      sources."tweetnacl-0.14.5"
+      sources."uri-js-4.2.2"
+      sources."util-deprecate-1.0.2"
+      sources."uuid-3.3.3"
+      sources."verror-1.10.0"
+      sources."wide-align-1.1.3"
+      sources."wrappy-1.0.2"
+      sources."write-file-atomic-1.3.4"
+      sources."yallist-3.1.1"
+    ];
+    buildInputs = globalBuildInputs;
+    meta = {
+      description = "A recorder that can record Matrix rooms you are a member of (including E2E-encrypted rooms).";
+      license = "MIT";
+    };
+    production = true;
+    bypassCache = true;
+    reconstructLock = true;
+  };
+in
+{
+  tarball = nodeEnv.buildNodeSourceDist args;
+  package = nodeEnv.buildNodePackage args;
+  shell = nodeEnv.buildNodeShell args;
+  inherit node-pre-gyp;
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/package.json b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/package.json
new file mode 100644
index 000000000000..fc03d636ad21
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrix-recorder/package.json
@@ -0,0 +1,27 @@
+{
+  "name": "matrix-recorder",
+  "version": "0.0.6",
+  "description": "A recorder that can record Matrix rooms you are a member of (including E2E-encrypted rooms).",
+  "author": "Hello Matrix <hello@hello-matrix.net>",
+  "main": "matrix-recorder.js",
+  "scripts": {
+    "start": "node matrix-recorder.js"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://gitlab.com/argit/matrix-recorder.git"
+  },
+  "dependencies": {
+    "marked": "^0.6.2",
+    "matrix-js-sdk": "^0.7.13",
+    "mime-types": "^2.1.14",
+    "mustache": "^2.3.0",
+    "node-fetch": "^1.6.3",
+    "node-localstorage": "^1.3.0",
+    "sqlite3": "^4.0.7",
+    "olm": "https://packages.matrix.org/npm/olm/olm-2.3.0.tgz"
+  },
+  "license": "MIT",
+  "optionalDependencies": {
+  }
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix
new file mode 100644
index 000000000000..aadb18606e11
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/matrixcli/default.nix
@@ -0,0 +1,53 @@
+{ lib, fetchgit
+  , buildPythonApplication, buildPythonPackage
+  , pygobject3, pytestrunner, requests, responses, pytest, python-olm
+  , canonicaljson, olm
+}:
+let
+  mainsrc = fetchgit {
+    url = "https://github.com/saadnpq/matrixcli";
+    rev = "61ebde173ca2f77185c261c2b7f6db297ca89863";
+    sha256 = "0xcjjy2xwlcixr9fwgzcfjjkivqpk104h7dslfa7lz9jq9pzqzvq";
+    fetchSubmodules = true;
+  };
+
+  sdk = buildPythonPackage rec {
+    name = "${pname}-${version}";
+    pname = "matrix-python-sdk-matrixcli";
+    version = "0.0.2019-08-15";
+
+    src = "${mainsrc}/matrix-python-sdk/";
+
+    propagatedBuildInputs = [
+      requests responses olm python-olm canonicaljson
+      pytestrunner pytest
+    ];
+
+    doCheck = false;
+    doInstallCheck = false;
+
+    meta = {
+      license = lib.licenses.asl20;
+      description = "Fork of Matrix Python SDK";
+      platforms = lib.platforms.linux;
+    };
+  };
+
+in
+buildPythonApplication rec {
+  name = "${pname}-${version}";
+  pname = "matrixcli";
+  version = "0.0.2019-08-15";
+
+  src = mainsrc;
+
+  propagatedBuildInputs = [pygobject3 sdk];
+
+  meta = {
+    description = "CLI client for Matrix";
+    license = lib.licenses.gpl3;
+    maintainers = [lib.maintainers.raskin];
+    platforms = lib.platforms.linux;
+    homepage = "https://github.com/saadnpq/matrixcli";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix
new file mode 100644
index 000000000000..121bd3f8fe32
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mattermost-desktop/default.nix
@@ -0,0 +1,98 @@
+{ lib, stdenv, fetchurl, gnome2, gtk3, pango, atk, cairo, gdk-pixbuf, glib,
+freetype, fontconfig, dbus, libX11, xorg, libXi, libXcursor, libXdamage,
+libXrandr, libXcomposite, libXext, libXfixes, libXrender, libXtst,
+libXScrnSaver, nss, nspr, alsaLib, cups, expat, udev, wrapGAppsHook,
+hicolor-icon-theme, libuuid, at-spi2-core, at-spi2-atk }:
+
+let
+  rpath = lib.makeLibraryPath [
+    alsaLib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gnome2.GConf
+    gtk3
+    pango
+    libuuid
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    nspr
+    nss
+    stdenv.cc.cc
+    udev
+    xorg.libxcb
+  ];
+
+in
+  stdenv.mkDerivation rec {
+    pname = "mattermost-desktop";
+    version = "4.5.2";
+
+    src =
+      if stdenv.hostPlatform.system == "x86_64-linux" then
+        fetchurl {
+          url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-x64.tar.gz";
+          sha256 = "0r9xmhzif1ia1m53yr59q6p3niyq3jv3vgv4703x68jmd46f91n6";
+        }
+      else if stdenv.hostPlatform.system == "i686-linux" then
+        fetchurl {
+          url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-ia32.tar.gz";
+          sha256 = "1h8lw06p3cqz9dkgbhfmzcrzjsir5cfhx28xm4zrmvkj4yfzbcnv";
+        }
+      else
+        throw "Mattermost-Desktop is not currently supported on ${stdenv.hostPlatform.system}";
+
+    dontBuild = true;
+    dontConfigure = true;
+    dontPatchELF = true;
+
+    buildInputs = [ wrapGAppsHook gtk3 hicolor-icon-theme ];
+
+    installPhase = ''
+      mkdir -p $out/share/mattermost-desktop
+      cp -R . $out/share/mattermost-desktop
+
+      mkdir -p "$out/bin"
+      ln -s $out/share/mattermost-desktop/mattermost-desktop \
+        $out/bin/mattermost-desktop
+
+      patchShebangs $out/share/mattermost-desktop/create_desktop_file.sh
+      $out/share/mattermost-desktop/create_desktop_file.sh
+      rm $out/share/mattermost-desktop/create_desktop_file.sh
+      mkdir -p $out/share/applications
+      mv Mattermost.desktop $out/share/applications/Mattermost.desktop
+      substituteInPlace \
+        $out/share/applications/Mattermost.desktop \
+        --replace /share/mattermost-desktop/mattermost-desktop /bin/mattermost-desktop
+
+      patchelf \
+        --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath "${rpath}:$out/share/mattermost-desktop" \
+        $out/share/mattermost-desktop/mattermost-desktop
+    '';
+
+    meta = with lib; {
+      description = "Mattermost Desktop client";
+      homepage    = "https://about.mattermost.com/";
+      license     = licenses.asl20;
+      platforms   = [ "x86_64-linux" "i686-linux" ];
+      maintainers = [ maintainers.joko ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix
new file mode 100644
index 000000000000..7c5bff940848
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mcabber/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchurl, openssl, ncurses, pkg-config, glib, loudmouth, libotr
+, gpgme
+}:
+
+stdenv.mkDerivation rec {
+  pname = "mcabber";
+  version = "1.1.2";
+
+  src = fetchurl {
+    url = "https://mcabber.com/files/mcabber-${version}.tar.bz2";
+    sha256 = "0q1i5acyghsmzas88qswvki8kkk2nfpr8zapgnxbcd3lwcxl38f4";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ openssl ncurses glib loudmouth libotr gpgme ];
+
+  configureFlags = [
+    "--with-openssl=${openssl.dev}"
+    "--enable-modules"
+    "--enable-otr"
+  ];
+
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "http://mcabber.com/";
+    description = "Small Jabber console client";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ pSub ];
+    platforms = with platforms; linux;
+    updateWalker = true;
+    downloadPage = "http://mcabber.com/files/";
+    downloadURLRegexp = "mcabber-[0-9.]+[.]tar[.][a-z0-9]+$";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile
new file mode 100644
index 000000000000..216af305b4ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile
@@ -0,0 +1,39 @@
+alias __source_distinct__ source
+def source(url)
+  @loaded ||= {}
+  unless @loaded[url]
+    @loaded[url] = true
+    __source_distinct__(url) end end
+
+source 'https://rubygems.org'
+
+ruby '>= 2.5.0'
+
+group :default do
+  gem 'addressable','>= 2.7.0', '< 2.8'
+  gem 'delayer','>= 1.0.1', '< 1.1'
+  gem 'delayer-deferred','>= 2.1.1', '< 2.2'
+  gem 'diva','>= 1.0.1', '< 1.1'
+  gem 'memoist','>= 0.16.2', '< 0.17'
+  gem 'oauth','>= 0.5.4'
+  gem 'pluggaloid','>= 1.2.0', '< 1.3'
+  gem 'typed-array','>= 0.1.2', '< 0.2'
+end
+
+group :test do
+  gem 'test-unit','>= 3.3.4', '< 4.0'
+  gem 'rake','>= 13.0.1'
+  gem 'mocha','>= 1.11.1'
+  gem 'webmock','>= 3.7.6'
+  gem 'ruby-prof','>= 1.1.0'
+end
+
+
+group :plugin do
+  Dir.glob(File.expand_path(File.join(__dir__, 'plugin/*/Gemfile'))){ |path|
+    eval File.open(path).read
+  }
+  Dir.glob(File.join(File.expand_path(ENV['MIKUTTER_CONFROOT'] || '~/.mikutter'), 'plugin/*/Gemfile')){ |path|
+    eval File.open(path).read
+  }
+end
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile.lock b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile.lock
new file mode 100644
index 000000000000..63f9a63849b1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/Gemfile.lock
@@ -0,0 +1,103 @@
+GEM
+  remote: https://rubygems.org/
+  specs:
+    addressable (2.7.0)
+      public_suffix (>= 2.0.2, < 5.0)
+    atk (3.4.1)
+      glib2 (= 3.4.1)
+    cairo (1.16.4)
+      native-package-installer (>= 1.0.3)
+      pkg-config (>= 1.2.2)
+    cairo-gobject (3.4.1)
+      cairo (>= 1.16.2)
+      glib2 (= 3.4.1)
+    crack (0.4.3)
+      safe_yaml (~> 1.0.0)
+    delayer (1.0.1)
+    delayer-deferred (2.1.1)
+      delayer (>= 1.0, < 2.0)
+    diva (1.0.1)
+      addressable (>= 2.5.2, < 2.8)
+    gdk_pixbuf2 (3.4.1)
+      gio2 (= 3.4.1)
+    gettext (3.2.9)
+      locale (>= 2.0.5)
+      text (>= 1.3.0)
+    gio2 (3.4.1)
+      gobject-introspection (= 3.4.1)
+    glib2 (3.4.1)
+      native-package-installer (>= 1.0.3)
+      pkg-config (>= 1.3.5)
+    gobject-introspection (3.4.1)
+      glib2 (= 3.4.1)
+    gtk2 (3.4.1)
+      atk (= 3.4.1)
+      gdk_pixbuf2 (= 3.4.1)
+      pango (= 3.4.1)
+    hashdiff (1.0.0)
+    httpclient (2.8.3)
+    instance_storage (1.0.0)
+    io-console (0.5.3)
+    irb (1.2.1)
+      reline (>= 0.0.1)
+    locale (2.1.2)
+    memoist (0.16.2)
+    mini_portile2 (2.4.0)
+    mocha (1.11.1)
+    moneta (1.2.1)
+    native-package-installer (1.0.9)
+    nokogiri (1.10.7)
+      mini_portile2 (~> 2.4.0)
+    oauth (0.5.4)
+    pango (3.4.1)
+      cairo-gobject (= 3.4.1)
+      gobject-introspection (= 3.4.1)
+    pkg-config (1.4.0)
+    pluggaloid (1.2.0)
+      delayer (>= 1.0.0, < 2.0)
+      instance_storage (>= 1.0.0, < 2.0.0)
+    power_assert (1.1.5)
+    public_suffix (4.0.1)
+    rake (13.0.1)
+    reline (0.1.2)
+      io-console (~> 0.5)
+    ruby-prof (1.1.0)
+    safe_yaml (1.0.5)
+    test-unit (3.3.4)
+      power_assert
+    text (1.3.1)
+    typed-array (0.1.2)
+    webmock (3.7.6)
+      addressable (>= 2.3.6)
+      crack (>= 0.3.2)
+      hashdiff (>= 0.4.0, < 2.0.0)
+
+PLATFORMS
+  ruby
+
+DEPENDENCIES
+  addressable (>= 2.7.0, < 2.8)
+  delayer (>= 1.0.1, < 1.1)
+  delayer-deferred (>= 2.1.1, < 2.2)
+  diva (>= 1.0.1, < 1.1)
+  gettext (>= 3.2.9, < 3.3)
+  gtk2 (= 3.4.1)
+  httpclient
+  irb (>= 1.2.0, < 1.3)
+  memoist (>= 0.16.2, < 0.17)
+  mocha (>= 1.11.1)
+  moneta
+  nokogiri
+  oauth (>= 0.5.4)
+  pluggaloid (>= 1.2.0, < 1.3)
+  rake (>= 13.0.1)
+  ruby-prof (>= 1.1.0)
+  test-unit (>= 3.3.4, < 4.0)
+  typed-array (>= 0.1.2, < 0.2)
+  webmock (>= 3.7.6)
+
+RUBY VERSION
+   ruby 2.7.0p0
+
+BUNDLED WITH
+   2.1.2
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix
new file mode 100644
index 000000000000..be84342787d2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/default.nix
@@ -0,0 +1,82 @@
+{ lib, stdenv, fetchurl
+, bundlerEnv, ruby
+, alsaUtils, libnotify, which, wrapGAppsHook, gtk2, atk, gobject-introspection
+}:
+
+# how to update:
+# find latest version at: http://mikutter.hachune.net/download#download
+# run these commands:
+#
+# wget http://mikutter.hachune.net/bin/mikutter.4.0.0.tar.gz
+# mkdir mikutter
+# cd mikutter
+# tar xvf ../mikutter.4.0.0.tar.gz
+# find . -not -name Gemfile -exec rm {} \;
+# find . -type d -exec rmdir -p --ignore-fail-on-non-empty {} \;
+# cd ..
+# mv mikutter/* .
+# rm mikutter.4.0.0.tar.gz
+# rm gemset.nix Gemfile.lock; nix-shell -p bundler bundix --run 'bundle lock && bundix'
+
+stdenv.mkDerivation rec {
+  pname = "mikutter";
+  version = "4.0.0";
+
+  src = fetchurl {
+    url = "https://mikutter.hachune.net/bin/mikutter.${version}.tar.gz";
+    sha256 = "0nx14vlp7p69m2vw0s6kbiyymsfq0r2jd4nm0v5c4xb9avkpgc8g";
+  };
+
+  buildInputs = [ alsaUtils libnotify which gtk2 ruby atk gobject-introspection ];
+  nativeBuildInputs = [ wrapGAppsHook ];
+
+  unpackPhase = ''
+    mkdir source
+    cd source
+    unpackFile $src
+    rm -rf vendor
+  '';
+
+  installPhase = let
+    env = bundlerEnv {
+      name = "mikutter-${version}-gems";
+      gemdir = ./.;
+
+      inherit ruby;
+    };
+  in ''
+    install -v -D -m644 README $out/share/doc/mikutter/README
+    install -v -D -m644 LICENSE $out/share/doc/mikutter/LICENSE
+    rm -v README LICENSE
+
+    cp -rv . $out
+    mkdir $out/bin/
+    # hack wrapGAppsHook wants a file not a symlink
+    mv $out/mikutter.rb $out/bin/mikutter
+
+    gappsWrapperArgs+=(
+      --prefix PATH : "${ruby}/bin:${alsaUtils}/bin:${libnotify}/bin"
+      --prefix GEM_HOME : "${env}/${env.ruby.gemPath}"
+      --set DISABLE_BUNDLER_SETUP 1
+    )
+      # --prefix GIO_EXTRA_MODULES : "$prefix/lib/gio/modules"
+
+    mkdir -p $out/share/mikutter $out/share/applications
+    ln -sv $out/core/skin $out/share/mikutter/skin
+    substituteAll ${./mikutter.desktop} $out/share/applications/mikutter.desktop
+  '';
+
+  postFixup = ''
+    mv $out/bin/.mikutter-wrapped $out/mikutter.rb
+    substituteInPlace $out/bin/mikutter \
+      --replace "$out/bin/.mikutter-wrapped" "$out/mikutter.rb"
+  '';
+
+  meta = with lib; {
+    description = "An extensible Twitter client";
+    homepage = "https://mikutter.hachune.net";
+    platforms = ruby.meta.platforms;
+    license = licenses.mit;
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/gemset.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/gemset.nix
new file mode 100644
index 000000000000..2bc4db978dda
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/gemset.nix
@@ -0,0 +1,422 @@
+{
+  addressable = {
+    dependencies = ["public_suffix"];
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
+      type = "gem";
+    };
+    version = "2.7.0";
+  };
+  atk = {
+    dependencies = ["glib2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0a8q9a1f6x4gy55p8cf52a22bnpjgn18ad9n959x0f4gybbhs948";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  cairo = {
+    dependencies = ["native-package-installer" "pkg-config"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0yvv2lcbsybzbw1nrmfivmln23da4rndrs3av6ymjh0x3ww5h7p8";
+      type = "gem";
+    };
+    version = "1.16.4";
+  };
+  cairo-gobject = {
+    dependencies = ["cairo" "glib2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gkxdfslcvrwrs48giilji3bgxd5bwijwq33p9h00r10jzfg2028";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  crack = {
+    dependencies = ["safe_yaml"];
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0abb0fvgw00akyik1zxnq7yv391va148151qxdghnzngv66bl62k";
+      type = "gem";
+    };
+    version = "0.4.3";
+  };
+  delayer = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "09p4rkh3dpdm1mhq721m4d6zvxqqp44kg7069s8l7kmaf7nv2nb3";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  delayer-deferred = {
+    dependencies = ["delayer"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1mbdxn1hskjqf3zlj4waxl71ccvbj6lk81c99769paxw4fajwrgx";
+      type = "gem";
+    };
+    version = "2.1.1";
+  };
+  diva = {
+    dependencies = ["addressable"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "182gws1zihhpl7r3m8jsf29maqg9xdhj46s9lidbldar8clpl23h";
+      type = "gem";
+    };
+    version = "1.0.1";
+  };
+  gdk_pixbuf2 = {
+    dependencies = ["gio2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0194gzn0kialfh0j7crllvp808r64sg6dh297x69b0av21ar5pam";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  gettext = {
+    dependencies = ["locale" "text"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0764vj7gacn0aypm2bf6m46dzjzwzrjlmbyx6qwwwzbmi94r40wr";
+      type = "gem";
+    };
+    version = "3.2.9";
+  };
+  gio2 = {
+    dependencies = ["gobject-introspection"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1l3jpgbdvb55xhcmpkcqgwx5068dfyi8kijfvzhbqh96ng0p1m7g";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  glib2 = {
+    dependencies = ["native-package-installer" "pkg-config"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18clyn0fp0h5alnkf9i2bqd6wvl78h468pdbzs1csqnba8vw4q1c";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  gobject-introspection = {
+    dependencies = ["glib2"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1a3x8qiisbax3x0izj8l5w66r53ba5ma53ax2jhdbhbvaxx3d02n";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  gtk2 = {
+    dependencies = ["atk" "gdk_pixbuf2" "pango"];
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "17az8g0n1yzz90kdbjg2hpabi04qccda7v6lin76bs637ivfg2md";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  hashdiff = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18jqpbvidrlnq3xf0hkdbs00607jgz35lry6gjw4bcxgh52am2mk";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  httpclient = {
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
+      type = "gem";
+    };
+    version = "2.8.3";
+  };
+  instance_storage = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "08nf5fhq9dckq9lmaklxydq0hrlfi7phk66gr3bggxg45zd687pl";
+      type = "gem";
+    };
+    version = "1.0.0";
+  };
+  io-console = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0srn91ly4cc5qvyj3r87sc7v8dnm52qj1hczzxmysib6ffparngd";
+      type = "gem";
+    };
+    version = "0.5.3";
+  };
+  irb = {
+    dependencies = ["reline"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1r1y8i46qd5izdszzzn5jxvwvq00m89rk0hm8cs8f21p7nlwmh5w";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  locale = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1sls9bq4krx0fmnzmlbn64dw23c4d6pz46ynjzrn9k8zyassdd0x";
+      type = "gem";
+    };
+    version = "2.1.2";
+  };
+  memoist = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
+      type = "gem";
+    };
+    version = "0.16.2";
+  };
+  mini_portile2 = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "15zplpfw3knqifj9bpf604rb3wc1vhq6363pd6lvhayng8wql5vy";
+      type = "gem";
+    };
+    version = "2.4.0";
+  };
+  mocha = {
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "06i2q5qjr9mvjgjc8w41pdf3qalw340y33wjvzc0rp4a1cbbb7pp";
+      type = "gem";
+    };
+    version = "1.11.1";
+  };
+  moneta = {
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0q7fskfdc0h5dhl8aamg3ypybd6cyl4x0prh4803gj7hxr17jfm1";
+      type = "gem";
+    };
+    version = "1.2.1";
+  };
+  native-package-installer = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0piclgf6pw7hr10x57x0hn675djyna4sb3xc97yb9vh66wkx1fl0";
+      type = "gem";
+    };
+    version = "1.0.9";
+  };
+  nokogiri = {
+    dependencies = ["mini_portile2"];
+    groups = ["plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0r0qpgf80h764k176yr63gqbs2z0xbsp8vlvs2a79d5r9vs83kln";
+      type = "gem";
+    };
+    version = "1.10.7";
+  };
+  oauth = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1zszdg8q1b135z7l7crjj234k4j0m347hywp5kj6zsq7q78pw09y";
+      type = "gem";
+    };
+    version = "0.5.4";
+  };
+  pango = {
+    dependencies = ["cairo-gobject" "gobject-introspection"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1d0cn50qgpifrcv8qx72wi6l9xalw3ryngbfmm9xpg9vx5rl1qbp";
+      type = "gem";
+    };
+    version = "3.4.1";
+  };
+  pkg-config = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1cxdpr2wlz9b587avlq04a1da5fz1vdw8jvr6lx23mcq7mqh2xcx";
+      type = "gem";
+    };
+    version = "1.4.0";
+  };
+  pluggaloid = {
+    dependencies = ["delayer" "instance_storage"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1gv0rjjdic8c41gfr3kyyphvf0fmv5rzcf6qd57zjdfcn6fvi3hh";
+      type = "gem";
+    };
+    version = "1.2.0";
+  };
+  power_assert = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1dii0wkfa0jm8sk9b20zl1z4980dmrjh0zqnii058485pp3ws10s";
+      type = "gem";
+    };
+    version = "1.1.5";
+  };
+  public_suffix = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0xnfv2j2bqgdpg2yq9i2rxby0w2sc9h5iyjkpaas2xknwrgmhdb0";
+      type = "gem";
+    };
+    version = "4.0.1";
+  };
+  rake = {
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0w6qza25bq1s825faaglkx1k6d59aiyjjk3yw3ip5sb463mhhai9";
+      type = "gem";
+    };
+    version = "13.0.1";
+  };
+  reline = {
+    dependencies = ["io-console"];
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0908ijrngc3wkn5iny7d0kxkp74w6ixk2nwzzngplplfla1vkp8x";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  ruby-prof = {
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "18ga5f4h1fnwn0xh910kpnw4cg3lq3jqljd3h16bdw9pgc5ff7dn";
+      type = "gem";
+    };
+    version = "1.1.0";
+  };
+  safe_yaml = {
+    groups = ["default" "test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0j7qv63p0vqcd838i2iy2f76c3dgwzkiz1d1xkg7n0pbnxj2vb56";
+      type = "gem";
+    };
+    version = "1.0.5";
+  };
+  test-unit = {
+    dependencies = ["power_assert"];
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0mrkpb6wz0cs1740kaca240k4ymmkbvb2v5xaxsy6vynqw8n0g6z";
+      type = "gem";
+    };
+    version = "3.3.4";
+  };
+  text = {
+    groups = ["default" "plugin"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
+  typed-array = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0qlv2rnkin9rwkgjx3k5qvc17m0m7jf5cdirw3wxbjnw5kga27w9";
+      type = "gem";
+    };
+    version = "0.1.2";
+  };
+  webmock = {
+    dependencies = ["addressable" "crack" "hashdiff"];
+    groups = ["test"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "19xvs7gdf8r75bmyb17w9g367qxzqnlrmbdda1y36cn1vrlnf2l8";
+      type = "gem";
+    };
+    version = "3.7.6";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/mikutter.desktop b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/mikutter.desktop
new file mode 100644
index 000000000000..092f5f35cbf8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/mikutter.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=mikutter
+Comment=Twitter Client
+Type=Application
+Exec=@out@/bin/mikutter
+Icon=@out@/core/skin/data/icon.png
+Terminal=false
+Categories=Network;
+Keywords=Twitter;
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/gtk/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/gtk/Gemfile
new file mode 100644
index 000000000000..3306c29e3cbf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/gtk/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'gtk2', '3.4.1'
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/image_file_cache/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/image_file_cache/Gemfile
new file mode 100644
index 000000000000..f86005fef078
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/image_file_cache/Gemfile
@@ -0,0 +1 @@
+gem 'moneta'
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/photo_support/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/photo_support/Gemfile
new file mode 100644
index 000000000000..66016eee9c46
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/photo_support/Gemfile
@@ -0,0 +1,4 @@
+source 'https://rubygems.org'
+
+gem 'nokogiri'
+gem 'httpclient'
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/uitranslator/Gemfile b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/uitranslator/Gemfile
new file mode 100644
index 000000000000..14ebffd4e0ad
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mikutter/plugin/uitranslator/Gemfile
@@ -0,0 +1,6 @@
+source 'https://rubygems.org'
+
+group :default do
+  gem 'gettext', '>= 3.2.9', '< 3.3'
+  gem 'irb', '>= 1.2.0', '< 1.3'
+end
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix
new file mode 100644
index 000000000000..3b6b9bfc6f91
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mirage/default.nix
@@ -0,0 +1,59 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub
+, qmake, pkg-config, olm, wrapQtAppsHook
+, qtbase, qtquickcontrols2, qtkeychain, qtmultimedia, qttools, qtgraphicaleffects
+, python3Packages, pyotherside, libXScrnSaver
+}:
+
+let
+  pypkgs = with python3Packages; [
+    aiofiles filetype matrix-nio appdirs cairosvg
+    pymediainfo setuptools html-sanitizer mistune blist
+    pyotherside
+  ];
+in
+mkDerivation rec {
+  pname = "mirage";
+  version = "0.6.4";
+
+  src = fetchFromGitHub {
+    owner = "mirukana";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "15x0x2rf4fzsd0zr84fq3j3ddzkgc5il8s54jpxk8wl4ah03g4nv";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ pkg-config qmake wrapQtAppsHook python3Packages.wrapPython ];
+
+  buildInputs = [
+    qtbase qtmultimedia
+    qtquickcontrols2
+    qtkeychain qtgraphicaleffects
+    olm pyotherside
+    libXScrnSaver
+  ];
+
+  propagatedBuildInputs = pypkgs;
+
+  pythonPath = pypkgs;
+
+  qmakeFlags = [ "PREFIX=${placeholder "out"}" "CONFIG+=qtquickcompiler" ];
+
+  dontWrapQtApps = true;
+  postInstall = ''
+    buildPythonPath "$out $pythonPath"
+    wrapProgram $out/bin/mirage \
+      --prefix PYTHONPATH : "$PYTHONPATH" \
+      "''${qtWrapperArgs[@]}"
+    '';
+
+  meta = with lib; {
+    description = "A fancy, customizable, keyboard-operable Qt/QML+Python Matrix chat client for encrypted and decentralized communication";
+    homepage = "https://github.com/mirukana/mirage";
+    license = licenses.lgpl3;
+    maintainers = with maintainers; [ colemickens ];
+    broken = stdenv.isDarwin;
+    inherit (qtbase.meta) platforms;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix
new file mode 100644
index 000000000000..c8f24e72a9ae
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/mm/default.nix
@@ -0,0 +1,21 @@
+{ lib, buildGoModule, fetchgit }:
+
+buildGoModule {
+  pname = "mm";
+  version = "2020.11.17";
+
+  src = fetchgit {
+    url = "https://git.lost.host/meutraa/mm.git";
+    rev = "e5fa8eeb845aac8f28fc36013ee8a1dbe1e5710c";
+    sha256 = "sha256-SdD4EE/rc85H7xqKB/kU8XFsC63i1sVObPha/zrxFGk=";
+  };
+
+  vendorSha256 = "sha256-zJJ9PzQShv2iRNyCg1XVscbwjV9ZtMIojJDtXXm3rVM=";
+
+  meta = with lib; {
+    description = "A file system based matrix client";
+    homepage = "https://git.lost.host/meutraa/mm";
+    license = licenses.isc;
+    maintainers = with maintainers; [ meutraa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/neochat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/neochat/default.nix
new file mode 100644
index 000000000000..cd456b336dd6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/neochat/default.nix
@@ -0,0 +1,67 @@
+{ mkDerivation
+, lib
+, fetchFromGitLab
+, pkg-config
+, cmake
+, qtbase
+, qttools
+, qtquickcontrols2
+, qtmultimedia
+, qtgraphicaleffects
+, qtkeychain
+, libpulseaudio
+, olm
+, libsecret
+, cmark
+, extra-cmake-modules
+, kirigami2
+, kitemmodels
+, ki18n
+, knotifications
+, kdbusaddons
+, kconfig
+, libquotient
+, kquickimageedit
+}:
+
+mkDerivation rec {
+  pname = "neochat";
+  version = "1.0.1";
+
+  src = fetchFromGitLab {
+    domain = "invent.kde.org";
+    owner = "network";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "sha256-xGqGFJHyoZXHLv/n3UGr/KVbgs5Gc9kKKWIuKMr9DtQ=";
+  };
+
+  nativeBuildInputs = [ cmake extra-cmake-modules pkg-config ];
+
+  buildInputs = [
+    qtkeychain
+    qtquickcontrols2
+    qtmultimedia
+    qtgraphicaleffects
+    olm
+    libsecret
+    cmark
+    kirigami2
+    kitemmodels
+    ki18n
+    knotifications
+    kdbusaddons
+    kconfig
+    libquotient
+    kquickimageedit
+    libpulseaudio
+  ];
+
+  meta = with lib; {
+    description = "A client for matrix, the decentralized communication protocol.";
+    homepage = "https://apps.kde.org/en/neochat";
+    license = licenses.gpl3Only;
+    maintainers = with maintainers; [ mjlbach peterhoeg ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix
new file mode 100644
index 000000000000..57db6a0750e9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/nheko/default.nix
@@ -0,0 +1,78 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, fetchpatch
+, cmake
+, cmark
+, lmdb
+, lmdbxx
+, libsecret
+, tweeny
+, mkDerivation
+, qtbase
+, qtkeychain
+, qtmacextras
+, qtmultimedia
+, qttools
+, qtquickcontrols2
+, qtgraphicaleffects
+, mtxclient
+, boost17x
+, spdlog
+, fmt
+, olm
+, pkg-config
+, nlohmann_json
+}:
+
+mkDerivation rec {
+  pname = "nheko";
+  version = "0.8.1";
+
+  src = fetchFromGitHub {
+    owner = "Nheko-Reborn";
+    repo = "nheko";
+    rev = "v${version}";
+    sha256 = "1v7k3ifzi05fdr06hmws1wkfl1bmhrnam3dbwahp086vkj0r8524";
+  };
+
+  nativeBuildInputs = [
+    lmdbxx
+    cmake
+    pkg-config
+  ];
+
+  buildInputs = [
+    nlohmann_json
+    tweeny
+    mtxclient
+    olm
+    boost17x
+    libsecret
+    lmdb
+    spdlog
+    fmt
+    cmark
+    qtbase
+    qtmultimedia
+    qttools
+    qtquickcontrols2
+    qtgraphicaleffects
+    qtkeychain
+  ] ++ lib.optional stdenv.isDarwin qtmacextras;
+
+  cmakeFlags = [
+    "-DCOMPILE_QML=ON" # see https://github.com/Nheko-Reborn/nheko/issues/389
+  ];
+
+  meta = with lib; {
+    description = "Desktop client for the Matrix protocol";
+    homepage = "https://github.com/Nheko-Reborn/nheko";
+    maintainers = with maintainers; [ ekleog fpletz ];
+    platforms = platforms.all;
+    # Should be fixable if a higher clang version is used, see:
+    # https://github.com/NixOS/nixpkgs/pull/85922#issuecomment-619287177
+    broken = stdenv.targetPlatform.isDarwin;
+    license = licenses.gpl3Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix
new file mode 100644
index 000000000000..e3595e07a788
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/oysttyer/default.nix
@@ -0,0 +1,42 @@
+{ stdenv, lib, perl, perlPackages, coreutils,
+fetchFromGitHub, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "oysttyer";
+  version = "2.10.0";
+
+  src = fetchFromGitHub {
+    owner  = "oysttyer";
+    repo   = "oysttyer";
+    rev    = version;
+    sha256 = "0cm1hvi68iqgjsg15xdii271pklgzjn9j9afb1c460z71kgy3wz2";
+  };
+
+  buildInputs = [
+    perl
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = with perlPackages; [
+    DateTimeFormatDateParse
+    TermReadLineTTYtter
+    TermReadKey
+  ];
+
+  installPhase = ''
+    ${coreutils}/bin/install -Dm755 \
+      oysttyer.pl \
+      $out/bin/oysttyer
+
+    wrapProgram $out/bin/oysttyer \
+      --prefix PERL5LIB : $PERL5LIB
+  '';
+
+  meta = with lib; {
+    inherit version;
+    description = "Perl Console Twitter Client";
+    homepage    = "http://oysttyer.github.io/";
+    maintainers = with maintainers; [ woffs ];
+    license = with licenses; [ ffsl ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix
new file mode 100644
index 000000000000..9c99741823aa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pantalaimon/default.nix
@@ -0,0 +1,64 @@
+{ lib, stdenv, buildPythonApplication, fetchFromGitHub, pythonOlder,
+  attrs, aiohttp, appdirs, click, keyring, Logbook, peewee, janus,
+  prompt_toolkit, matrix-nio, dbus-python, pydbus, notify2, pygobject3,
+  setuptools,
+
+  pytest, faker, pytest-aiohttp, aioresponses,
+
+  enableDbusUi ? true
+}:
+
+buildPythonApplication rec {
+  pname = "pantalaimon";
+  version = "0.8.0";
+
+  disabled = pythonOlder "3.6";
+
+  # pypi tarball miss tests
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = pname;
+    rev = version;
+    sha256 = "0n86cdpw85qzlcr1ynvar0f0zbphmdz1jia9r75lmj07iw4r5hk9";
+  };
+
+  propagatedBuildInputs = [
+    aiohttp
+    appdirs
+    attrs
+    click
+    janus
+    keyring
+    Logbook
+    matrix-nio
+    peewee
+    prompt_toolkit
+    setuptools
+  ] ++ lib.optional enableDbusUi [
+      dbus-python
+      notify2
+      pygobject3
+      pydbus
+  ];
+
+  checkInputs = [
+    pytest
+    faker
+    pytest-aiohttp
+    aioresponses
+  ];
+
+  # darwin has difficulty communicating with server, fails some integration tests
+  doCheck = !stdenv.isDarwin;
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "An end-to-end encryption aware Matrix reverse proxy daemon";
+    homepage = "https://github.com/matrix-org/pantalaimon";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ valodim ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/carbons/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/carbons/default.nix
new file mode 100644
index 000000000000..46f8458f1533
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/carbons/default.nix
@@ -0,0 +1,26 @@
+{ lib, stdenv, libxml2, pidgin, pkg-config, fetchFromGitHub } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-carbons";
+  version = "0.2.2";
+
+  src = fetchFromGitHub {
+    owner = "gkdr";
+    repo  = "carbons";
+    rev   = "v${version}";
+    sha256 = "1aq9bwgpmbwrigq6ywf0pjkngqcm0qxncygaj1fi57npjhcjs6ln";
+  };
+
+  makeFlags = [ "PURPLE_PLUGIN_DIR=$(out)/lib/pidgin" ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ libxml2 pidgin ];
+
+  meta = with lib; {
+    homepage = "https://github.com/gkdr/carbons";
+    description = "XEP-0280: Message Carbons plugin for libpurple";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/msn-pecan/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/msn-pecan/default.nix
new file mode 100644
index 000000000000..c32bd6f3e398
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/msn-pecan/default.nix
@@ -0,0 +1,22 @@
+{ lib, stdenv, fetchurl, pidgin} :
+
+stdenv.mkDerivation {
+  name = "pidgin-msn-pecan-0.1.4";
+  src = fetchurl {
+    url = "http://msn-pecan.googlecode.com/files/msn-pecan-0.1.4.tar.bz2";
+    sha256 = "0d43z2ay9is1r2kkc9my8pz0fwdyzv7k19vdmbird18lg7rlbjd2";
+  };
+
+  meta = {
+    description = "Alternative MSN protocol plug-in for Pidgin IM";
+    homepage = "https://github.com/felipec/msn-pecan";
+    platforms = lib.platforms.linux;
+  };
+
+  makeFlags = [
+    "PURPLE_LIBDIR=${placeholder "out"}/lib"
+    "PURPLE_DATADIR=${placeholder "out"}/share/data"
+  ];
+
+  buildInputs = [pidgin];
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix
new file mode 100644
index 000000000000..c7bad49cebaa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/otr/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, libotr, pidgin, intltool } :
+
+stdenv.mkDerivation rec {
+  name = "pidgin-otr-4.0.2";
+  src = fetchurl {
+    url = "http://www.cypherpunks.ca/otr/${name}.tar.gz";
+    sha256 = "1i5s9rrgbyss9rszq6c6y53hwqyw1k86s40cpsfx5ccl9bprxdgl";
+  };
+
+  postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr";
+
+  buildInputs = [ libotr pidgin intltool ];
+
+  meta = with lib; {
+    homepage = "https://otr.cypherpunks.ca/";
+    description = "Plugin for Pidgin 2.x which implements OTR Messaging";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix
new file mode 100644
index 000000000000..1250e3877b96
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-latex/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, fetchurl, pkg-config, pidgin, texLive, imagemagick, glib, gtk2 }:
+
+let version = "1.5.0";
+in
+stdenv.mkDerivation {
+  pname = "pidgin-latex";
+  inherit version;
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pidgin-latex/pidgin-latex_${version}.tar.bz2";
+    sha256 = "9c850aee90d7e59de834f83e09fa6e3e51b123f06e265ead70957608ada95441";
+  };
+
+  nativeBuildInputs = [pkg-config];
+  buildInputs = [gtk2 glib pidgin];
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  postPatch = ''
+    sed -e 's/-Wl,-soname//' -i Makefile
+  '';
+
+  passthru = {
+    wrapArgs = "--prefix PATH ':' ${lib.makeBinPath [ texLive imagemagick ]}";
+  };
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/pidgin-latex/";
+    description = "LaTeX rendering plugin for Pidgin IM";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-mra/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-mra/default.nix
new file mode 100644
index 000000000000..a168eb984c33
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-mra/default.nix
@@ -0,0 +1,35 @@
+{ lib, stdenv, fetchgit, pkg-config, pidgin } :
+
+let
+  version = "54b2992";
+in
+stdenv.mkDerivation {
+  pname = "pidgin-mra";
+  inherit version;
+
+  src = fetchgit {
+    url = "https://github.com/dreadatour/pidgin-mra";
+    rev = version;
+    sha256 = "1adq57g11kw7bfpivyvfk3nlpjkc8raiw4bzn3gn4nx3m0wl99vw";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin ];
+
+  postPatch = ''
+    sed -i 's|-I/usr/include/libpurple|$(shell pkg-config --cflags purple)|' Makefile
+  '';
+
+  makeFlags = [
+    "DESTDIR=/"
+    "LIBDIR=${placeholder "out"}/lib"
+    "DATADIR=${placeholder "out"}/share"
+  ];
+
+  meta = {
+    homepage = "https://github.com/dreadatour/pidgin-mra";
+    description = "Mail.ru Agent plugin for Pidgin / libpurple";
+    license = lib.licenses.gpl2;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-opensteamworks/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-opensteamworks/default.nix
new file mode 100644
index 000000000000..9af8b0aff77b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-opensteamworks/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, glib, json-glib, nss, nspr
+, libsecret
+} :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-opensteamworks";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "pidgin-opensteamworks";
+    rev = version;
+    sha256 = "0zxd45g9ycw5kmm4i0800jnqg1ms2gbqcld6gkyv6n3ac1wxizpj";
+  };
+
+  sourceRoot = "source/steam-mobile";
+
+  installFlags = [
+    "PLUGIN_DIR_PURPLE=${placeholder "out"}/lib/purple-2"
+    "DATA_ROOT_DIR_PURPLE=${placeholder "out"}/share"
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+  buildInputs = [
+    pidgin glib json-glib nss nspr libsecret
+  ];
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/pidgin-opensteamworks";
+    description = "Plugin for Pidgin 2.x which implements Steam Friends/Steam IM compatibility";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ arobyn ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-osd/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-osd/default.nix
new file mode 100644
index 000000000000..4c7cb2c46bfa
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-osd/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, xosd
+, autoreconfHook } :
+
+stdenv.mkDerivation rec {
+  name = "pidgin-osd-0.2.0";
+  src = fetchFromGitHub {
+    owner = "edanaher";
+    repo = "pidgin-osd";
+    rev = name;
+    sha256 = "07wa9anz99hnv6kffpcph3fbq8mjbyq17ij977ggwgw37zb9fzb5";
+  };
+
+  # autoreconf is run such that it *really* wants all the files, and there's no
+  # default ChangeLog.  So make it happy.
+  preAutoreconf = "touch ChangeLog";
+
+  postInstall = ''
+    mkdir -p $out/lib/pidgin
+    mv $out/lib/pidgin-osd.{la,so} $out/lib/pidgin
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ xosd pidgin ];
+
+  meta = with lib; {
+    homepage = "https://github.com/mbroemme/pidgin-osd";
+    description = "Plugin for Pidgin which implements on-screen display via libxosd";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-skypeweb/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-skypeweb/default.nix
new file mode 100644
index 000000000000..d7c3c6cacabd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-skypeweb/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, json-glib }:
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-skypeweb";
+  version = "1.7";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "skype4pidgin";
+    rev = version;
+    sha256 = "11snyrjhm58gjvdmr5h5ajii3ah4a7c8zw3cavjv9xnnwrpfm5rb";
+  };
+
+  setSourceRoot = ''
+    sourceRoot=$(echo */skypeweb)
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin json-glib ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/skype4pidgin";
+    description = "SkypeWeb plugin for Pidgin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-xmpp-receipts/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-xmpp-receipts/default.nix
new file mode 100644
index 000000000000..f545b65cd8ea
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/pidgin-xmpp-receipts/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, pidgin } :
+
+let
+  version = "0.8";
+in
+stdenv.mkDerivation {
+  pname = "pidgin-xmpp-receipts";
+  inherit version;
+
+  src = fetchFromGitHub {
+    owner = "noonien-d";
+    repo = "pidgin-xmpp-receipts";
+    rev = "release_${version}";
+    sha256 = "13kwaymzkymjsdv8q95byd173i4vanj211vgx9cm0y8ag2r3cjsb";
+  };
+
+  buildInputs = [ pidgin ];
+
+  installPhase = ''
+    mkdir -p $out/lib/pidgin/
+    cp xmpp-receipts.so $out/lib/pidgin/
+  '';
+
+  meta = with lib; {
+    homepage = "http://devel.kondorgulasch.de/pidgin-xmpp-receipts/";
+    description = "Message delivery receipts (XEP-0184) Pidgin plugin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ orivej ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-discord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-discord/default.nix
new file mode 100644
index 000000000000..10cbcb6c1d29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-discord/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, json-glib }:
+
+stdenv.mkDerivation {
+  pname = "purple-discord";
+  version = "unstable-2018-04-10";
+
+  src = fetchFromGitHub {
+    owner = "EionRobb";
+    repo = "purple-discord";
+    rev = "9a97886d15a1f028de54b5e6fc54e784531063b0";
+    sha256 = "0dc344zh1v4yh9c8javcw5ylzwc1wpx0ih8bww8p8cjmhr8kcl32";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin json-glib ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/EionRobb/purple-discord";
+    description = "Discord plugin for Pidgin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ sna ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-facebook/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-facebook/default.nix
new file mode 100644
index 000000000000..a45f91ec57fd
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-facebook/default.nix
@@ -0,0 +1,65 @@
+{ lib, stdenv, fetchFromGitHub, fetchhg, pidgin, glib, json-glib, autoreconfHook }:
+
+
+let
+  pidginHg = fetchhg {
+    url = "https://bitbucket.org/pidgin/main";
+    # take from VERSION file
+    rev = "9ff9acf9fa14";
+    sha256 = "06imlhsps4wrjgjb92zpaxprxfxl2pjb2x9pl859c8cryssrz2jv";
+  };
+
+in stdenv.mkDerivation rec {
+  name = "purple-facebook-0.9.5";
+
+  src = fetchFromGitHub {
+    owner = "dequis";
+    repo = "purple-facebook";
+    rev = "v0.9.5-9ff9acf9fa14";
+    sha256 = "0a1860bkzrmyxahm9rlxi80z335w491wzdaqaw6j9ccavbymhwhs";
+  };
+
+  postPatch = ''
+    # we do all patching from update.sh in preAutoreconf
+    echo "#!${stdenv.shell}" > update.sh
+  '';
+
+  preAutoreconf = ''
+    for FILE in $(cat MANIFEST_PIDGIN); do
+        install -Dm644 "${pidginHg}/$FILE" "pidgin/$FILE" || true
+    done
+
+    touch $(cat MANIFEST_VOIDS)
+
+    patchdir="$(pwd)/patches"
+    pushd pidgin
+
+    for patch in $(ls -1 "$patchdir"); do
+      patch -p1 -i "$patchdir/$patch"
+    done
+    popd
+
+    ./autogen.sh
+  '';
+
+  makeFlags = [
+    "PLUGIN_DIR_PURPLE=/lib/pidgin/"
+    "DATA_ROOT_DIR_PURPLE=/share"
+  ];
+
+  installPhase = ''
+    mkdir -p $out/lib/purple-2
+    cp pidgin/libpurple/protocols/facebook/.libs/*.so $out/lib/purple-2/
+  '';
+
+  nativeBuildInputs = [ autoreconfHook ];
+  buildInputs = [ pidgin glib json-glib ];
+
+  meta = with lib; {
+    inherit (src.meta) homepage;
+    description = "Facebook protocol plugin for libpurple";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ davorb ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-hangouts/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-hangouts/default.nix
new file mode 100644
index 000000000000..653708abe3b6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-hangouts/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchhg, pidgin, glib, json-glib, protobuf, protobufc }:
+
+stdenv.mkDerivation {
+  pname = "purple-hangouts-hg";
+  version = "2018-12-02";
+
+  src = fetchhg {
+    url = "https://bitbucket.org/EionRobb/purple-hangouts/";
+    rev = "cccf2f6";
+    sha256 = "1zd1rlzqvw1zkb0ydyz039n3xa1kv1f20a4l6rkm9a8sp6rpf3pi";
+  };
+
+  buildInputs = [ pidgin glib json-glib protobuf protobufc ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATADIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://bitbucket.org/EionRobb/purple-hangouts";
+    description = "Native Hangouts support for pidgin";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ralith ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-lurch/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-lurch/default.nix
new file mode 100644
index 000000000000..2170aac16e05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-lurch/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchFromGitHub, cmake, pidgin, minixml, libxml2, sqlite, libgcrypt }:
+
+stdenv.mkDerivation rec {
+  pname = "purple-lurch";
+  version = "0.6.7";
+
+  src = fetchFromGitHub {
+    owner = "gkdr";
+    repo = "lurch";
+    rev = "v${version}";
+    sha256 = "029jjqinsfhpv0zgji3sv1cyk54fn9qp176fwy97d1clf0vflxrz";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ pidgin minixml libxml2 sqlite libgcrypt ];
+
+  dontUseCmakeConfigure = true;
+
+  installPhase = ''
+    install -Dm755 -t $out/lib/purple-2 build/lurch.so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/gkdr/lurch";
+    description = "XEP-0384: OMEMO Encryption for libpurple";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ emmanuelrosa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-matrix/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-matrix/default.nix
new file mode 100644
index 000000000000..2862e4df796a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-matrix/default.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, pidgin, json-glib, glib, http-parser, sqlite, olm, libgcrypt } :
+
+stdenv.mkDerivation rec {
+  pname = "purple-matrix-unstable";
+  version = "2019-06-06";
+
+  src = fetchFromGitHub {
+    owner = "matrix-org";
+    repo = "purple-matrix";
+    rev = "4494ba22b479917f0b1f96a3019792d3d75bcff1";
+    sha256 = "1gjm0z4wa5vi9x1xk43rany5pffrwg958n180ahdj9a7sa8a4hpm";
+  };
+
+  NIX_CFLAGS_COMPILE = builtins.toString [
+    # glib-2.62 deprecations
+    "-DGLIB_DISABLE_DEPRECATION_WARNINGS"
+    # override "-O0 -Werror" set by build system
+    "-O3" "-Wno-error"
+  ];
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin json-glib glib http-parser sqlite olm libgcrypt ];
+
+  makeFlags = [
+    "PLUGIN_DIR_PURPLE=${placeholder "out"}/lib/purple-2"
+    "DATA_ROOT_DIR_PURPLE=${placeholder "out"}/share"
+  ];
+
+  buildFlags = [ "CC=cc" ]; # fix build on darwin
+
+  meta = with lib; {
+    homepage = "https://github.com/matrix-org/purple-matrix";
+    description = "Matrix support for Pidgin / libpurple";
+    license = licenses.gpl2;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ symphorien ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-plugin-pack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-plugin-pack/default.nix
new file mode 100644
index 000000000000..edc047c78ba2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-plugin-pack/default.nix
@@ -0,0 +1,19 @@
+{ lib, stdenv, fetchurl, pidgin, intltool, python } :
+
+stdenv.mkDerivation rec {
+  name = "purple-plugin-pack-2.7.0";
+  src = fetchurl {
+    url = "https://bitbucket.org/rekkanoryo/purple-plugin-pack/downloads/${name}.tar.bz2";
+    sha256 = "0g5hmy7fwgjq59j52h9yps28jsjjrfkd4r18gyx6hfd3g3kzbg1b";
+  };
+
+  buildInputs = [ pidgin intltool python ];
+
+  meta = with lib; {
+    homepage = "https://bitbucket.org/rekkanoryo/purple-plugin-pack";
+    description = "Plugin pack for Pidgin 2.x";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ bdimcheff ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-slack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-slack/default.nix
new file mode 100644
index 000000000000..9f5f9a2bda1e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-slack/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchFromGitHub, pidgin, pkg-config }:
+
+stdenv.mkDerivation {
+  pname = "purple-slack-unstable";
+  version = "2020-09-22";
+
+  src = fetchFromGitHub {
+    owner = "dylex";
+    repo = "slack-libpurple";
+    rev = "2e9fa028224b02e29473b1b998fc1e5f487e79ec";
+    sha256 = "1sksqshiwldd32k8jmiflp2pcax31ym6rypr4qa4v5vdn907g80m";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin ];
+
+  PKG_CONFIG_PURPLE_PLUGINDIR = "${placeholder "out"}/lib/purple-2";
+  PKG_CONFIG_PURPLE_DATAROOTDIR = "${placeholder "out"}/share";
+
+  meta = with lib; {
+    homepage = "https://github.com/dylex/slack-libpurple";
+    description = "Slack plugin for Pidgin";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ eyjhb ];
+  };
+}
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-vk-plugin/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-vk-plugin/default.nix
new file mode 100644
index 000000000000..07b38ff3c5a2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-vk-plugin/default.nix
@@ -0,0 +1,31 @@
+{ lib, stdenv, fetchhg, pidgin, cmake, libxml2 } :
+
+let
+  version = "40ddb6d";
+in
+stdenv.mkDerivation {
+  pname = "purple-vk-plugin";
+  inherit version;
+
+  src = fetchhg {
+    url = "https://bitbucket.org/olegoandreev/purple-vk-plugin";
+    rev = version;
+    sha256 = "02p57fgx8ml00cbrb4f280ak2802svz80836dzk9f1zwm1bcr2qc";
+  };
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ pidgin libxml2 ];
+
+  preConfigure = ''
+    sed -i -e 's|DESTINATION.*PURPLE_PLUGIN_DIR}|DESTINATION lib/purple-2|' CMakeLists.txt
+  '';
+
+  cmakeFlags = [ "-DCMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT=1" ];
+
+  meta = {
+    homepage = "https://bitbucket.org/olegoandreev/purple-vk-plugin";
+    description = "Vk (russian social network) plugin for Pidgin / libpurple";
+    license = lib.licenses.gpl3;
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-xmpp-http-upload/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-xmpp-http-upload/default.nix
new file mode 100644
index 000000000000..6ade8e5f19e5
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/purple-xmpp-http-upload/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchgit, pidgin, glib, libxml2 }:
+
+stdenv.mkDerivation {
+  name = "purple-xmpp-upload-2017-12-31";
+
+  src = fetchgit {
+    url = "https://github.com/Junker/purple-xmpp-http-upload";
+    rev = "178096cbfc9df165c2dc1677666439969d212b37";
+    sha256 = "12l9rqlgb4i50xxrfnvwz9sqfk0d3c0m6l09mnvfixqi8illyvlp";
+  };
+
+  buildInputs = [ pidgin glib libxml2 ];
+
+  installPhase = ''
+    install -Dm644 -t $out/lib/purple-2 jabber_http_file_upload.so
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/Junker/purple-xmpp-http-upload";
+    description = "HTTP File Upload plugin for libpurple (XMPP Protocol XEP-0363)";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ emmanuelrosa ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
new file mode 100644
index 000000000000..468d7f64c4cf
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/sipe/default.nix
@@ -0,0 +1,24 @@
+{ lib, stdenv, fetchurl, pidgin, intltool, libxml2, gmime, nss }:
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-sipe";
+  version = "1.25.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/sipe/${pname}-${version}.tar.gz";
+    sha256 = "0262sz00iqxylx0xfyr48xikhiqzr8pg7b4b7vwj5iv4qxpxv939";
+  };
+
+  nativeBuildInputs = [ intltool ];
+  buildInputs = [ pidgin gmime libxml2 nss ];
+  enableParallelBuilding = true;
+
+  postInstall = "ln -s \$out/lib/purple-2 \$out/share/pidgin-sipe";
+
+  meta = with lib; {
+    description = "SIPE plugin for Pidgin IM";
+    homepage = "http://sipe.sourceforge.net/";
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/skype4pidgin/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/skype4pidgin/default.nix
new file mode 100644
index 000000000000..6e14ee1a2b88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/skype4pidgin/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchurl, pkg-config, pidgin, libnotify, gdk-pixbuf, glib, dbus
+, dbus-glib }:
+
+stdenv.mkDerivation rec {
+  name = "skype4pidgin-novas0x2a-20120411-6c53f7c48f";
+  src = fetchurl {
+    url = "https://github.com/novas0x2a/skype4pidgin/tarball/6c53f7c48f";
+    name = "${name}.tar.gz";
+    sha256 = "116jfh5ravaixivqx4a4bz0lbb9c49d5r83nwmripja56zdbpgr0";
+  };
+
+  NIX_CFLAGS_COMPILE = "-I${libnotify}/include/libnotify";
+
+  patchPhase = ''
+    sed -i -e 's/ [^ ]*-gcc/ gcc/' -e 's/-march[^ ]*//' \
+        -e 's/GLIB_CFLAGS =.*/GLIB_CFLAGS=`pkg-config --cflags glib-2.0 gdk-pixbuf-2.0 libnotify purple dbus-glib-1`/' Makefile
+    pkg-config --cflags glib-2.0 gdk-pixbuf-2.0 libnotify
+  '';
+
+  buildPhase  = "make libskype.so libskype_dbus.so";
+
+  installPhase = ''
+    mkdir -p $out/pixmaps/pidgin/protocols/{16,22,48} $out/bin $out/lib/pidgin
+    cp icons/16/skypeout.png $out/pixmaps/pidgin/protocols/16
+    cp icons/22/skypeout.png $out/pixmaps/pidgin/protocols/22
+    cp icons/48/skypeout.png $out/pixmaps/pidgin/protocols/48
+    cp libskype.so libskype_dbus.so $out/lib/pidgin
+  '';
+
+  postInstall = "ln -s \$out/lib/pidgin \$out/share/pidgin-otr";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin libnotify gdk-pixbuf glib dbus dbus-glib ];
+
+  meta = {
+    homepage = "https://github.com/novas0x2a/skype4pidgin";
+    license = lib.licenses.gpl3Plus;
+    description = "Plugin to use a running skype account through pidgin";
+    platforms = lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/telegram-purple/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/telegram-purple/default.nix
new file mode 100644
index 000000000000..527af9ed98db
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/telegram-purple/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchgit, pkg-config, pidgin, libwebp, libgcrypt, gettext } :
+
+let
+  version = "1.3.1";
+in
+stdenv.mkDerivation rec {
+  pname = "telegram-purple";
+  inherit version;
+
+  src = fetchgit {
+    url = "https://github.com/majn/telegram-purple";
+    rev = "v${version}";
+    sha256 = "0p93jpjpx7hszwffzgixw04zkrpsiyzz4za3gfr4j07krc4771fp";
+  };
+
+  NIX_CFLAGS_COMPILE = "-Wno-error=cast-function-type";
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ pidgin libwebp libgcrypt gettext ];
+
+  preConfigure = ''
+    sed -i "s|/etc/telegram-purple/server.tglpub|$out/lib/purple-2/server.tglpub|g" telegram-purple.c
+    echo "#define GIT_COMMIT \"${builtins.substring 0 10 src.rev}\"" > commit.h
+  '';
+
+  installPhase = ''
+    mkdir -p $out/lib/purple-2/
+    cp bin/*.so $out/lib/purple-2/ #*/
+    cp tg-server.tglpub $out/lib/purple-2/server.tglpub
+    mkdir -p $out/pixmaps/pidgin/protocols/{16,22,48}
+    cp imgs/telegram16.png $out/pixmaps/pidgin/protocols/16
+    cp imgs/telegram22.png $out/pixmaps/pidgin/protocols/22
+    cp imgs/telegram48.png $out/pixmaps/pidgin/protocols/48
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/majn/telegram-purple";
+    description = "Telegram for Pidgin / libpurple";
+    license = licenses.gpl2;
+    maintainers = [ maintainers.jagajaga ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/tox-prpl/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/tox-prpl/default.nix
new file mode 100644
index 000000000000..41c6a75310a6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/tox-prpl/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub, libtoxcore, pidgin, autoreconfHook, libsodium }:
+
+stdenv.mkDerivation rec {
+  pname = "tox-prpl";
+  version = "0.5.1";
+
+  src = fetchFromGitHub {
+    owner  = "jin-eld";
+    repo   = "tox-prpl";
+    rev    = "v${version}";
+    sha256 = "0ms367l2f7x83k407c93bmhpyc820f1css61fh2gx4jq13cxqq3p";
+  };
+
+  NIX_LDFLAGS = "-lssp -lsodium";
+
+  postInstall = "mv $out/lib/purple-2 $out/lib/pidgin";
+
+  buildInputs = [ libtoxcore pidgin libsodium ];
+  nativeBuildInputs = [ autoreconfHook ];
+
+  meta = with lib; {
+    homepage = "https://github.com/jin-eld/tox-prpl";
+    description = "Tox plugin for Pidgin / libpurple";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/window-merge/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/window-merge/default.nix
new file mode 100644
index 000000000000..c5437e965ed8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin-plugins/window-merge/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, pidgin } :
+
+stdenv.mkDerivation rec {
+  pname = "pidgin-window-merge";
+  version = "0.3";
+
+  src = fetchurl {
+    url = "https://github.com/downloads/dm0-/window_merge/window_merge-${version}.tar.gz";
+    sha256 = "0cb5rvi7jqvm345g9mlm4wpq0240kcybv81jpw5wlx7hz0lwi478";
+  };
+
+  buildInputs = [ pidgin ];
+
+  meta = with lib; {
+    homepage = "https://github.com/dm0-/window_merge";
+    description = "Pidgin plugin that merges the Buddy List window with a conversation window";
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch
new file mode 100644
index 000000000000..b0758777186a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/add-search-path.patch
@@ -0,0 +1,20 @@
+diff --git a/libpurple/plugin.c b/libpurple/plugin.c
+index 4f2b402..fda9add 100644
+--- a/libpurple/plugin.c
++++ b/libpurple/plugin.c
+@@ -1181,8 +1181,15 @@ purple_plugins_get_handle(void) {
+ void
+ purple_plugins_init(void) {
+ 	void *handle = purple_plugins_get_handle();
++	gchar **paths, **p;
+ 
+ 	purple_plugins_add_search_path(LIBDIR);
++	paths = g_strsplit(g_getenv("PURPLE_PLUGIN_PATH"), ":", -1);
++	if (paths) {
++		for (p = paths; *p; ++p)
++			if (**p) purple_plugins_add_search_path(*p);
++	}
++	g_strfreev(paths);
+ 
+ 	purple_signal_register(handle, "plugin-load",
+ 						 purple_marshal_VOID__POINTER,
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix
new file mode 100644
index 000000000000..65b9c245a383
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/default.nix
@@ -0,0 +1,88 @@
+{ stdenv, fetchurl, makeWrapper, pkg-config, gtk2, gtk2-x11
+, gtkspell2, aspell
+, gst_all_1, startupnotification, gettext
+, perlPackages, libxml2, nss, nspr, farstream
+, libXScrnSaver, ncurses, avahi, dbus, dbus-glib, intltool, libidn
+, lib, python, libICE, libXext, libSM
+, cyrus_sasl ? null
+, openssl ? null
+, gnutls ? null
+, libgcrypt ? null
+, plugins, symlinkJoin
+}:
+
+# FIXME: clean the mess around choosing the SSL library (nss by default)
+
+let unwrapped = stdenv.mkDerivation rec {
+  pname = "pidgin";
+  majorVersion = "2";
+  version = "${majorVersion}.13.0";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/pidgin/${pname}-${version}.tar.bz2";
+    sha256 = "13vdqj70315p9rzgnbxjp9c51mdzf1l4jg1kvnylc4bidw61air7";
+  };
+
+  inherit nss ncurses;
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  NIX_CFLAGS_COMPILE = "-I${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0";
+
+  buildInputs = [
+    aspell startupnotification
+    gst_all_1.gstreamer gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
+    libxml2 nss nspr
+    libXScrnSaver ncurses python
+    avahi dbus dbus-glib intltool libidn
+    libICE libXext libSM cyrus_sasl
+  ]
+  ++ (lib.optional (openssl != null) openssl)
+  ++ (lib.optional (gnutls != null) gnutls)
+  ++ (lib.optional (libgcrypt != null) libgcrypt)
+  ++ (lib.optionals (stdenv.isLinux) [gtk2 gtkspell2 farstream])
+  ++ (lib.optional (stdenv.isDarwin) gtk2-x11);
+
+
+  propagatedBuildInputs = [ pkg-config gettext ]
+    ++ (with perlPackages; [ perl XMLParser ])
+    ++ (lib.optional (stdenv.isLinux) gtk2)
+    ++ (lib.optional (stdenv.isDarwin) gtk2-x11);
+
+  patches = [ ./pidgin-makefile.patch ./add-search-path.patch ];
+
+  configureFlags = [
+    "--with-nspr-includes=${nspr.dev}/include/nspr"
+    "--with-nspr-libs=${nspr.out}/lib"
+    "--with-nss-includes=${nss.dev}/include/nss"
+    "--with-nss-libs=${nss.out}/lib"
+    "--with-ncurses-headers=${ncurses.dev}/include"
+    "--disable-meanwhile"
+    "--disable-nm"
+    "--disable-tcl"
+  ]
+  ++ (lib.optionals (cyrus_sasl != null) [ "--enable-cyrus-sasl=yes" ])
+  ++ (lib.optionals (gnutls != null) ["--enable-gnutls=yes" "--enable-nss=no"])
+  ++ (lib.optionals (stdenv.isDarwin) ["--disable-gtkspell" "--disable-vv"]);
+
+  enableParallelBuilding = true;
+
+  postInstall = ''
+    wrapProgram $out/bin/pidgin \
+      --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+  '';
+
+  meta = with lib; {
+    description = "Multi-protocol instant messaging client";
+    homepage = "http://pidgin.im";
+    license = licenses.gpl2Plus;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.vcunat ];
+  };
+};
+
+in if plugins == [] then unwrapped
+    else import ./wrapper.nix {
+      inherit makeWrapper symlinkJoin plugins;
+      pidgin = unwrapped;
+    }
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch
new file mode 100644
index 000000000000..049d404a8d5f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/pidgin-makefile.patch
@@ -0,0 +1,64 @@
+diff --git a/pidgin/Makefile.am b/pidgin/Makefile.am
+index 84d927b..1467c19 100644
+--- a/pidgin/Makefile.am
++++ b/pidgin/Makefile.am
+@@ -151,6 +151,7 @@ pidgin_LDADD = \
+ 	$(GLIB_LIBS) \
+ 	$(DBUS_LIBS) \
+ 	$(GSTREAMER_LIBS) \
++	$(GSTINTERFACES_LIBS) \
+ 	$(GSTVIDEO_LIBS) \
+ 	$(XSS_LIBS) \
+ 	$(SM_LIBS) \
+@@ -171,6 +172,7 @@ AM_CPPFLAGS = \
+ 	-I$(top_srcdir) \
+ 	$(GLIB_CFLAGS) \
+ 	$(GSTREAMER_CFLAGS) \
++	$(GSTINTERFACES_CFLAGS) \
+ 	$(DEBUG_CFLAGS) \
+ 	$(GTK_CFLAGS) \
+ 	$(DBUS_CFLAGS) \
+diff --git a/pidgin/Makefile.in b/pidgin/Makefile.in
+index 0d51e25..dd5d879 100644
+--- a/pidgin/Makefile.in
++++ b/pidgin/Makefile.in
+@@ -703,6 +703,7 @@ EXTRA_DIST = \
+ @ENABLE_GTK_TRUE@	$(GLIB_LIBS) \
+ @ENABLE_GTK_TRUE@	$(DBUS_LIBS) \
+ @ENABLE_GTK_TRUE@	$(GSTREAMER_LIBS) \
++@ENABLE_GTK_TRUE@	$(GSTINTERFACES_LIBS) \
+ @ENABLE_GTK_TRUE@	$(GSTVIDEO_LIBS) \
+ @ENABLE_GTK_TRUE@	$(XSS_LIBS) \
+ @ENABLE_GTK_TRUE@	$(SM_LIBS) \
+@@ -723,6 +724,7 @@ EXTRA_DIST = \
+ @ENABLE_GTK_TRUE@	-I$(top_srcdir) \
+ @ENABLE_GTK_TRUE@	$(GLIB_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(GSTREAMER_CFLAGS) \
++@ENABLE_GTK_TRUE@	$(GSTINTERFACES_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(DEBUG_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(GTK_CFLAGS) \
+ @ENABLE_GTK_TRUE@	$(DBUS_CFLAGS) \
+diff --git a/pidgin/plugins/Makefile.am b/pidgin/plugins/Makefile.am
+index 3bb8c22..6d1e869 100644
+--- a/pidgin/plugins/Makefile.am
++++ b/pidgin/plugins/Makefile.am
+@@ -145,6 +145,7 @@ AM_CPPFLAGS = \
+ 	$(GTK_CFLAGS) \
+ 	$(UNITY_CFLAGS) \
+ 	$(GSTREAMER_CFLAGS) \
++	$(GSTINTERFACES_CFLAGS) \
+ 	$(PLUGIN_CFLAGS)
+ 
+ #
+diff --git a/pidgin/plugins/Makefile.in b/pidgin/plugins/Makefile.in
+index 82a34aa..1f7db00 100644
+--- a/pidgin/plugins/Makefile.in
++++ b/pidgin/plugins/Makefile.in
+@@ -781,6 +781,7 @@ AM_CPPFLAGS = \
+ 	$(GTK_CFLAGS) \
+ 	$(UNITY_CFLAGS) \
+ 	$(GSTREAMER_CFLAGS) \
++	$(GSTINTERFACES_CFLAGS) \
+ 	$(PLUGIN_CFLAGS)
+ 
+ 
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
new file mode 100644
index 000000000000..095f838fe981
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pidgin/wrapper.nix
@@ -0,0 +1,20 @@
+{ symlinkJoin, pidgin, makeWrapper, plugins }:
+
+let
+extraArgs = map (x: x.wrapArgs or "") plugins;
+in symlinkJoin {
+  name = "pidgin-with-plugins-${pidgin.version}";
+
+  paths = [ pidgin ] ++ plugins;
+
+  buildInputs = [ makeWrapper ];
+
+  postBuild = ''
+    wrapProgram $out/bin/pidgin \
+      --suffix-each PURPLE_PLUGIN_PATH ':' "$out/lib/purple-${pidgin.majorVersion} $out/lib/pidgin" \
+      ${toString extraArgs}
+    wrapProgram $out/bin/finch \
+      --suffix-each PURPLE_PLUGIN_PATH ':' "$out/lib/purple-${pidgin.majorVersion}" \
+      ${toString extraArgs}
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix
new file mode 100644
index 000000000000..df6e675fecb6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/poezio/default.nix
@@ -0,0 +1,30 @@
+{ lib, buildPythonApplication, fetchFromGitHub, pythonOlder
+, pytest, aiodns, slixmpp, pyinotify, potr, mpd2, cffi, pkg-config, setuptools }:
+buildPythonApplication rec {
+    pname = "poezio";
+    version = "0.13.1";
+
+    disabled = pythonOlder "3.4";
+
+    checkInputs = [ pytest ];
+    propagatedBuildInputs = [ aiodns slixmpp pyinotify potr mpd2 cffi setuptools ];
+    nativeBuildInputs = [ pkg-config ];
+
+    src = fetchFromGitHub {
+      owner = pname;
+      repo = pname;
+      rev = "v${version}";
+      sha256 = "041y61pcbdb86s04qwp8s1g6bp84yskc7vdizwpi2hz18y01x5fy";
+    };
+
+    checkPhase = ''
+      pytest
+    '';
+
+    meta = with lib; {
+      description = "Free console XMPP client";
+      homepage = "https://poez.io";
+      license = licenses.mit;
+      maintainers = [ maintainers.lsix ];
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pond/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pond/default.nix
new file mode 100644
index 000000000000..4c059cb20d83
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pond/default.nix
@@ -0,0 +1,33 @@
+{ lib, stdenv, buildGoPackage, trousers, dclxvi, wrapGAppsHook, pkg-config, gtk3, gtkspell3,
+  fetchgit }:
+
+let
+  gui = true; # Might be implemented with nixpkgs config.
+in
+buildGoPackage rec {
+  pname = "pond";
+  version = "20150830-${lib.strings.substring 0 7 rev}";
+  rev = "bce6e0dc61803c23699c749e29a83f81da3c41b2";
+
+  goPackagePath = "github.com/agl/pond";
+
+  src = fetchgit {
+    inherit rev;
+    url = "https://github.com/agl/pond";
+    sha256 = "1dmgbg4ak3jkbgmxh0lr4hga1nl623mh7pvsgby1rxl4ivbzwkh4";
+  };
+
+  goDeps = ./deps.nix;
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ trousers gtk3 gtkspell3 ]
+    ++ lib.optional stdenv.hostPlatform.isx86_64 dclxvi
+    ++ lib.optionals gui [ wrapGAppsHook ];
+  buildFlags = lib.optionals (!gui) [ "-tags" "nogui" ];
+  excludedPackages = "\\(appengine\\|bn256cgo\\)";
+  postPatch = lib.optionalString stdenv.hostPlatform.isx86_64 ''
+    grep -r 'bn256' | awk -F: '{print $1}' | xargs sed -i \
+      -e "s,golang.org/x/crypto/bn256,github.com/agl/pond/bn256cgo,g" \
+      -e "s,bn256\.,bn256cgo.,g"
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pond/deps.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pond/deps.nix
new file mode 100644
index 000000000000..55850f0a89c2
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pond/deps.nix
@@ -0,0 +1,47 @@
+[
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "575fdbe86e5dd89229707ebec0575ce7d088a4a6";
+      sha256 = "1kgv1mkw9y404pk3lcwbs0vgl133mwyp294i18jg9hp10s5d56xa";
+    };
+  }
+  {
+    goPackagePath = "github.com/agl/ed25519";
+    fetch = {
+      type = "git";
+      url = "https://github.com/agl/ed25519";
+      rev = "278e1ec8e8a6e017cd07577924d6766039146ced";
+      sha256 = "165d89cc6dl28j4hkn86pny0jz3sa6hamzdvpvwdj4iha3x6lzc9";
+    };
+  }
+  {
+    goPackagePath = "github.com/golang/protobuf";
+    fetch = {
+      type = "git";
+      url = "https://github.com/golang/protobuf";
+      rev = "59b73b37c1e45995477aae817e4a653c89a858db";
+      sha256 = "1dx22jvhvj34ivpr7gw01fncg9yyx35mbpal4mpgnqka7ajmgjsa";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "62ac18b461605b4be188bbc7300e9aa2bc836cd4";
+      sha256 = "0lwwvbbwbf3yshxkfhn6z20gd45dkvnmw2ms36diiy34krgy402p";
+    };
+  }
+  {
+    goPackagePath = "github.com/agl/go-gtk";
+    fetch = {
+      type = "git";
+      url = "https://github.com/agl/go-gtk";
+      rev = "91c1edb38c241d73129e6b098ca1c9fa83abfc15";
+      sha256 = "156ixlhakpqgyp35rsvmndrqz8aggv5bcmzg9ynpri3b9j6kim4d";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix
new file mode 100644
index 000000000000..c373d23948b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/default.nix
@@ -0,0 +1,83 @@
+{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, glib, openssl
+, glibcLocales, expect, ncurses, libotr, curl, readline, libuuid
+, cmocka, libmicrohttpd, expat, sqlite, libmesode, autoconf-archive
+
+, autoAwaySupport ? true,       libXScrnSaver ? null, libX11 ? null
+, notifySupport ? true,         libnotify ? null, gdk-pixbuf ? null
+, traySupport ? true,           gnome2 ? null
+, pgpSupport ? true,            gpgme ? null
+, pythonPluginSupport ? true,   python ? null
+, omemoSupport ? true,          libsignal-protocol-c ? null, libgcrypt ? null
+}:
+
+assert autoAwaySupport     -> libXScrnSaver != null && libX11 != null;
+assert notifySupport       -> libnotify != null && gdk-pixbuf != null;
+assert traySupport         -> gnome2 != null;
+assert pgpSupport          -> gpgme != null;
+assert pythonPluginSupport -> python != null;
+assert omemoSupport        -> libsignal-protocol-c != null && libgcrypt != null;
+
+with lib;
+
+stdenv.mkDerivation rec {
+  pname = "profanity";
+  version = "0.10.0";
+
+  src = fetchFromGitHub {
+    owner = "profanity-im";
+    repo = "profanity";
+    rev = version;
+    sha256 = "0a9rzhnivxcr8v02xxzrbck7pvvv4c66ap2zy0gzxhri5p8ac03r";
+  };
+
+  patches = [
+    ./patches/packages-osx.patch
+  ];
+
+  enableParallelBuilding = true;
+
+  nativeBuildInputs = [
+    autoreconfHook autoconf-archive glibcLocales pkg-config
+  ];
+
+  buildInputs = [
+    expect readline libuuid glib openssl expat ncurses libotr
+    curl libmesode cmocka libmicrohttpd sqlite
+  ] ++ optionals autoAwaySupport     [ libXScrnSaver libX11 ]
+    ++ optionals notifySupport       [ libnotify gdk-pixbuf ]
+    ++ optionals traySupport         [ gnome2.gtk ]
+    ++ optionals pgpSupport          [ gpgme ]
+    ++ optionals pythonPluginSupport [ python ]
+    ++ optionals omemoSupport        [ libsignal-protocol-c libgcrypt ];
+
+  # Enable feature flags, so that build fail if libs are missing
+  configureFlags = [ "--enable-c-plugins" "--enable-otr" ]
+    ++ optionals notifySupport       [ "--enable-notifications" ]
+    ++ optionals traySupport         [ "--enable-icons" ]
+    ++ optionals pgpSupport          [ "--enable-pgp" ]
+    ++ optionals pythonPluginSupport [ "--enable-python-plugins" ]
+    ++ optionals omemoSupport        [ "--enable-omemo" ];
+
+  preAutoreconf = ''
+    mkdir m4
+  '';
+
+  doCheck = true;
+
+  LC_ALL = "en_US.utf8";
+
+  meta = {
+    description = "A console based XMPP client";
+    longDescription = ''
+      Profanity is a console based XMPP client written in C using ncurses and
+      libstrophe, inspired by Irssi.
+    '';
+    homepage = "http://www.profanity.im/";
+    license = licenses.gpl3Plus;
+    platforms = platforms.unix;
+    changelog = "https://github.com/profanity-im/profanity/releases/tag/${version}";
+    downloadPage = "https://github.com/profanity-im/profanity/releases/";
+    maintainers = [ maintainers.devhell ];
+    updateWalker = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch
new file mode 100644
index 000000000000..796ec6b0a615
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/profanity/patches/packages-osx.patch
@@ -0,0 +1,13 @@
+diff --git a/configure.ac b/configure.ac
+index 5c00aca..eb78060 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -23,7 +23,6 @@ PLATFORM="unknown"
+ AS_CASE([$host_os],
+     [freebsd*], [PLATFORM="freebsd"],
+     [openbsd*], [PLATFORM="openbsd"],
+-    [darwin*], [PLATFORM="osx"],
+     [cygwin], [PLATFORM="cygwin"],
+     [PLATFORM="nix"])
+ 
+
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix
new file mode 100644
index 000000000000..1112a3215c9d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/psi-plus/default.nix
@@ -0,0 +1,37 @@
+{ mkDerivation, lib, fetchFromGitHub, cmake
+, qtbase, qtmultimedia, qtx11extras, qttools, qtwebengine
+, libidn, qca-qt5, libsecret, libXScrnSaver, hunspell
+, libgcrypt, libotr, html-tidy, libgpgerror, libsignal-protocol-c
+}:
+
+mkDerivation rec {
+  pname = "psi-plus";
+  version = "1.4.1473";
+
+  src = fetchFromGitHub {
+    owner = "psi-plus";
+    repo = "psi-plus-snapshots";
+    rev = version;
+    sha256 = "03f28zwbjn6fnsm0fqg8lmc11rpfdfvzjf7k7xydc3lzy8pxbds5";
+  };
+
+  cmakeFlags = [
+    "-DENABLE_PLUGINS=ON"
+  ];
+
+  nativeBuildInputs = [ cmake qttools ];
+
+  buildInputs = [
+    qtbase qtmultimedia qtx11extras qtwebengine
+    libidn qca-qt5 libsecret libXScrnSaver hunspell
+    libgcrypt libotr html-tidy libgpgerror libsignal-protocol-c
+  ];
+
+  meta = with lib; {
+    homepage = "https://sourceforge.net/projects/psiplus/";
+    description = "XMPP (Jabber) client";
+    maintainers = with maintainers; [ orivej misuzu ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix
new file mode 100644
index 000000000000..62b6c8f8e59c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/default.nix
@@ -0,0 +1,32 @@
+{ lib, mkDerivation, fetchFromGitHub, cmake
+, qtbase, qtmultimedia, qtx11extras, qttools, qtwebengine
+, libidn, qca-qt5, libXScrnSaver, hunspell
+}:
+
+mkDerivation rec {
+  pname = "psi";
+  version = "1.5";
+  src = fetchFromGitHub {
+    owner = "psi-im";
+    repo = pname;
+    rev = version;
+    sha256 = "hXDZODHl14kimRlMQ1XjISQ2kk9NS78axVN3U21wkuM=";
+    fetchSubmodules = true;
+  };
+  patches = [
+    ./fix-cmake-hunspell-1.7.patch
+  ];
+  nativeBuildInputs = [ cmake qttools ];
+  buildInputs = [
+    qtbase qtmultimedia qtx11extras qtwebengine
+    libidn qca-qt5 libXScrnSaver hunspell
+  ];
+
+  meta = with lib; {
+    homepage = "https://psi-im.org";
+    description = "An XMPP (Jabber) client";
+    maintainers = [ maintainers.raskin ];
+    license = licenses.gpl2;
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch
new file mode 100644
index 000000000000..7d5711a6f2bc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/psi/fix-cmake-hunspell-1.7.patch
@@ -0,0 +1,12 @@
+diff --git a/cmake/modules/FindHunspell.cmake b/cmake/modules/FindHunspell.cmake
+index a2d180b3..3a5aef3a 100644
+--- a/cmake/modules/FindHunspell.cmake
++++ b/cmake/modules/FindHunspell.cmake
+@@ -64,6 +64,7 @@ set(HUNSPELL_NAMES
+ 	hunspell-1.4
+ 	hunspell-1.5
+ 	hunspell-1.6
++	hunspell-1.7
+ 	libhunspell${d}
+ )
+ find_library(
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/pybitmessage/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/pybitmessage/default.nix
new file mode 100644
index 000000000000..279eea2f2d7b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/pybitmessage/default.nix
@@ -0,0 +1,40 @@
+{ lib, fetchFromGitHub, python2Packages, openssl }:
+
+python2Packages.buildPythonApplication rec {
+  pname = "pybitmessage";
+
+  version = "0.6.3.2";
+
+  src = fetchFromGitHub {
+    owner = "bitmessage";
+    repo = "PyBitmessage";
+    rev = version;
+    sha256 = "1lmhbpwsqh1v93krlqqhafw2pc3y0qp8zby186yllbph6s8kdp35";
+  };
+
+  propagatedBuildInputs = with python2Packages; [ msgpack pyqt4 numpy pyopencl setuptools ] ++ [ openssl ];
+
+  preConfigure = ''
+    # Remove interaction and misleading output
+    substituteInPlace setup.py \
+      --replace "nothing = raw_input()" pass \
+      --replace 'print "It looks like building the package failed.\n" \' pass \
+      --replace '    "You may be missing a C++ compiler and the OpenSSL headers."' pass \
+      --replace 'msgpack-python' 'msgpack'
+
+    substituteInPlace src/pyelliptic/openssl.py \
+      --replace "libdir.append(find_library('ssl'))" "libdir.append('${openssl.out}/lib/libssl.so')"
+
+    substituteInPlace src/depends.py \
+      --replace "ctypes.util.find_library('ssl')" "'${openssl.out}/lib/libssl.so'"
+
+  '';
+
+  meta = with lib; {
+    homepage = "https://bitmessage.org/";
+    description = "The official Bitmessage client";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jgillich ];
+    platforms = with platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix
new file mode 100644
index 000000000000..b91db31f89a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/qtox/default.nix
@@ -0,0 +1,45 @@
+{ lib, stdenv, mkDerivation, fetchFromGitHub, cmake, pkg-config, perl
+, libtoxcore, libpthreadstubs, libXdmcp, libXScrnSaver
+, qtbase, qtsvg, qttools, qttranslations
+, ffmpeg_3, filter-audio, libexif, libsodium, libopus
+, libvpx, openal, pcre, qrencode, sqlcipher
+, AVFoundation }:
+
+mkDerivation rec {
+  pname = "qtox";
+  version = "1.17.3";
+
+  src = fetchFromGitHub {
+    owner = "qTox";
+    repo = "qTox";
+    rev = "v${version}";
+    sha256 = "19xgw9bqirxbgvj5cdh20qxh61pkwk838lq1l78n6py1qrs7z5wp";
+  };
+
+  buildInputs = [
+    libtoxcore
+    libpthreadstubs libXdmcp libXScrnSaver
+    qtbase qtsvg qttranslations
+    ffmpeg_3 filter-audio libexif libopus libsodium
+    libvpx openal pcre qrencode sqlcipher
+  ] ++ lib.optionals stdenv.isDarwin [ AVFoundation] ;
+
+  nativeBuildInputs = [ cmake pkg-config qttools ]
+    ++ lib.optionals stdenv.isDarwin [ perl ];
+
+  cmakeFlags = [
+    "-DGIT_DESCRIBE=v${version}"
+    "-DENABLE_STATUSNOTIFIER=False"
+    "-DENABLE_GTK_SYSTRAY=False"
+    "-DENABLE_APPINDICATOR=False"
+    "-DTIMESTAMP=1"
+  ];
+
+  meta = with lib; {
+    description = "Qt Tox client";
+    homepage = "https://tox.chat";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ akaWolf peterhoeg ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix
new file mode 100644
index 000000000000..f918cbdc2b89
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/quaternion/default.nix
@@ -0,0 +1,47 @@
+{ mkDerivation, stdenv, lib, fetchFromGitHub, cmake
+, qtbase, qtquickcontrols, qtquickcontrols2, qtkeychain, qtmultimedia, qttools
+, libquotient, libsecret
+}:
+
+mkDerivation rec {
+  pname = "quaternion";
+  version = "0.0.9.5-beta2";
+
+  src = fetchFromGitHub {
+    owner = "QMatrixClient";
+    repo = "Quaternion";
+    rev = version;
+    sha256 = "sha256-K4SMB5kL0YO2OIeNUu4hWqU4E4n4vZDRRsJVYmCZqvM=";
+  };
+
+  buildInputs = [
+    qtbase
+    qtmultimedia
+    qtquickcontrols
+    qtquickcontrols2
+    qtkeychain
+    libquotient
+    libsecret
+  ];
+
+  nativeBuildInputs = [ cmake qttools ];
+
+  postInstall = if stdenv.isDarwin then ''
+    mkdir -p $out/Applications
+    mv $out/bin/quaternion.app $out/Applications
+    rmdir $out/bin || :
+  '' else ''
+    substituteInPlace $out/share/applications/com.github.quaternion.desktop \
+      --replace 'Exec=quaternion' "Exec=$out/bin/quaternion"
+  '';
+
+  meta = with lib; {
+    description =
+      "Cross-platform desktop IM client for the Matrix protocol";
+    homepage = "https://matrix.org/docs/projects/client/quaternion.html";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (qtbase.meta) platforms;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix
new file mode 100644
index 000000000000..5525805c2e4c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, callPackage, fetchurl, lib }:
+
+let
+  mkRambox = opts: callPackage (import ./rambox.nix opts) { };
+in mkRambox rec {
+  pname = "rambox";
+  version = "0.7.7";
+
+  src = {
+    x86_64-linux = fetchurl {
+      url = "https://github.com/ramboxapp/community-edition/releases/download/${version}/Rambox-${version}-linux-x86_64.AppImage";
+      sha256 = "0f82hq0dzcjicdz6lkzj8889y100yqciqrwh8wjjy9pxkhjcdini";
+    };
+    i686-linux = fetchurl {
+      url = "https://github.com/ramboxapp/community-edition/releases/download/${version}/Rambox-${version}-linux-i386.AppImage";
+      sha256 = "1nhgqjha10jvyf9nsghvlkibg7byj8qz140639ygag9qlpd52rfs";
+    };
+  }.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
+
+  meta = with lib; {
+    description = "Free and Open Source messaging and emailing app that combines common web applications into one";
+    homepage = "https://rambox.pro";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gnidorah ma27 ];
+    platforms = ["i686-linux" "x86_64-linux"];
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/pro.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/pro.nix
new file mode 100644
index 000000000000..827cac7c2970
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/pro.nix
@@ -0,0 +1,25 @@
+{ stdenv, callPackage, fetchurl, lib }:
+
+let
+  mkRambox = opts: callPackage (import ./rambox.nix opts) { };
+in mkRambox rec {
+  pname = "rambox-pro";
+  version = "1.5.0";
+
+  desktopName = "Rambox Pro";
+
+  src = {
+    x86_64-linux = fetchurl {
+      url = "https://github.com/ramboxapp/download/releases/download/v${version}/RamboxPro-${version}-linux-x64.AppImage";
+      sha256 = "1g7lrjm8yxklqpc2mp8gy0g61wfilr15dl80r3sh6pa5b4k5spir";
+    };
+  }.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
+
+  meta = with lib; {
+    description = "Messaging and emailing app that combines common web applications into one";
+    homepage = "https://rambox.pro";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ chrisaw ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/rambox.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/rambox.nix
new file mode 100644
index 000000000000..56930f561c78
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/rambox.nix
@@ -0,0 +1,30 @@
+{ pname, version, src, meta, desktopName ? "Rambox" }:
+
+{ appimageTools, lib, fetchurl, makeDesktopItem }:
+
+let
+  name = "${pname}-${version}";
+
+  desktopItem = (makeDesktopItem {
+    inherit desktopName;
+    name = pname;
+    exec = pname;
+    icon = pname;
+    type = "Application";
+    categories = "Network;";
+  });
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+in appimageTools.wrapType2 rec {
+  inherit name src meta;
+
+  extraInstallCommands = ''
+    mkdir -p $out/share/applications $out/share/icons/hicolor/256x256/apps
+    # CE uses rambox-<version>, Pro uses rambox
+    mv $out/bin/rambox* $out/bin/${pname}
+    install -Dm644 ${appimageContents}/usr/share/icons/hicolor/256x256/apps/rambox*.png $out/share/icons/hicolor/256x256/apps/${pname}.png
+    install -Dm644 ${desktopItem}/share/applications/* $out/share/applications
+  '';
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix
new file mode 100644
index 000000000000..1851a60216b9
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ratox/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchgit, libtoxcore
+, conf ? null }:
+
+with lib;
+
+let
+  configFile = optionalString (conf!=null) (builtins.toFile "config.h" conf);
+
+in stdenv.mkDerivation {
+  name = "ratox-0.4.20180303";
+
+  src = fetchgit {
+    url = "git://git.2f30.org/ratox.git";
+    rev = "269f7f97fb374a8f9c0b82195c21de15b81ddbbb";
+    sha256 = "0bpn37h8jvsqd66fkba8ky42nydc8acawa5x31yxqlxc8mc66k74";
+  };
+
+  buildInputs = [ libtoxcore ];
+
+  preConfigure = ''
+    substituteInPlace config.mk \
+      --replace '-lsodium -lopus -lvpx ' ""
+
+    ${optionalString (conf!=null) "cp ${configFile} config.def.h"}
+  '';
+
+  makeFlags = [ "PREFIX=$(out)" ];
+
+  meta = {
+    description = "FIFO based tox client";
+    homepage = "http://ratox.2f30.org/";
+    license = licenses.isc;
+    maintainers = with maintainers; [ ehmry ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix
new file mode 100644
index 000000000000..97d8d39f6567
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ricochet/default.nix
@@ -0,0 +1,59 @@
+{ mkDerivation, lib, fetchurl, pkg-config, makeDesktopItem
+, qtbase, qttools, qtmultimedia, qtquick1, qtquickcontrols
+, openssl, protobuf, qmake
+}:
+
+mkDerivation rec {
+  pname = "ricochet";
+  version = "1.1.4";
+
+  src = fetchurl {
+    url = "https://github.com/ricochet-im/ricochet/archive/v${version}.tar.gz";
+    sha256 = "1kfj42ksvj7axc809lb8siqzj5hck2pib427b63a3ipnqc5h1faf";
+  };
+
+  desktopItem = makeDesktopItem {
+    name = "ricochet";
+    exec = "ricochet";
+    icon = "ricochet";
+    desktopName = "Ricochet";
+    genericName = "Ricochet";
+    comment = meta.description;
+    categories = "Office;Email;";
+  };
+
+  buildInputs = [
+    qtbase qttools qtmultimedia qtquick1 qtquickcontrols
+    openssl protobuf
+  ];
+
+  nativeBuildInputs = [ pkg-config qmake ];
+
+  preConfigure = ''
+    export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE $(pkg-config --cflags openssl)"
+  '';
+
+  qmakeFlags = [ "DEFINES+=RICOCHET_NO_PORTABLE" ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp ricochet $out/bin
+
+    mkdir -p $out/share/applications
+    cp $desktopItem/share/applications"/"* $out/share/applications
+
+    mkdir -p $out/share/pixmaps
+    cp icons/ricochet.png $out/share/pixmaps/ricochet.png
+  '';
+
+  # RCC: Error in 'translation/embedded.qrc': Cannot find file 'ricochet_en.qm'
+  enableParallelBuilding = false;
+
+  meta = with lib; {
+    description = "Anonymous peer-to-peer instant messaging";
+    homepage = "https://ricochet.im";
+    license = licenses.bsd3;
+    maintainers = [ maintainers.codsl maintainers.jgillich maintainers.np ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix
new file mode 100644
index 000000000000..bad54f455b08
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/default.nix
@@ -0,0 +1,150 @@
+{ lib, stdenv
+, fetchgit
+, which
+, autoreconfHook
+, pkg-config
+, automake
+, libtool
+, pjsip
+, libyamlcpp
+, alsaLib
+, libpulseaudio
+, libsamplerate
+, libsndfile
+, dbus
+, dbus_cplusplus
+, ffmpeg_3
+, udev
+, pcre
+, gsm
+, speex
+, boost
+, opendht
+, msgpack
+, gnutls
+, zlib
+, jsoncpp
+, xorg
+, libargon2
+, cryptopp
+, openssl
+, perl
+, python3
+, libupnp
+, speexdsp
+, fetchFromGitHub
+, cmake
+, asio
+}:
+
+let
+  myPython = python3.withPackages (ps: with ps; [
+    pygobject3
+    dbus-python
+  ]);
+
+  src = fetchgit {
+    url = "https://gitlab.savoirfairelinux.com/ring/ring-daemon.git";
+    rev = "006b8dc7be08fe9beb68709af71004e7bc1ceb5c";
+    sha256 = "0ih9g0rismrhx6nqcy3jqfbcs166grg0shnfmrnmykl9h0xy8z47";
+  };
+
+  patchdir = "${src}/contrib/src";
+
+  restbed = import ./restbed.nix {
+    inherit stdenv lib fetchFromGitHub cmake asio openssl;
+    patches = [
+    "${patchdir}/restbed/CMakeLists.patch"
+    "${patchdir}/restbed/strand.patch"
+    "${patchdir}/restbed/uri_cpp.patch"
+    "${patchdir}/restbed/dns-resolution-error.patch"
+    "${patchdir}/restbed/string.patch"
+    ];
+  };
+
+  pjsip' = lib.overrideDerivation pjsip (old: {
+    patches = [
+      "${patchdir}/pjproject/gnutls.patch"
+      ./notestsapps.patch # this one had to be modified
+      "${patchdir}/pjproject/fix_base64.patch"
+      "${patchdir}/pjproject/ipv6.patch"
+      "${patchdir}/pjproject/ice_config.patch"
+      "${patchdir}/pjproject/multiple_listeners.patch"
+      "${patchdir}/pjproject/pj_ice_sess.patch"
+      "${patchdir}/pjproject/fix_turn_fallback.patch"
+      "${patchdir}/pjproject/fix_ioqueue_ipv6_sendto.patch"
+      "${patchdir}/pjproject/add_dtls_transport.patch"
+    ];
+    CFLAGS = "-g -DPJ_ICE_MAX_CAND=256 -DPJ_ICE_MAX_CHECKS=150 -DPJ_ICE_COMP_BITS=2 -DPJ_ICE_MAX_STUN=3 -DPJSIP_MAX_PKT_LEN=8000";
+  });
+in
+stdenv.mkDerivation {
+  pname = "ring-daemon";
+  version = "2017-07-11";
+
+  inherit src;
+
+  nativeBuildInputs = [
+    which
+    autoreconfHook
+    automake
+    libtool
+    pkg-config
+  ];
+
+  buildInputs = [
+    pjsip'
+    libyamlcpp
+    alsaLib
+    libpulseaudio
+    libsamplerate
+    libsndfile
+    dbus
+    dbus_cplusplus
+    ffmpeg_3
+    udev
+    pcre
+    gsm
+    speex
+    boost
+    opendht
+    msgpack
+    gnutls
+    zlib
+    jsoncpp
+    restbed
+    xorg.libX11
+    libargon2
+    cryptopp
+    openssl
+    perl
+    libupnp
+    speexdsp
+  ];
+
+  postInstall = ''
+    mkdir $out/bin
+    ln -s $out/lib/ring/dring $out/bin/dring
+    cp -R ./tools/dringctrl/ $out/
+    substitute ./tools/dringctrl/dringctrl.py $out/dringctrl/dringctrl.py \
+      --replace '#!/usr/bin/env python3' "#!${myPython}/bin/python3"
+    chmod +x $out/dringctrl/dringctrl.py
+    ln -s $out/dringctrl/dringctrl.py $out/bin/dringctrl.py
+  '';
+
+  meta = with lib; {
+    description = "A Voice-over-IP software phone";
+    longDescription = ''
+      As the SIP/audio daemon and the user interface are separate processes, it
+      is easy to provide different user interfaces. GNU Ring comes with various
+      graphical user interfaces and even scripts to control the daemon from the
+      shell.
+    '';
+    homepage = "https://ring.cx";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ taeer olynch ];
+    platforms = platforms.linux;
+    # pjsip' fails to compile with the supplied patch set, see: https://hydra.nixos.org/build/68667921/nixlog/4
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch
new file mode 100644
index 000000000000..842060935b04
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/notestsapps.patch
@@ -0,0 +1,106 @@
+/* diff --git a/Makefile b/Makefile */
+/* index 33a4e6b..a486eb7 100644 */
+/* --- a/Makefile */
+/* +++ b/Makefile */
+/* @@ -4,7 +4,7 @@ include build/host-$(HOST_NAME).mak */
+/*  include version.mak */
+ 
+/*  LIB_DIRS = pjlib/build pjlib-util/build pjnath/build third_party/build pjmedia/build pjsip/build */
+/* -DIRS = $(LIB_DIRS) pjsip-apps/build $(EXTRA_DIRS) */
+/* +DIRS = $(LIB_DIRS) $(EXTRA_DIRS) */
+ 
+/*  ifdef MINSIZE */
+/*  MAKE_FLAGS := MINSIZE=1 */
+diff --git a/pjlib-util/build/Makefile b/pjlib-util/build/Makefile
+index cb601cb..862a78a 100644
+--- a/pjlib-util/build/Makefile
++++ b/pjlib-util/build/Makefile
+@@ -54,7 +54,6 @@ export UTIL_TEST_OBJS += xml.o encryption.o stun.o resolver_test.o test.o \
+ export UTIL_TEST_CFLAGS += $(_CFLAGS)
+ export UTIL_TEST_CXXFLAGS += $(_CXXFLAGS)
+ export UTIL_TEST_LDFLAGS += $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS)
+-export UTIL_TEST_EXE:=pjlib-util-test-$(TARGET_NAME)$(HOST_EXE)
+ 
+ 	
+ export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
+diff --git a/pjlib/build/Makefile b/pjlib/build/Makefile
+index 1e64950..a75fa65 100644
+--- a/pjlib/build/Makefile
++++ b/pjlib/build/Makefile
+@@ -56,7 +56,6 @@ export TEST_OBJS += activesock.o atomic.o echo_clt.o errno.o exception.o \
+ export TEST_CFLAGS += $(_CFLAGS)
+ export TEST_CXXFLAGS += $(_CXXFLAGS)
+ export TEST_LDFLAGS += $(PJLIB_LDLIB) $(_LDFLAGS)
+-export TEST_EXE := pjlib-test-$(TARGET_NAME)$(HOST_EXE)
+ 
+ 
+ export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
+diff --git a/pjmedia/build/Makefile b/pjmedia/build/Makefile
+index 8012cb7..2ca283a 100644
+--- a/pjmedia/build/Makefile
++++ b/pjmedia/build/Makefile
+@@ -165,7 +165,6 @@ export PJMEDIA_TEST_LDFLAGS += $(PJMEDIA_CODEC_LDLIB) \
+ 			       $(PJLIB_UTIL_LDLIB) \
+ 			       $(PJNATH_LDLIB) \
+ 			       $(_LDFLAGS)
+-export PJMEDIA_TEST_EXE:=pjmedia-test-$(TARGET_NAME)$(HOST_EXE)
+ 
+ 	
+ export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
+diff --git a/pjnath/build/Makefile b/pjnath/build/Makefile
+index 1bc08b5..109f79b 100644
+--- a/pjnath/build/Makefile
++++ b/pjnath/build/Makefile
+@@ -54,7 +54,6 @@ export PJNATH_TEST_OBJS += ice_test.o stun.o sess_auth.o server.o concur_test.o
+ export PJNATH_TEST_CFLAGS += $(_CFLAGS)
+ export PJNATH_TEST_CXXFLAGS += $(_CXXFLAGS)
+ export PJNATH_TEST_LDFLAGS += $(PJNATH_LDLIB) $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS)
+-export PJNATH_TEST_EXE:=pjnath-test-$(TARGET_NAME)$(HOST_EXE)
+ 
+ 	
+ ###############################################################################
+@@ -65,7 +64,6 @@ export PJTURN_CLIENT_OBJS += client_main.o
+ export PJTURN_CLIENT_CFLAGS += $(_CFLAGS)
+ export PJTURN_CLIENT_CXXFLAGS += $(_CXXFLAGS)
+ export PJTURN_CLIENT_LDFLAGS += $(PJNATH_LDLIB) $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS)
+-export PJTURN_CLIENT_EXE:=pjturn-client-$(TARGET_NAME)$(HOST_EXE)
+ 
+ ###############################################################################
+ # Defines for building TURN server application
+@@ -76,7 +74,6 @@ export PJTURN_SRV_OBJS += allocation.o auth.o listener_udp.o \
+ export PJTURN_SRV_CFLAGS += $(_CFLAGS)
+ export PJTURN_SRV_CXXFLAGS += $(_CXXFLAGS)
+ export PJTURN_SRV_LDFLAGS += $(PJNATH_LDLIB) $(PJLIB_UTIL_LDLIB) $(PJLIB_LDLIB) $(_LDFLAGS)
+-export PJTURN_SRV_EXE:=pjturn-srv-$(TARGET_NAME)$(HOST_EXE)
+ 
+ 	
+ 	
+diff --git a/pjsip/build/Makefile b/pjsip/build/Makefile
+index d2a5c2a..7e2ec60 100644
+--- a/pjsip/build/Makefile
++++ b/pjsip/build/Makefile
+@@ -140,7 +140,7 @@ export PJSUA2_LIB_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
+ 			   account.o endpoint.o json.o persistent.o types.o \
+ 			   siptypes.o call.o presence.o media.o
+ export PJSUA2_LIB_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS)
+-export PJSUA2_LIB_CXXFLAGS = $(PJSUA2_LIB_CFLAGS) 
++export PJSUA2_LIB_CXXFLAGS = $(_CXXFLAGS) $(PJ_VIDEO_CFLAGS) 
+ export PJSUA2_LIB_LDFLAGS += $(PJSUA_LIB_LDLIB) \
+ 			     $(PJSIP_UA_LDLIB) \
+ 			     $(PJSIP_SIMPLE_LDLIB) \
+@@ -165,7 +165,6 @@ export PJSUA2_TEST_OBJS += $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \
+ export PJSUA2_TEST_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS)
+ export PJSUA2_TEST_CXXFLAGS = $(PJSUA2_LIB_CFLAGS) 
+ export PJSUA2_TEST_LDFLAGS += $(PJ_LDXXFLAGS) $(PJ_LDXXLIBS) $(LDFLAGS)
+-export PJSUA2_TEST_EXE := pjsua2-test-$(TARGET_NAME)$(HOST_EXE)
+ 
+ export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
+ 
+@@ -195,7 +194,6 @@ export TEST_LDFLAGS += $(PJSIP_LDLIB) \
+ 		       $(PJLIB_UTIL_LDLIB) \
+ 		       $(PJNATH_LDLIB) \
+ 		       $(_LDFLAGS)
+-export TEST_EXE := pjsip-test-$(TARGET_NAME)$(HOST_EXE)
+ 
+ 	
+ export CC_OUT CC AR RANLIB HOST_MV HOST_RM HOST_RMDIR HOST_MKDIR OBJEXT LD LDOUT 
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix
new file mode 100644
index 000000000000..e2cdb1f05b0e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ring-daemon/restbed.nix
@@ -0,0 +1,38 @@
+{ lib, stdenv
+, fetchFromGitHub
+, cmake
+, asio
+, openssl
+, patches
+}:
+
+stdenv.mkDerivation {
+  pname = "restbed";
+  version = "2016-09-15";
+
+  src = fetchFromGitHub {
+    owner = "Corvusoft";
+    repo = "restbed";
+    rev = "34187502642144ab9f749ab40f5cdbd8cb17a54a";
+    sha256 = "1jb38331fcicyiisqdprhq6zwfc6g518fm3l4qw9aiv5k9nqim22";
+  };
+
+  inherit patches;
+
+  nativeBuildInputs = [ cmake ];
+  buildInputs = [ asio openssl ];
+
+  meta = with lib; {
+    description = "HTTP framework for building networked applications";
+    longDescription = ''
+      HTTP framework for building networked applications that require seamless
+      and secure communication, with the flexability to model a range of
+      business processes. Targeting mobile, tablet, desktop, and embedded
+      production environments.
+    '';
+    homepage = "https://corvusoft.co.uk/";
+    license = licenses.agpl3;
+    maintainers = with maintainers; [ taeer ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix
new file mode 100755
index 000000000000..e5221d861d36
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ripcord/default.nix
@@ -0,0 +1,70 @@
+{ lib, mkDerivation, fetchurl, makeFontsConf, appimageTools,
+  qtbase, qtsvg, qtmultimedia, qtwebsockets, qtimageformats,
+  autoPatchelfHook, desktop-file-utils, imagemagick, makeWrapper,
+  twemoji-color-font, xorg, libsodium, libopus, libGL, zlib, alsaLib }:
+
+mkDerivation rec {
+  pname = "ripcord";
+  version = "0.4.28";
+
+  src = let
+    appimage = fetchurl {
+      url = "https://cancel.fm/dl/Ripcord-${version}-x86_64.AppImage";
+      sha256 = "0bczqp4kny7jlp06f4bh1xg0x17g8980dj6pk4waqc7qk88i6sfv";
+      name = "${pname}-${version}.AppImage";
+    };
+  in appimageTools.extract {
+    name = "${pname}-${version}";
+    src = appimage;
+  };
+
+  nativeBuildInputs = [ autoPatchelfHook desktop-file-utils imagemagick ];
+  buildInputs = [ libsodium libopus libGL alsaLib ] ++
+                [ qtbase qtsvg qtmultimedia qtwebsockets qtimageformats ] ++
+                (with xorg; [ libX11 libXScrnSaver libXcursor xkeyboardconfig ]);
+
+  fontsConf = makeFontsConf {
+    fontDirectories = [ twemoji-color-font ];
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    mkdir -p $out
+    cp -r ${src}/{qt.conf,translations,twemoji.ripdb} $out
+
+    for size in 16 32 48 64 72 96 128 192 256 512 1024; do
+      mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps
+      convert -resize "$size"x"$size" ${src}/Ripcord_Icon.png $out/share/icons/hicolor/"$size"x"$size"/apps/ripcord.png
+    done
+
+    desktop-file-install --dir $out/share/applications \
+      --set-key Exec --set-value ripcord \
+      --set-key Icon --set-value ripcord \
+      --set-key Comment --set-value "${meta.description}" \
+      ${src}/Ripcord.desktop
+    mv $out/share/applications/Ripcord.desktop $out/share/applications/ripcord.desktop
+
+    install -Dm755 ${src}/Ripcord $out/Ripcord
+    patchelf --replace-needed libsodium.so.18 libsodium.so $out/Ripcord
+    makeQtWrapper $out/Ripcord $out/bin/ripcord \
+      --run "cd $out" \
+      --set FONTCONFIG_FILE "${fontsConf}" \
+      --prefix LD_LIBRARY_PATH ":" "${xorg.libXcursor}/lib" \
+      --prefix QT_XKB_CONFIG_ROOT ":" "${xorg.xkeyboardconfig}/share/X11/xkb" \
+      --set RIPCORD_ALLOW_UPDATES 0
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    description = "Desktop chat client for Slack and Discord";
+    homepage = "https://cancel.fm/ripcord/";
+
+    # See: https://cancel.fm/ripcord/shareware-redistribution/
+    license = licenses.unfreeRedistributable;
+
+    maintainers = with maintainers; [ infinisil ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/default.nix
new file mode 100644
index 000000000000..6a6302e74955
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/default.nix
@@ -0,0 +1,60 @@
+{ lib, stdenv, fetchurl, python27Packages, file }:
+
+let
+  inherit (python27Packages) python;
+  requirements = (import ./requirements.nix {
+    inherit lib fetchurl;
+    pythonPackages = python27Packages;
+  });
+
+in
+  stdenv.mkDerivation rec {
+    pname = "salut-a-toi";
+    version = "0.6.1";
+
+    src = fetchurl {
+      url = "ftp://ftp.goffi.org/sat/sat-${version}.tar.bz2";
+      sha256 = "0kn9403n8fpzl0hsb9kkzicsmzq2fjl627l31yykbqzc4nsr780d";
+    };
+
+    buildInputs = with python27Packages;
+    [
+      python twisted urwid wxPython pygobject2
+      dbus-python wrapPython setuptools file
+      pycrypto pyxdg
+    ] ++  (with requirements; [
+      pyfeed
+      wokkel
+    ]);
+
+    configurePhase = ''
+      sed -i "/use_setuptools/d" setup.py
+      sed -e "s@sys.prefix@'$out'@g" -i setup.py
+      sed -e "1aexport PATH=\"\$PATH\":\"$out/bin\":\"${python27Packages.twisted}/bin\"" -i src/sat.sh
+      sed -e "1aexport PYTHONPATH=\"\$PYTHONPATHPATH\":\"$PYTHONPATH\":"$out/${python.sitePackages}"" -i src/sat.sh
+
+      echo 'import wokkel.muc' | python
+    '';
+
+    buildPhase = ''
+      ${python.interpreter} setup.py build
+    '';
+
+    installPhase = ''
+      ${python.interpreter} setup.py install --prefix="$out"
+
+      for i in "$out/bin"/*; do
+      head -n 1 "$i" | grep -E '[/ ]python( |$)' && {
+        wrapProgram "$i" --prefix PYTHONPATH : "$PYTHONPATH:$out/${python.sitePackages}"
+      } || true
+      done
+    '';
+
+    meta = with lib; {
+      homepage = "http://sat.goffi.org/";
+      description = "A multi-frontend XMPP client";
+      platforms = platforms.linux;
+      maintainers = [ maintainers.raskin ];
+      license = licenses.gpl3Plus;
+    };
+  }
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/requirements.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/requirements.nix
new file mode 100644
index 000000000000..8277028ac7b8
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/salut-a-toi/requirements.nix
@@ -0,0 +1,67 @@
+{ fetchurl
+, lib
+, pythonPackages
+}:
+
+let
+  buildPythonPackage = pythonPackages.buildPythonPackage;
+
+  xe = buildPythonPackage rec {
+    url = "http://www.blarg.net/%7Esteveha/xe-0.7.4.tar.gz";
+    name = lib.nameFromURL url ".tar";
+    src = fetchurl {
+      inherit url;
+      sha256 = "0v9878cl0y9cczdsr6xjy8v9l139lc23h4m5f86p4kpf2wlnpi42";
+    };
+
+    # error: invalid command 'test'
+    doCheck = false;
+
+    meta = {
+      homepage = "http://home.blarg.net/~steveha/xe.html";
+      description = "XML elements";
+    };
+  };
+
+in {
+
+  pyfeed = (buildPythonPackage rec {
+    url = "http://www.blarg.net/%7Esteveha/pyfeed-0.7.4.tar.gz";
+
+    name = lib.nameFromURL url ".tar";
+
+    src = fetchurl {
+      inherit url;
+      sha256 = "1h4msq573m7wm46h3cqlx4rsn99f0l11rhdqgf50lv17j8a8vvy1";
+    };
+
+    propagatedBuildInputs = [ xe ];
+
+    # error: invalid command 'test'
+    doCheck = false;
+
+    meta = with lib; {
+      homepage = "http://home.blarg.net/~steveha/pyfeed.html";
+      description = "Tools for syndication feeds";
+    };
+
+  });
+
+  wokkel = buildPythonPackage (rec {
+    url = "http://wokkel.ik.nu/releases/0.7.0/wokkel-0.7.0.tar.gz";
+    name = lib.nameFromURL url ".tar";
+    src = fetchurl {
+      inherit url;
+      sha256 = "0rnshrzw8605x05mpd8ndrx3ri8h6cx713mp8sl4f04f4gcrz8ml";
+    };
+
+    propagatedBuildInputs = with pythonPackages; [twisted dateutil];
+
+    meta = with lib; {
+      description = "Some (mainly XMPP-related) additions to twisted";
+      homepage = "http://wokkel.ik.nu/";
+      license = licenses.mit;
+    };
+  });
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix
new file mode 100644
index 000000000000..29d4c3600c39
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/scudcloud/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchurl, python3Packages }:
+
+let version = "1.63";
+in python3Packages.buildPythonPackage {
+  name = "scudcloud-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/raelgc/scudcloud/archive/v${version}.tar.gz";
+    sha256 = "e0d1cb72115d0fda17db92d28be51558ad8fe250972683fac3086dbe8d350d22";
+  };
+
+  propagatedBuildInputs = with python3Packages; [ pyqt5_with_qtwebkit dbus-python jsmin ];
+
+  meta = with lib; {
+    description = "Non-official desktop client for Slack";
+    homepage = "https://github.com/raelgc/scudcloud";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ volhovm ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix
new file mode 100644
index 000000000000..601489d4532d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-cli/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchurl, makeWrapper, openjdk11_headless, libmatthew_java, dbus, dbus_java }:
+
+stdenv.mkDerivation rec {
+  pname = "signal-cli";
+  version = "0.7.4";
+
+  # Building from source would be preferred, but is much more involved.
+  src = fetchurl {
+    url = "https://github.com/AsamK/signal-cli/releases/download/v${version}/signal-cli-${version}.tar.gz";
+    sha256 = "18dv2944nsryl6372jqgb52z3s1grvgfc5sb1b1rgn0y84g8g46n";
+  };
+
+  buildInputs = lib.optionals stdenv.isLinux [ libmatthew_java dbus dbus_java ];
+  nativeBuildInputs = [ makeWrapper ];
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp -r lib $out/lib
+    cp bin/signal-cli $out/bin/signal-cli
+  '' + (if stdenv.isLinux then ''
+    makeWrapper ${openjdk11_headless}/bin/java $out/bin/signal-cli \
+      --set JAVA_HOME "${openjdk11_headless}" \
+      --add-flags "-classpath '$out/lib/*:${libmatthew_java}/lib/jni'" \
+      --add-flags "-Djava.library.path=${libmatthew_java}/lib/jni:${dbus_java}/share/java/dbus:$out/lib" \
+      --add-flags "org.asamk.signal.Main"
+  '' else ''
+    wrapProgram $out/bin/signal-cli \
+      --prefix PATH : ${lib.makeBinPath [ openjdk11_headless ]} \
+      --set JAVA_HOME ${openjdk11_headless}
+  '');
+
+  # Execution in the macOS (10.13) sandbox fails with
+  # dyld: Library not loaded: /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa
+  #   Referenced from: /nix/store/5ghc2l65p8jcjh0bsmhahd5m9k5p8kx0-zulu1.8.0_121-8.20.0.5/bin/java
+  #   Reason: no suitable image found.  Did find:
+  #         /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa: file system sandbox blocked stat()
+  #         /System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa: file system sandbox blocked stat()
+  # /nix/store/in41dz8byyyz4c0w132l7mqi43liv4yr-stdenv-darwin/setup: line 1310:  2231 Abort trap: 6           signal-cli --version
+  doInstallCheck = stdenv.isLinux;
+
+  installCheckPhase = ''
+    export PATH=$PATH:$out/bin
+    # --help returns non-0 exit code even when working
+    signal-cli --version
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/AsamK/signal-cli";
+    description = "Command-line and dbus interface for communicating with the Signal messaging service";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ivan erictapen ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
new file mode 100644
index 000000000000..19e48bf88d68
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/signal-desktop/default.nix
@@ -0,0 +1,143 @@
+{ stdenv, lib, fetchurl, autoPatchelfHook, dpkg, wrapGAppsHook, nixosTests
+, gnome2, gtk3, atk, at-spi2-atk, cairo, pango, gdk-pixbuf, glib, freetype, fontconfig
+, dbus, libX11, xorg, libXi, libXcursor, libXdamage, libXrandr, libXcomposite
+, libXext, libXfixes, libXrender, libXtst, libXScrnSaver, nss, nspr, alsaLib
+, cups, expat, libuuid, at-spi2-core, libappindicator-gtk3
+# Runtime dependencies:
+, systemd, libnotify, libdbusmenu, libpulseaudio
+# Unfortunately this also overwrites the UI language (not just the spell
+# checking language!):
+, hunspellDicts, spellcheckerLanguage ? null # E.g. "de_DE"
+# For a full list of available languages:
+# $ cat pkgs/development/libraries/hunspell/dictionaries.nix | grep "dictFileName =" | awk '{ print $3 }'
+}:
+
+let
+  customLanguageWrapperArgs = (with lib;
+    let
+      # E.g. "de_DE" -> "de-de" (spellcheckerLanguage -> hunspellDict)
+      spellLangComponents = splitString "_" spellcheckerLanguage;
+      hunspellDict = elemAt spellLangComponents 0 + "-" + toLower (elemAt spellLangComponents 1);
+    in if spellcheckerLanguage != null
+      then ''
+        --set HUNSPELL_DICTIONARIES "${hunspellDicts.${hunspellDict}}/share/hunspell" \
+        --set LC_MESSAGES "${spellcheckerLanguage}"''
+      else "");
+in stdenv.mkDerivation rec {
+  pname = "signal-desktop";
+  version = "1.39.6"; # Please backport all updates to the stable channel.
+  # All releases have a limited lifetime and "expire" 90 days after the release.
+  # When releases "expire" the application becomes unusable until an update is
+  # applied. The expiration date for the current release can be extracted with:
+  # $ grep -a "^{\"buildExpiration" "${signal-desktop}/lib/Signal/resources/app.asar"
+  # (Alternatively we could try to patch the asar archive, but that requires a
+  # few additional steps and might not be the best idea.)
+
+  src = fetchurl {
+    url = "https://updates.signal.org/desktop/apt/pool/main/s/signal-desktop/signal-desktop_${version}_amd64.deb";
+    sha256 = "04fd81vc0dxk0b47crm5zacf4x79pdn483xicygnc1z6v7mnrmgk";
+  };
+
+  nativeBuildInputs = [
+    autoPatchelfHook
+    dpkg
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    alsaLib
+    at-spi2-atk
+    at-spi2-core
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gnome2.GConf
+    gtk3
+    libX11
+    libXScrnSaver
+    libXcomposite
+    libXcursor
+    libXdamage
+    libXext
+    libXfixes
+    libXi
+    libXrandr
+    libXrender
+    libXtst
+    libappindicator-gtk3
+    libnotify
+    libuuid
+    nspr
+    nss
+    pango
+    systemd
+    xorg.libxcb
+  ];
+
+  runtimeDependencies = [
+    (lib.getLib systemd)
+    libnotify
+    libdbusmenu
+  ];
+
+  unpackPhase = "dpkg-deb -x $src .";
+
+  dontBuild = true;
+  dontConfigure = true;
+  dontPatchELF = true;
+  # We need to run autoPatchelf manually with the "no-recurse" option, see
+  # https://github.com/NixOS/nixpkgs/pull/78413 for the reasons.
+  dontAutoPatchelf = true;
+
+  installPhase = ''
+    mkdir -p $out/lib
+
+    mv usr/share $out/share
+    mv opt/Signal $out/lib/Signal
+
+    # Note: The following path contains bundled libraries:
+    # $out/lib/Signal/resources/app.asar.unpacked/node_modules/sharp/vendor/lib/
+    # We run autoPatchelf with the "no-recurse" option to avoid picking those
+    # up, but resources/app.asar still requires them.
+
+    # Symlink to bin
+    mkdir -p $out/bin
+    ln -s $out/lib/Signal/signal-desktop $out/bin/signal-desktop
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ stdenv.cc.cc ] }"
+      ${customLanguageWrapperArgs}
+    )
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/signal-desktop.desktop \
+      --replace /opt/Signal/signal-desktop $out/bin/signal-desktop
+
+    autoPatchelf --no-recurse -- $out/lib/Signal/
+    patchelf --add-needed ${libpulseaudio}/lib/libpulse.so $out/lib/Signal/resources/app.asar.unpacked/node_modules/ringrtc/build/linux/libringrtc.node
+  '';
+
+  # Tests if the application launches and waits for "Link your phone to Signal Desktop":
+  passthru.tests.application-launch = nixosTests.signal-desktop;
+
+  meta = {
+    description = "Private, simple, and secure messenger";
+    longDescription = ''
+      Signal Desktop is an Electron application that links with your
+      "Signal Android" or "Signal iOS" app.
+    '';
+    homepage    = "https://signal.org/";
+    changelog   = "https://github.com/signalapp/Signal-Desktop/releases/tag/v${version}";
+    license     = lib.licenses.gpl3;
+    maintainers = with lib.maintainers; [ ixmatus primeos equirosa ];
+    platforms   = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix
new file mode 100644
index 000000000000..83cc80ccaf05
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/silc-client/default.nix
@@ -0,0 +1,40 @@
+{ lib, stdenv, fetchurl, perl, pkg-config, glib, ncurses
+, enablePlugin ? false }:
+
+# Enabling the plugin and using it with a recent irssi, segafults on join:
+# http://marc.info/?l=silc-devel&m=125610477802211
+
+let
+  basename = "silc-client-1.1.11";
+in
+stdenv.mkDerivation {
+  name = basename + lib.optionalString enablePlugin "-irssi-plugin";
+
+  src = fetchurl {
+    url = "mirror://sourceforge/silc/silc/client/sources/${basename}.tar.bz2";
+    sha256 = "13cp3fmdnj8scjak0d2xal3bfvs2k7ssrwdhp0zl6jar5rwc7prn";
+  };
+
+  enableParallelBuilding = true;
+
+  dontDisableStatic = true;
+
+  hardeningDisable = [ "format" ];
+
+  configureFlags = [ "--with-ncurses=${ncurses.dev}" ];
+
+  preConfigure = lib.optionalString enablePlugin ''
+    configureFlags="$configureFlags --with-silc-plugin=$out/lib/irssi"
+  '';
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ perl glib ncurses ];
+
+  meta = {
+    homepage = "http://silcnet.org/";
+    description = "Secure Internet Live Conferencing server";
+    license = lib.licenses.gpl2;
+    maintainers = with lib.maintainers; [viric];
+    platforms = with lib.platforms; linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix
new file mode 100644
index 000000000000..fe7a2e3ba0f3
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/skypeforlinux/default.nix
@@ -0,0 +1,124 @@
+{ lib, stdenv, fetchurl, dpkg
+, alsaLib, atk, cairo, cups, curl, dbus, expat, fontconfig, freetype, gdk-pixbuf, glib, glibc, gnome2, gnome3
+, gtk3, libappindicator-gtk3, libnotify, libpulseaudio, libsecret, libv4l, nspr, nss, pango, systemd, wrapGAppsHook, xorg
+, at-spi2-atk, libuuid, at-spi2-core }:
+
+let
+
+  # Please keep the version x.y.0.z and do not update to x.y.76.z because the
+  # source of the latter disappears much faster.
+  version = "8.68.0.100";
+
+  rpath = lib.makeLibraryPath [
+    alsaLib
+    atk
+    at-spi2-atk
+    at-spi2-core
+    cairo
+    cups
+    curl
+    dbus
+    expat
+    fontconfig
+    freetype
+    glib
+    glibc
+    libsecret
+    libuuid
+
+    gnome2.GConf
+    gdk-pixbuf
+    gtk3
+    libappindicator-gtk3
+
+    gnome3.gnome-keyring
+
+    libnotify
+    libpulseaudio
+    nspr
+    nss
+    pango
+    stdenv.cc.cc
+    systemd
+    libv4l
+
+    xorg.libxkbfile
+    xorg.libX11
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libXScrnSaver
+    xorg.libxcb
+  ] + ":${stdenv.cc.cc.lib}/lib64";
+
+  src =
+    if stdenv.hostPlatform.system == "x86_64-linux" then
+      fetchurl {
+        urls = [
+          "https://repo.skype.com/deb/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb"
+          "https://mirror.cs.uchicago.edu/skype/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb"
+          "https://web.archive.org/web/https://repo.skype.com/deb/pool/main/s/skypeforlinux/skypeforlinux_${version}_amd64.deb"
+        ];
+        sha256 = "gHjgQRdNABO+R+fcDurHDAQtZpckIxLbODM6Txz+LH4=";
+      }
+    else
+      throw "Skype for linux is not supported on ${stdenv.hostPlatform.system}";
+
+in stdenv.mkDerivation {
+  pname = "skypeforlinux";
+  inherit version;
+
+  system = "x86_64-linux";
+
+  inherit src;
+
+  nativeBuildInputs = [
+    wrapGAppsHook
+    glib # For setup hook populating GSETTINGS_SCHEMA_PATH
+  ];
+
+  buildInputs = [ dpkg ];
+
+  dontUnpack = true;
+  installPhase = ''
+    mkdir -p $out
+    dpkg -x $src $out
+    cp -av $out/usr/* $out
+    rm -rf $out/opt $out/usr
+    rm $out/bin/skypeforlinux
+
+    ln -s "$out/share/skypeforlinux/skypeforlinux" "$out/bin/skypeforlinux"
+
+    # Otherwise it looks "suspicious"
+    chmod -R g-w $out
+  '';
+
+  postFixup = ''
+    for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* -or -name \*.node\* \) ); do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath ${rpath}:$out/share/skypeforlinux $file || true
+    done
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/skypeforlinux.desktop \
+      --replace /usr/bin/ $out/bin/
+    substituteInPlace $out/share/applications/skypeforlinux-share.desktop \
+      --replace /usr/bin/ $out/bin/
+    substituteInPlace $out/share/kservices5/ServiceMenus/skypeforlinux.desktop \
+      --replace /usr/bin/ $out/bin/
+  '';
+
+  meta = with lib; {
+    description = "Linux client for skype";
+    homepage = "https://www.skype.com";
+    license = licenses.unfree;
+    maintainers = with lib.maintainers; [ panaeon jraygauthier ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix
new file mode 100644
index 000000000000..30cc7396c562
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack-term/default.nix
@@ -0,0 +1,23 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  # https://github.com/erroneousboat/slack-term
+  pname = "slack-term";
+  version = "0.5.0";
+
+  goPackagePath = "github.com/erroneousboat/slack-term";
+
+  src = fetchFromGitHub {
+    owner = "erroneousboat";
+    repo = "slack-term";
+    rev = "v${version}";
+    sha256 = "1fbq7bdhy70hlkklppimgdjamnk0v059pg73xm9ax1f4616ki1m6";
+  };
+
+  meta = with lib; {
+    description = "Slack client for your terminal";
+    homepage = "https://github.com/erroneousboat/slack-term";
+    license = licenses.mit;
+    maintainers = with maintainers; [ dtzWill ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
new file mode 100644
index 000000000000..44642ab8a930
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix
@@ -0,0 +1,180 @@
+{ lib, stdenv
+, fetchurl
+, dpkg
+, undmg
+, makeWrapper
+, nodePackages
+, alsaLib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, curl
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gnome2
+, gtk3
+, libappindicator-gtk3
+, libdrm
+, libnotify
+, libpulseaudio
+, libuuid
+, libxcb
+, libxkbcommon
+, mesa
+, nspr
+, nss
+, pango
+, systemd
+, xdg-utils
+, xorg
+}:
+
+let
+  inherit (stdenv.hostPlatform) system;
+  throwSystem = throw "Unsupported system: ${system}";
+
+  pname = "slack";
+
+  x86_64-darwin-version = "4.12.2";
+  x86_64-darwin-sha256 = "0qflv2glfy7d77zjgqi7qcjr53c9dni26gmqkg9vk2xijmmd3xy7";
+
+  x86_64-linux-version = "4.12.2";
+  x86_64-linux-sha256 = "sha256-G5uQI078N7AbhEJs6a/17Hoi5DSdwvYLM1T/ttrEw4s=";
+
+  version = {
+    x86_64-darwin = x86_64-darwin-version;
+    x86_64-linux = x86_64-linux-version;
+  }.${system} or throwSystem;
+
+  src = let
+    base = "https://downloads.slack-edge.com";
+  in {
+    x86_64-darwin = fetchurl {
+      url = "${base}/releases/macos/${version}/prod/x64/Slack-${version}-macOS.dmg";
+      sha256 = x86_64-darwin-sha256;
+    };
+    x86_64-linux = fetchurl {
+      url = "${base}/linux_releases/slack-desktop-${version}-amd64.deb";
+      sha256 = x86_64-linux-sha256;
+    };
+  }.${system} or throwSystem;
+
+  meta = with lib; {
+    description = "Desktop client for Slack";
+    homepage = "https://slack.com";
+    license = licenses.unfree;
+    maintainers = with maintainers; [ mmahut ];
+    platforms = [ "x86_64-darwin" "x86_64-linux" ];
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version src meta;
+
+    passthru.updateScript = ./update.sh;
+
+    rpath = lib.makeLibraryPath [
+      alsaLib
+      at-spi2-atk
+      at-spi2-core
+      atk
+      cairo
+      cups
+      curl
+      dbus
+      expat
+      fontconfig
+      freetype
+      gdk-pixbuf
+      glib
+      gnome2.GConf
+      gtk3
+      libappindicator-gtk3
+      libdrm
+      libnotify
+      libpulseaudio
+      libuuid
+      libxcb
+      libxkbcommon
+      mesa
+      nspr
+      nss
+      pango
+      stdenv.cc.cc
+      systemd
+      xorg.libX11
+      xorg.libXScrnSaver
+      xorg.libXcomposite
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXi
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXtst
+      xorg.libxkbfile
+    ] + ":${stdenv.cc.cc.lib}/lib64";
+
+    buildInputs = [
+      gtk3  # needed for GSETTINGS_SCHEMAS_PATH
+    ];
+
+    nativeBuildInputs = [ dpkg makeWrapper nodePackages.asar ];
+
+    dontUnpack = true;
+    dontBuild = true;
+    dontPatchELF = true;
+
+    installPhase = ''
+      # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
+      dpkg --fsys-tarfile $src | tar --extract
+      rm -rf usr/share/lintian
+
+      mkdir -p $out
+      mv usr/* $out
+
+      # Otherwise it looks "suspicious"
+      chmod -R g-w $out
+
+      for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do
+        patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+        patchelf --set-rpath ${rpath}:$out/lib/slack $file || true
+      done
+
+      # Replace the broken bin/slack symlink with a startup wrapper
+      rm $out/bin/slack
+      makeWrapper $out/lib/slack/slack $out/bin/slack \
+        --prefix XDG_DATA_DIRS : $GSETTINGS_SCHEMAS_PATH \
+        --prefix PATH : ${xdg-utils}/bin
+
+      # Fix the desktop link
+      substituteInPlace $out/share/applications/slack.desktop \
+        --replace /usr/bin/ $out/bin/ \
+        --replace /usr/share/ $out/share/
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version src meta;
+
+    passthru.updateScript = ./update.sh;
+
+    nativeBuildInputs = [ undmg ];
+
+    sourceRoot = "Slack.app";
+
+    installPhase = ''
+      mkdir -p $out/Applications/Slack.app
+      cp -R . $out/Applications/Slack.app
+      /usr/bin/defaults write com.tinyspeck.slackmacgap SlackNoAutoUpdates -bool YES
+    '';
+  };
+in if stdenv.isDarwin
+  then darwin
+  else linux
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh
new file mode 100755
index 000000000000..adef44411091
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/slack/update.sh
@@ -0,0 +1,41 @@
+#!/usr/bin/env nix-shell
+#! nix-shell -i bash -p curl gnused
+
+set -eou pipefail
+
+latest_linux_version=$(curl --silent https://slack.com/downloads/linux | sed -n 's/.*Version \([0-9\.]\+\).*/\1/p')
+latest_mac_version=$(curl --silent https://slack.com/downloads/mac | sed -n 's/.*Version \([0-9\.]\+\).*/\1/p')
+
+# Double check that the latest mac and linux versions are in sync.
+if [[ "$latest_linux_version" != "$latest_mac_version" ]]; then
+  echo "the latest linux ($latest_linux_version) and mac ($latest_mac_version) versions are not the same"
+  exit 1
+fi
+
+nixpkgs="$(git rev-parse --show-toplevel)"
+slack_nix="$nixpkgs/pkgs/applications/networking/instant-messengers/slack/default.nix"
+nixpkgs_linux_version=$(cat "$slack_nix" | sed -n 's/.*x86_64-linux-version = \"\([0-9\.]\+\)\";.*/\1/p')
+nixpkgs_mac_version=$(cat "$slack_nix" | sed -n 's/.*x86_64-darwin-version = \"\([0-9\.]\+\)\";.*/\1/p')
+
+if [[ "$nixpkgs_linux_version" == "$latest_linux_version" && "$nixpkgs_mac_version" == "$latest_mac_version" ]]; then
+  echo "nixpkgs versions are all up to date!"
+  exit 0
+fi
+
+linux_url="https://downloads.slack-edge.com/linux_releases/slack-desktop-${latest_linux_version}-amd64.deb"
+mac_url="https://downloads.slack-edge.com/releases/macos/${latest_mac_version}/prod/x64/Slack-${latest_mac_version}-macOS.dmg"
+linux_sha256=$(nix-prefetch-url ${linux_url})
+mac_sha256=$(nix-prefetch-url ${mac_url})
+
+sed -i "s/x86_64-linux-version = \".*\"/x86_64-linux-version = \"${latest_linux_version}\"/" "$slack_nix"
+sed -i "s/x86_64-darwin-version = \".*\"/x86_64-darwin-version = \"${latest_mac_version}\"/" "$slack_nix"
+sed -i "s/x86_64-linux-sha256 = \".*\"/x86_64-linux-sha256 = \"${linux_sha256}\"/" "$slack_nix"
+sed -i "s/x86_64-darwin-sha256 = \".*\"/x86_64-darwin-sha256 = \"${mac_sha256}\"/" "$slack_nix"
+
+if ! nix-build -A slack "$nixpkgs"; then
+  echo "The updated slack failed to build."
+  exit 1
+fi
+
+echo "Successfully updated"
+echo "slack: $nixpkgs_linux_version -> $latest_linux_version"
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix
new file mode 100644
index 000000000000..71693485a1b0
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ssh-chat/default.nix
@@ -0,0 +1,22 @@
+{ lib, buildGoModule, fetchFromGitHub }:
+
+buildGoModule rec {
+  pname = "ssh-chat";
+  version = "1.10.1";
+
+  src = fetchFromGitHub {
+    owner = "shazow";
+    repo = "ssh-chat";
+    rev = "v${version}";
+    sha256 = "LgrqIuM/tLC0JqDai2TLu6G/edZ5Q7WFXjX5bzc0Bcc=";
+  };
+
+  vendorSha256 = "QTUBorUAsWDOpNP3E/Y6ht7ZXZViWBbrMPtLl7lHtgE=";
+
+  meta = with lib; {
+    description = "Chat over SSH";
+    homepage = "https://github.com/shazow/ssh-chat";
+    license = licenses.mit;
+    maintainers = with maintainers; [ luc65r ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/stride/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/stride/default.nix
new file mode 100644
index 000000000000..0ce5f764128d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/stride/default.nix
@@ -0,0 +1,68 @@
+{ lib, stdenv, fetchurl, dpkg, alsaLib, atk, cairo, cups, dbus, expat, fontconfig
+, freetype, gdk-pixbuf, glib, gnome2, nspr, nss, pango, udev, xorg }:
+let
+  fullPath = lib.makeLibraryPath [
+    alsaLib
+    atk
+    cairo
+    cups
+    dbus
+    expat
+    fontconfig
+    freetype
+    gdk-pixbuf
+    glib
+    gnome2.GConf
+    gnome2.gtk
+    nspr
+    nss
+    pango
+    udev
+    xorg.libX11
+    xorg.libXScrnSaver
+    xorg.libXcomposite
+    xorg.libXcursor
+    xorg.libXdamage
+    xorg.libXext
+    xorg.libXfixes
+    xorg.libXi
+    xorg.libXrandr
+    xorg.libXrender
+    xorg.libXtst
+    xorg.libxcb
+  ] + ":${stdenv.cc.cc.lib}/lib64";
+in
+stdenv.mkDerivation rec {
+  version = "1.17.82";
+  pname = "stride";
+
+  src = fetchurl {
+    url = "https://packages.atlassian.com/stride-apt-client/pool/stride_${version}_amd64.deb";
+    sha256 = "0lx61gdhw0kv4f9fwbfg69yq52dsp4db7c4li25d6wn11qanzqhy";
+  };
+
+  dontBuild = true;
+  dontFixup = true;
+
+  buildInputs = [ dpkg ];
+
+  unpackPhase = ''
+    dpkg-deb -x ${src} ./
+  '';
+
+  installPhase =''
+    mkdir "$out"
+    mv usr/* "$out/"
+    patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+      --set-rpath "${fullPath}:\$ORIGIN" \
+      "$out/bin/stride"
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for Atlassian Stride";
+    homepage = "https://www.stride.com/";
+    license = licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with maintainers; [ puffnfresh ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/default.nix
new file mode 100644
index 000000000000..58335bed4218
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/default.nix
@@ -0,0 +1,44 @@
+{ mkDerivation, lib, fetchurl, pkg-config, qttools, sconsPackages
+, GConf, avahi, boost, hunspell, libXScrnSaver, libedit, libidn, libnatpmp, libxml2
+, lua, miniupnpc, openssl, qtbase, qtmultimedia, qtsvg, qtwebkit, qtx11extras, zlib
+}:
+
+mkDerivation rec {
+  pname = "swift-im";
+  version = "4.0.2";
+
+  src = fetchurl {
+    url = "https://swift.im/downloads/releases/swift-${version}/swift-${version}.tar.gz";
+    sha256 = "0w0aiszjd58ynxpacwcgf052zpmbpcym4dhci64vbfgch6wryz0w";
+  };
+
+  patches = [ ./qt-5.11.patch ./scons.patch ];
+
+  nativeBuildInputs = [ pkg-config qttools sconsPackages.scons_3_1_2 ];
+
+  buildInputs = [
+    GConf avahi boost hunspell libXScrnSaver libedit libidn libnatpmp libxml2
+    lua miniupnpc openssl qtbase qtmultimedia qtsvg qtwebkit qtx11extras zlib
+  ];
+
+  propagatedUserEnvPkgs = [ GConf ];
+
+  NIX_CFLAGS_COMPILE = toString [
+    "-I${libxml2.dev}/include/libxml2"
+    "-I${miniupnpc}/include/miniupnpc"
+    "-I${qtwebkit.dev}/include/QtWebKit"
+    "-I${qtwebkit.dev}/include/QtWebKitWidgets"
+    "-fpermissive"
+  ];
+
+  installTargets = [ (placeholder "out") ];
+  installFlags = [ "SWIFT_INSTALLDIR=${placeholder "out"}" ];
+
+  meta = with lib; {
+    homepage = "https://swift.im/";
+    description = "Qt XMPP client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ orivej ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/qt-5.11.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/qt-5.11.patch
new file mode 100644
index 000000000000..911e7570427f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/qt-5.11.patch
@@ -0,0 +1,10 @@
+--- a/Swift/QtUI/UserSearch/QtUserSearchWindow.h
++++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.h
+@@ -8,6 +8,7 @@
+
+ #include <set>
+
++#include <QAbstractItemModel>
+ #include <QWizard>
+
+ #include <Swiften/Base/Override.h>
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/scons.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/scons.patch
new file mode 100644
index 000000000000..c63b05d7acb1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/swift-im/scons.patch
@@ -0,0 +1,53 @@
+diff --git a/BuildTools/SCons/SConscript.boot b/BuildTools/SCons/SConscript.boot
+index 40f242513..53e1ff26a 100644
+--- a/BuildTools/SCons/SConscript.boot
++++ b/BuildTools/SCons/SConscript.boot
+@@ -508,6 +508,7 @@ if env.get("distcc", False) :
+         if var.startswith("DISTCC_") :
+             env["ENV"][var] = os.environ[var]
+ 
++env["ENV"] = os.environ
+ conf_env = env.Clone()
+ 
+ Export("env")
+diff --git a/BuildTools/SCons/SConstruct b/BuildTools/SCons/SConstruct
+index 70bffbcfe..fef281899 100644
+--- a/BuildTools/SCons/SConstruct
++++ b/BuildTools/SCons/SConstruct
+@@ -272,7 +272,7 @@ if env.get("try_gconf", True) and env["PLATFORM"] != "win32" and env["PLATFORM"]
+     gconf_env = conf_env.Clone()
+     conf = Configure(gconf_env, custom_tests = {"CheckPKG": CheckPKG})
+     if conf.CheckPKG("gconf-2.0") :
+-        gconf_bare_env = Environment()
++        gconf_bare_env = Environment(ENV = os.environ)
+         gconf_bare_env.ParseConfig('pkg-config --cflags gconf-2.0 gobject-2.0 --libs gconf-2.0 gobject-2.0')
+         if os.path.basename(env["CXX"]).startswith(("g++", "clang++")) :
+             gconf_bare_env["CCFLAGS"] = [("-isystem" + ccflag) for ccflag in gconf_bare_env["CPPPATH"]]
+@@ -634,9 +634,9 @@ hunspell_env.MergeFlags(hunspell_flags)
+ env["HAVE_HUNSPELL"] = 0;
+ if env.get("hunspell_enable", False) :
+     hunspell_conf = Configure(hunspell_env)
+-    if hunspell_conf.CheckCXXHeader("hunspell/hunspell.hxx") and hunspell_conf.CheckLib("hunspell") :
++    if hunspell_conf.CheckCXXHeader("hunspell/hunspell.hxx") and hunspell_conf.CheckLib("hunspell-1.6") :
+         env["HAVE_HUNSPELL"] = 1
+-        hunspell_flags["LIBS"] = ["hunspell"]
++        hunspell_flags["LIBS"] = ["hunspell-1.6"]
+         env["HUNSPELL_FLAGS"] = hunspell_flags
+     hunspell_conf.Finish()
+ 
+diff --git a/BuildTools/SCons/Tools/textfile.py b/BuildTools/SCons/Tools/textfile.py
+index 89f8963dc..b8559f7a6 100644
+--- a/BuildTools/SCons/Tools/textfile.py
++++ b/BuildTools/SCons/Tools/textfile.py
+@@ -113,7 +113,10 @@ def _action(target, source, env):
+     lsep = None
+     for s in source:
+         if lsep: fd.write(lsep)
+-        fd.write(_do_subst(s, subs))
++        b = _do_subst(s, subs)
++        if isinstance(b, unicode):
++            b = b.encode('UTF-8')
++        fd.write(b)
+         lsep = linesep
+     fd.close()
+ 
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix
new file mode 100644
index 000000000000..e7ca8c320ac6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/tangram/default.nix
@@ -0,0 +1,56 @@
+{ stdenv, lib, fetchFromGitHub, appstream-glib, desktop-file-utils, gdk-pixbuf
+, gettext, gjs, glib, gobject-introspection, gsettings-desktop-schemas, gtk3
+, hicolor-icon-theme, meson, ninja, pkg-config, python3, webkitgtk, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+  pname = "tangram";
+  version = "1.3.1";
+
+  src = fetchFromGitHub {
+    owner = "sonnyp";
+    repo = "Tangram";
+    rev = "v${version}";
+    sha256 = "0bhs9s6c2k06i3cx01h2102lgl7g6vxm3k63jkkhh2bwdpc9kvn3";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [ gdk-pixbuf gjs glib gsettings-desktop-schemas gtk3 webkitgtk ];
+
+  nativeBuildInputs = [
+    appstream-glib
+    desktop-file-utils
+    gettext
+    gobject-introspection
+    hicolor-icon-theme
+    meson
+    ninja
+    pkg-config
+    python3
+    wrapGAppsHook
+  ];
+
+  dontWrapGApps = true;
+
+  # Fixes https://github.com/NixOS/nixpkgs/issues/31168
+  postPatch = ''
+    chmod +x build-aux/meson/postinstall.py
+    patchShebangs build-aux/meson/postinstall.py
+  '';
+
+  postFixup = ''
+    for file in $out/bin/re.sonny.Tangram; do
+      sed -e $"2iimports.package._findEffectiveEntryPointName = () => \'$(basename $file)\' " \
+         -i $file
+      wrapGApp "$file"
+     done
+  '';
+
+  meta = with lib; {
+    description = "Run web apps on your desktop";
+    homepage = "https://github.com/sonnyp/Tangram";
+    license = licenses.gpl3Only;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ austinbutler ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix
new file mode 100644
index 000000000000..1625878a2d07
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teams/default.nix
@@ -0,0 +1,89 @@
+{ lib
+, stdenv
+, fetchurl
+, autoPatchelfHook
+, wrapGAppsHook
+, dpkg
+, atomEnv
+, libuuid
+, pulseaudio
+, at-spi2-atk
+, coreutils
+, gawk
+, xdg-utils
+, systemd }:
+
+stdenv.mkDerivation rec {
+  pname = "teams";
+  version = "1.3.00.30857";
+
+  src = fetchurl {
+    url = "https://packages.microsoft.com/repos/ms-teams/pool/main/t/teams/teams_${version}_amd64.deb";
+    sha256 = "06r48h1fr2si2g5ng8hsnbcmr70iapnafj21v5bzrzzrigzb2n2h";
+  };
+
+  nativeBuildInputs = [ dpkg autoPatchelfHook wrapGAppsHook ];
+
+  unpackCmd = "dpkg -x $curSrc .";
+
+  buildInputs = atomEnv.packages ++ [
+    libuuid
+    at-spi2-atk
+  ];
+
+  runtimeDependencies = [
+    (lib.getLib systemd)
+    pulseaudio
+  ];
+
+  preFixup = ''
+    gappsWrapperArgs+=(--prefix PATH : "${coreutils}/bin:${gawk}/bin:${xdg-utils}/bin")
+  '';
+
+  installPhase = ''
+    mkdir -p $out/{opt,bin}
+
+    mv share/teams $out/opt/
+    mv share $out/share
+
+    substituteInPlace $out/share/applications/teams.desktop \
+      --replace /usr/bin/ ""
+
+    ln -s $out/opt/teams/teams $out/bin/
+
+    # Work-around screen sharing bug
+    # https://docs.microsoft.com/en-us/answers/questions/42095/sharing-screen-not-working-anymore-bug.html
+    rm $out/opt/teams/resources/app.asar.unpacked/node_modules/slimcore/bin/rect-overlay
+  '';
+
+  dontAutoPatchelf = true;
+
+  # Includes runtimeDependencies in the RPATH of the included Node modules
+  # so that dynamic loading works. We cannot use directly runtimeDependencies
+  # here, since the libraries from runtimeDependencies are not propagated
+  # to the dynamically loadable node modules because of a condition in
+  # autoPatchElfHook since *.node modules have Type: DYN (Shared object file)
+  # instead of EXEC or INTERP it expects.
+  # Fixes: https://github.com/NixOS/nixpkgs/issues/85449
+  postFixup = ''
+    autoPatchelf "$out"
+
+    runtime_rpath="${lib.makeLibraryPath runtimeDependencies}"
+
+    for mod in $(find "$out/opt/teams" -name '*.node'); do
+      mod_rpath="$(patchelf --print-rpath "$mod")"
+
+      echo "Adding runtime dependencies to RPATH of Node module $mod"
+      patchelf --set-rpath "$runtime_rpath:$mod_rpath" "$mod"
+    done;
+  '';
+
+  meta = with lib; {
+    description = "Microsoft Teams";
+    homepage = "https://teams.microsoft.com";
+    downloadPage = "https://teams.microsoft.com/downloads";
+    license = licenses.unfree;
+    maintainers = [ maintainers.liff ];
+    platforms = [ "x86_64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
new file mode 100644
index 000000000000..988674079163
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/client.nix
@@ -0,0 +1,148 @@
+{ lib, stdenv, fetchurl, makeWrapper, makeDesktopItem, zlib, glib, libpng, freetype, openssl
+, xorg, fontconfig, qtbase, qtwebengine, qtwebchannel, qtsvg, qtwebsockets, xkeyboard_config
+, alsaLib, libpulseaudio ? null, libredirect, quazip, which, unzip, llvmPackages, writeShellScriptBin
+}:
+
+let
+
+  arch = if stdenv.is64bit then "amd64" else "x86";
+
+  libDir = if stdenv.is64bit then "lib64" else "lib";
+
+  deps =
+    [ zlib glib libpng freetype xorg.libSM xorg.libICE xorg.libXrender openssl
+      xorg.libXrandr xorg.libXfixes xorg.libXcursor xorg.libXinerama
+      xorg.libxcb fontconfig xorg.libXext xorg.libX11 alsaLib qtbase qtwebengine qtwebchannel qtsvg
+      qtwebsockets libpulseaudio quazip llvmPackages.libcxx llvmPackages.libcxxabi
+    ];
+
+  desktopItem = makeDesktopItem {
+    name = "teamspeak";
+    exec = "ts3client";
+    icon = "teamspeak";
+    comment = "The TeamSpeak voice communication tool";
+    desktopName = "TeamSpeak";
+    genericName = "TeamSpeak";
+    categories = "Network";
+  };
+
+  fakeLess = writeShellScriptBin "less" "cat";
+
+in
+
+stdenv.mkDerivation rec {
+  pname = "teamspeak-client";
+
+  version = "3.5.6";
+
+  src = fetchurl {
+    url = "https://files.teamspeak-services.com/releases/client/${version}/TeamSpeak3-Client-linux_${arch}-${version}.run";
+    sha256 = if stdenv.is64bit
+                then "sha256:0hjai1bd4mq3g2dlyi0zkn8s4zlgxd38skw77mb78nc4di5gvgpg"
+                else "sha256:1y1c65nap91nv9xkvd96fagqbfl56p9n0rl6iac0i29bkysdmija";
+  };
+
+  # grab the plugin sdk for the desktop icon
+  pluginsdk = fetchurl {
+    url = "http://dl.4players.de/ts/client/pluginsdk/pluginsdk_3.1.1.1.zip";
+    sha256 = "1bywmdj54glzd0kffvr27r84n4dsd0pskkbmh59mllbxvj0qwy7f";
+  };
+
+  nativeBuildInputs = [ makeWrapper fakeLess which unzip ];
+
+  unpackPhase =
+    ''
+      echo -e '\ny' | sh -xe $src
+      cd TeamSpeak*
+    '';
+
+  buildPhase =
+    ''
+      mv ts3client_linux_${arch} ts3client
+      echo "patching ts3client..."
+      patchelf --replace-needed libquazip.so ${quazip}/lib/libquazip5.so ts3client
+      patchelf \
+        --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+        --set-rpath ${lib.makeLibraryPath deps}:$(cat $NIX_CC/nix-support/orig-cc)/${libDir} \
+        --force-rpath \
+        ts3client
+    '';
+
+  installPhase =
+    ''
+      # Delete unecessary libraries - these are provided by nixos.
+      rm *.so.* *.so
+      rm QtWebEngineProcess
+      rm qt.conf
+      rm -r platforms # contains libqxcb.so
+
+      # Install files.
+      mkdir -p $out/lib/teamspeak
+      mv * $out/lib/teamspeak/
+
+      # Make a desktop item
+      mkdir -p $out/share/applications/ $out/share/icons/
+      unzip ${pluginsdk}
+      cp pluginsdk/docs/client_html/images/logo.png $out/share/icons/teamspeak.png
+      cp ${desktopItem}/share/applications/* $out/share/applications/
+
+      # Make a symlink to the binary from bin.
+      mkdir -p $out/bin/
+      ln -s $out/lib/teamspeak/ts3client $out/bin/ts3client
+
+      wrapProgram $out/bin/ts3client \
+        --set LD_PRELOAD "${libredirect}/lib/libredirect.so" \
+        --set QT_PLUGIN_PATH "${qtbase}/${qtbase.qtPluginPrefix}" \
+        --set NIX_REDIRECTS /usr/share/X11/xkb=${xkeyboard_config}/share/X11/xkb
+    '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = with lib; {
+    description = "The TeamSpeak voice communication tool";
+    homepage = "https://teamspeak.com/";
+    license = {
+      fullName = "Teamspeak client license";
+      url = "https://www.teamspeak.com/en/privacy-and-terms/";
+      free = false;
+    };
+    maintainers = with maintainers; [ lhvwb lukegb ];
+    platforms = [ "i686-linux" "x86_64-linux" ];
+  };
+}
+
+/*
+License issues:
+Date: Mon, 10 Dec 2007 19:55:16 -0500
+From: TeamSpeak Sales <sales@tritoncia.com>
+To: 'Marc Weber' <marco-oweber@gmx.de>
+Subject: RE: teamspeak on nix?
+
+Yes, that would be fine.  As long as you are not renting servers or selling
+TeamSpeak then you are more than welcome to distribute it.
+
+Thank you,
+
+TeamSpeak Sales Team
+________________________________
+e-Mail: sales@tritoncia.com
+TeamSpeak: http://www.TeamSpeak.com
+Account Login: https://sales.TritonCIA.com/users
+
+
+
+-----Original Message-----
+From: Marc Weber [mailto:marco-oweber@gmx.de]
+Sent: Monday, December 10, 2007 5:03 PM
+To: sales@tritoncia.com
+Subject: teamspeak on nix?
+
+Hello,
+
+nix is very young software distribution system (http://nix.cs.uu.nl/)
+I'd like to ask wether you permit us to add teamspeak (server/ client?)
+
+Sincerly
+Marc Weber (small nix contributor)
+*/
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix
new file mode 100644
index 000000000000..3dfbb69e83c7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/teamspeak/server.nix
@@ -0,0 +1,96 @@
+{ lib, stdenv, fetchurl, postgresql, autoPatchelfHook, writeScript }:
+
+let
+  arch = if stdenv.is64bit then "amd64" else "x86";
+in stdenv.mkDerivation rec {
+  pname = "teamspeak-server";
+  version = "3.13.2";
+
+  src = fetchurl {
+    url = "https://files.teamspeak-services.com/releases/server/${version}/teamspeak3-server_linux_${arch}-${version}.tar.bz2";
+    sha256 = if stdenv.is64bit
+      then "1l9i9667wppwxbbnf6kxamnqlbxzkz9ync4rsypfla124b6cidpz"
+      else "0qhd05abiycsgc16r1p6y8bfdrl6zji21xaqwdizpr0jb01z335g";
+  };
+
+  buildInputs = [ stdenv.cc.cc postgresql.lib ];
+
+  nativeBuildInputs = [ autoPatchelfHook ];
+
+  installPhase = ''
+    # Install files.
+    mkdir -p $out/lib/teamspeak
+    mv * $out/lib/teamspeak/
+
+    # Make symlinks to the binaries from bin.
+    mkdir -p $out/bin/
+    ln -s $out/lib/teamspeak/ts3server $out/bin/ts3server
+    ln -s $out/lib/teamspeak/tsdns/tsdnsserver $out/bin/tsdnsserver
+  '';
+
+  passthru.updateScript = writeScript "update-teampeak-server" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p common-updater-scripts curl gnugrep gnused
+
+    set -eu -o pipefail
+
+    version=$( \
+        curl -s "https://www.teamspeak.de/download/teamspeak-3-amd64-server-linux/" \
+        | grep softwareVersion \
+        | sed -E -e 's/^.*<span itemprop="softwareVersion">([^<]+)<\/span>.*$/\1/' \
+    )
+
+    versionOld=$(nix-instantiate --eval --strict -A "teamspeak_server.version")
+
+    nixFile=pkgs/applications/networking/instant-messengers/teamspeak/server.nix
+
+    update-source-version teamspeak_server "$version" --system=i686-linux
+
+    sed -i -e "s/version = \"$version\";/version = $versionOld;/" "$nixFile"
+
+    update-source-version teamspeak_server "$version" --system=x86_64-linux
+  '';
+
+  meta = with lib; {
+    description = "TeamSpeak voice communication server";
+    homepage = "https://teamspeak.com/";
+    license = licenses.unfreeRedistributable;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ arobyn gerschtli ];
+  };
+}
+
+/*
+License issues:
+Date: Mon, 10 Dec 2007 19:55:16 -0500
+From: TeamSpeak Sales <sales@tritoncia.com>
+To: 'Marc Weber' <marco-oweber@gmx.de>
+Subject: RE: teamspeak on nix?
+
+Yes, that would be fine.  As long as you are not renting servers or selling
+TeamSpeak then you are more than welcome to distribute it.
+
+Thank you,
+
+TeamSpeak Sales Team
+________________________________
+e-Mail: sales@tritoncia.com
+TeamSpeak: http://www.TeamSpeak.com
+Account Login: https://sales.TritonCIA.com/users
+
+
+
+-----Original Message-----
+From: Marc Weber [mailto:marco-oweber@gmx.de]
+Sent: Monday, December 10, 2007 5:03 PM
+To: sales@tritoncia.com
+Subject: teamspeak on nix?
+
+Hello,
+
+nix is very young software distribution system (http://nix.cs.uu.nl/)
+I'd like to ask wether you permit us to add teamspeak (server/ client?)
+
+Sincerly
+Marc Weber (small nix contributor)
+*/
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
new file mode 100644
index 000000000000..676902d68ef6
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/kotatogram-desktop/default.nix
@@ -0,0 +1,50 @@
+{ mkDerivation, lib, fetchFromGitHub, pkg-config, python3, cmake, ninja
+, qtbase, qtimageformats, libdbusmenu, hunspell, xdg-utils, ffmpeg_3, openalSoft
+, lzma, lz4, xxHash, zlib, minizip, openssl, libtgvoip, microsoft_gsl, tl-expected
+, range-v3
+}:
+
+with lib;
+
+mkDerivation rec {
+  pname = "kotatogram-desktop";
+  version = "1.2";
+
+  src = fetchFromGitHub {
+    owner = "kotatogram";
+    repo = "kotatogram-desktop";
+    rev = "k${version}";
+    sha256 = "00pdx3cjhrihf7ihhmszcf159jrzn1bcx20vwiiizs5r1qk8l210";
+    fetchSubmodules = true;
+  };
+
+  nativeBuildInputs = [ pkg-config python3 cmake ninja ];
+
+  buildInputs = [
+    qtbase qtimageformats ffmpeg_3 openalSoft lzma lz4 xxHash libdbusmenu
+    zlib minizip openssl hunspell libtgvoip microsoft_gsl tl-expected range-v3
+  ];
+
+  qtWrapperArgs = [
+    "--prefix PATH : ${xdg-utils}/bin"
+  ];
+
+  cmakeFlags = [
+    "-DTDESKTOP_API_TEST=ON"
+    "-DDESKTOP_APP_USE_PACKAGED_RLOTTIE=OFF"
+    "-DDESKTOP_APP_USE_PACKAGED_VARIANT=OFF"
+  ];
+
+  meta = {
+    description = "Kotatogram – experimental Telegram Desktop fork";
+    longDescription = ''
+      Unofficial desktop client for the Telegram messenger, based on Telegram Desktop.
+
+      It contains some useful (or purely cosmetic) features, but they could be unstable. A detailed list is available here: https://kotatogram.github.io/changes
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    homepage = "https://kotatogram.github.io";
+    maintainers = with maintainers; [ ilya-fedin ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix
new file mode 100644
index 000000000000..693a01f5d89a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/default.nix
@@ -0,0 +1,108 @@
+{ mkDerivation, lib, fetchurl, callPackage
+, pkg-config, cmake, ninja, python3, wrapGAppsHook, wrapQtAppsHook, removeReferencesTo
+, qtbase, qtimageformats, gtk3, libsForQt5, enchant2, lz4, xxHash
+, dee, ffmpeg, openalSoft, minizip, libopus, alsaLib, libpulseaudio, range-v3
+, tl-expected, hunspell
+# TODO: Shouldn't be required:
+, pcre, xorg, util-linux, libselinux, libsepol, epoxy, at-spi2-core, libXtst
+, xdg-utils
+}:
+
+with lib;
+
+# Main reference:
+# - This package was originally based on the Arch package but all patches are now upstreamed:
+#   https://git.archlinux.org/svntogit/community.git/tree/trunk/PKGBUILD?h=packages/telegram-desktop
+# Other references that could be useful:
+# - https://git.alpinelinux.org/aports/tree/testing/telegram-desktop/APKBUILD
+# - https://github.com/void-linux/void-packages/blob/master/srcpkgs/telegram-desktop/template
+
+let
+  tg_owt = callPackage ./tg_owt.nix {};
+
+in mkDerivation rec {
+  pname = "telegram-desktop";
+  version = "2.5.8";
+
+  # Telegram-Desktop with submodules
+  src = fetchurl {
+    url = "https://github.com/telegramdesktop/tdesktop/releases/download/v${version}/tdesktop-${version}-full.tar.gz";
+    sha256 = "0zj1g24fi4m84p6zj9yk55v8sbhn0jdpdhp33y12d2msz0qwp2cw";
+  };
+
+  postPatch = ''
+    substituteInPlace Telegram/lib_spellcheck/spellcheck/platform/linux/linux_enchant.cpp \
+      --replace '"libenchant-2.so.2"' '"${enchant2}/lib/libenchant-2.so.2"'
+    substituteInPlace Telegram/CMakeLists.txt \
+      --replace '"''${TDESKTOP_LAUNCHER_BASENAME}.appdata.xml"' '"''${TDESKTOP_LAUNCHER_BASENAME}.metainfo.xml"'
+  '';
+
+  # We want to run wrapProgram manually (with additional parameters)
+  dontWrapGApps = true;
+  dontWrapQtApps = true;
+
+  nativeBuildInputs = [ pkg-config cmake ninja python3 wrapGAppsHook wrapQtAppsHook removeReferencesTo ];
+
+  buildInputs = [
+    qtbase qtimageformats gtk3 libsForQt5.kwayland libsForQt5.libdbusmenu enchant2 lz4 xxHash
+    dee ffmpeg openalSoft minizip libopus alsaLib libpulseaudio range-v3
+    tl-expected hunspell
+    tg_owt
+    # TODO: Shouldn't be required:
+    pcre xorg.libpthreadstubs xorg.libXdmcp util-linux libselinux libsepol epoxy at-spi2-core libXtst
+  ];
+
+  cmakeFlags = [
+    "-Ddisable_autoupdate=ON"
+    # We're allowed to used the API ID of the Snap package:
+    "-DTDESKTOP_API_ID=611335"
+    "-DTDESKTOP_API_HASH=d524b414d21f4d37f08684c1df41ac9c"
+    #"-DDESKTOP_APP_SPECIAL_TARGET=\"\"" # TODO: Error when set to "": Bad special target '""'
+    "-DTDESKTOP_LAUNCHER_BASENAME=telegramdesktop" # Note: This is the default
+  ];
+
+  # Note: The following packages could be packaged system-wide, but it's
+  # probably best to use the bundled ones from tdesktop (Arch does this too):
+  # rlottie:
+  # - CMake flag: "-DTDESKTOP_USE_PACKAGED_TGVOIP=ON"
+  # - Sources (problem: there are no stable releases!):
+  #   - desktop-app (tdesktop): https://github.com/desktop-app/rlottie
+  #   - upstream: https://github.com/Samsung/rlottie
+  # libtgvoip:
+  # - CMake flag: "-DDESKTOP_APP_USE_PACKAGED_RLOTTIE=ON"
+  # - Sources  (problem: the stable releases might be too old!):
+  #   - tdesktop: https://github.com/telegramdesktop/libtgvoip
+  #   - upstream: https://github.com/grishka/libtgvoip
+  # Both of these packages are included in this PR (kotatogram-desktop):
+  # https://github.com/NixOS/nixpkgs/pull/75210
+  # TODO: Package mapbox-variant
+
+  postFixup = ''
+    # This is necessary to run Telegram in a pure environment.
+    # We also use gappsWrapperArgs from wrapGAppsHook.
+    wrapProgram $out/bin/telegram-desktop \
+      "''${gappsWrapperArgs[@]}" \
+      "''${qtWrapperArgs[@]}" \
+      --prefix PATH : ${xdg-utils}/bin \
+      --set XDG_RUNTIME_DIR "XDG-RUNTIME-DIR"
+    sed -i $out/bin/telegram-desktop \
+      -e "s,'XDG-RUNTIME-DIR',\"\''${XDG_RUNTIME_DIR:-/run/user/\$(id --user)}\","
+  '';
+
+  passthru = {
+    inherit tg_owt;
+  };
+
+  meta = {
+    description = "Telegram Desktop messaging app";
+    longDescription = ''
+      Desktop client for the Telegram messenger, based on the Telegram API and
+      the MTProto secure protocol.
+    '';
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    homepage = "https://desktop.telegram.org/";
+    changelog = "https://github.com/telegramdesktop/tdesktop/releases/tag/v{version}";
+    maintainers = with maintainers; [ primeos abbradar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix
new file mode 100644
index 000000000000..b5a6579db57c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telegram/tdesktop/tg_owt.nix
@@ -0,0 +1,34 @@
+{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, ninja, yasm
+, libjpeg, openssl, libopus, ffmpeg, alsaLib, libpulseaudio, protobuf
+}:
+
+let
+  rev = "be23804afce3bb2e80a1d57a7c1318c71b82b7de";
+  sha256 = "0avdxkig8z1ainzyxkm9vmlvkyqbjalwb4h9s9kcail82mnldnhc";
+
+in stdenv.mkDerivation {
+  pname = "tg_owt";
+  version = "git-${rev}";
+
+  src = fetchFromGitHub {
+    owner = "desktop-app";
+    repo = "tg_owt";
+    inherit rev sha256;
+    fetchSubmodules = true;
+  };
+
+  outputs = [ "out" "dev" ];
+
+  nativeBuildInputs = [ pkg-config cmake ninja yasm ];
+
+  buildInputs = [
+    libjpeg openssl libopus ffmpeg alsaLib libpulseaudio protobuf
+  ];
+
+  cmakeFlags = [
+    # Building as a shared library isn't officially supported and currently broken:
+    "-DBUILD_SHARED_LIBS=OFF"
+  ];
+
+  meta.license = lib.licenses.bsd3;
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix
new file mode 100644
index 000000000000..3fe88c287c58
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/gabble/default.nix
@@ -0,0 +1,28 @@
+{ lib, stdenv, fetchurl, pkg-config, libxslt, telepathy-glib, libxml2, dbus-glib, dbus
+, sqlite, libsoup, libnice, gnutls}:
+
+stdenv.mkDerivation rec {
+  name = "telepathy-gabble-0.18.4";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/telepathy-gabble/${name}.tar.gz";
+    sha256 = "174nlkqm055vrhv11gy73m20jbsggcb0ddi51c7s9m3j5ibr2p0i";
+  };
+
+  nativeBuildInputs = [ pkg-config libxslt ];
+  buildInputs = [ libxml2 dbus-glib sqlite libsoup libnice telepathy-glib gnutls telepathy-glib.python ];
+
+  checkInputs = [ dbus.daemon ];
+
+  configureFlags = [ "--with-ca-certificates=/etc/ssl/certs/ca-certificates.crt" ];
+
+  enableParallelBuilding = true;
+  doCheck = true;
+
+  meta = with lib; {
+    homepage = "https://telepathy.freedesktop.org/components/telepathy-gabble/";
+    description = "Jabber/XMPP connection manager for the Telepathy framework";
+    license = licenses.lgpl21Plus;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix
new file mode 100644
index 000000000000..74e4d1039e77
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/haze/default.nix
@@ -0,0 +1,29 @@
+{ lib, stdenv, fetchurl, fetchpatch, pidgin, telepathy-glib, glib, dbus-glib, pkg-config, libxslt }:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-haze";
+  name = "${pname}-0.8.0";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/${pname}/${name}.tar.gz";
+    sha256 = "1jgrp32p6rllj089ynbsk3n9xrvsvzmwzhf0ql05kkgj0nf08xiy";
+  };
+
+  buildInputs = [ glib telepathy-glib dbus-glib pidgin telepathy-glib.python ];
+
+  nativeBuildInputs = [ pkg-config libxslt ];
+
+  patches = [
+    # Patch from Gentoo that helps telepathy-haze build with more
+    # recent versions of pidgin.
+    (fetchpatch {
+      url = "https://raw.githubusercontent.com/gentoo/gentoo/master/net-voip/telepathy-haze/files/telepathy-haze-0.8.0-pidgin-2.10.12-compat.patch";
+      sha256 = "0fa1p4n1559qd096w7ya4kvfnc1c98ykarkxzlpkwvzbczwzng3c";
+    })
+  ];
+
+  meta = {
+    description = "A Telepathy connection manager based on libpurple";
+    platforms = lib.platforms.gnu ++ lib.platforms.linux; # Random choice
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix
new file mode 100644
index 000000000000..bc66d77e2246
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/idle/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchurl, glib, dconf, pkg-config, dbus-glib, telepathy-glib, libxslt, makeWrapper }:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-idle";
+  version = "0.2.0";
+
+  src = fetchurl {
+    url = "http://telepathy.freedesktop.org/releases/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "1argdzbif1vdmwp5vqbgkadq9ancjmgdm2ncp0qfckni715ss4rh";
+  };
+
+  nativeBuildInputs = [ pkg-config ];
+  buildInputs = [ glib telepathy-glib dbus-glib libxslt telepathy-glib.python (lib.getLib dconf) makeWrapper ];
+
+  preFixup = ''
+    wrapProgram "$out/libexec/telepathy-idle" \
+      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules"
+  '';
+
+  meta = {
+    description = "IRC connection manager for the Telepathy framework";
+    license = lib.licenses.lgpl21;
+    platforms = lib.platforms.gnu ++ lib.platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix
new file mode 100644
index 000000000000..bae29f4b31f1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/logger/default.nix
@@ -0,0 +1,36 @@
+{ lib, stdenv, fetchurl, dbus-glib, libxml2, sqlite, telepathy-glib, pkg-config
+, dconf, makeWrapper, intltool, libxslt, gobject-introspection, dbus }:
+
+stdenv.mkDerivation rec {
+  project = "telepathy-logger";
+  name = "${project}-0.8.2";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/${project}/${name}.tar.bz2";
+    sha256 = "1bjx85k7jyfi5pvl765fzc7q2iz9va51anrc2djv7caksqsdbjlg";
+  };
+
+  nativeBuildInputs = [
+    makeWrapper pkg-config intltool libxslt gobject-introspection
+  ];
+  buildInputs = [
+    dbus-glib libxml2 sqlite telepathy-glib
+    dbus telepathy-glib.python
+  ];
+
+  configureFlags = [ "--enable-call" ];
+
+  preFixup = ''
+    wrapProgram "$out/libexec/telepathy-logger" \
+      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "Logger service for Telepathy framework";
+    homepage = "https://telepathy.freedesktop.org/components/telepathy-logger/";
+    license = licenses.lgpl21;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.gnu ++ platforms.linux; # Arbitrary choice
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix
new file mode 100644
index 000000000000..8464619f1e73
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/mission-control/default.nix
@@ -0,0 +1,53 @@
+{ lib, stdenv
+, fetchurl
+, pkg-config
+, dconf
+, telepathy-glib
+, python3
+, libxslt
+, makeWrapper
+}:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-mission-control";
+  version = "5.16.6";
+
+  outputs = [ "out" "lib" "dev" ];
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/${pname}/${pname}-${version}.tar.gz";
+    sha256 = "0ibs575pfr0wmhfcw6ln6iz7gw2y45l3bah11rksf6g9jlwsxy1d";
+  };
+
+  buildInputs = [
+    python3
+  ]; # ToDo: optional stuff missing
+
+  nativeBuildInputs = [
+    pkg-config
+    libxslt
+    makeWrapper
+  ];
+
+  propagatedBuildInputs = [
+    telepathy-glib
+  ];
+
+  doCheck = true;
+
+  enableParallelBuilding = true;
+
+  preFixup = ''
+    wrapProgram "$lib/libexec/mission-control-5" \
+      --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
+      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
+  '';
+
+  meta = with lib; {
+    description = "An account manager and channel dispatcher for the Telepathy framework";
+    homepage = "https://telepathy.freedesktop.org/components/telepathy-mission-control/";
+    license = licenses.lgpl21Only;
+    maintainers = with maintainers; [ jtojnar ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/salut/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/salut/default.nix
new file mode 100644
index 000000000000..cf166f7e2d34
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/telepathy/salut/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchurl, libxslt, glib, libxml2, telepathy-glib, avahi, libsoup
+, libuuid, openssl, pcre, sqlite, pkg-config }:
+
+stdenv.mkDerivation rec {
+  pname = "telepathy-salut";
+  name = "${pname}-0.8.1";
+
+  src = fetchurl {
+    url = "https://telepathy.freedesktop.org/releases/${pname}/${name}.tar.gz";
+    sha256 = "13k112vrr3zghzr03pnbqc1id65qvpj0sn0virlbf4dmr2511fbh";
+  };
+
+  # pcre needed because https://github.com/NixOS/nixpkgs/pull/15046
+  buildInputs = [ glib libxml2 telepathy-glib avahi libsoup libuuid openssl
+    sqlite pcre telepathy-glib.python ];
+
+  nativeBuildInputs = [ libxslt pkg-config ];
+
+  configureFlags = [ "--disable-avahi-tests" ];
+
+  meta = with lib; {
+    description = "Link-local XMPP connection manager for Telepathy";
+    platforms = platforms.gnu ++ platforms.linux; # Random choice
+    maintainers = [ maintainers.lethalman ];
+    broken = true;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix
new file mode 100644
index 000000000000..114b3ab8f4d1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/tensor/default.nix
@@ -0,0 +1,56 @@
+{ mkDerivation, lib, fetchgit, qtbase, qtquickcontrols, qmake, makeDesktopItem }:
+
+# we now have libqmatrixclient so a future version of tensor that supports it
+# should use that
+
+mkDerivation rec {
+  pname = "tensor-git";
+  version = "2017-02-21";
+
+  src = fetchgit {
+    url             = "https://github.com/davidar/tensor.git";
+    rev             = "f3f3056d770d7fb4a21c610cee7936ee900569f5";
+    sha256          = "19in8c7a2hxsx2c4lj540w5c3pn1882645m21l91mcriynqr67k9";
+    fetchSubmodules = true;
+  };
+
+  enableParallelBuilding = true;
+
+  buildInputs = [ qtbase qtquickcontrols ];
+  nativeBuildInputs = [ qmake ];
+
+  desktopItem = makeDesktopItem {
+    name        = "tensor";
+    exec        = "@bin@";
+    icon        = "tensor.png";
+    comment     = meta.description;
+    desktopName = "Tensor Matrix Client";
+    genericName = meta.description;
+    categories  = "Chat;Utility";
+    mimeType    = "application/x-chat";
+  };
+
+  installPhase = ''
+    runHook preInstall
+
+    install -Dm755 tensor $out/bin/tensor
+    install -Dm644 client/logo.png \
+                   $out/share/icons/hicolor/512x512/apps/tensor.png
+    install -Dm644 ${desktopItem}/share/applications/tensor.desktop \
+                   $out/share/applications/tensor.desktop
+
+    substituteInPlace $out/share/applications/tensor.desktop \
+      --subst-var-by bin $out/bin/tensor
+
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "https://matrix.org/docs/projects/client/tensor.html";
+    description = "Cross-platform Qt5/QML-based Matrix client";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ peterhoeg ];
+    inherit (qtbase.meta) platforms;
+    inherit version;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/torchat/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/torchat/default.nix
new file mode 100644
index 000000000000..087dd502946d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/torchat/default.nix
@@ -0,0 +1,37 @@
+{ lib, stdenv, fetchurl, python, unzip, wxPython, wrapPython, tor }:
+stdenv.mkDerivation rec {
+
+  pname = "torchat";
+  version = "0.9.9.553";
+
+  src = fetchurl {
+    url = "https://github.com/prof7bit/TorChat/archive/${version}.tar.gz";
+    sha256 = "0rb4lvv40pz6ab5kxq40ycvh7kh1yxn7swzgv2ff2nbhi62xnzp0";
+  };
+
+  buildInputs = [ python unzip wxPython wrapPython ];
+  pythonPath = [ wxPython ];
+
+  preConfigure = "cd torchat/src; rm portable.txt";
+
+  installPhase = ''
+    substituteInPlace "Tor/tor.sh" --replace "tor -f" "${tor}/bin/tor -f"
+
+    wrapPythonPrograms
+
+    mkdir -p $out/lib/torchat
+    cp -rf * $out/lib/torchat
+    makeWrapper ${python}/bin/python $out/bin/torchat \
+        --set PYTHONPATH $out/lib/torchat:$program_PYTHONPATH \
+        --run "cd $out/lib/torchat" \
+        --add-flags "-O $out/lib/torchat/torchat.py"
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/prof7bit/TorChat";
+    description = "Instant messaging application on top of the Tor network and it's location hidden services";
+    license = licenses.gpl3;
+    maintainers = [ maintainers.phreedom ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix
new file mode 100644
index 000000000000..fc6c78a4f673
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/toxic/default.nix
@@ -0,0 +1,32 @@
+{ lib, stdenv, fetchFromGitHub, libsodium, ncurses, curl
+, libtoxcore, openal, libvpx, freealut, libconfig, pkg-config, libopus
+, qrencode, gdk-pixbuf, libnotify }:
+
+stdenv.mkDerivation rec {
+  pname = "toxic";
+  version = "0.10.1";
+
+  src = fetchFromGitHub {
+    owner  = "Tox";
+    repo   = "toxic";
+    rev    = "v${version}";
+    sha256 = "sha256-EElDi/VEYgYPpoDNatxcKQC1pnCU8kOcj0bAFojD9fU=";
+  };
+
+  makeFlags = [ "PREFIX=$(out)"];
+  installFlags = [ "PREFIX=$(out)"];
+
+  buildInputs = [
+    libtoxcore libsodium ncurses curl gdk-pixbuf libnotify
+  ] ++ lib.optionals (!stdenv.isAarch32) [
+    openal libopus libvpx freealut qrencode
+  ];
+  nativeBuildInputs = [ pkg-config libconfig ];
+
+  meta = with lib; {
+    description = "Reference CLI for Tox";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix
new file mode 100644
index 000000000000..256e026a060e
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/turses/default.nix
@@ -0,0 +1,54 @@
+{ lib, fetchpatch, python3Packages }:
+
+with lib;
+with python3Packages;
+
+buildPythonPackage rec {
+  pname = "turses";
+  version = "0.3.1";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "15mkhm3b5ka42h8qph0mhh8izfc1200v7651c62k7ldcs50ib9j6";
+  };
+
+  checkInputs = [ mock pytest coverage tox ];
+  propagatedBuildInputs = [ urwid tweepy future ];
+
+  LC_ALL = "en_US.UTF-8";
+
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/louipc/turses/commit/be0961b51f502d49fd9e2e5253ac130e543a31c7.patch";
+      sha256 = "17s1n0275mcj03vkf3n39dmc09niwv4y7ssrfk7k3vqx22kppzg3";
+    })
+    # python 3.7+ support
+    (fetchpatch {
+      url = "https://github.com/booxter/turses/commit/e6e285eae50fc3d2042a476185fe60daef1e758e.patch";
+      sha256 = "0g2zsrny955viwgs2l6gpiiz8m67b5sgdcxkjmfimfvvih5sg79f";
+    })
+  ];
+
+  checkPhase = ''
+    TMP_TURSES=`echo turses-$RANDOM`
+    mkdir $TMP_TURSES
+    PYTHONPATH=tests:$PYTHONPATH HOME=$TMP_TURSES py.test tests/
+    rm -rf $TMP_TURSES
+  '';
+
+  postPatch = ''
+    sed -i -e 's|urwid==1.3.0|urwid==${getVersion urwid}|' setup.py
+    sed -i -e "s|future==0.14.3|future==${getVersion future}|" setup.py
+    sed -i -e "s|tweepy==3.3.0|tweepy==${getVersion tweepy}|" setup.py
+    sed -i -e "s|config.generate_config_file.assert_called_once()|assert config.generate_config_file.call_count == 1|" tests/test_config.py
+    sed -i -e "s|self.observer.update.assert_called_once()|assert self.observer.update.call_count == 1|" tests/test_meta.py
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/louipc/turses";
+    description = "A Twitter client for the console";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix
new file mode 100644
index 000000000000..8b306c075062
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/twinkle/default.nix
@@ -0,0 +1,84 @@
+{ lib
+, fetchFromGitHub
+, cmake
+, libxml2
+, libsndfile
+, file
+, readline
+, bison
+, flex
+, ucommon
+, ccrtp
+, qtbase
+, qttools
+, qtquickcontrols2
+, alsaLib
+, speex
+, ilbc
+, fetchurl
+, mkDerivation
+, bcg729
+}:
+
+mkDerivation rec {
+  pname = "twinkle";
+  version = "1.10.2";
+
+  src = fetchFromGitHub {
+    repo = pname;
+    owner = "LubosD";
+    rev = "v${version}";
+    sha256 = "0s0gi03xwvzp02ah4q6j33r9jx9nbayr6dxlg2ck9pwbay1nq1hx";
+  };
+
+  buildInputs = [
+    libxml2
+    file # libmagic
+    libsndfile
+    readline
+    ucommon
+    ccrtp
+    qtbase
+    qttools
+    qtquickcontrols2
+    alsaLib
+    speex
+    ilbc
+  ];
+
+  patches = [
+    # patch for bcg729 1.0.2+
+    (fetchurl { # https://github.com/LubosD/twinkle/pull/152
+      url = "https://github.com/LubosD/twinkle/compare/05082ae12051821b1d969e6672d9e4e5afe1bc07...7a6c533cda387652b5b4cb2a867be1a18585890c.patch";
+      sha256 = "39fc6cef3e88cfca8db44612b2d082fb618027b0f99509138d3c0d2777a494c2";
+    })
+    # patch manual link to not link to old url, which now points to NSFW page
+    (fetchurl { # https://github.com/LubosD/twinkle/commit/05082ae12051821b1d969e6672d9e4e5afe1bc07
+      url = "https://github.com/LubosD/twinkle/commit/05082ae12051821b1d969e6672d9e4e5afe1bc07.diff";
+      sha256 = "1iamragr9wp2vczsnp6n261fpr1ai2nc2abp0228jlar9zafksw0";
+    })
+  ];
+
+  nativeBuildInputs = [
+    cmake
+    bison
+    flex
+    bcg729
+  ];
+
+  cmakeFlags = [
+    "-DWITH_G729=On"
+    "-DWITH_SPEEX=On"
+    "-DWITH_ILBC=On"
+    /* "-DWITH_DIAMONDCARD=On" seems ancient and broken */
+  ];
+
+  meta = with lib; {
+    changelog = "https://github.com/LubosD/twinkle/blob/${version}/NEWS";
+    description = "A SIP-based VoIP client";
+    homepage = "http://twinkle.dolezel.info/";
+    license = licenses.gpl2Plus;
+    maintainers = [ maintainers.mkg20001 ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix
new file mode 100644
index 000000000000..668e614c4746
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/utox/default.nix
@@ -0,0 +1,43 @@
+{ lib, stdenv, fetchFromGitHub, check, cmake, pkg-config
+, libtoxcore, filter-audio, dbus, libvpx, libX11, openal, freetype, libv4l
+, libXrender, fontconfig, libXext, libXft, libsodium, libopus }:
+
+stdenv.mkDerivation rec {
+  pname = "utox";
+
+  version = "0.17.0";
+
+  src = fetchFromGitHub {
+    owner  = "uTox";
+    repo   = "uTox";
+    rev    = "v${version}";
+    sha256 = "12wbq883il7ikldayh8hm0cjfrkp45vn05xx9s1jbfz6gmkidyar";
+    fetchSubmodules = true;
+  };
+
+  buildInputs = [
+    libtoxcore dbus libvpx libX11 openal freetype
+    libv4l libXrender fontconfig libXext libXft filter-audio
+    libsodium libopus
+  ];
+
+  nativeBuildInputs = [
+    cmake pkg-config
+  ];
+
+  cmakeFlags = [
+    "-DENABLE_AUTOUPDATE=OFF"
+    "-DENABLE_TESTS=${if doCheck then "ON" else "OFF"}"
+  ];
+
+  doCheck = stdenv.hostPlatform == stdenv.buildPlatform;
+  checkInputs = [ check ];
+
+  meta = with lib; {
+    description = "Lightweight Tox client";
+    homepage = "https://github.com/uTox/uTox";
+    license = licenses.gpl3;
+    maintainers = with maintainers; [ domenkozar ];
+    platforms = platforms.all;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix
new file mode 100644
index 000000000000..0fc7e8b6d8ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/vacuum/default.nix
@@ -0,0 +1,41 @@
+{ lib, stdenv, fetchFromGitHub
+  , qt4, qmake4Hook, openssl
+  , xorgproto, libX11, libXScrnSaver
+  , xz, zlib
+}:
+stdenv.mkDerivation {
+  pname = "vacuum-im";
+  version = "1.3.0.20160104";
+
+  src = fetchFromGitHub {
+    owner = "Vacuum-IM";
+    repo = "vacuum-im";
+    rev = "1.3.0.20160104-Alpha";
+    sha256 = "1jcw9c7s75y4c3m4skfc3cc0i519z39b23n997vj5mwcjplxyc76";
+  };
+
+  buildInputs = [
+    qt4 openssl xorgproto libX11 libXScrnSaver xz zlib
+  ];
+
+  # hack: needed to fix build issues in
+  # https://hydra.nixos.org/build/38322959/nixlog/1
+  # should be an upstream issue but it's easy to fix
+  NIX_LDFLAGS = "-lz";
+
+  nativeBuildInputs = [ qmake4Hook ];
+
+  preConfigure = ''
+    qmakeFlags="$qmakeFlags INSTALL_PREFIX=$out"
+  '';
+
+  hardeningDisable = [ "format" ];
+
+  meta = with lib; {
+    description = "An XMPP client fully composed of plugins";
+    maintainers = [ maintainers.raskin ];
+    platforms = platforms.linux;
+    license = licenses.gpl3;
+    homepage = "http://www.vacuum-im.org";
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix
new file mode 100644
index 000000000000..4389ee153c56
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/viber/default.nix
@@ -0,0 +1,106 @@
+{fetchurl, lib, stdenv, dpkg, makeWrapper,
+ alsaLib, cups, curl, dbus, expat, fontconfig, freetype, glib, gst_all_1,
+ harfbuzz, libcap, libGL, libGLU, libpulseaudio, libxkbcommon, libxml2, libxslt,
+ nspr, nss, openssl, systemd, wayland, xorg, zlib, ...
+}:
+
+stdenv.mkDerivation {
+  pname = "viber";
+  version = "13.3.1.22";
+
+  src = fetchurl {
+    url = "https://download.cdn.viber.com/cdn/desktop/Linux/viber.deb";
+    sha256 = "0rs26x0lycavybn6k1hbb5kzms0zzcmxlrmi4g8k7vyafj6s8dqh";
+  };
+
+  buildInputs = [ dpkg makeWrapper ];
+
+  dontUnpack = true;
+
+  libPath = lib.makeLibraryPath [
+      alsaLib
+      cups
+      curl
+      dbus
+      expat
+      fontconfig
+      freetype
+      glib
+      gst_all_1.gst-plugins-base
+      gst_all_1.gstreamer
+      harfbuzz
+      libcap
+      libGLU libGL
+      libpulseaudio
+      libxkbcommon
+      libxml2
+      libxslt
+      nspr
+      nss
+      openssl
+      stdenv.cc.cc
+      systemd
+      wayland
+      zlib
+
+      xorg.libICE
+      xorg.libSM
+      xorg.libX11
+      xorg.libxcb
+      xorg.libXcomposite
+      xorg.libXcursor
+      xorg.libXdamage
+      xorg.libXext
+      xorg.libXfixes
+      xorg.libXi
+      xorg.libXrandr
+      xorg.libXrender
+      xorg.libXScrnSaver
+      xorg.libXtst
+      xorg.xcbutilimage
+      xorg.xcbutilkeysyms
+      xorg.xcbutilrenderutil
+      xorg.xcbutilwm
+  ]
+  ;
+
+  installPhase = ''
+    dpkg-deb -x $src $out
+    mkdir -p $out/bin
+
+    # Soothe nix-build "suspicions"
+    chmod -R g-w $out
+
+    for file in $(find $out -type f \( -perm /0111 -o -name \*.so\* \) ); do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
+      patchelf --set-rpath $libPath:$out/opt/viber/lib $file || true
+    done
+
+    # qt.conf is not working, so override everything using environment variables
+    wrapProgram $out/opt/viber/Viber \
+      --set QT_PLUGIN_PATH "$out/opt/viber/plugins" \
+      --set QT_XKB_CONFIG_ROOT "${xorg.xkeyboardconfig}/share/X11/xkb" \
+      --set QTCOMPOSE "${xorg.libX11.out}/share/X11/locale"
+    ln -s $out/opt/viber/Viber $out/bin/viber
+
+    mv $out/usr/share $out/share
+    rm -rf $out/usr
+
+    # Fix the desktop link
+    substituteInPlace $out/share/applications/viber.desktop \
+      --replace /opt/viber/Viber $out/opt/viber/Viber \
+      --replace /usr/share/ $out/share/
+  '';
+
+  dontStrip = true;
+  dontPatchELF = true;
+
+  meta = {
+    homepage = "http://www.viber.com";
+    description = "An instant messaging and Voice over IP (VoIP) app";
+    license = lib.licenses.unfree;
+    platforms = [ "x86_64-linux" ];
+    maintainers = with lib.maintainers; [ jagajaga ];
+  };
+
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix
new file mode 100644
index 000000000000..d7deb7ee052c
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/vk-messenger/default.nix
@@ -0,0 +1,54 @@
+{ stdenv, lib, fetchurl, rpmextract, autoPatchelfHook
+, xorg, gtk3, gnome2, nss, alsaLib, udev, libnotify
+, wrapGAppsHook }:
+
+let
+  version = "5.0.1";
+in stdenv.mkDerivation {
+  pname = "vk-messenger";
+  inherit version;
+  src = {
+    i686-linux = fetchurl {
+      url = "https://desktop.userapi.com/rpm/master/vk-${version}.i686.rpm";
+      sha256 = "1ji23x13lzbkiqfrrwx1pj6gmms0p58cjmjc0y4g16kqhlxl60v6";
+    };
+    x86_64-linux = fetchurl {
+      url = "https://desktop.userapi.com/rpm/master/vk-${version}.x86_64.rpm";
+      sha256 = "01vvmia2qrxvrvavk9hkkyvfg4pg15m01grwb28884vy4nqw400y";
+    };
+  }.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
+
+  nativeBuildInputs = [ rpmextract autoPatchelfHook wrapGAppsHook ];
+  buildInputs = (with xorg; [
+    libXdamage libXtst libXScrnSaver libxkbfile
+  ]) ++ [
+    gtk3 nss alsaLib
+  ];
+  runtimeDependencies = [ (lib.getLib udev) libnotify ];
+
+  unpackPhase = ''
+    rpmextract $src
+  '';
+
+  buildPhase = ''
+    substituteInPlace usr/share/applications/vk.desktop \
+      --replace /usr/share/pixmaps/vk.png vk
+  '';
+
+  installPhase = ''
+    mkdir $out
+    cd usr
+    cp -r --parents bin $out
+    cp -r --parents share/vk $out
+    cp -r --parents share/applications $out
+    cp -r --parents share/pixmaps $out
+  '';
+
+  meta = with lib; {
+    description = "Simple and Convenient Messaging App for VK";
+    homepage = "https://vk.com/messenger";
+    license = licenses.unfree;
+    maintainers = [ maintainers.gnidorah ];
+    platforms = ["i686-linux" "x86_64-linux"];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix
new file mode 100644
index 000000000000..ba0f867b2aa1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/wavebox/default.nix
@@ -0,0 +1,68 @@
+{ alsaLib, autoPatchelfHook, fetchurl, gtk3, libnotify
+, makeDesktopItem, makeWrapper, nss, lib, stdenv, udev, xdg-utils
+, xorg
+}:
+
+with lib;
+
+let
+  bits = "x86_64";
+
+  version = "4.11.3";
+
+  desktopItem = makeDesktopItem rec {
+    name = "Wavebox";
+    exec = "wavebox";
+    icon = "wavebox";
+    desktopName = name;
+    genericName = name;
+    categories = "Network;";
+  };
+
+  tarball = "Wavebox_${replaceStrings ["."] ["_"] (toString version)}_linux_${bits}.tar.gz";
+
+in stdenv.mkDerivation {
+  pname = "wavebox";
+  inherit version;
+  src = fetchurl {
+    url = "https://github.com/wavebox/waveboxapp/releases/download/v${version}/${tarball}";
+    sha256 = "0z04071lq9bfyrlg034fmvd4346swgfhxbmsnl12m7c2m2b9z784";
+  };
+
+  # don't remove runtime deps
+  dontPatchELF = true;
+
+  nativeBuildInputs = [ autoPatchelfHook makeWrapper ];
+
+  buildInputs = with xorg; [
+    libXdmcp libXScrnSaver libXtst
+  ] ++ [
+    alsaLib gtk3 nss
+  ];
+
+  runtimeDependencies = [ (getLib udev) libnotify ];
+
+  installPhase = ''
+    mkdir -p $out/bin $out/opt/wavebox
+    cp -r * $out/opt/wavebox
+
+    # provide desktop item and icon
+    mkdir -p $out/share/applications $out/share/pixmaps
+    ln -s ${desktopItem}/share/applications/* $out/share/applications
+    ln -s $out/opt/wavebox/Wavebox-linux-x64/wavebox_icon.png $out/share/pixmaps/wavebox.png
+  '';
+
+  postFixup = ''
+    makeWrapper $out/opt/wavebox/Wavebox $out/bin/wavebox \
+      --prefix PATH : ${xdg-utils}/bin
+  '';
+
+  meta = with lib; {
+    description = "Wavebox messaging application";
+    homepage = "https://wavebox.io";
+    license = licenses.mpl20;
+    maintainers = with maintainers; [ rawkode ];
+    platforms = ["x86_64-linux"];
+    hydraPlatforms = [];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
new file mode 100644
index 000000000000..966583d2089a
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix
@@ -0,0 +1,154 @@
+{ atomEnv
+, autoPatchelfHook
+, dpkg
+, fetchurl
+, makeDesktopItem
+, makeWrapper
+, stdenv
+, lib
+, udev
+, wrapGAppsHook
+, cpio
+, xar
+, libdbusmenu
+}:
+
+let
+
+  inherit (stdenv.hostPlatform) system;
+
+  throwSystem = throw "Unsupported system: ${system}";
+
+  pname = "wire-desktop";
+
+  version = {
+    x86_64-darwin = "3.21.3959";
+    x86_64-linux = "3.21.2936";
+  }.${system} or throwSystem;
+
+  sha256 = {
+    x86_64-darwin = "0fgzzqf1wnkjbcr0j0vjn6sggkz0z1kx6w4gi7gk4c4markdicm1";
+    x86_64-linux = "033804nkz1fdmq3p8iplrlx708x1fjlr09bmrpy36lqg5h7m3yd6";
+  }.${system} or throwSystem;
+
+  meta = with lib; {
+    description = "A modern, secure messenger for everyone";
+    longDescription = ''
+      Wire Personal is a secure, privacy-friendly messenger. It combines useful
+      and fun features, audited security, and a beautiful, distinct user
+      interface.  It does not require a phone number to register and chat.
+
+        * End-to-end encrypted chats, calls, and files
+        * Crystal clear voice and video calling
+        * File and screen sharing
+        * Timed messages and chats
+        * Synced across your phone, desktop and tablet
+    '';
+    homepage = "https://wire.com/";
+    downloadPage = "https://wire.com/download/";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [
+      arianvp
+      kiwi
+      toonn
+      worldofpeace
+    ];
+    platforms = [
+      "x86_64-darwin"
+      "x86_64-linux"
+    ];
+  };
+
+  linux = stdenv.mkDerivation rec {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://wire-app.wire.com/linux/debian/pool/main/"
+      + "Wire-${version}_amd64.deb";
+      inherit sha256;
+    };
+
+    desktopItem = makeDesktopItem {
+      categories = "Network;InstantMessaging;Chat;VideoConference";
+      comment = "Secure messenger for everyone";
+      desktopName = "Wire";
+      exec = "wire-desktop %U";
+      genericName = "Secure messenger";
+      icon = "wire-desktop";
+      name = "wire-desktop";
+      extraEntries = ''
+        StartupWMClass=Wire
+      '';
+    };
+
+    dontBuild = true;
+    dontConfigure = true;
+    dontPatchELF = true;
+    dontWrapGApps = true;
+
+    nativeBuildInputs = [
+      autoPatchelfHook
+      dpkg
+      makeWrapper
+      wrapGAppsHook
+    ];
+
+    buildInputs = atomEnv.packages;
+
+    unpackPhase = "dpkg-deb -x $src .";
+
+    installPhase = ''
+      mkdir -p "$out/bin"
+      cp -R "opt" "$out"
+      cp -R "usr/share" "$out/share"
+      chmod -R g-w "$out"
+
+      # Desktop file
+      mkdir -p "$out/share/applications"
+      cp "${desktopItem}/share/applications/"* "$out/share/applications"
+    '';
+
+    runtimeDependencies = [
+      (lib.getLib udev)
+      libdbusmenu
+    ];
+
+    postFixup = ''
+      makeWrapper $out/opt/Wire/wire-desktop $out/bin/wire-desktop \
+        "''${gappsWrapperArgs[@]}"
+    '';
+  };
+
+  darwin = stdenv.mkDerivation {
+    inherit pname version meta;
+
+    src = fetchurl {
+      url = "https://github.com/wireapp/wire-desktop/releases/download/"
+          + "macos%2F${version}/Wire.pkg";
+      inherit sha256;
+    };
+
+    buildInputs = [
+      cpio
+      xar
+    ];
+
+    unpackPhase = ''
+      xar -xf $src
+      cd com.wearezeta.zclient.mac.pkg
+    '';
+
+    buildPhase = ''
+      cat Payload | gunzip -dc | cpio -i
+    '';
+
+    installPhase = ''
+      mkdir -p $out/Applications
+      cp -r Wire.app $out/Applications
+    '';
+  };
+
+in
+if stdenv.isDarwin
+then darwin
+else linux
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/default.nix
new file mode 100644
index 000000000000..4367230f7756
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/default.nix
@@ -0,0 +1,25 @@
+{ lib, buildGoPackage, fetchFromGitHub }:
+
+buildGoPackage rec {
+  pname = "xmpp-client";
+  version = "20160916-${lib.strings.substring 0 7 rev}";
+  rev = "abbf9020393e8caae3e8996a16ce48446e31cf0e";
+
+  goPackagePath = "github.com/agl/xmpp-client";
+
+  src = fetchFromGitHub {
+    owner = "agl";
+    repo = "xmpp-client";
+    inherit rev;
+    sha256 = "0j9mfr208cachzm39i8b94v5qk9hws278vv2ms9ma4wn16wns81s";
+  };
+
+  goDeps = ./deps.nix;
+
+  meta = with lib; {
+    description = "An XMPP client with OTR support";
+    homepage = "https://github.com/agl/xmpp-client";
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ codsl ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/deps.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/deps.nix
new file mode 100644
index 000000000000..caa41024fc61
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/xmpp-client/deps.nix
@@ -0,0 +1,20 @@
+[
+  {
+    goPackagePath = "golang.org/x/net";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/net";
+      rev = "62ac18b461605b4be188bbc7300e9aa2bc836cd4";
+      sha256 = "0lwwvbbwbf3yshxkfhn6z20gd45dkvnmw2ms36diiy34krgy402p";
+    };
+  }
+  {
+    goPackagePath = "golang.org/x/crypto";
+    fetch = {
+      type = "git";
+      url = "https://go.googlesource.com/crypto";
+      rev = "575fdbe86e5dd89229707ebec0575ce7d088a4a6";
+      sha256 = "1kgv1mkw9y404pk3lcwbs0vgl133mwyp294i18jg9hp10s5d56xa";
+    };
+  }
+]
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix
new file mode 100644
index 000000000000..1ccc9fbe6f57
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/ytalk/default.nix
@@ -0,0 +1,21 @@
+{ lib, stdenv, fetchurl, ncurses }:
+
+stdenv.mkDerivation rec {
+  pname = "ytalk";
+  version = "3.3.0";
+
+  src = fetchurl {
+    url = "ftp://ftp.ourproject.org/pub/ytalk/${pname}-${version}.tar.gz";
+    sha256 = "1d3jhnj8rgzxyxjwfa22vh45qwzjvxw1qh8fz6b7nfkj3zvk9jvf";
+  };
+
+  buildInputs = [ ncurses ];
+
+  meta = {
+    homepage    = "http://ytalk.ourproject.org";
+    description = "A terminal based talk client";
+    platforms   = lib.platforms.unix;
+    maintainers = with lib.maintainers; [ taeer ];
+    license     = lib.licenses.gpl2Plus;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
new file mode 100644
index 000000000000..c431b5d0ce66
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/default.nix
@@ -0,0 +1,125 @@
+{ stdenv
+, lib
+, fetchurl
+, makeWrapper
+, fetchFromGitHub
+# Dynamic libraries
+, alsaLib
+, atk
+, cairo
+, dbus
+, libGL
+, fontconfig
+, freetype
+, gtk3
+, gdk-pixbuf
+, glib
+, pango
+, wayland
+, xorg
+, libxkbcommon
+, zlib
+# Runtime
+, coreutils
+, pciutils
+, procps
+, util-linux
+, qttools
+, pulseaudioSupport ? true, libpulseaudio ? null
+}:
+
+assert pulseaudioSupport -> libpulseaudio != null;
+
+let
+  version = "5.5.7011.0206";
+  srcs = {
+    x86_64-linux = fetchurl {
+      url = "https://zoom.us/client/${version}/zoom_x86_64.pkg.tar.xz";
+      sha256 = "00ahly3kjjznn73vcxgm5wj2pxgw6wdk6vzgd8svfmnl5kqq6c02";
+    };
+  };
+  dontUnpack = true;
+
+  libs = lib.makeLibraryPath ([
+    # $ LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH:$PWD ldd zoom | grep 'not found'
+    alsaLib
+    atk
+    cairo
+    dbus
+    libGL
+    fontconfig
+    freetype
+    gtk3
+    gdk-pixbuf
+    glib
+    pango
+    stdenv.cc.cc
+    wayland
+    xorg.libX11
+    xorg.libxcb
+    xorg.libXcomposite
+    xorg.libXext
+    libxkbcommon
+    xorg.libXrender
+    zlib
+    xorg.xcbutilimage
+    xorg.xcbutilkeysyms
+    xorg.libXfixes
+    xorg.libXtst
+  ] ++ lib.optional (pulseaudioSupport) libpulseaudio);
+
+in stdenv.mkDerivation {
+  name = "zoom-${version}";
+
+  dontUnpack = true;
+
+  nativeBuildInputs = [
+    makeWrapper
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    mkdir $out
+    tar -C $out -xf ${srcs.${stdenv.hostPlatform.system}}
+    mv $out/usr/* $out/
+    runHook postInstall
+  '';
+
+  postFixup = ''
+    # Desktop File
+    substituteInPlace $out/share/applications/Zoom.desktop \
+        --replace "Exec=/usr/bin/zoom" "Exec=$out/bin/zoom"
+
+    for i in zopen zoom ZoomLauncher; do
+      patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zoom/$i
+    done
+
+    # ZoomLauncher sets LD_LIBRARY_PATH before execing zoom
+    wrapProgram $out/opt/zoom/zoom \
+      --prefix LD_LIBRARY_PATH ":" ${libs}
+
+    rm $out/bin/zoom
+    # Zoom expects "zopen" executable (needed for web login) to be present in CWD. Or does it expect
+    # everybody runs Zoom only after cd to Zoom package directory? Anyway, :facepalm:
+    makeWrapper $out/opt/zoom/ZoomLauncher $out/bin/zoom \
+      --run "cd $out/opt/zoom" \
+      --prefix PATH : ${lib.makeBinPath [ coreutils glib.dev pciutils procps qttools.dev util-linux ]} \
+      --prefix LD_LIBRARY_PATH ":" ${libs}
+
+    # Backwards compatiblity: we used to call it zoom-us
+    ln -s $out/bin/{zoom,zoom-us}
+  '';
+
+  # already done
+  dontPatchELF = true;
+
+  passthru.updateScript = ./update.sh;
+
+  meta = {
+    homepage = "https://zoom.us/";
+    description = "zoom.us video conferencing application";
+    license = lib.licenses.unfree;
+    platforms = builtins.attrNames srcs;
+    maintainers = with lib.maintainers; [ danbst tadfisher doronbehar ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh
new file mode 100755
index 000000000000..6ef9ec32538f
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zoom-us/update.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p curl pup common-updater-scripts
+
+set -eu -o pipefail
+
+version="$(curl -Ls https://zoom.us/download\?os\=linux | \
+  pup '.linux-ver-text text{}' | \
+  awk -F'[ ().]' '{printf $2"."$3"."$6"."$7"\n"}')"
+
+update-source-version zoom-us "$version"
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix
new file mode 100644
index 000000000000..8f4b2200cc55
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/default.nix
@@ -0,0 +1,46 @@
+{ lib
+, python3
+, fetchFromGitHub
+, glibcLocales
+}:
+
+python3.pkgs.buildPythonApplication rec {
+  pname = "zulip-term";
+  version = "0.5.2";
+
+  # no tests on PyPI
+  src = fetchFromGitHub {
+    owner = "zulip";
+    repo = "zulip-terminal";
+    rev = version;
+    sha256 = "1xhhy3v4wck74a83avil0rnmsi2grrh03cww19n5mv80p2q1cjmf";
+  };
+
+  patches = [
+    ./pytest-executable-name.patch
+  ];
+
+  propagatedBuildInputs = with python3.pkgs; [
+    urwid
+    zulip
+    urwid-readline
+    beautifulsoup4
+    lxml
+    mypy-extensions
+  ];
+
+  checkInputs = [
+    glibcLocales
+  ] ++ (with python3.pkgs; [
+    pytestCheckHook
+    pytestcov
+    pytest-mock
+  ]);
+
+  meta = with lib; {
+    description = "Zulip's official terminal client";
+    homepage = "https://github.com/zulip/zulip-terminal";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ dotlambda ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch
new file mode 100644
index 000000000000..4602a254ab88
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip-term/pytest-executable-name.patch
@@ -0,0 +1,13 @@
+diff --git a/tests/cli/test_run.py b/tests/cli/test_run.py
+index 459aa82..c6e434e 100644
+--- a/tests/cli/test_run.py
++++ b/tests/cli/test_run.py
+@@ -180,7 +180,7 @@ def test_main_multiple_autohide_options(capsys, options):
+         assert str(e.value) == "2"
+     captured = capsys.readouterr()
+     lines = captured.err.strip('\n')
+-    lines = lines.split("pytest: ", 1)[1]
++    lines = lines.split("__main__.py: ", 1)[1]
+     expected = ("error: argument {}: not allowed "
+                 "with argument {}".format(options[1], options[0]))
+     assert lines == expected
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix
new file mode 100644
index 000000000000..a177499154ee
--- /dev/null
+++ b/nixpkgs/pkgs/applications/networking/instant-messengers/zulip/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, fetchurl
+, appimageTools
+}:
+
+let
+  pname = "zulip";
+  version = "5.5.0";
+  name = "${pname}-${version}";
+
+  src = fetchurl {
+    url = "https://github.com/zulip/zulip-desktop/releases/download/v${version}/Zulip-${version}-x86_64.AppImage";
+    sha256 = "059zfcvaq8wnsz2lfd4gdb17b6nngqk3vgisy2kb29ifqf3lpzqi";
+    name="${pname}-${version}.AppImage";
+  };
+
+  appimageContents = appimageTools.extractType2 {
+    inherit name src;
+  };
+
+in appimageTools.wrapType2 {
+  inherit name src;
+
+  extraInstallCommands = ''
+    mv $out/bin/${name} $out/bin/${pname}
+    install -m 444 -D ${appimageContents}/zulip.desktop $out/share/applications/zulip.desktop
+    install -m 444 -D ${appimageContents}/usr/share/icons/hicolor/512x512/apps/zulip.png \
+      $out/share/icons/hicolor/512x512/apps/zulip.png
+    substituteInPlace $out/share/applications/zulip.desktop \
+      --replace 'Exec=AppRun' 'Exec=${pname}'
+  '';
+
+  meta = with lib; {
+    description = "Desktop client for Zulip Chat";
+    homepage = "https://zulip.com";
+    license = licenses.asl20;
+    maintainers = with maintainers; [ jonafato ];
+    platforms = [ "x86_64-linux" ];
+  };
+}