about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--doc/builders/fetchers.xml11
-rw-r--r--nixos/modules/module-list.nix1
-rw-r--r--nixos/modules/services/admin/oxidized.nix1
-rw-r--r--nixos/modules/services/misc/mame.nix67
-rw-r--r--pkgs/applications/audio/gpodder/default.nix4
-rw-r--r--pkgs/applications/graphics/gscan2pdf/default.nix4
-rw-r--r--pkgs/applications/misc/redis-desktop-manager/default.nix11
-rw-r--r--pkgs/applications/networking/hydroxide/default.nix33
-rw-r--r--pkgs/applications/networking/instant-messengers/riot/riot-desktop-package.json2
-rw-r--r--pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix4
-rw-r--r--pkgs/applications/networking/instant-messengers/riot/riot-web.nix4
-rw-r--r--pkgs/applications/science/biology/strelka/default.nix3
-rw-r--r--pkgs/applications/virtualization/crosvm/default-seccomp-policy-dir.patch15
-rw-r--r--pkgs/applications/virtualization/crosvm/default.nix83
-rwxr-xr-xpkgs/applications/virtualization/crosvm/update.py85
-rw-r--r--pkgs/applications/virtualization/crosvm/upstream-info.json19
-rw-r--r--pkgs/build-support/fetchgitiles/default.nix10
-rw-r--r--pkgs/desktops/gnome-3/extensions/workspace-grid.nix30
-rw-r--r--pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix34
-rw-r--r--pkgs/desktops/pantheon/granite/default.nix4
-rw-r--r--pkgs/development/compilers/ecl/16.1.2.nix1
-rw-r--r--pkgs/development/compilers/ecl/default.nix4
-rw-r--r--pkgs/development/compilers/ecl/ecl-1.16.2-libffi-3.3-abi.patch15
-rw-r--r--pkgs/development/compilers/ecl/libffi-3.3-abi.patch15
-rw-r--r--pkgs/development/interpreters/gauche/default.nix4
-rw-r--r--pkgs/development/libraries/libgpod/default.nix14
-rw-r--r--pkgs/development/libraries/libminc/default.nix11
-rw-r--r--pkgs/development/libraries/randomx/default.nix4
-rw-r--r--pkgs/development/mobile/cocoapods/Gemfile-beta.lock27
-rw-r--r--pkgs/development/mobile/cocoapods/gemset-beta.nix62
-rw-r--r--pkgs/development/python-modules/aiokafka/default.nix49
-rw-r--r--pkgs/development/python-modules/aiorun/default.nix45
-rw-r--r--pkgs/development/python-modules/casbin/default.nix40
-rw-r--r--pkgs/development/python-modules/gym/default.nix4
-rw-r--r--pkgs/development/python-modules/gyp/default.nix6
-rw-r--r--pkgs/development/python-modules/starfish/default.nix1
-rw-r--r--pkgs/development/ruby-modules/gem/nix-bundle-install.rb5
-rw-r--r--pkgs/development/tools/misc/usb-modeswitch/data.nix4
-rw-r--r--pkgs/development/tools/misc/usb-modeswitch/default.nix4
-rw-r--r--pkgs/misc/emulators/mame/default.nix39
-rw-r--r--pkgs/misc/emulators/mame/emuopts.patch29
-rw-r--r--pkgs/misc/tmux-plugins/default.nix4
-rw-r--r--pkgs/os-specific/linux/chromium-xorg-conf/default.nix4
-rw-r--r--pkgs/servers/dns/coredns/default.nix14
-rw-r--r--pkgs/servers/dns/coredns/deps.nix84
-rw-r--r--pkgs/tools/inputmethods/fusuma/Gemfile.lock4
-rw-r--r--pkgs/tools/inputmethods/fusuma/default.nix8
-rw-r--r--pkgs/tools/inputmethods/fusuma/gemset.nix6
-rw-r--r--pkgs/tools/networking/croc/default.nix4
-rw-r--r--pkgs/tools/security/chaps/default.nix16
-rw-r--r--pkgs/tools/system/minijail/default.nix11
-rw-r--r--pkgs/tools/system/vboot_reference/default.nix6
-rw-r--r--pkgs/top-level/all-packages.nix7
-rw-r--r--pkgs/top-level/python-packages.nix6
54 files changed, 750 insertions, 232 deletions
diff --git a/doc/builders/fetchers.xml b/doc/builders/fetchers.xml
index ff3988334916..f07c310dcdf1 100644
--- a/doc/builders/fetchers.xml
+++ b/doc/builders/fetchers.xml
@@ -107,6 +107,17 @@ stdenv.mkDerivation {
   </varlistentry>
   <varlistentry>
    <term>
+    <literal>fetchFromGitiles</literal>
+   </term>
+   <listitem>
+    <para>
+     This is used with Gitiles repositories. The arguments expected
+     are similar to fetchgit.
+    </para>
+   </listitem>
+  </varlistentry>
+  <varlistentry>
+   <term>
     <literal>fetchFromBitbucket</literal>
    </term>
    <listitem>
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index e577ea9ab057..3300848220a0 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -443,6 +443,7 @@
   ./services/misc/logkeys.nix
   ./services/misc/leaps.nix
   ./services/misc/lidarr.nix
+  ./services/misc/mame.nix
   ./services/misc/mathics.nix
   ./services/misc/matrix-synapse.nix
   ./services/misc/mbpfan.nix
diff --git a/nixos/modules/services/admin/oxidized.nix b/nixos/modules/services/admin/oxidized.nix
index da81be3f23e8..885eaed1de6f 100644
--- a/nixos/modules/services/admin/oxidized.nix
+++ b/nixos/modules/services/admin/oxidized.nix
@@ -111,6 +111,7 @@ in
         Restart  = "always";
         WorkingDirectory = cfg.dataDir;
         KillSignal = "SIGKILL";
+        PIDFile = "${cfg.dataDir}.config/oxidized/pid";
       };
     };
   };
diff --git a/nixos/modules/services/misc/mame.nix b/nixos/modules/services/misc/mame.nix
new file mode 100644
index 000000000000..c5d5e9e48371
--- /dev/null
+++ b/nixos/modules/services/misc/mame.nix
@@ -0,0 +1,67 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+  cfg = config.services.mame;
+  mame = "mame${lib.optionalString pkgs.stdenv.is64bit "64"}";
+in
+{
+  options = {
+    services.mame = {
+      enable = mkOption {
+        type = types.bool;
+        default = false;
+        description = ''
+          Whether to setup TUN/TAP Ethernet interface for MAME emulator.
+        '';
+      };
+      user = mkOption {
+        type = types.str;
+        description = ''
+          User from which you run MAME binary.
+        '';
+      };
+      hostAddr = mkOption {
+        type = types.str;
+        description = ''
+          IP address of the host system. Usually an address of the main network
+          adapter or the adapter through which you get an internet connection.
+        '';
+        example = "192.168.31.156";
+      };
+      emuAddr = mkOption {
+        type = types.str;
+        description = ''
+          IP address of the guest system. The same you set inside guest OS under
+          MAME. Should be on the same subnet as <option>services.mame.hostAddr</option>.
+        '';
+        example = "192.168.31.155";
+      };
+    };
+  };
+
+  config = mkIf cfg.enable {
+    environment.systemPackages = [ pkgs.mame ];
+
+    security.wrappers."${mame}" = {
+      source = "${pkgs.mame}/bin/${mame}";
+      capabilities = "cap_net_admin,cap_net_raw+eip";
+    };
+
+    systemd.services.mame = {
+      description = "MAME TUN/TAP Ethernet interface";
+      after = [ "network.target" ];
+      wantedBy = [ "multi-user.target" ];
+      path = [ pkgs.iproute ];
+      serviceConfig = {
+        Type = "oneshot";
+        RemainAfterExit = true;
+        ExecStart = "${pkgs.mame}/bin/taputil.sh -c ${cfg.user} ${cfg.emuAddr} ${cfg.hostAddr} -";
+        ExecStop = "${pkgs.mame}/bin/taputil.sh -d ${cfg.user}";
+      };
+    };
+  };
+
+  meta.maintainers = with lib.maintainers; [ gnidorah ];
+}
diff --git a/pkgs/applications/audio/gpodder/default.nix b/pkgs/applications/audio/gpodder/default.nix
index 246cba590f45..b972aae7de80 100644
--- a/pkgs/applications/audio/gpodder/default.nix
+++ b/pkgs/applications/audio/gpodder/default.nix
@@ -1,6 +1,6 @@
 { stdenv, fetchFromGitHub, python3, python3Packages, intltool
 , glibcLocales, gnome3, gtk3, wrapGAppsHook
-, ipodSupport ? false, libgpod, gobject-introspection
+, gobject-introspection
 }:
 
 python3Packages.buildPythonApplication rec {
@@ -50,7 +50,7 @@ python3Packages.buildPythonApplication rec {
     podcastparser
     html5lib
     gtk3
-  ] ++ stdenv.lib.optional ipodSupport libgpod;
+  ];
 
   makeFlags = [
     "PREFIX=$(out)"
diff --git a/pkgs/applications/graphics/gscan2pdf/default.nix b/pkgs/applications/graphics/gscan2pdf/default.nix
index 9db6281b3412..f8d50a7c7982 100644
--- a/pkgs/applications/graphics/gscan2pdf/default.nix
+++ b/pkgs/applications/graphics/gscan2pdf/default.nix
@@ -10,11 +10,11 @@ with stdenv.lib;
 
 perlPackages.buildPerlPackage rec {
   pname = "gscan2pdf";
-  version = "2.5.6";
+  version = "2.6.2";
 
   src = fetchurl {
     url = "mirror://sourceforge/gscan2pdf/${version}/${pname}-${version}.tar.xz";
-    sha256 = "0wp81nsi5jfypabwmjqiamxr739jq5ij79n5fzn5pbw1hg5gcmfz";
+    sha256 = "0z35lglf4anfczizynjp8sd1jpix5mkmm1nh39n1v94l7ahjxsww";
   };
 
   nativeBuildInputs = [ wrapGAppsHook ];
diff --git a/pkgs/applications/misc/redis-desktop-manager/default.nix b/pkgs/applications/misc/redis-desktop-manager/default.nix
index 25f9c6ed4c7a..71d79b88f440 100644
--- a/pkgs/applications/misc/redis-desktop-manager/default.nix
+++ b/pkgs/applications/misc/redis-desktop-manager/default.nix
@@ -1,11 +1,11 @@
-{ stdenv, lib, fetchgit, pkgconfig, libssh2
+{ stdenv, lib, fetchFromGitHub, fetchFromGitiles, pkgconfig, libssh2
 , qtbase, qtdeclarative, qtgraphicaleffects, qtimageformats, qtquickcontrols
 , qtsvg, qttools, qtquick1, qtcharts
 , qmake
 }:
 
 let
-  breakpad_lss = fetchgit {
+  breakpad_lss = fetchFromGitiles {
     url = "https://chromium.googlesource.com/linux-syscall-support";
     rev = "08056836f2b4a5747daff75435d10d649bed22f6";
     sha256 = "1ryshs2nyxwa0kn3rlbnd5b3fhna9vqm560yviddcfgdm2jyg0hz";
@@ -17,10 +17,11 @@ stdenv.mkDerivation rec {
   pname = "redis-desktop-manager";
   version = "0.9.1";
 
-  src = fetchgit {
-    url = "https://github.com/uglide/RedisDesktopManager.git";
+  src = fetchFromGitHub {
+    owner = "uglide";
+    repo = "RedisDesktopManager";
     fetchSubmodules = true;
-    rev = "refs/tags/${version}";
+    rev = version;
     sha256 = "0yd4i944d4blw8jky0nxl7sfkkj975q4d328rdcbhizwvf6dx81f";
   };
 
diff --git a/pkgs/applications/networking/hydroxide/default.nix b/pkgs/applications/networking/hydroxide/default.nix
new file mode 100644
index 000000000000..75c1cdaece96
--- /dev/null
+++ b/pkgs/applications/networking/hydroxide/default.nix
@@ -0,0 +1,33 @@
+{ lib, buildGoModule, fetchFromGitHub, fetchpatch }:
+
+buildGoModule rec {
+  pname = "hydroxide";
+  version = "0.2.11";
+
+  src = fetchFromGitHub {
+    owner = "emersion";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "0rn35iyli80kgj3yn93lrx0ybgc8fhvmkvx1d18ill7r4cmavand";
+  };
+
+  modSha256 = "0b19rcif8yiyvhrsjd3q5nsvr580lklamlphx4dk47n456ckcqfp";
+
+  # FIXME: remove with next release
+  patches = [
+    (fetchpatch {
+      url = "https://github.com/emersion/hydroxide/commit/80e0fa6f3e0154338fb0af8a82ca32ae6281dd15.patch";
+      sha256 = "1xi0clzgz14a7sxnwr0li7sz9p05sfh3zh5iqg2qz5f415k9jknj";
+    })
+  ];
+
+  subPackages = [ "cmd/hydroxide" ];
+
+  meta = with lib; {
+    description = "A third-party, open-source ProtonMail bridge";
+    homepage = "https://github.com/emersion/hydroxide";
+    license = licenses.mit;
+    maintainers = with maintainers; [ filalex77 ];
+    platforms = platforms.unix;
+  };
+}
diff --git a/pkgs/applications/networking/instant-messengers/riot/riot-desktop-package.json b/pkgs/applications/networking/instant-messengers/riot/riot-desktop-package.json
index 3338f6159d92..c49934b96f77 100644
--- a/pkgs/applications/networking/instant-messengers/riot/riot-desktop-package.json
+++ b/pkgs/applications/networking/instant-messengers/riot/riot-desktop-package.json
@@ -2,7 +2,7 @@
   "name": "riot-web",
   "productName": "Riot",
   "main": "src/electron-main.js",
-  "version": "1.5.5",
+  "version": "1.5.6",
   "description": "A feature-rich client for Matrix.org",
   "author": "New Vector Ltd.",
   "dependencies": {
diff --git a/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix b/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix
index c3fe4b9dd331..9b6f591bd42d 100644
--- a/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix
+++ b/pkgs/applications/networking/instant-messengers/riot/riot-desktop.nix
@@ -6,12 +6,12 @@
 
 let
   executableName = "riot-desktop";
-  version = "1.5.5";
+  version = "1.5.6";
   riot-web-src = fetchFromGitHub {
     owner = "vector-im";
     repo = "riot-web";
     rev = "v${version}";
-    sha256 = "18xhqniwxp1sv49qcd9ah8nyy2n2yliy3wg613raxjl16qvvzxmc";
+    sha256 = "148rg6wc84xy53bj16v5riw78s999ridid59x6v9jas827l0bdpk";
   };
 
 in mkYarnPackage rec {
diff --git a/pkgs/applications/networking/instant-messengers/riot/riot-web.nix b/pkgs/applications/networking/instant-messengers/riot/riot-web.nix
index b2e50ffce64b..ada903701e26 100644
--- a/pkgs/applications/networking/instant-messengers/riot/riot-web.nix
+++ b/pkgs/applications/networking/instant-messengers/riot/riot-web.nix
@@ -5,11 +5,11 @@
 
 stdenv.mkDerivation rec {
   pname = "riot-web";
-  version = "1.5.5";
+  version = "1.5.6";
 
   src = fetchurl {
     url = "https://github.com/vector-im/riot-web/releases/download/v${version}/riot-v${version}.tar.gz";
-    sha256 = "0isln25sl5jvvlqvh822w73a4i82x75g1ywf3p9n5m1a5sr9f537";
+    sha256 = "063ynbil038y201skyldj2ysr0hwgwq981w1iw104xd17x31zmn0";
   };
 
   installPhase = let
diff --git a/pkgs/applications/science/biology/strelka/default.nix b/pkgs/applications/science/biology/strelka/default.nix
index c791e8ef89bb..cb83b19269bd 100644
--- a/pkgs/applications/science/biology/strelka/default.nix
+++ b/pkgs/applications/science/biology/strelka/default.nix
@@ -14,6 +14,8 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [ cmake ];
   buildInputs = [ zlib python2 ];
 
+  NIX_CFLAGS_COMPILE = [ "-Wno-error=maybe-uninitialized" ];
+
   preConfigure = ''
     sed -i 's|/usr/bin/env python|${python2}/bin/python|' src/python/lib/makeRunScript.py
     patchShebangs .
@@ -33,7 +35,6 @@ stdenv.mkDerivation rec {
     homepage = https://github.com/Illumina/strelka;
     maintainers = with maintainers; [ jbedo ];
     platforms = [ "x86_64-linux" ];
-    broken = true;
   };
 
 }
diff --git a/pkgs/applications/virtualization/crosvm/default-seccomp-policy-dir.patch b/pkgs/applications/virtualization/crosvm/default-seccomp-policy-dir.patch
new file mode 100644
index 000000000000..46b091b3a353
--- /dev/null
+++ b/pkgs/applications/virtualization/crosvm/default-seccomp-policy-dir.patch
@@ -0,0 +1,15 @@
+diff --git a/src/main.rs b/src/main.rs
+index 81f20a7..481ebd7 100644
+--- a/src/main.rs
++++ b/src/main.rs
+@@ -158,7 +158,9 @@ impl Default for Config {
+             wayland_dmabuf: false,
+             shared_dirs: Vec::new(),
+             sandbox: !cfg!(feature = "default-no-sandbox"),
+-            seccomp_policy_dir: PathBuf::from(SECCOMP_POLICY_DIR),
++            seccomp_policy_dir: PathBuf::from(
++                option_env!("DEFAULT_SECCOMP_POLICY_DIR").unwrap_or(SECCOMP_POLICY_DIR),
++            ),
+             seccomp_log_failures: false,
+             cras_audio: false,
+             cras_capture: false,
diff --git a/pkgs/applications/virtualization/crosvm/default.nix b/pkgs/applications/virtualization/crosvm/default.nix
new file mode 100644
index 000000000000..106b39b03366
--- /dev/null
+++ b/pkgs/applications/virtualization/crosvm/default.nix
@@ -0,0 +1,83 @@
+{ stdenv, rustPlatform, fetchgit, runCommand, symlinkJoin
+, pkgconfig, minijail, dtc, libusb1, libcap
+}:
+
+let
+
+  upstreamInfo = with builtins; fromJSON (readFile ./upstream-info.json);
+
+  arch = with stdenv.hostPlatform;
+    if isAarch64 then "arm"
+    else if isx86_64 then "x86_64"
+    else throw "no seccomp policy files available for host platform";
+
+  # used to turn symlinks into real files because write permissions are necessary for the vendoring process
+  delink = src: runCommand "${src.name}-delinked" {
+    preferLocalBuild = true;
+    allowSubstitutes = false;
+  } ''
+    cp -prL --reflink=auto ${src} $out
+  '';
+
+  # used to place subtrees into the location they have in the Chromium monorepo
+  move = src: target: runCommand "moved-${src.name}" {
+    preferLocalBuild = true;
+    allowSubstitutes = false;
+  } ''
+    mkdir -p $(dirname $out/${target})
+    ln -s ${src} $out/${target}
+  '';
+
+  # used to check out subtrees from the Chromium monorepo
+  chromiumSource = name: subtrees: delink (symlinkJoin {
+    inherit name;
+    paths = stdenv.lib.mapAttrsToList (
+      location: { url, rev, sha256, fetchSubmodules, ... }:
+      move (fetchgit {
+        inherit url rev sha256 fetchSubmodules;
+      }) location) subtrees;
+  });
+
+in
+
+  rustPlatform.buildRustPackage rec {
+    pname = "crosvm";
+    inherit (upstreamInfo) version;
+
+    src = chromiumSource "${pname}-sources" upstreamInfo.components;
+
+    sourceRoot = "${src.name}/chromiumos/platform/crosvm";
+
+    patches = [
+      ./default-seccomp-policy-dir.patch
+    ];
+
+    cargoSha256 = "16cfp79c13ng5jjcrvz00h3cg7cc9ywhjiq02vsm757knn9jgr1v";
+
+    nativeBuildInputs = [ pkgconfig ];
+
+    buildInputs = [ dtc libcap libusb1 minijail ];
+
+    postPatch = ''
+      sed -i "s|/usr/share/policy/crosvm/|$out/share/policy/|g" \
+             seccomp/*/*.policy
+    '';
+
+    preBuild = ''
+      export DEFAULT_SECCOMP_POLICY_DIR=$out/share/policy
+    '';
+
+    postInstall = ''
+      mkdir -p $out/share/policy/
+      cp seccomp/${arch}/* $out/share/policy/
+    '';
+
+    passthru.updateScript = ./update.py;
+
+    meta = with stdenv.lib; {
+      description = "A secure virtual machine monitor for KVM";
+      homepage = "https://chromium.googlesource.com/chromiumos/platform/crosvm/";
+      license = licenses.bsd3;
+      platforms = [ "aarch64-linux" "x86_64-linux" ];
+    };
+  }
diff --git a/pkgs/applications/virtualization/crosvm/update.py b/pkgs/applications/virtualization/crosvm/update.py
new file mode 100755
index 000000000000..d00bffce3b8f
--- /dev/null
+++ b/pkgs/applications/virtualization/crosvm/update.py
@@ -0,0 +1,85 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -p python3 -p nix-prefetch-git -i python
+
+import base64
+import csv
+import json
+import re
+import subprocess
+import xml.etree.ElementTree as ElementTree
+from codecs import iterdecode
+from operator import itemgetter
+from os.path import dirname, splitext
+from urllib.request import urlopen
+
+# ChromiumOS components required to build crosvm.
+components = ['chromiumos/platform/crosvm', 'chromiumos/third_party/adhd']
+
+git_root = 'https://chromium.googlesource.com/'
+manifest_versions = f'{git_root}chromiumos/manifest-versions'
+buildspecs_url = f'{manifest_versions}/+/refs/heads/master/paladin/buildspecs/'
+
+# CrOS version numbers look like this:
+# [<chrome-major-version>.]<tip-build>.<branch-build>.<branch-branch-build>
+#
+# As far as I can tell, branches are where internal Google
+# modifications are added to turn Chromium OS into Chrome OS, and
+# branch branches are used for fixes for specific devices.  So for
+# Chromium OS they will always be 0.  This is a best guess, and is not
+# documented.
+with urlopen('https://cros-omahaproxy.appspot.com/all') as resp:
+    versions = csv.DictReader(iterdecode(resp, 'utf-8'))
+    stables = filter(lambda v: v['track'] == 'stable-channel', versions)
+    stable = sorted(stables, key=itemgetter('chrome_version'), reverse=True)[0]
+
+chrome_major_version = re.match(r'\d+', stable['chrome_version'])[0]
+chromeos_tip_build = re.match(r'\d+', stable['chromeos_version'])[0]
+
+# Find the most recent buildspec for the stable Chrome version and
+# Chromium OS build number.  Its branch build and branch branch build
+# numbers will (almost?) certainly be 0.  It will then end with an rc
+# number -- presumably these are release candidates, one of which
+# becomes the final release.  Presumably the one with the highest rc
+# number.
+with urlopen(f'{buildspecs_url}{chrome_major_version}/?format=TEXT') as resp:
+    listing = base64.decodebytes(resp.read()).decode('utf-8')
+    buildspecs = [(line.split('\t', 1)[1]) for line in listing.splitlines()]
+    buildspecs = [s for s in buildspecs if s.startswith(chromeos_tip_build)]
+    buildspecs.sort(reverse=True)
+    buildspec = splitext(buildspecs[0])[0]
+
+revisions = {}
+
+# Read the buildspec, and extract the git revisions for each component.
+with urlopen(f'{buildspecs_url}{chrome_major_version}/{buildspec}.xml?format=TEXT') as resp:
+    xml = base64.decodebytes(resp.read()).decode('utf-8')
+    root = ElementTree.fromstring(xml)
+    for project in root.findall('project'):
+        revisions[project.get('name')] = project.get('revision')
+
+# Initialize the data that will be output from this script.  Leave the
+# rc number in buildspec so nobody else is subject to the same level
+# of confusion I have been.
+data = {'version': f'{chrome_major_version}.{buildspec}', 'components': {}}
+
+# Fill in the 'components' dictionary with the output from
+# nix-prefetch-git, which can be passed straight to fetchGit when
+# imported by Nix.
+for component in components:
+    argv = ['nix-prefetch-git',
+            '--url', git_root + component,
+            '--rev', revisions[component]]
+
+    output = subprocess.check_output(argv)
+    data['components'][component] = json.loads(output.decode('utf-8'))
+
+# Find the path to crosvm's default.nix, so the srcs data can be
+# written into the same directory.
+argv = ['nix-instantiate', '--eval', '--json', '-A', 'crosvm.meta.position']
+position = json.loads(subprocess.check_output(argv).decode('utf-8'))
+filename = re.match(r'[^:]*', position)[0]
+
+# Finally, write the output.
+with open(dirname(filename) + '/upstream-info.json', 'w') as out:
+    json.dump(data, out, indent=2)
+    out.write('\n')
diff --git a/pkgs/applications/virtualization/crosvm/upstream-info.json b/pkgs/applications/virtualization/crosvm/upstream-info.json
new file mode 100644
index 000000000000..01921f9460a0
--- /dev/null
+++ b/pkgs/applications/virtualization/crosvm/upstream-info.json
@@ -0,0 +1,19 @@
+{
+  "version": "77.12371.0.0-rc1",
+  "components": {
+    "chromiumos/platform/crosvm": {
+      "url": "https://chromium.googlesource.com/chromiumos/platform/crosvm",
+      "rev": "f5285c647acacb4f25ef8cf9334254b976e71686",
+      "date": "2019-07-25T22:15:48+00:00",
+      "sha256": "1ccjd540xmpad082w9ri13q78wkg95xxmq38b8ybcrj4f7lsxm6w",
+      "fetchSubmodules": false
+    },
+    "chromiumos/third_party/adhd": {
+      "url": "https://chromium.googlesource.com/chromiumos/third_party/adhd",
+      "rev": "a1c0d93d991daffb042b979ac807bbe9c1f9a3ee",
+      "date": "2019-07-25T20:38:50-07:00",
+      "sha256": "11bijqd876adarq96syywn6znfbiflqssgb2j4w032iw2vfnnsyy",
+      "fetchSubmodules": false
+    }
+  }
+}
diff --git a/pkgs/build-support/fetchgitiles/default.nix b/pkgs/build-support/fetchgitiles/default.nix
new file mode 100644
index 000000000000..827680992d69
--- /dev/null
+++ b/pkgs/build-support/fetchgitiles/default.nix
@@ -0,0 +1,10 @@
+{ fetchzip, lib }:
+
+{ url, rev, name ? "source", ... } @ args:
+
+fetchzip ({
+  inherit name;
+  url = "${url}/+archive/${rev}.tar.gz";
+  stripRoot = false;
+  meta.homepage = url;
+} // removeAttrs args [ "url" "rev" ]) // { inherit rev; }
diff --git a/pkgs/desktops/gnome-3/extensions/workspace-grid.nix b/pkgs/desktops/gnome-3/extensions/workspace-grid.nix
deleted file mode 100644
index 811e9911f628..000000000000
--- a/pkgs/desktops/gnome-3/extensions/workspace-grid.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ stdenv, fetchFromGitHub, glib }:
-
-stdenv.mkDerivation rec {
-  pname = "gnome-shell-workspace-grid";
-  version = "0f3a430e7d04bb5465a17c1225aab0f574426d6b";
-
-  src = fetchFromGitHub {
-    owner = "zakkak";
-    repo = "workspace-grid-gnome-shell-extension";
-    rev = version;
-    sha256 = "0503b7lmydrbblfvf9b56pv5hpmykzgyc6v8y99rckg58h2jhs69";
-  };
-
-  buildInputs = [
-    glib
-  ];
-
-  installPhase = ''
-    cp -r ${uuid} $out
-  '';
-
-  uuid = "workspace-grid@mathematical.coffee.gmail.com";
-
-  meta = with stdenv.lib; {
-    description = "Arranges workspaces in a configurable grid";
-    license = licenses.gpl3Plus;
-    maintainers = with maintainers; [ aneeshusa ];
-    homepage = https://github.com/zakkak/workspace-grid-gnome-shell-extension;
-  };
-}
diff --git a/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix b/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix
new file mode 100644
index 000000000000..ca4b72111c6c
--- /dev/null
+++ b/pkgs/desktops/gnome-3/extensions/workspace-matrix/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, findutils, glib }:
+
+stdenv.mkDerivation rec {
+  pname = "gnome-shell-extension-workspace-matrix";
+  version = "3.0.0";
+
+  src = fetchFromGitHub {
+    owner = "mzur";
+    repo = "gnome-shell-wsmatrix";
+    rev = "v${version}";
+    sha256 = "1fgyzmd16kklcca7600bwg8w8pbb4klmapqsvmahlwa99vmkhfkn";
+  };
+
+  uuid = "wsmatrix@martin.zurowietz.de";
+
+  nativeBuildInputs = [
+    findutils
+    glib
+  ];
+
+  buildFlags = "schemas";
+
+  installPhase = ''
+    mkdir -p $out/share/gnome-shell/extensions
+    cp -r ${uuid} $out/share/gnome-shell/extensions
+  '';
+
+  meta = with stdenv.lib; {
+    description = "Arrange workspaces in a two dimensional grid with workspace thumbnails";
+    license = licenses.gpl3Plus;
+    maintainers = with maintainers; [ chkno ];
+    homepage =  https://github.com/mzur/gnome-shell-wsmatrix;
+  };
+}
diff --git a/pkgs/desktops/pantheon/granite/default.nix b/pkgs/desktops/pantheon/granite/default.nix
index ab673832857d..1b73ac88df59 100644
--- a/pkgs/desktops/pantheon/granite/default.nix
+++ b/pkgs/desktops/pantheon/granite/default.nix
@@ -16,13 +16,13 @@
 
 stdenv.mkDerivation rec {
   pname = "granite";
-  version = "5.2.5";
+  version = "5.3.0";
 
   src = fetchFromGitHub {
     owner = "elementary";
     repo = pname;
     rev = version;
-    sha256 = "0z40vhcp2w8s8rnc56pzvjc4s77bln8k84rwwypivjmk3lhpw1vi";
+    sha256 = "1gvrk8gh959bmq8w0kaym7sx13v763lk8x5hck00msgmyrsarfwa";
   };
 
   passthru = {
diff --git a/pkgs/development/compilers/ecl/16.1.2.nix b/pkgs/development/compilers/ecl/16.1.2.nix
index bede9fa4aa68..a7b2aa6be748 100644
--- a/pkgs/development/compilers/ecl/16.1.2.nix
+++ b/pkgs/development/compilers/ecl/16.1.2.nix
@@ -61,6 +61,7 @@ stdenv.mkDerivation {
       url = "https://git.sagemath.org/sage.git/plain/build/pkgs/ecl/patches/16.1.2-getcwd.patch?id=07d6c37d18811e2b377a9689790a7c5e24da16ba";
       sha256 = "1fbi8gn7rv8nqff5mpaijsrch3k3z7qc5cn4h1vl8qrr8xwqlqhb";
     })
+    ./ecl-1.16.2-libffi-3.3-abi.patch
   ];
 
   hardeningDisable = [ "format" ];
diff --git a/pkgs/development/compilers/ecl/default.nix b/pkgs/development/compilers/ecl/default.nix
index 33ed690772ea..375b38f1dc68 100644
--- a/pkgs/development/compilers/ecl/default.nix
+++ b/pkgs/development/compilers/ecl/default.nix
@@ -35,6 +35,10 @@ stdenv.mkDerivation {
     inherit (s) url sha256;
   };
 
+  patches = [
+    ./libffi-3.3-abi.patch
+  ];
+
   configureFlags = [
     (if threadSupport then "--enable-threads" else "--disable-threads")
     "--with-gmp-prefix=${gmp.dev}"
diff --git a/pkgs/development/compilers/ecl/ecl-1.16.2-libffi-3.3-abi.patch b/pkgs/development/compilers/ecl/ecl-1.16.2-libffi-3.3-abi.patch
new file mode 100644
index 000000000000..28dd7d0805b3
--- /dev/null
+++ b/pkgs/development/compilers/ecl/ecl-1.16.2-libffi-3.3-abi.patch
@@ -0,0 +1,15 @@
+diff --git a/src/c/ffi.d b/src/c/ffi.d
+index 8861303e..8a959c23 100644
+--- a/src/c/ffi.d
++++ b/src/c/ffi.d
+@@ -145,8 +145,8 @@ static struct {
+ #elif defined(X86_WIN64)
+         {@':win64', FFI_WIN64},
+ #elif defined(X86_ANY) || defined(X86) || defined(X86_64)
+-        {@':cdecl', FFI_SYSV},
+-        {@':sysv', FFI_SYSV},
++        {@':cdecl', FFI_UNIX64},
++        {@':sysv', FFI_UNIX64},
+         {@':unix64', FFI_UNIX64},
+ #endif
+ };
diff --git a/pkgs/development/compilers/ecl/libffi-3.3-abi.patch b/pkgs/development/compilers/ecl/libffi-3.3-abi.patch
new file mode 100644
index 000000000000..0a2b5f4dd568
--- /dev/null
+++ b/pkgs/development/compilers/ecl/libffi-3.3-abi.patch
@@ -0,0 +1,15 @@
+diff --git a/src/c/ffi.d b/src/c/ffi.d
+index 8174977a..caa69f39 100644
+--- a/src/c/ffi.d
++++ b/src/c/ffi.d
+@@ -133,8 +133,8 @@ static struct {
+ #elif defined(X86_WIN64)
+   {@':win64', FFI_WIN64},
+ #elif defined(X86_ANY) || defined(X86) || defined(X86_64)
+-  {@':cdecl', FFI_SYSV},
+-  {@':sysv', FFI_SYSV},
++  {@':cdecl', FFI_UNIX64},
++  {@':sysv', FFI_UNIX64},
+   {@':unix64', FFI_UNIX64},
+ #endif
+ };
diff --git a/pkgs/development/interpreters/gauche/default.nix b/pkgs/development/interpreters/gauche/default.nix
index 71542046af91..9b38d1e4ad54 100644
--- a/pkgs/development/interpreters/gauche/default.nix
+++ b/pkgs/development/interpreters/gauche/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   pname = "gauche";
-  version = "0.9.8";
+  version = "0.9.9";
 
   src = fetchurl {
     url = "mirror://sourceforge/gauche/Gauche-${version}.tgz";
-    sha256 = "0jxp1ladpy8kvfvk561c64spf1c3d6giqla6zscqkd6qa480vcry";
+    sha256 = "1yzpszhw52vkpr65r5d4khf3489mnnvnw58dd2wsvvx7499k5aac";
   };
 
   nativeBuildInputs = [ pkgconfig texinfo ];
diff --git a/pkgs/development/libraries/libgpod/default.nix b/pkgs/development/libraries/libgpod/default.nix
index c41f0a60d06e..063588e9f1e5 100644
--- a/pkgs/development/libraries/libgpod/default.nix
+++ b/pkgs/development/libraries/libgpod/default.nix
@@ -1,18 +1,20 @@
-{stdenv, lib, fetchurl, gettext, perlPackages, intltool, pkgconfig, glib,
+{ stdenv, lib, fetchurl, gettext, perlPackages, intltool, pkgconfig, glib,
   libxml2, sqlite, zlib, sg3_utils, gdk-pixbuf, taglib,
-  libimobiledevice, python3Packages, mutagen,
+  libimobiledevice, mutagen,
   monoSupport ? false, mono, gtk-sharp-2_0
 }:
 
-let
-  inherit (python3Packages) python pygobject2;
-in stdenv.mkDerivation rec {
+
+stdenv.mkDerivation rec {
   name = "libgpod-0.8.3";
+
   src = fetchurl {
     url = "mirror://sourceforge/gtkpod/${name}.tar.bz2";
     sha256 = "0pcmgv1ra0ymv73mlj4qxzgyir026z9jpl5s5bkg35afs1cpk2k3";
   };
 
+  outputs = [ "out" "dev" ];
+
   preConfigure = "configureFlagsArray=( --with-udev-dir=$out/lib/udev )";
 
   configureFlags = [
@@ -23,7 +25,7 @@ in stdenv.mkDerivation rec {
   dontStrip = true;
 
   propagatedBuildInputs = [ glib libxml2 sqlite zlib sg3_utils
-    gdk-pixbuf taglib libimobiledevice python pygobject2 mutagen ];
+    gdk-pixbuf taglib libimobiledevice  mutagen ];
 
   nativeBuildInputs = [ gettext intltool pkgconfig ]
     ++ (with perlPackages; [ perl XMLParser ])
diff --git a/pkgs/development/libraries/libminc/default.nix b/pkgs/development/libraries/libminc/default.nix
index aea7a5959fac..53b6af40b512 100644
--- a/pkgs/development/libraries/libminc/default.nix
+++ b/pkgs/development/libraries/libminc/default.nix
@@ -1,17 +1,16 @@
 { stdenv, fetchFromGitHub, cmake, zlib, netcdf, nifticlib, hdf5 }:
 
 stdenv.mkDerivation rec {
-  pname = "libminc";
-  name  = "${pname}-2018-01-17";
+  pname   = "libminc";
+  version = "2.4.03";
 
   owner = "BIC-MNI";
 
-  # current master is significantly ahead of most recent release, so use Git version:
   src = fetchFromGitHub {
     inherit owner;
     repo   = pname;
-    rev    = "a9cbe1353eae9791b7d5b03af16e0f86922ce40b";
-    sha256 = "0mn4n3ihzcr1jw2g1vy6c8p4lkc88jwljk04argmj7k4djrgpxpa";
+    rev    = "release-${version}";
+    sha256 = "0kpmqs9df836ywsqj749qbsfavf5bnldblxrmnmxqq9pywc8yfrm";
   };
 
   postPatch = ''
@@ -27,7 +26,7 @@ stdenv.mkDerivation rec {
     "-DLIBMINC_USE_SYSTEM_NIFTI=ON"
   ];
 
-  doCheck = true;
+  doCheck = !stdenv.isDarwin;
   checkPhase = ''
     export LD_LIBRARY_PATH="$(pwd)"  # see #22060
     ctest -E 'ezminc_rw_test|minc_conversion' --output-on-failure
diff --git a/pkgs/development/libraries/randomx/default.nix b/pkgs/development/libraries/randomx/default.nix
index 79ce9e413248..9e6cdfecb954 100644
--- a/pkgs/development/libraries/randomx/default.nix
+++ b/pkgs/development/libraries/randomx/default.nix
@@ -2,7 +2,7 @@
 
 stdenv.mkDerivation rec {
   pname = "randomX";
-  version = "1.1.6";
+  version = "1.1.7";
 
   nativeBuildInputs = [ cmake ];
 
@@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
     owner = "tevador";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1qd0rbzgxdy87wwy0n6ca29bcq25j5ndnfgmx8iyf225m4rcwngf";
+    sha256 = "1d42dw4zrd7mzfqs6gwk27jj6lsh6pwv85p1ckx9dxy8mw3m52ah";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/mobile/cocoapods/Gemfile-beta.lock b/pkgs/development/mobile/cocoapods/Gemfile-beta.lock
index 5b7288ad4f79..c077132a9f3d 100644
--- a/pkgs/development/mobile/cocoapods/Gemfile-beta.lock
+++ b/pkgs/development/mobile/cocoapods/Gemfile-beta.lock
@@ -1,7 +1,7 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    CFPropertyList (3.0.1)
+    CFPropertyList (3.0.2)
     activesupport (4.2.11.1)
       i18n (~> 0.7)
       minitest (~> 5.1)
@@ -12,10 +12,10 @@ GEM
       json (>= 1.5.1)
     atomos (0.1.3)
     claide (1.0.3)
-    cocoapods (1.8.4)
+    cocoapods (1.9.0.beta.1)
       activesupport (>= 4.0.2, < 5)
       claide (>= 1.0.2, < 2.0)
-      cocoapods-core (= 1.8.4)
+      cocoapods-core (= 1.9.0.beta.1)
       cocoapods-deintegrate (>= 1.0.3, < 2.0)
       cocoapods-downloader (>= 1.2.2, < 2.0)
       cocoapods-plugins (>= 1.0.0, < 2.0)
@@ -30,15 +30,17 @@ GEM
       molinillo (~> 0.6.6)
       nap (~> 1.0)
       ruby-macho (~> 1.4)
-      xcodeproj (>= 1.11.1, < 2.0)
-    cocoapods-core (1.8.4)
+      xcodeproj (>= 1.14.0, < 2.0)
+    cocoapods-core (1.9.0.beta.1)
       activesupport (>= 4.0.2, < 6)
       algoliasearch (~> 1.0)
       concurrent-ruby (~> 1.1)
       fuzzy_match (~> 2.0.4)
       nap (~> 1.0)
+      netrc (~> 0.11)
+      typhoeus (~> 1.0)
     cocoapods-deintegrate (1.0.4)
-    cocoapods-downloader (1.2.2)
+    cocoapods-downloader (1.3.0)
     cocoapods-plugins (1.0.0)
       nap
     cocoapods-search (1.0.0)
@@ -50,23 +52,28 @@ GEM
     colored2 (3.1.2)
     concurrent-ruby (1.1.5)
     escape (0.0.4)
+    ethon (0.12.0)
+      ffi (>= 1.3.0)
+    ffi (1.11.3)
     fourflusher (2.3.1)
     fuzzy_match (2.0.4)
     gh_inspector (1.1.3)
     httpclient (2.8.3)
     i18n (0.9.5)
       concurrent-ruby (~> 1.0)
-    json (2.2.0)
-    minitest (5.12.2)
+    json (2.3.0)
+    minitest (5.13.0)
     molinillo (0.6.6)
     nanaimo (0.2.6)
     nap (1.1.0)
     netrc (0.11.0)
     ruby-macho (1.4.0)
     thread_safe (0.3.6)
+    typhoeus (1.3.1)
+      ethon (>= 0.9.0)
     tzinfo (1.2.5)
       thread_safe (~> 0.1)
-    xcodeproj (1.13.0)
+    xcodeproj (1.14.0)
       CFPropertyList (>= 2.3.3, < 4.0)
       atomos (~> 0.1.3)
       claide (>= 1.0.2, < 2.0)
@@ -80,4 +87,4 @@ DEPENDENCIES
   cocoapods (>= 1.7.0.beta.1)!
 
 BUNDLED WITH
-   1.17.2
+   1.17.3
diff --git a/pkgs/development/mobile/cocoapods/gemset-beta.nix b/pkgs/development/mobile/cocoapods/gemset-beta.nix
index b94bc461944e..120680f658dd 100644
--- a/pkgs/development/mobile/cocoapods/gemset-beta.nix
+++ b/pkgs/development/mobile/cocoapods/gemset-beta.nix
@@ -36,10 +36,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0fr8sdzs2q1969zqh790w223hjidlwx4hfm4c91gj0va5j5pv3n8";
+      sha256 = "1825ll26p28swjiw8n3x2pnh5ygsmg83spf82fnzcjn2p87vc5lf";
       type = "gem";
     };
-    version = "3.0.1";
+    version = "3.0.2";
   };
   claide = {
     groups = ["default"];
@@ -57,21 +57,21 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "007ssx75588ji2d8l8s6c95dng1c7b6yacng8nngpy7maijzjgzc";
+      sha256 = "14447zrbg90gvjhfpwmjsfh4n7i9f0p1zd0jj3m2cx4y8102djiy";
       type = "gem";
     };
-    version = "1.8.4";
+    version = "1.9.0.beta.1";
   };
   cocoapods-core = {
-    dependencies = ["activesupport" "algoliasearch" "concurrent-ruby" "fuzzy_match" "nap"];
+    dependencies = ["activesupport" "algoliasearch" "concurrent-ruby" "fuzzy_match" "nap" "netrc" "typhoeus"];
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0zcisqb404828n5d3lbk9y2yyx8v2yr6rk1l8y9a4i1hp743fiad";
+      sha256 = "0nhrqwrvblpgf4k3cy0nyxfphyzw46zql1pdv1x7y42h4cn5z8qp";
       type = "gem";
     };
-    version = "1.8.4";
+    version = "1.9.0.beta.1";
   };
   cocoapods-deintegrate = {
     groups = ["default"];
@@ -88,10 +88,10 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "09fd4zaqkz8vz3djplacngcs4n0j6j956wgq43s1y6bwl0zyjmd3";
+      sha256 = "08vn0pgcyn6w6fq5xjd7szv2h9s5rzl17kyidnd7fl5qdmzc9c54";
       type = "gem";
     };
-    version = "1.2.2";
+    version = "1.3.0";
   };
   cocoapods-plugins = {
     dependencies = ["nap"];
@@ -175,6 +175,27 @@
     };
     version = "0.0.4";
   };
+  ethon = {
+    dependencies = ["ffi"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0gggrgkcq839mamx7a8jbnp2h7x2ykfn34ixwskwb0lzx2ak17g9";
+      type = "gem";
+    };
+    version = "0.12.0";
+  };
+  ffi = {
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "10ay35dm0lkcqprsiya6q2kwvyid884102ryipr4vrk790yfp8kd";
+      type = "gem";
+    };
+    version = "1.11.3";
+  };
   fourflusher = {
     groups = ["default"];
     platforms = [];
@@ -231,20 +252,20 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0sx97bm9by389rbzv8r1f43h06xcz8vwi3h5jv074gvparql7lcx";
+      sha256 = "0nrmw2r4nfxlfgprfgki3hjifgrcrs3l5zvm3ca3gb4743yr25mn";
       type = "gem";
     };
-    version = "2.2.0";
+    version = "2.3.0";
   };
   minitest = {
     groups = ["default"];
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0zjm24aiz42i9n37mcw8lydd7n0y7wfk27by06jx77ypcld3qvkw";
+      sha256 = "0w16p7cvslh3hxd3cia8jg4pd85z7rz7xqb16vh42gj4rijn8rmi";
       type = "gem";
     };
-    version = "5.12.2";
+    version = "5.13.0";
   };
   molinillo = {
     groups = ["default"];
@@ -306,6 +327,17 @@
     };
     version = "0.3.6";
   };
+  typhoeus = {
+    dependencies = ["ethon"];
+    groups = ["default"];
+    platforms = [];
+    source = {
+      remotes = ["https://rubygems.org"];
+      sha256 = "0cni8b1idcp0dk8kybmxydadhfpaj3lbs99w5kjibv8bsmip2zi5";
+      type = "gem";
+    };
+    version = "1.3.1";
+  };
   tzinfo = {
     dependencies = ["thread_safe"];
     groups = ["default"];
@@ -323,9 +355,9 @@
     platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "1c69yrhqd92q6nnpyhvnqyw9l7axnc91gnbd2gai8f5njdisd8wx";
+      sha256 = "1h9iba53mrb663qdqzpfbdwkwzqv7hndd0df71yr2kj2hzwjmkvb";
       type = "gem";
     };
-    version = "1.13.0";
+    version = "1.14.0";
   };
 }
\ No newline at end of file
diff --git a/pkgs/development/python-modules/aiokafka/default.nix b/pkgs/development/python-modules/aiokafka/default.nix
new file mode 100644
index 000000000000..b31f83dc136d
--- /dev/null
+++ b/pkgs/development/python-modules/aiokafka/default.nix
@@ -0,0 +1,49 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy27
+, kafka-python
+, cython
+, zlib
+}:
+
+buildPythonPackage rec {
+  pname = "aiokafka";
+  version = "0.5.2";
+
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "aio-libs";
+    repo = "aiokafka";
+    rev = "v${version}";
+    sha256 = "062kqsq75fi5pbpqf2a8nxm43pxpr6bwplg6bp4nv2a68r850pki";
+  };
+
+  nativeBuildInputs = [
+    cython
+  ];
+
+  buildInputs = [
+    zlib
+  ];
+
+  propagatedBuildInputs = [
+    kafka-python
+  ];
+
+  postPatch = ''
+    substituteInPlace setup.py \
+       --replace "kafka-python==1.4.6" "kafka-python"
+  '';
+
+  # checks require running kafka server
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Kafka integration with asyncio";
+    homepage = https://aiokafka.readthedocs.org;
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/aiorun/default.nix b/pkgs/development/python-modules/aiorun/default.nix
new file mode 100644
index 000000000000..7e38bb76873a
--- /dev/null
+++ b/pkgs/development/python-modules/aiorun/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, isPy27
+, pytest
+, pytestcov
+, uvloop
+}:
+
+buildPythonPackage rec {
+  pname = "aiorun";
+  version = "2019.11.1";
+  format = "flit";
+
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = "cjrh";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "04p3sci6af6qqfkcqamsqhmqqrigcwvl4bmx8yv5ppvkyq39pxi7";
+  };
+
+  checkInputs = [
+    pytest
+    pytestcov
+    uvloop
+  ];
+
+  # allow for writable directory for darwin
+  preBuild = ''
+    export HOME=$TMPDIR
+  '';
+
+  checkPhase = ''
+     pytest
+  '';
+
+  meta = with lib; {
+    description = "Boilerplate for asyncio applications";
+    homepage = https://github.com/cjrh/aiorun;
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/casbin/default.nix b/pkgs/development/python-modules/casbin/default.nix
new file mode 100644
index 000000000000..114625c397ce
--- /dev/null
+++ b/pkgs/development/python-modules/casbin/default.nix
@@ -0,0 +1,40 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, simpleeval
+, isPy27
+, coveralls
+}:
+
+buildPythonPackage rec {
+  pname = "casbin";
+  version = "0.8.3";
+
+  disabled = isPy27;
+
+  src = fetchFromGitHub {
+    owner = pname;
+    repo = "pycasbin";
+    rev = "v${version}";
+    sha256 = "1s89m62933m4wprsknwhabgg7irykrcimv80hh2zkyyslz5vbq71";
+  };
+
+  propagatedBuildInputs = [
+    simpleeval
+  ];
+
+  checkInputs = [
+    coveralls
+  ];
+
+  checkPhase = ''
+    coverage run -m unittest discover -s tests -t tests
+  '';
+
+  meta = with lib; {
+    description = "An authorization library that supports access control models like ACL, RBAC, ABAC in Python";
+    homepage = https://github.com/casbin/pycasbin;
+    license = licenses.asl20;
+    maintainers = [ maintainers.costrouc ];
+  };
+}
diff --git a/pkgs/development/python-modules/gym/default.nix b/pkgs/development/python-modules/gym/default.nix
index d90ded1fb5fa..52171470c271 100644
--- a/pkgs/development/python-modules/gym/default.nix
+++ b/pkgs/development/python-modules/gym/default.nix
@@ -5,11 +5,11 @@
 
 buildPythonPackage rec {
   pname = "gym";
-  version = "0.15.4";
+  version = "0.15.3";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "3b930cbe1c76bbd30455b5e82ba723dea94159a5f988e927f443324bf7cc7ddd";
+    sha256 = "18381e13bbd1e2f206a1b88a2af4fb87affd7d06ee7955a6e5e6a79478a9adfc";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/gyp/default.nix b/pkgs/development/python-modules/gyp/default.nix
index 3cd89a7d0e1e..db828eb222dd 100644
--- a/pkgs/development/python-modules/gyp/default.nix
+++ b/pkgs/development/python-modules/gyp/default.nix
@@ -1,6 +1,6 @@
 { stdenv
 , buildPythonPackage
-, fetchgit
+, fetchFromGitiles
 , isPy3k
 }:
 
@@ -9,8 +9,8 @@ buildPythonPackage {
   version = "2015-06-11";
   disabled = isPy3k;
 
-  src = fetchgit {
-    url = "https://chromium.googlesource.com/external/gyp.git";
+  src = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/external/gyp";
     rev = "fdc7b812f99e48c00e9a487bd56751bbeae07043";
     sha256 = "1imgxsl4mr1662vsj2mlnpvvrbz71yk00w8p85vi5bkgmc6awgiz";
   };
diff --git a/pkgs/development/python-modules/starfish/default.nix b/pkgs/development/python-modules/starfish/default.nix
index 25ce5a0f6515..38934d9497ad 100644
--- a/pkgs/development/python-modules/starfish/default.nix
+++ b/pkgs/development/python-modules/starfish/default.nix
@@ -85,5 +85,6 @@ buildPythonPackage rec {
     homepage = https://spacetx-starfish.readthedocs.io/en/latest/;
     license = licenses.mit;
     maintainers = [ maintainers.costrouc ];
+    broken = true; # incompatible with latest python-dateutil, scikit-image
   };
 }
diff --git a/pkgs/development/ruby-modules/gem/nix-bundle-install.rb b/pkgs/development/ruby-modules/gem/nix-bundle-install.rb
index 142d2da9bee2..0d501bd9add7 100644
--- a/pkgs/development/ruby-modules/gem/nix-bundle-install.rb
+++ b/pkgs/development/ruby-modules/gem/nix-bundle-install.rb
@@ -5,6 +5,7 @@ require 'rubygems/command'
 require 'fileutils'
 require 'pathname'
 require 'tmpdir'
+require 'shellwords'
 
 if defined?(Encoding.default_internal)
   Encoding.default_internal = Encoding::UTF_8
@@ -31,7 +32,7 @@ bin_dir = File.join(ENV["out"], "bin")
 type        = ARGV[0]
 name        = ARGV[1]
 version     = ARGV[2]
-build_flags = ARGV[3]
+build_flags = Shellwords.split(ARGV[3])
 if type == "git"
   uri         = ARGV[4]
   REPO        = ARGV[5]
@@ -117,7 +118,7 @@ else
   source = Bundler::Source::Path.new(options)
 end
 spec = source.specs.search_all(name).first
-Bundler.rubygems.with_build_args [build_flags] do
+Bundler.rubygems.with_build_args build_flags do
   source.install(spec)
 end
 
diff --git a/pkgs/development/tools/misc/usb-modeswitch/data.nix b/pkgs/development/tools/misc/usb-modeswitch/data.nix
index fb43ff61a81c..d2b80011dea0 100644
--- a/pkgs/development/tools/misc/usb-modeswitch/data.nix
+++ b/pkgs/development/tools/misc/usb-modeswitch/data.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "usb-modeswitch-data";
-  version = "20170806";
+  version = "20191128";
 
   src = fetchurl {
     url    = "http://www.draisberghof.de/usb_modeswitch/${pname}-${version}.tar.bz2";
-    sha256 = "0b1wari3aza6qjggqd0hk2zsh93k1q8scgmwh6f8wr0flpr3whff";
+    sha256 = "1ygahl3r26r38ai8yyblq9nhf3v5i6n6r6672p5wf88wg5h9n0rz";
   };
 
   inherit (usb-modeswitch) makeFlags;
diff --git a/pkgs/development/tools/misc/usb-modeswitch/default.nix b/pkgs/development/tools/misc/usb-modeswitch/default.nix
index 7c119c929431..a0e1b8eb8ceb 100644
--- a/pkgs/development/tools/misc/usb-modeswitch/default.nix
+++ b/pkgs/development/tools/misc/usb-modeswitch/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "usb-modeswitch";
-  version = "2.5.2";
+  version = "2.6.0";
 
   src = fetchurl {
     url    = "http://www.draisberghof.de/usb_modeswitch/${pname}-${version}.tar.bz2";
-    sha256 = "19ifi80g9ns5dmspchjvfj4ykxssq9yrci8m227dgb3yr04srzxb";
+    sha256 = "18wbbxc5cfsmikba0msdvd5qlaga27b32nhrzicyd9mdddp265f2";
   };
 
   makeFlags = [
diff --git a/pkgs/misc/emulators/mame/default.nix b/pkgs/misc/emulators/mame/default.nix
index 499d7dd6c4a2..d98232b10588 100644
--- a/pkgs/misc/emulators/mame/default.nix
+++ b/pkgs/misc/emulators/mame/default.nix
@@ -1,9 +1,9 @@
-{ stdenv, mkDerivation, fetchFromGitHub, makeDesktopItem
+{ stdenv, mkDerivation, fetchFromGitHub, makeDesktopItem, makeWrapper
 , python, pkgconfig, SDL2, SDL2_ttf, alsaLib, which, qtbase, libXinerama }:
 
 let
   majorVersion = "0";
-  minorVersion = "215";
+  minorVersion = "216";
 
   desktopItem = makeDesktopItem {
     name = "MAME";
@@ -12,6 +12,8 @@ let
     genericName = "MAME is a multi-purpose emulation framework";
     categories = "System;Emulator;";
   };
+
+  dest = "$out/opt/mame";
 in mkDerivation {
   pname = "mame";
   version = "${majorVersion}.${minorVersion}";
@@ -20,7 +22,7 @@ in mkDerivation {
     owner = "mamedev";
     repo = "mame";
     rev = "mame${majorVersion}${minorVersion}";
-    sha256 = "1phz846p3zzgzrbfiq2vn79iqar2dbf7iv6wfkrp32sdkkvp7l3h";
+    sha256 = "0dmmw08pxxznvadrc51zg27jc9fjh688355w8kxkmi7k8qa367r0";
   };
 
   hardeningDisable = [ "fortify" ];
@@ -28,22 +30,35 @@ in mkDerivation {
 
   makeFlags = [ "TOOLS=1" ];
 
+  dontWrapQtApps = true;
+
   buildInputs = [ SDL2 SDL2_ttf alsaLib qtbase libXinerama ];
-  nativeBuildInputs = [ python pkgconfig which ];
+  nativeBuildInputs = [ python pkgconfig which makeWrapper ];
 
-  installPhase = ''
-    dest=$out/opt/mame
+  # by default MAME assumes that paths with stock resources
+  # are relative and that you run MAME changing to
+  # install directory, so we add absolute paths here
+  patches = [ ./emuopts.patch ];
 
-    make -f dist.mak PTR64=${if stdenv.is64bit then "1" else "0"}
-    mkdir -p $dest
-    mv build/release/${if stdenv.is64bit then "x64" else "x32"}/Release/mame/* $dest
+  postPatch = ''
+    substituteInPlace src/emu/emuopts.cpp \
+      --subst-var-by mame ${dest}
+  '';
+
+  installPhase = ''
+    make -f dist.mak PTR64=${stdenv.lib.optionalString stdenv.is64bit "1"}
+    mkdir -p ${dest}
+    mv build/release/*/Release/mame/* ${dest}
 
     mkdir -p $out/bin
-    find $dest -maxdepth 1 -executable -type f -exec mv -t $out/bin {} \;
+    find ${dest} -maxdepth 1 -executable -type f -exec mv -t $out/bin {} \;
+    install -Dm755 src/osd/sdl/taputil.sh $out/bin/taputil.sh
 
     mkdir -p $out/share/man/man{1,6}
-    mv $dest/docs/man/*.1 $out/share/man/man1
-    mv $dest/docs/man/*.6 $out/share/man/man6
+    mv ${dest}/docs/man/*.1 $out/share/man/man1
+    mv ${dest}/docs/man/*.6 $out/share/man/man6
+
+    mv artwork plugins samples ${dest}
 
     mkdir -p $out/share
     ln -s ${desktopItem}/share/applications $out/share
diff --git a/pkgs/misc/emulators/mame/emuopts.patch b/pkgs/misc/emulators/mame/emuopts.patch
new file mode 100644
index 000000000000..b85291f52f74
--- /dev/null
+++ b/pkgs/misc/emulators/mame/emuopts.patch
@@ -0,0 +1,29 @@
+diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp
+index c42fcef848..d1bddae060 100644
+--- a/src/emu/emuopts.cpp
++++ b/src/emu/emuopts.cpp
+@@ -36,16 +36,16 @@ const options_entry emu_options::s_option_entries[] =
+ 	{ nullptr,                                           nullptr,     OPTION_HEADER,     "CORE SEARCH PATH OPTIONS" },
+ 	{ OPTION_HOMEPATH,                                   ".",         OPTION_STRING,     "path to base folder for plugin data (read/write)" },
+ 	{ OPTION_MEDIAPATH ";rp;biospath;bp",                "roms",      OPTION_STRING,     "path to ROM sets and hard disk images" },
+-	{ OPTION_HASHPATH ";hash_directory;hash",            "hash",      OPTION_STRING,     "path to software definition files" },
+-	{ OPTION_SAMPLEPATH ";sp",                           "samples",   OPTION_STRING,     "path to audio sample sets" },
+-	{ OPTION_ARTPATH,                                    "artwork",   OPTION_STRING,     "path to artwork files" },
+-	{ OPTION_CTRLRPATH,                                  "ctrlr",     OPTION_STRING,     "path to controller definitions" },
+-	{ OPTION_INIPATH,                                    ".;ini;ini/presets",     OPTION_STRING,     "path to ini files" },
+-	{ OPTION_FONTPATH,                                   ".",         OPTION_STRING,     "path to font files" },
++	{ OPTION_HASHPATH ";hash_directory;hash",            "hash;@mame@/hash",      OPTION_STRING,     "path to software definition files" },
++	{ OPTION_SAMPLEPATH ";sp",                           "samples;@mame@/samples",   OPTION_STRING,     "path to audio sample sets" },
++	{ OPTION_ARTPATH,                                    "artwork;@mame@/artwork",   OPTION_STRING,     "path to artwork files" },
++	{ OPTION_CTRLRPATH,                                  "ctrlr;@mame@/ctrlr",     OPTION_STRING,     "path to controller definitions" },
++	{ OPTION_INIPATH,                                    ".;ini;ini/presets;@mame@/ini/presets",     OPTION_STRING,     "path to ini files" },
++	{ OPTION_FONTPATH,                                   ".;@mame@",         OPTION_STRING,     "path to font files" },
+ 	{ OPTION_CHEATPATH,                                  "cheat",     OPTION_STRING,     "path to cheat files" },
+ 	{ OPTION_CROSSHAIRPATH,                              "crosshair", OPTION_STRING,     "path to crosshair files" },
+-	{ OPTION_PLUGINSPATH,                                "plugins",   OPTION_STRING,     "path to plugin files" },
+-	{ OPTION_LANGUAGEPATH,                               "language",  OPTION_STRING,     "path to UI translation files" },
++	{ OPTION_PLUGINSPATH,                                "plugins;@mame@/plugins",   OPTION_STRING,     "path to plugin files" },
++	{ OPTION_LANGUAGEPATH,                               "language;@mame@/language",  OPTION_STRING,     "path to UI translation files" },
+ 	{ OPTION_SWPATH,                                     "software",  OPTION_STRING,     "path to loose software" },
+ 
+ 	// output directory options
diff --git a/pkgs/misc/tmux-plugins/default.nix b/pkgs/misc/tmux-plugins/default.nix
index 4b93ec8dff9d..0d10b44ab1e1 100644
--- a/pkgs/misc/tmux-plugins/default.nix
+++ b/pkgs/misc/tmux-plugins/default.nix
@@ -95,8 +95,8 @@ in rec {
     pluginName = "ctrlw";
     src = fetchgit {
       url = "https://github.com/eraserhd/tmux-ctrlw";
-      rev = "2354b5d56828813d0f7a4b228ca74b6134c2695f";
-      sha256 = "00hy1axmki8h2285mivsj923z327xkq89wfl2x4dxc71xjhdl216";
+      rev = "b456977125c640cd587b786c6a79cb5c7b0f900d";
+      sha256 = "1kv5pqfjczd6z7i9jf6j5xmcai50l9bn5p2p1w1l5fi6cj8cz1k1";
     };
   };
 
diff --git a/pkgs/os-specific/linux/chromium-xorg-conf/default.nix b/pkgs/os-specific/linux/chromium-xorg-conf/default.nix
index 58038923890b..d9608650ed9d 100644
--- a/pkgs/os-specific/linux/chromium-xorg-conf/default.nix
+++ b/pkgs/os-specific/linux/chromium-xorg-conf/default.nix
@@ -1,6 +1,6 @@
-{fetchgit }:
+{ fetchFromGitiles }:
 
-fetchgit {
+fetchFromGitiles {
   name = "chromium-xorg-conf";
   url = "https://chromium.googlesource.com/chromiumos/platform/xorg-conf";
   rev = "26fb9d57e195c7e467616b35b17e2b5d279c1514";
diff --git a/pkgs/servers/dns/coredns/default.nix b/pkgs/servers/dns/coredns/default.nix
index def78223f127..2c8506ac9d28 100644
--- a/pkgs/servers/dns/coredns/default.nix
+++ b/pkgs/servers/dns/coredns/default.nix
@@ -1,8 +1,8 @@
-{ stdenv, buildGoPackage, fetchFromGitHub }:
+{ stdenv, buildGoModule, fetchFromGitHub }:
 
-buildGoPackage rec {
+buildGoModule rec {
   pname = "coredns";
-  version = "1.3.1";
+  version = "1.6.6";
 
   goPackagePath = "github.com/coredns/coredns";
 
@@ -10,15 +10,15 @@ buildGoPackage rec {
     owner = "coredns";
     repo = "coredns";
     rev = "v${version}";
-    sha256 = "0aflm0c3qcjcq4dy7yx9f5xlvdm4k0b2awsp3qvbfgyp74by0584";
+    sha256 = "1x8sgchp0kkk5xdharjrq29qxgv1mdzrw3f12s2kchgqf1m6r0sx";
   };
 
-  goDeps = ./deps.nix;
+  modSha256 = "10ljggg1g5x00gpgzc5m29n1k5akf0s0g3hkdh8adcbrcz0pgr5c";
 
   meta = with stdenv.lib; {
-    homepage = https://coredns.io;
+    homepage = "https://coredns.io";
     description = "A DNS server that runs middleware";
     license = licenses.asl20;
-    maintainers = [ maintainers.rushmorem maintainers.rtreffer maintainers.deltaevo ];
+    maintainers = with maintainers; [ rushmorem rtreffer deltaevo ];
   };
 }
diff --git a/pkgs/servers/dns/coredns/deps.nix b/pkgs/servers/dns/coredns/deps.nix
deleted file mode 100644
index 4dd8228c8a6a..000000000000
--- a/pkgs/servers/dns/coredns/deps.nix
+++ /dev/null
@@ -1,84 +0,0 @@
-[
-  {
-    goPackagePath = "github.com/mholt/caddy";
-    fetch = {
-      type = "git";
-      url = "https://github.com/mholt/caddy";
-      rev = "v0.11.1";
-      sha256 = "0v35d3dy0f88wgk1vzznbx7p15vjjf7xm3qfi2c3192rsxgzvy0l";
-    };
-  }
-  {
-    goPackagePath = "github.com/miekg/dns";
-    fetch = {
-      type = "git";
-      url = "https://github.com/miekg/dns";
-      rev = "v1.1.3";
-      sha256 = "1xs1k9jm9f04y8callww9x4s0jrxmsn7882iyy4br8sbpl3wzkw4";
-    };
-  }
-  {
-    goPackagePath = "github.com/prometheus/client_golang";
-    fetch = {
-      type = "git";
-      url = "https://github.com/prometheus/client_golang";
-      rev = "v0.9.1";
-      sha256 = "01gnylazia30pcp069xcng482gwmm3xcx5zgrlwdkhic1lyb6i9l";
-    };
-  }
-  # client_golang dependencies
-  {
-    goPackagePath = "github.com/beorn7/perks";
-    fetch = {
-      type = "git";
-      url = "https://github.com/beorn7/perks";
-      rev = "3a771d992973f24aa725d07868b467d1ddfceafb";
-      sha256 = "1l2lns4f5jabp61201sh88zf3b0q793w4zdgp9nll7mmfcxxjif3";
-    };
-  }
-  {
-    goPackagePath = "github.com/golang/protobuf";
-    fetch = {
-      type = "git";
-      url = "https://github.com/golang/protobuf";
-      rev = "347cf4a86c1cb8d262994d8ef5924d4576c5b331";
-      sha256 = "0c5j5c2dnj1452653c8nnpx4jwijwafi1p8685g7ddm6kng9q1wz";
-    };
-  }
-  {
-    goPackagePath = "github.com/matttproud/golang_protobuf_extensions";
-    fetch = {
-      type = "git";
-      url = "https://github.com/matttproud/golang_protobuf_extensions";
-      rev = "c182affec369e30f25d3eb8cd8a478dee585ae7d";
-      sha256 = "1xqsf9vpcrd4hp95rl6kgmjvkv1df4aicfw4l5vfcxcwxknfx2xs";
-    };
-  }
-  {
-    goPackagePath = "github.com/prometheus/client_model";
-    fetch = {
-      type = "git";
-      url = "https://github.com/prometheus/client_model";
-      rev = "56726106282f1985ea77d5305743db7231b0c0a8";
-      sha256 = "19y4qs9mkxiiab5sh3b7cccjpl3xbp6sy8812ig9f1zg8vzkzj7j";
-    };
-  }
-  {
-    goPackagePath = "github.com/prometheus/common";
-    fetch = {
-      type = "git";
-      url = "https://github.com/prometheus/common";
-      rev = "2998b132700a7d019ff618c06a234b47c1f3f681";
-      sha256 = "131qmx0rs1nz0ci3qzkks4i6fdmr5c69i48h5cngjizlb9xxwir2";
-    };
-  }
-  {
-    goPackagePath = "github.com/prometheus/procfs";
-    fetch = {
-      type = "git";
-      url = "https://github.com/prometheus/procfs";
-      rev = "bf6a532e95b1f7a62adf0ab5050a5bb2237ad2f4";
-      sha256 = "0k65i2ikf3jp6863mpc1raf928i78r8jd7zn9djx6f4izls6l6j1";
-    };
-  }
-]
diff --git a/pkgs/tools/inputmethods/fusuma/Gemfile.lock b/pkgs/tools/inputmethods/fusuma/Gemfile.lock
index 4038b50b44fe..c35e7658d635 100644
--- a/pkgs/tools/inputmethods/fusuma/Gemfile.lock
+++ b/pkgs/tools/inputmethods/fusuma/Gemfile.lock
@@ -1,7 +1,7 @@
 GEM
   remote: https://rubygems.org/
   specs:
-    fusuma (0.10.2)
+    fusuma (1.3.0)
 
 PLATFORMS
   ruby
@@ -10,4 +10,4 @@ DEPENDENCIES
   fusuma
 
 BUNDLED WITH
-   1.16.3
+   1.17.3
diff --git a/pkgs/tools/inputmethods/fusuma/default.nix b/pkgs/tools/inputmethods/fusuma/default.nix
index b410a21cd6ba..a8901dfb0e43 100644
--- a/pkgs/tools/inputmethods/fusuma/default.nix
+++ b/pkgs/tools/inputmethods/fusuma/default.nix
@@ -16,9 +16,9 @@ bundlerApp {
 
   meta = with lib; {
     description = "Multitouch gestures with libinput driver on X11, Linux";
-    homepage    = https://github.com/iberianpig/fusuma;
-    license     = licenses.mit;
-    maintainers = with maintainers; [ jfrankenau nicknovitski ];
-    platforms   = platforms.linux;
+    homepage = "https://github.com/iberianpig/fusuma";
+    license = licenses.mit;
+    maintainers = with maintainers; [ jfrankenau nicknovitski filalex77 ];
+    platforms = platforms.linux;
   };
 }
diff --git a/pkgs/tools/inputmethods/fusuma/gemset.nix b/pkgs/tools/inputmethods/fusuma/gemset.nix
index 2edf9c0886f0..2dd9af421ba9 100644
--- a/pkgs/tools/inputmethods/fusuma/gemset.nix
+++ b/pkgs/tools/inputmethods/fusuma/gemset.nix
@@ -1,10 +1,12 @@
 {
   fusuma = {
+    groups = ["default"];
+    platforms = [];
     source = {
       remotes = ["https://rubygems.org"];
-      sha256 = "0hj64kafxj29gk53vj2syhs3vdywl3h9cpiknaqqm4srjx9g04a0";
+      sha256 = "150jc8jyqj3w4k13lf1ihqmm2sld1yawp4jwnf43jixnc9rmzx6f";
       type = "gem";
     };
-    version = "0.10.2";
+    version = "1.3.0";
   };
 }
\ No newline at end of file
diff --git a/pkgs/tools/networking/croc/default.nix b/pkgs/tools/networking/croc/default.nix
index 828d61ca43c9..0a7541407062 100644
--- a/pkgs/tools/networking/croc/default.nix
+++ b/pkgs/tools/networking/croc/default.nix
@@ -2,7 +2,7 @@
 
 buildGoModule rec {
   pname = "croc";
-  version = "6.4.6";
+  version = "6.4.7";
 
   goPackagePath = "github.com/schollz/croc";
 
@@ -10,7 +10,7 @@ buildGoModule rec {
     owner = "schollz";
     repo = pname;
     rev = "v${version}";
-    sha256 = "13sgjyrabr34a6sz8lzc21zvv5wc5lkgwbx0ar8afmikkrpdypln";
+    sha256 = "1i8g90sr5rk7flfxvmxca6z5vp9wh8zraf2lfz618s5axds3kb50";
   };
 
   modSha256 = "1w84xqnn9fnkakak6j069app4ybbxpwq79g8qypwvmqg5bhvzywg";
diff --git a/pkgs/tools/security/chaps/default.nix b/pkgs/tools/security/chaps/default.nix
index e81567c3ed87..c8ee95069682 100644
--- a/pkgs/tools/security/chaps/default.nix
+++ b/pkgs/tools/security/chaps/default.nix
@@ -1,9 +1,10 @@
-{ stdenv, fetchgit, fetchurl, trousers, leveldb, unzip, scons, pkgconfig
-, glib, dbus_cplusplus, dbus, protobuf, openssl, snappy, pam }:
+{ stdenv, fetchFromGitiles, fetchFromGitHub, fetchurl, trousers, leveldb, unzip
+, scons, pkgconfig, glib, dbus_cplusplus, dbus, protobuf, openssl, snappy, pam
+}:
 
 let
-  src_chromebase = fetchgit {
-    url = "https://chromium.googlesource.com/chromium/src/base.git";
+  src_chromebase = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/chromium/src/base";
     rev = "2dfe404711e15e24e79799516400c61b2719d7af";
     sha256 = "2bd93a3ace4b6767db2c1bd1e16f426c97b8d2133a9cb15f8372b2516cfa65c5";
   };
@@ -13,7 +14,7 @@ let
     sha256 = "0nq98cpnv2jsx2byp4ilam6kydcnziflkc16ikydajmp4mcvpz16";
   };
 
-  src_platform2 = fetchgit {
+  src_platform2 = fetchFromGitiles {
     url = "https://chromium.googlesource.com/chromiumos/platform2";
     rev = "e999e989eaa71c3db7314fc7b4e20829b2b5473b";
     sha256 = "15n1bsv6r7cny7arx0hdb223xzzbk7vkxg2r7xajhl4nsj39adjh";
@@ -25,8 +26,9 @@ stdenv.mkDerivation rec {
   name = "chaps-0.42-6812";
   version = "0.42-6812";
 
-  src = fetchgit {
-    url = "https://github.com/google/chaps-linux";
+  src = fetchFromGitHub {
+    owner = "google";
+    repo = "chaps-linux";
     rev = "989aadc45cdb216ca35b0c97d13fc691576fa1d7";
     sha256 = "0chk6pnn365d5kcz6vfqx1d0383ksk97icc0lzg0vvb0kvyj0ff1";
   };
diff --git a/pkgs/tools/system/minijail/default.nix b/pkgs/tools/system/minijail/default.nix
index 74f0a84716a1..9debd9a33d83 100644
--- a/pkgs/tools/system/minijail/default.nix
+++ b/pkgs/tools/system/minijail/default.nix
@@ -1,14 +1,13 @@
-{ stdenv, fetchgit, libcap }:
+{ stdenv, fetchFromGitiles, libcap }:
 
 stdenv.mkDerivation rec {
-  shortname = "minijail";
-  name = "${shortname}-${version}";
-  version = "android-9.0.0_r3";
+  pname = "minijail";
+  version = "android-10.0.0_r9";
 
-  src = fetchgit {
+  src = fetchFromGitiles {
     url = "https://android.googlesource.com/platform/external/minijail";
     rev = version;
-    sha256 = "1g1g52s3q61amcnx8cv1332sbixpck1bmjzgsrjiw5ix7chrzkp2";
+    sha256 = "0gcfsyim1krrddcklydqfxl8mamaxgail2xl5qp9yclq60km8f22";
   };
 
   buildInputs = [ libcap ];
diff --git a/pkgs/tools/system/vboot_reference/default.nix b/pkgs/tools/system/vboot_reference/default.nix
index 0bf8a7e85dce..bce6d0c4185f 100644
--- a/pkgs/tools/system/vboot_reference/default.nix
+++ b/pkgs/tools/system/vboot_reference/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchgit, pkgconfig, libuuid, openssl, libyaml, lzma }:
+{ stdenv, fetchFromGitiles, pkgconfig, libuuid, openssl, libyaml, lzma }:
 
 stdenv.mkDerivation rec {
   version = "20180311";
@@ -6,8 +6,8 @@ stdenv.mkDerivation rec {
 
   pname = "vboot_reference";
 
-  src = fetchgit {
-    url = https://chromium.googlesource.com/chromiumos/platform/vboot_reference;
+  src = fetchFromGitiles {
+    url = "https://chromium.googlesource.com/chromiumos/platform/vboot_reference";
     rev = checkout;
     sha256 = "1zja4ma6flch08h5j2l1hqnxmw2xwylidnddxxd5y2x05dai9ddj";
   };
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 07ea92e5d39a..77e6bd6ca1ad 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -360,6 +360,8 @@ in
 
   fetchFromGitLab = callPackage ../build-support/fetchgitlab {};
 
+  fetchFromGitiles = callPackage ../build-support/fetchgitiles {};
+
   fetchFromRepoOrCz = callPackage ../build-support/fetchrepoorcz {};
 
   fetchNuGet = callPackage ../build-support/fetchnuget { };
@@ -1493,6 +1495,8 @@ in
 
   crip = callPackage ../applications/audio/crip { };
 
+  crosvm = callPackage ../applications/virtualization/crosvm { };
+
   crunch = callPackage ../tools/security/crunch { };
 
   crudini = callPackage ../tools/misc/crudini { };
@@ -19299,6 +19303,8 @@ in
 
   hydrogen = callPackage ../applications/audio/hydrogen { };
 
+  hydroxide = callPackage ../applications/networking/hydroxide { };
+
   hyper = callPackage ../applications/misc/hyper { };
 
   hyper-haskell-server-with-packages = callPackage ../development/tools/haskell/hyper-haskell/server.nix {
@@ -23402,6 +23408,7 @@ in
     timepp = callPackage ../desktops/gnome-3/extensions/timepp { };
     topicons-plus = callPackage ../desktops/gnome-3/extensions/topicons-plus { };
     window-corner-preview = callPackage ../desktops/gnome-3/extensions/window-corner-preview { };
+    workspace-matrix = callPackage ../desktops/gnome-3/extensions/workspace-matrix { };
 
     nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks.";
     mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md";
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index aa361904eb30..dba6218ec5a0 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -165,6 +165,8 @@ in {
 
   aioredis = callPackage ../development/python-modules/aioredis { };
 
+  aiorun = callPackage ../development/python-modules/aiorun { };
+
   ansicolor = callPackage ../development/python-modules/ansicolor { };
 
   ansiwrap =  callPackage ../development/python-modules/ansiwrap { };
@@ -1906,6 +1908,8 @@ in {
 
   cartopy = callPackage ../development/python-modules/cartopy {};
 
+  casbin = callPackage ../development/python-modules/casbin { };
+
   case = callPackage ../development/python-modules/case {};
 
   cbor = callPackage ../development/python-modules/cbor {};
@@ -4338,6 +4342,8 @@ in {
 
   aioeventlet = callPackage ../development/python-modules/aioeventlet { };
 
+  aiokafka = callPackage ../development/python-modules/aiokafka { };
+
   olefile = callPackage ../development/python-modules/olefile { };
 
   requests-mock = callPackage ../development/python-modules/requests-mock { };