about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederik Rietdijk <fridh@fridh.nl>2019-12-15 16:09:28 +0100
committerFrederik Rietdijk <fridh@fridh.nl>2019-12-15 16:09:28 +0100
commitc20cd71d608985f2d4326968d2265602080844c5 (patch)
treebce8bac4388839cd946354553e374965c7d5ce3a
parent1d8ef857eec45bc651d6f5dc7799d1a7656e5deb (diff)
parentad3c49da0e08a9d34e3622f6eaa843368d636ecd (diff)
downloadnixlib-c20cd71d608985f2d4326968d2265602080844c5.tar
nixlib-c20cd71d608985f2d4326968d2265602080844c5.tar.gz
nixlib-c20cd71d608985f2d4326968d2265602080844c5.tar.bz2
nixlib-c20cd71d608985f2d4326968d2265602080844c5.tar.lz
nixlib-c20cd71d608985f2d4326968d2265602080844c5.tar.xz
nixlib-c20cd71d608985f2d4326968d2265602080844c5.tar.zst
nixlib-c20cd71d608985f2d4326968d2265602080844c5.zip
Merge master into staging-next
-rw-r--r--doc/languages-frameworks/gnome.xml12
-rw-r--r--nixos/modules/services/networking/firewall.nix15
-rw-r--r--nixos/modules/services/networking/helpers.nix11
-rw-r--r--nixos/modules/services/networking/nat.nix5
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/zsh-history.nix35
-rw-r--r--pkgs/applications/audio/lollypop/default.nix6
-rw-r--r--pkgs/applications/graphics/rapid-photo-downloader/default.nix18
-rw-r--r--pkgs/applications/misc/multibootusb/default.nix24
-rw-r--r--pkgs/applications/misc/plover/default.nix7
-rw-r--r--pkgs/applications/networking/browsers/webmacs/default.nix26
-rw-r--r--pkgs/applications/networking/instant-messengers/blink/default.nix12
-rw-r--r--pkgs/applications/networking/mailreaders/mutt/default.nix4
-rw-r--r--pkgs/applications/science/astronomy/xplanet/default.nix31
-rw-r--r--pkgs/applications/science/astronomy/xplanet/gcc6.patch128
-rw-r--r--pkgs/applications/science/astronomy/xplanet/giflib.patch141
-rw-r--r--pkgs/applications/science/electronics/gtkwave/default.nix17
-rw-r--r--pkgs/applications/science/logic/z3/default.nix6
-rw-r--r--pkgs/data/themes/mojave/default.nix26
-rw-r--r--pkgs/desktops/cinnamon/default.nix5
-rw-r--r--pkgs/desktops/cinnamon/xapps/default.nix104
-rw-r--r--pkgs/development/libraries/libgnomekbd/default.nix20
-rw-r--r--pkgs/development/libraries/nco/default.nix13
-rw-r--r--pkgs/development/libraries/vaapi-intel/default.nix9
-rw-r--r--pkgs/development/ocaml-modules/lua-ml/default.nix32
-rw-r--r--pkgs/development/python-modules/ipython/default.nix14
-rw-r--r--pkgs/development/python-modules/python-twitter/default.nix44
-rw-r--r--pkgs/development/python-modules/spyder/default.nix7
-rw-r--r--pkgs/development/python-modules/xapp/default.nix43
-rw-r--r--pkgs/development/tools/cmake-format/default.nix4
-rw-r--r--pkgs/development/tools/ocaml/ocaml-top/default.nix12
-rw-r--r--pkgs/development/tools/profiling/pyflame/default.nix143
-rw-r--r--pkgs/games/anki/default.nix11
-rw-r--r--pkgs/games/mnemosyne/default.nix11
-rw-r--r--pkgs/games/quake3/quake3e/default.nix4
-rw-r--r--pkgs/shells/zsh/zsh-history/default.nix6
-rw-r--r--pkgs/tools/audio/beets/beet-check-tests.patch17
-rw-r--r--pkgs/tools/audio/beets/check-plugin.nix35
-rw-r--r--pkgs/tools/audio/beets/default.nix8
-rw-r--r--pkgs/tools/misc/exa/default.nix11
-rw-r--r--pkgs/tools/misc/pfetch/default.nix28
-rw-r--r--pkgs/tools/misc/tio/default.nix2
-rw-r--r--pkgs/tools/misc/vdirsyncer/default.nix4
-rw-r--r--pkgs/tools/misc/vector/default.nix29
-rw-r--r--pkgs/top-level/all-packages.nix8
-rw-r--r--pkgs/top-level/ocaml-packages.nix2
-rw-r--r--pkgs/top-level/python-packages.nix11
47 files changed, 582 insertions, 580 deletions
diff --git a/doc/languages-frameworks/gnome.xml b/doc/languages-frameworks/gnome.xml
index 9c3afe127a48..bb68d026ae23 100644
--- a/doc/languages-frameworks/gnome.xml
+++ b/doc/languages-frameworks/gnome.xml
@@ -199,9 +199,9 @@ python3.pkgs.buildPythonApplication {
   dontWrapGApps = true;
 
   # Arguments to be passed to `makeWrapper`, only used by buildPython*
-  makeWrapperArgs = [
-    "\${gappsWrapperArgs[@]}"
-  ];
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
 }
 </programlisting>
       And for a QT app like:
@@ -219,9 +219,9 @@ mkDerivation {
   dontWrapGApps = true;
 
   # Arguments to be passed to `makeWrapper`, only used by qt5’s mkDerivation
-  qtWrapperArgs = [
-    "\${gappsWrapperArgs[@]}"
-  ];
+  preFixup = ''
+    qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
 }
 </programlisting>
      </para>
diff --git a/nixos/modules/services/networking/firewall.nix b/nixos/modules/services/networking/firewall.nix
index 5919962837a2..15aaf7410674 100644
--- a/nixos/modules/services/networking/firewall.nix
+++ b/nixos/modules/services/networking/firewall.nix
@@ -42,16 +42,7 @@ let
 
   kernelHasRPFilter = ((kernel.config.isEnabled or (x: false)) "IP_NF_MATCH_RPFILTER") || (kernel.features.netfilterRPFilter or false);
 
-  helpers =
-    ''
-      # Helper command to manipulate both the IPv4 and IPv6 tables.
-      ip46tables() {
-        iptables -w "$@"
-        ${optionalString config.networking.enableIPv6 ''
-          ip6tables -w "$@"
-        ''}
-      }
-    '';
+  helpers = import ./helpers.nix { inherit config lib; };
 
   writeShScript = name: text: let dir = pkgs.writeScriptBin name ''
     #! ${pkgs.runtimeShell} -e
@@ -271,7 +262,7 @@ let
       apply = canonicalizePortList;
       example = [ 22 80 ];
       description =
-        '' 
+        ''
           List of TCP ports on which incoming connections are
           accepted.
         '';
@@ -282,7 +273,7 @@ let
       default = [ ];
       example = [ { from = 8999; to = 9003; } ];
       description =
-        '' 
+        ''
           A range of TCP ports on which incoming connections are
           accepted.
         '';
diff --git a/nixos/modules/services/networking/helpers.nix b/nixos/modules/services/networking/helpers.nix
new file mode 100644
index 000000000000..d7d42de0e3a8
--- /dev/null
+++ b/nixos/modules/services/networking/helpers.nix
@@ -0,0 +1,11 @@
+{ config, lib, ... }: ''
+  # Helper command to manipulate both the IPv4 and IPv6 tables.
+  ip46tables() {
+    iptables -w "$@"
+    ${
+      lib.optionalString config.networking.enableIPv6 ''
+        ip6tables -w "$@"
+      ''
+    }
+  }
+''
diff --git a/nixos/modules/services/networking/nat.nix b/nixos/modules/services/networking/nat.nix
index c80db8472f0d..f1238bc6b168 100644
--- a/nixos/modules/services/networking/nat.nix
+++ b/nixos/modules/services/networking/nat.nix
@@ -7,12 +7,14 @@
 with lib;
 
 let
-
   cfg = config.networking.nat;
 
   dest = if cfg.externalIP == null then "-j MASQUERADE" else "-j SNAT --to-source ${cfg.externalIP}";
 
+  helpers = import ./helpers.nix { inherit config lib; };
+
   flushNat = ''
+    ${helpers}
     ip46tables -w -t nat -D PREROUTING -j nixos-nat-pre 2>/dev/null|| true
     ip46tables -w -t nat -F nixos-nat-pre 2>/dev/null || true
     ip46tables -w -t nat -X nixos-nat-pre 2>/dev/null || true
@@ -27,6 +29,7 @@ let
   '';
 
   setupNat = ''
+    ${helpers}
     # Create subchain where we store rules
     ip46tables -w -t nat -N nixos-nat-pre
     ip46tables -w -t nat -N nixos-nat-post
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 39ee3206d806..5407a071cadd 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -294,5 +294,6 @@ in
   xss-lock = handleTest ./xss-lock.nix {};
   yabar = handleTest ./yabar.nix {};
   yggdrasil = handleTest ./yggdrasil.nix {};
+  zsh-history = handleTest ./zsh-history.nix {};
   zookeeper = handleTest ./zookeeper.nix {};
 }
diff --git a/nixos/tests/zsh-history.nix b/nixos/tests/zsh-history.nix
new file mode 100644
index 000000000000..4380ec9adfd2
--- /dev/null
+++ b/nixos/tests/zsh-history.nix
@@ -0,0 +1,35 @@
+import ./make-test-python.nix ({ pkgs, ...} : {
+  name = "zsh-history";
+  meta = with pkgs.stdenv.lib.maintainers; {
+    maintainers = [ kampka ];
+  };
+
+  nodes.default = { ... }: {
+    programs = {
+      zsh.enable = true;
+    };
+    environment.systemPackages = [ pkgs.zsh-history ];
+    programs.zsh.interactiveShellInit = ''
+      source ${pkgs.zsh-history.out}/share/zsh/init.zsh
+    '';
+    users.users.root.shell = "${pkgs.zsh}/bin/zsh";
+  };
+
+  testScript = ''
+    start_all()
+    default.wait_for_unit("multi-user.target")
+    default.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
+
+    # Login
+    default.wait_until_tty_matches(1, "login: ")
+    default.send_chars("root\n")
+    default.wait_until_tty_matches(1, "root@default>")
+
+    # Generate some history
+    default.send_chars("echo foobar\n")
+    default.wait_until_tty_matches(1, "foobar")
+
+    # Ensure that command was recorded in history
+    default.succeed("/run/current-system/sw/bin/history list | grep -q foobar")
+  '';
+})
diff --git a/pkgs/applications/audio/lollypop/default.nix b/pkgs/applications/audio/lollypop/default.nix
index b555598591d5..2d2062696d77 100644
--- a/pkgs/applications/audio/lollypop/default.nix
+++ b/pkgs/applications/audio/lollypop/default.nix
@@ -79,9 +79,9 @@ python3.pkgs.buildPythonApplication rec  {
   # argument
   dontWrapGApps = true;
 
-  makeWrapperArgs = [
-    "\${gappsWrapperArgs[@]}"
-  ];
+  preFixup = ''
+    makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+  '';
 
   meta = with lib; {
     changelog = "https://gitlab.gnome.org/World/lollypop/tags/${version}";
diff --git a/pkgs/applications/graphics/rapid-photo-downloader/default.nix b/pkgs/applications/graphics/rapid-photo-downloader/default.nix
index 4279af4cb78b..2e12e18a5a53 100644
--- a/pkgs/applications/graphics/rapid-photo-downloader/default.nix
+++ b/pkgs/applications/graphics/rapid-photo-downloader/default.nix
@@ -67,14 +67,16 @@ mkDerivationWith python3Packages.buildPythonApplication rec {
     tenacity
   ];
 
-  makeWrapperArgs = [
-    "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\""
-    "--set PYTHONPATH \"$PYTHONPATH\""
-    "--prefix PATH : ${stdenv.lib.makeBinPath [ exiftool vmtouch ]}"
-    "--prefix LD_LIBRARY_PATH : ${stdenv.lib.makeLibraryPath [ libmediainfo ]}"
-    "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : \"$GST_PLUGIN_SYSTEM_PATH_1_0\""
-    "\${qtWrapperArgs[@]}"
-  ];
+  preFixup = ''
+    makeWrapperArgs+=(
+      --set GI_TYPELIB_PATH "$GI_TYPELIB_PATH"
+      --set PYTHONPATH "$PYTHONPATH"
+      --prefix PATH : "${stdenv.lib.makeBinPath [ exiftool vmtouch ]}"
+      --prefix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath [ libmediainfo ]}"
+      --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0"
+      "''${qtWrapperArgs[@]}"
+    )
+  '';
 
   meta = with stdenv.lib; {
     description = "Photo and video importer for cameras, phones, and memory cards";
diff --git a/pkgs/applications/misc/multibootusb/default.nix b/pkgs/applications/misc/multibootusb/default.nix
index 142014832943..ab8802a1b691 100644
--- a/pkgs/applications/misc/multibootusb/default.nix
+++ b/pkgs/applications/misc/multibootusb/default.nix
@@ -52,17 +52,6 @@ python36Packages.buildPythonApplication rec {
     python36Packages.six
   ];
 
-  makeWrapperArgs = [
-    # Firstly, add all necessary QT variables
-    "\${qtWrapperArgs[@]}"
-
-    # Then, add the installed scripts/ directory to the python path
-    "--prefix" "PYTHONPATH" ":" "$out/lib/${python36Packages.python.libPrefix}/site-packages"
-
-    # Finally, move to directory that contains data
-    "--run" "\"cd $out/share/${pname}\""
-  ];
-
   postInstall = ''
     # This script doesn't work and it doesn't add much anyway
     rm $out/bin/multibootusb-pkexec
@@ -72,6 +61,19 @@ python36Packages.buildPythonApplication rec {
     cp -r data "$out/share/${pname}/data"
   '';
 
+  preFixup = ''
+    makeWrapperArgs+=(
+      # Firstly, add all necessary QT variables
+      "''${qtWrapperArgs[@]}"
+
+      # Then, add the installed scripts/ directory to the python path
+      --prefix "PYTHONPATH" ":" "$out/lib/${python36Packages.python.libPrefix}/site-packages"
+
+      # Finally, move to directory that contains data
+      --run "cd $out/share/${pname}"
+    )
+  '';
+
   meta = with stdenv.lib; {
     description = "Multiboot USB creator for Linux live disks";
     homepage = http://multibootusb.org/;
diff --git a/pkgs/applications/misc/plover/default.nix b/pkgs/applications/misc/plover/default.nix
index 77e93eaba7e9..8ecc4f974b45 100644
--- a/pkgs/applications/misc/plover/default.nix
+++ b/pkgs/applications/misc/plover/default.nix
@@ -47,8 +47,9 @@
     propagatedBuildInputs = [ Babel pyqt5 xlib pyserial appdirs wcwidth setuptools ];
 
     dontWrapQtApps = true;
-    makeWrapperArgs = [
-      "\${qtWrapperArgs[@]}"
-    ];
+
+    preFixup = ''
+      makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+    '';
   };
 }
diff --git a/pkgs/applications/networking/browsers/webmacs/default.nix b/pkgs/applications/networking/browsers/webmacs/default.nix
index 0f36177278b9..b86ba3c39f06 100644
--- a/pkgs/applications/networking/browsers/webmacs/default.nix
+++ b/pkgs/applications/networking/browsers/webmacs/default.nix
@@ -27,18 +27,6 @@ mkDerivationWith python3Packages.buildPythonApplication rec {
     pygments
   ];
 
-  dontWrapQtApps = true;
-
-  makeWrapperArgs = [ "\${qtWrapperArgs[@]}" ];
-
-  # See https://github.com/parkouss/webmacs/blob/1a04fb7bd3f33d39cb4d71621b48c2458712ed39/setup.py#L32
-  # Don't know why they're using CC for g++.
-  preConfigure = ''
-   export CC=$CXX
-  '';
-
-  doCheck = false; # test dependencies not packaged up yet
-
   checkInputs = [
     python3Packages.pytest
     #python3Packages.pytest-xvfb
@@ -53,6 +41,20 @@ mkDerivationWith python3Packages.buildPythonApplication rec {
     # python3Packages.flake8
   ];
 
+  # See https://github.com/parkouss/webmacs/blob/1a04fb7bd3f33d39cb4d71621b48c2458712ed39/setup.py#L32
+  # Don't know why they're using CC for g++.
+  preConfigure = ''
+   export CC=$CXX
+  '';
+
+  doCheck = false; # test dependencies not packaged up yet
+
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
   meta = with lib; {
     description = "Keyboard-based web browser with Emacs/conkeror heritage";
     longDescription = ''
diff --git a/pkgs/applications/networking/instant-messengers/blink/default.nix b/pkgs/applications/networking/instant-messengers/blink/default.nix
index 62d0d738b504..b6e13fe403db 100644
--- a/pkgs/applications/networking/instant-messengers/blink/default.nix
+++ b/pkgs/applications/networking/instant-messengers/blink/default.nix
@@ -44,11 +44,6 @@ mkDerivationWith pythonPackages.buildPythonApplication rec {
 
   dontWrapQtApps = true;
 
-  makeWrapperArgs = [
-    "\${qtWrapperArgs[@]}"
-    "--prefix LD_LIBRARY_PATH: ${gnutls.out}/lib"
-  ];
-
   postInstall = ''
     mkdir -p "$out/share/applications"
     mkdir -p "$out/share/pixmaps"
@@ -56,6 +51,13 @@ mkDerivationWith pythonPackages.buildPythonApplication rec {
     cp "$out"/share/blink/icons/blink.* "$out/share/pixmaps"
   '';
 
+  preFixup = ''
+    makeWrapperArgs+=(
+      --prefix "LD_LIBRARY_PATH" ":" "${gnutls.out}/lib"
+      "''${qtWrapperArgs[@]}"
+    )
+  '';
+
   meta = with stdenv.lib; {
     homepage = http://icanblink.com/;
     description = "A state of the art, easy to use SIP client for Voice, Video and IM";
diff --git a/pkgs/applications/networking/mailreaders/mutt/default.nix b/pkgs/applications/networking/mailreaders/mutt/default.nix
index bc4bb49981e4..daf665f77af6 100644
--- a/pkgs/applications/networking/mailreaders/mutt/default.nix
+++ b/pkgs/applications/networking/mailreaders/mutt/default.nix
@@ -27,11 +27,11 @@ with stdenv.lib;
 
 stdenv.mkDerivation rec {
   pname = "mutt";
-  version = "1.13.0";
+  version = "1.13.1";
 
   src = fetchurl {
     url = "http://ftp.mutt.org/pub/mutt/${pname}-${version}.tar.gz";
-    sha256 = "1dzmypmcyqsxcb0qwz1b2v3nhvd83jcqlnn3acvgaiag10hxq3d0";
+    sha256 = "0pc77rcq7bjr6vmfyh74fhzp94ijx05fdn0z9nbjhx75j899bd8z";
   };
 
   patches = optional smimeSupport (fetchpatch {
diff --git a/pkgs/applications/science/astronomy/xplanet/default.nix b/pkgs/applications/science/astronomy/xplanet/default.nix
index 5f02dc27a224..f306f9265aba 100644
--- a/pkgs/applications/science/astronomy/xplanet/default.nix
+++ b/pkgs/applications/science/astronomy/xplanet/default.nix
@@ -1,29 +1,38 @@
-{stdenv, fetchurl, pkgconfig, freetype, pango, libpng, libtiff, giflib
-, libjpeg, netpbm}:
+{stdenv, fetchurl, fetchpatch, pkgconfig, freetype, pango, libpng, libtiff
+, giflib, libjpeg, netpbm}:
 
 stdenv.mkDerivation rec {
-  name = "xplanet-1.3.0";
+  pname = "xplanet";
+  version = "1.3.1";
 
   src = fetchurl {
-    url = "mirror://sourceforge/xplanet/${name}.tar.gz";
-    sha256 = "0hml2v228wi2r61m1pgka7h96rl92b6apk0iigm62miyp4mp9ys4";
+    url = "mirror://sourceforge/xplanet/${pname}-${version}.tar.gz";
+    sha256 = "1rzc1alph03j67lrr66499zl0wqndiipmj99nqgvh9xzm1qdb023";
   };
 
   nativeBuildInputs = [ pkgconfig ];
   buildInputs = [ freetype pango libpng libtiff giflib libjpeg netpbm ];
 
   patches = [
-    ./giflib.patch
-    ./gcc6.patch
+    (fetchpatch {
+      name = "giflib6.patch";
+      url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/giflib6.patch?h=packages/xplanet&id=ce6f25eb369dc011161613894f01fd0a6ae85a09";
+      sha256 = "173l0xkqq0v2bpaff7hhwc7y2aw5cclqw8988k1nalhyfbrjb8bl";
+    })
+    (fetchpatch {
+      name = "xplanet-c++11.patch";
+      url = "https://git.archlinux.org/svntogit/community.git/plain/trunk/xplanet-c++11.patch?h=packages/xplanet&id=ce6f25eb369dc011161613894f01fd0a6ae85a09";
+      sha256 = "0vldai78ixw49bxch774pps6pq4sp0p33qvkvxywcz7p8kzpg8q2";
+    })
   ];
 
   NIX_CFLAGS_COMPILE = stdenv.lib.optionalString stdenv.cc.isClang "-Wno-error=c++11-narrowing";
 
-  meta = {
+  meta = with stdenv.lib; {
     description = "Renders an image of the earth or other planets into the X root window";
     homepage = http://xplanet.sourceforge.net;
-    license = "GPL";
-    maintainers = [ stdenv.lib.maintainers.sander ];
-    platforms = stdenv.lib.platforms.all;
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ lassulus sander ];
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/applications/science/astronomy/xplanet/gcc6.patch b/pkgs/applications/science/astronomy/xplanet/gcc6.patch
deleted file mode 100644
index b30385a50f83..000000000000
--- a/pkgs/applications/science/astronomy/xplanet/gcc6.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-diff --git c/src/libannotate/addArcs.cpp i/src/libannotate/addArcs.cpp
-index 2ee06c0..0ff5478 100644
---- c/src/libannotate/addArcs.cpp
-+++ i/src/libannotate/addArcs.cpp
-@@ -258,7 +258,7 @@ addArcs(PlanetProperties *planetProperties, Planet *planet,
-         {
-             ifstream inFile(arcFile.c_str());
-             char *line = new char[MAX_LINE_LENGTH];
--            while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL)
-+            while (inFile.getline (line, MAX_LINE_LENGTH, '\n'))
-                 readArcFile(line, planet, view, projection,
-                             planetProperties, annotationMap);
-             
-@@ -292,7 +292,7 @@ addArcs(View *view, multimap<double, Annotation *> &annotationMap)
-         {
-             ifstream inFile(arcFile.c_str());
-             char *line = new char[256];
--            while (inFile.getline (line, 256, '\n') != NULL)
-+            while (inFile.getline (line, 256, '\n'))
-                 readArcFile(line, NULL, view, NULL, NULL, annotationMap);
- 
-             inFile.close();
-diff --git c/src/libannotate/addMarkers.cpp i/src/libannotate/addMarkers.cpp
-index 6a8a835..b35d820 100644
---- c/src/libannotate/addMarkers.cpp
-+++ i/src/libannotate/addMarkers.cpp
-@@ -423,7 +423,7 @@ addMarkers(PlanetProperties *planetProperties, Planet *planet,
-         {
-             ifstream inFile(markerFile.c_str());
-             char *line = new char[MAX_LINE_LENGTH];
--            while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL)
-+            while (inFile.getline (line, MAX_LINE_LENGTH, '\n'))
-             {
-                 unsigned char color[3];
-                 memcpy(color, planetProperties->MarkerColor(), 3);
-@@ -469,7 +469,7 @@ addMarkers(View *view, const int width, const int height,
-         {
-             ifstream inFile(markerFile.c_str());
-             char *line = new char[MAX_LINE_LENGTH];
--            while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL)
-+            while (inFile.getline (line, MAX_LINE_LENGTH, '\n'))
-             {
-                 unsigned char color[3];
-                 memcpy(color, options->Color(), 3);
-diff --git c/src/libannotate/addSatellites.cpp i/src/libannotate/addSatellites.cpp
-index 2634339..c9ff0b0 100644
---- c/src/libannotate/addSatellites.cpp
-+++ i/src/libannotate/addSatellites.cpp
-@@ -488,10 +488,10 @@ loadSatelliteVector(PlanetProperties *planetProperties)
-         {
-             ifstream inFile(tleFile.c_str());
-             char lines[3][80];
--            while (inFile.getline(lines[0], 80) != NULL)
-+            while (inFile.getline(lines[0], 80))
-             {
--                if ((inFile.getline(lines[1], 80) == NULL) 
--                    || (inFile.getline(lines[2], 80) == NULL))
-+                if ((inFile.getline(lines[1], 80))
-+                    || (inFile.getline(lines[2], 80)))
-                 {
-                     ostringstream errStr;
-                     errStr << "Malformed TLE file (" << tleFile << ")?\n";
-@@ -542,7 +542,7 @@ addSatellites(PlanetProperties *planetProperties, Planet *planet,
-         {
-             ifstream inFile(satFile.c_str());
-             char *line = new char[MAX_LINE_LENGTH];
--            while (inFile.getline (line, MAX_LINE_LENGTH, '\n') != NULL)
-+            while (inFile.getline (line, MAX_LINE_LENGTH, '\n'))
-                 readSatelliteFile(line, planet, view, projection,
-                                   planetProperties, annotationMap);
-             
-diff --git c/src/libmultiple/RayleighScattering.cpp i/src/libmultiple/RayleighScattering.cpp
-index d885173..7c25c1c 100644
---- c/src/libmultiple/RayleighScattering.cpp
-+++ i/src/libmultiple/RayleighScattering.cpp
-@@ -369,7 +369,7 @@ RayleighScattering::readConfigFile(string configFile)
- 
-     diskTemplate_.clear();
-     limbTemplate_.clear();
--    while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL)
-+    while (inFile.getline(line, MAX_LINE_LENGTH, '\n'))
-     {
-         int i = 0;
-         while (isDelimiter(line[i]))
-@@ -439,7 +439,7 @@ RayleighScattering::readBlock(ifstream &inFile,
-     values.clear();
- 
-     char line[MAX_LINE_LENGTH];
--    while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL)
-+    while (inFile.getline(line, MAX_LINE_LENGTH, '\n'))
-     {
-         int i = 0;
-         while (isDelimiter(line[i]))
-@@ -470,7 +470,7 @@ RayleighScattering::readValue(ifstream &inFile,
-                               double &value)
- {
-     char line[MAX_LINE_LENGTH];
--    while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL)
-+    while (inFile.getline(line, MAX_LINE_LENGTH, '\n'))
-     {
-         int i = 0;
-         while (isDelimiter(line[i]))
-diff --git c/src/libmultiple/drawStars.cpp i/src/libmultiple/drawStars.cpp
-index ff07c49..22e41a0 100644
---- c/src/libmultiple/drawStars.cpp
-+++ i/src/libmultiple/drawStars.cpp
-@@ -41,7 +41,7 @@ drawStars(DisplayBase *display, View *view)
-     ifstream inFile(starMap.c_str());
- 
-     char line[MAX_LINE_LENGTH];
--    while (inFile.getline(line, MAX_LINE_LENGTH, '\n') != NULL)
-+    while (inFile.getline(line, MAX_LINE_LENGTH, '\n'))
-     {
-         if (line[0] == '#') continue;
- 
-diff --git c/src/readConfig.cpp i/src/readConfig.cpp
-index cc1964f..2946690 100644
---- c/src/readConfig.cpp
-+++ i/src/readConfig.cpp
-@@ -550,7 +550,7 @@ readConfigFile(string configFile, PlanetProperties *planetProperties[])
- 
-         ifstream inFile(configFile.c_str());
-         char *line = new char[256];
--        while (inFile.getline(line, 256, '\n') != NULL)
-+        while (inFile.getline(line, 256, '\n'))
-             readConfig(line, planetProperties);
-         
-         // This condition will only be true if [default] is the only
diff --git a/pkgs/applications/science/astronomy/xplanet/giflib.patch b/pkgs/applications/science/astronomy/xplanet/giflib.patch
deleted file mode 100644
index 653b9c8dc7d6..000000000000
--- a/pkgs/applications/science/astronomy/xplanet/giflib.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-diff -wbBur xplanet-1.3.0/src/libimage/gif.c xplanet-1.3.0.my/src/libimage/gif.c
---- xplanet-1.3.0/src/libimage/gif.c	2006-03-26 01:50:51.000000000 +0300
-+++ xplanet-1.3.0.my/src/libimage/gif.c	2014-05-29 18:59:14.830652716 +0400
-@@ -20,7 +20,7 @@
- 
- #include <stdio.h>
- #include <stdlib.h>
--
-+#define FALSE 0
- #include <gif_lib.h>
- 
- /*
-@@ -42,11 +42,11 @@
-     int color_index;
-     unsigned char *ptr = NULL;
- 
--    infile = DGifOpenFileName(filename);
-+    infile = DGifOpenFileName(filename, NULL);
- 
-     if (infile == NULL)
-     {
--        PrintGifError();
-+        printf("%s\n", GifErrorString(GIF_ERROR));
-         return(0);
-     }
- 
-@@ -54,7 +54,7 @@
-     {
-         if (DGifGetRecordType(infile, &record_type) == GIF_ERROR) 
-         {
--            PrintGifError();
-+            printf("%s\n", GifErrorString(GIF_ERROR));
-             return(0);
-         }
- 
-@@ -63,7 +63,7 @@
-         case IMAGE_DESC_RECORD_TYPE:
-             if (DGifGetImageDesc(infile) == GIF_ERROR)
-             {
--                PrintGifError();
-+                printf("%s\n", GifErrorString(GIF_ERROR));
-                 return(0);
-             }
- 
-@@ -107,14 +107,14 @@
-             GifByteType *ext;
-             if (DGifGetExtension(infile, &ext_code, &ext) == GIF_ERROR) 
-             {
--                PrintGifError();
-+                printf("%s\n", GifErrorString(GIF_ERROR));
-                 return(0);
-             }
-             while (ext != NULL) 
-             {
-                 if (DGifGetExtensionNext(infile, &ext) == GIF_ERROR) 
-                 {
--                    PrintGifError();
-+                    printf("%s\n", GifErrorString(GIF_ERROR));
-                     return(0);
-                 }
-             }
-@@ -154,7 +154,7 @@
-     
-     free(buffer);
- 
--    DGifCloseFile(infile);
-+    DGifCloseFile(infile, NULL);
-     return(1);
- }
- 
-@@ -178,7 +178,7 @@
-         return(0);
-     }
- 
--    colormap = MakeMapObject(colormap_size, NULL);
-+    colormap = GifMakeMapObject(colormap_size, NULL);
- 
-     for (i = 0; i < width * height; i++)
-     {
-@@ -187,10 +187,10 @@
-         blue[i]  = (GifByteType) rgb[3*i+2];
-     }
-   
--    if (QuantizeBuffer(width, height, &colormap_size, red, green, blue,   
-+    if (GifQuantizeBuffer(width, height, &colormap_size, red, green, blue,   
-                        buffer, colormap->Colors) == GIF_ERROR)
-     {
--        PrintGifError();
-+        printf("%s\n", GifErrorString(GIF_ERROR));
-         return(0);
-     }
- 
-@@ -198,24 +198,24 @@
-     free(green);
-     free(blue);
- 
--    outfile = EGifOpenFileName((char *) filename, FALSE);
-+    outfile = EGifOpenFileName((char *) filename, FALSE, NULL);
-     if (outfile == NULL)
-     {
--        PrintGifError();
-+        printf("%s\n", GifErrorString(GIF_ERROR));
-         return(0);
-     }
- 
-     if (EGifPutScreenDesc(outfile, width, height, colormap_size, 0, colormap)
-         == GIF_ERROR)
-     {
--        PrintGifError();
-+        printf("%s\n", GifErrorString(GIF_ERROR));
-         return(0);
-     }
- 
-     if (EGifPutImageDesc(outfile, 0, 0, width, height, FALSE, NULL)
-         == GIF_ERROR)
-     {
--        PrintGifError();
-+        printf("%s\n", GifErrorString(GIF_ERROR));
-         return(0);
-     }
- 
-@@ -224,7 +224,7 @@
-     {
-         if (EGifPutLine(outfile, ptr, width) == GIF_ERROR)
-         {
--            PrintGifError();
-+            printf("%s\n", GifErrorString(GIF_ERROR));
-             return(0);
-         }
-         ptr += width;
-@@ -232,8 +232,8 @@
- 
-     EGifSpew(outfile);
- 
--    if (EGifCloseFile(outfile) == GIF_ERROR) 
--        PrintGifError();
-+    if (EGifCloseFile(outfile, NULL) == GIF_ERROR) 
-+        printf("%s\n", GifErrorString(GIF_ERROR));
- 
-     free(buffer);
- 
diff --git a/pkgs/applications/science/electronics/gtkwave/default.nix b/pkgs/applications/science/electronics/gtkwave/default.nix
index 9b52e8c50519..75d69d3e499e 100644
--- a/pkgs/applications/science/electronics/gtkwave/default.nix
+++ b/pkgs/applications/science/electronics/gtkwave/default.nix
@@ -1,18 +1,23 @@
-{stdenv, fetchurl, gtk2, gperf, pkgconfig, bzip2, tcl, tk, judy, xz}:
+{ stdenv, fetchurl, glib, gtk3, gperf, pkgconfig, bzip2, tcl, tk, wrapGAppsHook, judy, xz }:
 
 stdenv.mkDerivation rec {
   pname = "gtkwave";
   version = "3.3.103";
 
   src = fetchurl {
-    url    = "mirror://sourceforge/gtkwave/${pname}-${version}.tar.gz";
-    sha256 = "1xzaxqbabj4sb4n10yki5acglx3736pwl3kwlq4k7i96rzvsn9f3";
+    url    = "mirror://sourceforge/gtkwave/${pname}-gtk3-${version}.tar.gz";
+    sha256 = "0djqfnxy772a9p44wnm5ansbih7jg76xv1hvcpkv3gblhkzg49ay";
   };
 
-  nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ gtk2 gperf bzip2 tcl tk judy xz ];
+  nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+  buildInputs = [ glib gtk3 gperf bzip2 tcl tk judy xz ];
 
-  configureFlags = [ "--with-tcl=${tcl}/lib" "--with-tk=${tk}/lib" "--enable-judy" ];
+  configureFlags = [
+    "--with-tcl=${tcl}/lib"
+    "--with-tk=${tk}/lib"
+    "--enable-judy"
+    "--enable-gtk3"
+  ];
 
   meta = {
     description = "VCD/Waveform viewer for Unix and Win32";
diff --git a/pkgs/applications/science/logic/z3/default.nix b/pkgs/applications/science/logic/z3/default.nix
index 14f75fb68b5e..170a56b95b91 100644
--- a/pkgs/applications/science/logic/z3/default.nix
+++ b/pkgs/applications/science/logic/z3/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "z3";
-  version = "4.8.5";
+  version = "4.8.7";
 
   src = fetchFromGitHub {
     owner  = "Z3Prover";
     repo   = pname;
-    rev    = "Z3-${version}";
-    sha256 = "11sy98clv7ln0a5vqxzvh6wwqbswsjbik2084hav5kfws4xvklfa";
+    rev    = "z3-${version}";
+    sha256 = "0hprcdwhhyjigmhhk6514m71bnmvqci9r8gglrqilgx424r6ff7q";
   };
 
   buildInputs = [ python fixDarwinDylibNames ];
diff --git a/pkgs/data/themes/mojave/default.nix b/pkgs/data/themes/mojave/default.nix
index 714e026d32c1..6c38e3aaba41 100644
--- a/pkgs/data/themes/mojave/default.nix
+++ b/pkgs/data/themes/mojave/default.nix
@@ -1,15 +1,23 @@
-{ stdenv, fetchFromGitHub, gtk_engines, gtk-engine-murrine }:
+{ stdenv, fetchFromGitHub, fetchurl, gtk_engines, gtk-engine-murrine }:
 
 stdenv.mkDerivation rec {
   pname = "mojave-gtk-theme";
-  version = "2019-09-09";
+  version = "2019-12-12";
 
-  src = fetchFromGitHub {
-    owner = "vinceliuice";
-    repo = pname;
-    rev = version;
-    sha256 = "1qffh6jsvy61f29ymw1v9hpjnsvhqin19mp05cys1lnwc7y810zr";
-  };
+  srcs = [
+    (fetchFromGitHub {
+      owner = "vinceliuice";
+      repo = pname;
+      rev = version;
+      sha256 = "0d5m9gh97db01ygqlp2sv9v1m183d9fgid9n9wms9r5rrrw6bs8m";
+    })
+    (fetchurl {
+      url = "https://github.com/vinceliuice/Mojave-gtk-theme/raw/11741a99d96953daf9c27e44c94ae50a7247c0ed/macOS_Mojave_Wallpapers.tar.xz";
+      sha256 = "18zzkwm1kqzsdaj8swf0xby1n65gxnyslpw4lnxcx1rphip0rwf7";
+    })
+  ];
+
+  sourceRoot = "source";
 
   buildInputs = [ gtk_engines ];
 
@@ -17,8 +25,8 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     patchShebangs .
-    mkdir -p $out/share/themes
     name= ./install.sh -d $out/share/themes
+    install -D -t $out/share/wallpapers ../"macOS Mojave Wallpapers"/*
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/desktops/cinnamon/default.nix b/pkgs/desktops/cinnamon/default.nix
new file mode 100644
index 000000000000..445890782414
--- /dev/null
+++ b/pkgs/desktops/cinnamon/default.nix
@@ -0,0 +1,5 @@
+{ pkgs, lib }:
+
+lib.makeScope pkgs.newScope (self: with self; {
+  xapps = callPackage ./xapps {};
+})
diff --git a/pkgs/desktops/cinnamon/xapps/default.nix b/pkgs/desktops/cinnamon/xapps/default.nix
new file mode 100644
index 000000000000..f63ab3cedd8c
--- /dev/null
+++ b/pkgs/desktops/cinnamon/xapps/default.nix
@@ -0,0 +1,104 @@
+{ fetchFromGitHub
+, fetchpatch
+, glib
+, gobject-introspection
+, gtk3
+, libgnomekbd
+, gdk-pixbuf
+, cairo
+, xorg
+, meson
+, ninja
+, pkgconfig
+, python3
+, stdenv
+, vala
+, wrapGAppsHook
+, inxi
+, mate
+}:
+
+stdenv.mkDerivation rec {
+  pname = "xapps";
+  version = "1.6.8";
+
+  outputs = [ "out" "dev" ];
+
+  src = fetchFromGitHub {
+    owner = "linuxmint";
+    repo = pname;
+    rev = version;
+    sha256 = "09f77vsydv8r6r43py8hrpq7pb4a1pfivy19zgijjy2241i7059v";
+  };
+
+  # TODO: https://github.com/NixOS/nixpkgs/issues/36468
+  NIX_CFLAGS_COMPILE = [
+    "-I${glib.dev}/include/gio-unix-2.0"
+  ];
+
+  patches = [
+    (fetchpatch { # details see https://github.com/linuxmint/xapps/pull/65
+      url = "https://github.com/linuxmint/xapps/compare/d361d9cf357fade59b4bb68df2dcb2c0c39f90e1...2dfe82ec68981ea046345b2be349bd56293579f7.diff";
+      sha256 = "0sffclamvjas8ad57kxrg0vrgrd95xsk0xdl53dc3yivpxkfxrnk";
+    })
+  ];
+
+  nativeBuildInputs = [
+    gobject-introspection
+    meson
+    ninja
+    pkgconfig
+    python3
+    vala
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    (python3.withPackages(ps: with ps; [
+      pygobject3
+      setproctitle # mate applet
+    ]))
+    libgnomekbd
+    gdk-pixbuf
+    xorg.libxkbfile
+    python3.pkgs.pygobject3 # for .pc file
+    mate.mate-panel # for gobject-introspection
+  ];
+
+  # Requires in xapp.pc
+  propagatedBuildInputs = [
+    gtk3
+    cairo
+    glib
+  ];
+
+  mesonFlags = [
+    "-Dpy-overrides-dir=${placeholder "out"}/${python3.sitePackages}/gi/overrides"
+  ];
+
+  postPatch = ''
+    chmod +x schemas/meson_install_schemas.py # patchShebangs requires executable file
+
+    # The fetchpatch hook removes the renames, so postPatch has to rename those files, remove once PR merged
+    mv files/usr/bin/pastebin scripts/pastebin
+    mv files/usr/bin/upload-system-info scripts/upload-system-info
+    mv files/usr/bin/xfce4-set-wallpaper scripts/xfce4-set-wallpaper
+    mv files/usr/share/icons/hicolor icons
+
+    patchShebangs \
+      libxapp/g-codegen.py \
+      schemas/meson_install_schemas.py
+
+    # Patch pastebin & inxi location
+    sed "s|/usr/bin/pastebin|$out/bin/pastebin|" -i scripts/upload-system-info
+    sed "s|'inxi'|'${inxi}/bin/inxi'|" -i scripts/upload-system-info
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/linuxmint/xapps";
+    description = "Cross-desktop libraries and common resources";
+    license = licenses.lgpl3;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.mkg20001 ];
+  };
+}
diff --git a/pkgs/development/libraries/libgnomekbd/default.nix b/pkgs/development/libraries/libgnomekbd/default.nix
index 0951ab1fe0c0..21523bf2e1a5 100644
--- a/pkgs/development/libraries/libgnomekbd/default.nix
+++ b/pkgs/development/libraries/libgnomekbd/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchurl, pkgconfig, file, intltool, glib, gtk3, libxklavier, makeWrapper, gnome3 }:
+{ stdenv, fetchurl, pkgconfig, file, intltool, glib, gtk3, libxklavier, wrapGAppsHook, gnome3 }:
 
 stdenv.mkDerivation rec {
   pname = "libgnomekbd";
@@ -13,13 +13,19 @@ stdenv.mkDerivation rec {
     updateScript = gnome3.updateScript { packageName = pname; };
   };
 
-  nativeBuildInputs = [ pkgconfig file intltool makeWrapper ];
-  buildInputs = [ glib gtk3 libxklavier ];
+  nativeBuildInputs = [
+    file
+    intltool
+    pkgconfig
+    wrapGAppsHook
+  ];
 
-  preFixup = ''
-    wrapProgram $out/bin/gkbd-keyboard-display \
-      --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH"
-  '';
+  # Requires in libgnomekbd.pc
+  propagatedBuildInputs = [
+    gtk3
+    libxklavier
+    glib
+  ];
 
   meta = with stdenv.lib; {
     description = "Keyboard management library";
diff --git a/pkgs/development/libraries/nco/default.nix b/pkgs/development/libraries/nco/default.nix
index c842eac4311e..14b608bb994d 100644
--- a/pkgs/development/libraries/nco/default.nix
+++ b/pkgs/development/libraries/nco/default.nix
@@ -1,20 +1,21 @@
-{ stdenv, fetchurl, netcdf, netcdfcxx4, gsl, udunits, antlr, which, curl, flex }:
+{ stdenv, fetchzip, netcdf, netcdfcxx4, gsl, udunits, antlr, which, curl, flex }:
 
 stdenv.mkDerivation rec {
-  version = "4.8.1";
+  version = "4.9.0";
   pname = "nco";
 
-  buildInputs = [ netcdf netcdfcxx4 gsl udunits antlr which curl flex ];
+  nativeBuildInputs = [ flex which ];
+  buildInputs = [ netcdf netcdfcxx4 gsl udunits antlr curl ];
 
-  src = fetchurl {
+  src = fetchzip {
     url = "https://github.com/nco/nco/archive/${version}.tar.gz";
-    sha256 = "0s1ww78p4cb2d9qkr4zs439x4xk3ndq6lv8ps677jrn28vnkzbnx";
+    sha256 = "0k371b1w369dchmxskd9191i1p47xcwxqwbxsgmdhs8n477wj74b";
   };
 
   meta = {
     description = "NetCDF Operator toolkit";
     longDescription = "The NCO (netCDF Operator) toolkit manipulates and analyzes data stored in netCDF-accessible formats, including DAP, HDF4, and HDF5";
-    homepage = http://nco.sourceforge.net/;
+    homepage = "http://nco.sourceforge.net/";
     license = stdenv.lib.licenses.gpl3;
     maintainers = [ stdenv.lib.maintainers.bzizou ];
     platforms = stdenv.lib.platforms.linux;
diff --git a/pkgs/development/libraries/vaapi-intel/default.nix b/pkgs/development/libraries/vaapi-intel/default.nix
index 722079ff3478..1775d5fffc59 100644
--- a/pkgs/development/libraries/vaapi-intel/default.nix
+++ b/pkgs/development/libraries/vaapi-intel/default.nix
@@ -5,16 +5,13 @@
 
 stdenv.mkDerivation rec {
   pname = "intel-vaapi-driver";
-  # TODO: go back to stable releases with the next stable release after 2.3.0.
-  #       see: https://github.com/NixOS/nixpkgs/issues/55975 (and the libva comment v)
-  rev = "329975c63123610fc750241654a3bd18add75beb"; # generally try to match libva version, but not required
-  version = "git-20190211";
+  version = "2.4.0";
 
   src = fetchFromGitHub {
     owner  = "intel";
     repo   = "intel-vaapi-driver";
-    rev    = rev;
-    sha256 = "10333wh2d0hvz5lxl3gjvqs71s7v9ajb0269b3bj5kbflj03v3n5";
+    rev    = version;
+    sha256 = "019w0hvjc9l85yqhy01z2bvvljq208nkb43ai2v377l02krgcrbl";
   };
 
   patchPhase = ''
diff --git a/pkgs/development/ocaml-modules/lua-ml/default.nix b/pkgs/development/ocaml-modules/lua-ml/default.nix
new file mode 100644
index 000000000000..a0db995827a0
--- /dev/null
+++ b/pkgs/development/ocaml-modules/lua-ml/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchFromGitHub, ocaml, findlib, ocamlbuild, dune }:
+
+if !stdenv.lib.versionAtLeast ocaml.version "4.07"
+then throw "lua-ml is not available for OCaml ${ocaml.version}"
+else
+
+stdenv.mkDerivation rec {
+  pname = "lua-ml";
+  name = "ocaml${ocaml.version}-${pname}-${version}";
+  version = "0.9";
+
+  src = fetchFromGitHub {
+    owner = "lindig";
+    repo = pname;
+    rev = "${version}";
+    sha256 = "09lj6qykg15fdf65in7xdry0jcifcr8vqbvz85v12gwfckmmxjir";
+  };
+
+  buildInputs = [ ocaml findlib ocamlbuild ];
+
+  buildFlags = [ "lib" ];
+
+  inherit (dune) installPhase;
+
+  meta = {
+    description = "An embeddable Lua 2.5 interpreter implemented in OCaml";
+    inherit (src.meta) homepage;
+    inherit (ocaml.meta) platforms;
+    license = stdenv.lib.licenses.bsd2;
+    maintainers = [ stdenv.lib.maintainers.vbgl ];
+  };
+}
diff --git a/pkgs/development/python-modules/ipython/default.nix b/pkgs/development/python-modules/ipython/default.nix
index d0ea0b6ac929..f67c5ea941a2 100644
--- a/pkgs/development/python-modules/ipython/default.nix
+++ b/pkgs/development/python-modules/ipython/default.nix
@@ -22,12 +22,12 @@
 
 buildPythonPackage rec {
   pname = "ipython";
-  version = "7.8.0";
+  version = "7.10.1";
   disabled = pythonOlder "3.5";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "dd76831f065f17bddd7eaa5c781f5ea32de5ef217592cf019e34043b56895aa1";
+    sha256 = "03h3m64k8jq0cc48i34g8xq0r68cx3w7wz721mfhr7k06qdv11pi";
   };
 
   prePatch = lib.optionalString stdenv.isDarwin ''
@@ -57,10 +57,14 @@ buildPythonPackage rec {
     nosetests
   '';
 
-  meta = {
+  pythonImportsCheck = [
+    "IPython"
+  ];
+
+  meta = with lib; {
     description = "IPython: Productive Interactive Computing";
     homepage = http://ipython.org/;
-    license = lib.licenses.bsd3;
-    maintainers = with lib.maintainers; [ bjornfor fridh ];
+    license = licenses.bsd3;
+    maintainers = with maintainers; [ bjornfor fridh ];
   };
 }
diff --git a/pkgs/development/python-modules/python-twitter/default.nix b/pkgs/development/python-modules/python-twitter/default.nix
new file mode 100644
index 000000000000..6210c13f56e8
--- /dev/null
+++ b/pkgs/development/python-modules/python-twitter/default.nix
@@ -0,0 +1,44 @@
+{ stdenv
+, buildPythonPackage
+, fetchFromGitHub
+, fetchpatch
+, pytestrunner
+, future
+, requests
+, responses
+, requests_oauthlib
+, pytest
+, hypothesis
+}:
+
+buildPythonPackage rec {
+  pname = "python-twitter";
+  version = "3.5";
+
+  # No tests in PyPi Tarball
+  src = fetchFromGitHub {
+    owner = "bear";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "08ydmf6dcd416cvw6xq1wxsz6b9s21f2mf9fh3y4qz9swj6n9h8z";
+  };
+
+  patches = [
+    # Fix tests. Remove with the next release
+    (fetchpatch {
+      url = "https://github.com/bear/python-twitter/commit/f7eb83d9dca3ba0ee93e629ba5322732f99a3a30.patch";
+      sha256 = "008b1bd03wwngs554qb136lsasihql3yi7vlcacmk4s5fmr6klqw";
+    })
+  ];
+
+  nativeBuildInputs = [ pytestrunner ];
+  propagatedBuildInputs = [ future requests requests_oauthlib ];
+  checkInputs = [ pytest responses hypothesis ];
+
+  meta = with stdenv.lib; {
+    description = "A Python wrapper around the Twitter API";
+    homepage = "https://github.com/bear/python-twitter";
+    license = licenses.asl20;
+    maintainers = [ maintainers.marsam ];
+  };
+}
diff --git a/pkgs/development/python-modules/spyder/default.nix b/pkgs/development/python-modules/spyder/default.nix
index c2dfcab556f0..b707d4a0abc1 100644
--- a/pkgs/development/python-modules/spyder/default.nix
+++ b/pkgs/development/python-modules/spyder/default.nix
@@ -50,9 +50,10 @@ buildPythonPackage rec {
   '';
 
   dontWrapQtApps = true;
-  makeWrapperArgs = [
-    "\${qtWrapperArgs[@]}"
-  ];
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
 
   meta = with stdenv.lib; {
     description = "Scientific python development environment";
diff --git a/pkgs/development/python-modules/xapp/default.nix b/pkgs/development/python-modules/xapp/default.nix
new file mode 100644
index 000000000000..440db3430253
--- /dev/null
+++ b/pkgs/development/python-modules/xapp/default.nix
@@ -0,0 +1,43 @@
+{ stdenv
+, fetchFromGitHub
+, buildPythonPackage
+, psutil
+, pygobject3
+, gtk3
+, gobject-introspection
+, xapps
+, polkit
+}:
+
+buildPythonPackage rec {
+  pname = "xapp";
+  version = "1.8.1";
+
+  src = fetchFromGitHub {
+    owner = "linuxmint";
+    repo = "python-xapp";
+    rev = version;
+    sha256 = "0vw3cn09nx75lv4d9idp5fdhd81xs279zhbyyilynq29cxxs2zil";
+  };
+
+  propagatedBuildInputs = [
+    psutil
+    pygobject3
+    gtk3
+    gobject-introspection
+    xapps
+    polkit
+  ];
+
+  postPatch = ''
+    substituteInPlace "xapp/os.py" --replace "/usr/bin/pkexec" "${polkit}/bin/pkexec"
+  '';
+
+  meta = with stdenv.lib; {
+    homepage = "https://github.com/linuxmint/python-xapp";
+    description = "Cross-desktop libraries and common resources for python";
+    license = licenses.lgpl2;
+    platforms = platforms.linux;
+    maintainers = [ maintainers.mkg20001 ];
+  };
+}
diff --git a/pkgs/development/tools/cmake-format/default.nix b/pkgs/development/tools/cmake-format/default.nix
index 33c04c251735..69fbfecc18fc 100644
--- a/pkgs/development/tools/cmake-format/default.nix
+++ b/pkgs/development/tools/cmake-format/default.nix
@@ -10,12 +10,12 @@
 
 buildPythonApplication rec {
   pname = "cmake-format";
-  version = "0.6.2";
+  version = "0.6.3";
 
   src = fetchPypi {
     inherit version;
     pname = "cmake_format";
-    sha256 = "0nqwr7rvqkniqa53vddikncqsvm1r90p768rsginflw5rv33hi2j";
+    sha256 = "12fsgmqimc09qhkrqzi5n5qq3rigkagymn0cx6ayn2qglh8pwknw";
   };
 
   propagatedBuildInputs = [ autopep8 flake8 jinja2 pylint pyyaml ];
diff --git a/pkgs/development/tools/ocaml/ocaml-top/default.nix b/pkgs/development/tools/ocaml/ocaml-top/default.nix
index 7336439240d5..3ceb9b1622c1 100644
--- a/pkgs/development/tools/ocaml/ocaml-top/default.nix
+++ b/pkgs/development/tools/ocaml/ocaml-top/default.nix
@@ -1,15 +1,15 @@
-{ stdenv, fetchzip, ncurses, ocamlPackages }:
+{ lib, fetchzip, ncurses, ocamlPackages }:
 
 with ocamlPackages; buildDunePackage rec {
   pname = "ocaml-top";
-  version = "1.1.5";
+  version = "1.2.0-rc";
 
   src = fetchzip {
     url = "https://github.com/OCamlPro/ocaml-top/archive/${version}.tar.gz";
-    sha256 = "1d4i6aanrafgrgk4mh154k6lkwk0b6mh66rykz33awlf5pfqd8yv";
+    sha256 = "1r290m9vvr25lgaanivz05h0kf4fd3h5j61wj4hpp669zffcyyb5";
   };
 
-  buildInputs = [ ncurses ocp-build lablgtk ocp-index ];
+  buildInputs = [ ncurses ocp-build lablgtk3-sourceview3 ocp-index ];
 
   configurePhase = ''
     export TERM=xterm
@@ -18,8 +18,8 @@ with ocamlPackages; buildDunePackage rec {
 
   meta = {
     homepage = https://www.typerex.org/ocaml-top.html;
-    license = stdenv.lib.licenses.gpl3;
+    license = lib.licenses.gpl3;
     description = "A simple cross-platform OCaml code editor built for top-level evaluation";
-    maintainers = with stdenv.lib.maintainers; [ vbgl ];
+    maintainers = with lib.maintainers; [ vbgl ];
   };
 }
diff --git a/pkgs/development/tools/profiling/pyflame/default.nix b/pkgs/development/tools/profiling/pyflame/default.nix
deleted file mode 100644
index 2467769ad3de..000000000000
--- a/pkgs/development/tools/profiling/pyflame/default.nix
+++ /dev/null
@@ -1,143 +0,0 @@
-{ stdenv, autoreconfHook, coreutils, fetchFromGitHub, fetchpatch, pkgconfig, procps
-# pyflame needs one python version per ABI
-# are currently supported
-# * 2.6 or 2.7 for 2.x ABI
-# * 3.4 or 3.5 for 3.{4,5} ABI
-# * 3.6        for 3.6 ABI
-# * 3.7        for 3.7+ ABI
-# to disable support for an ABI, make the corresponding argument null
-, python2, python35, python36, python37, python3
-}:
-stdenv.mkDerivation rec {
-  pname = "pyflame";
-  version = "1.6.7";
-  src = fetchFromGitHub {
-    owner = "uber";
-    repo = "pyflame";
-    rev = "v${version}";
-    sha256 = "0hz1ryimh0w8zyxx4y8chcn54d6b02spflj5k9rcg26an2chkg2w";
-  };
-
-  # Uber's abandoned this since Jun 2018, so we have to patch a lot.
-  # Yay.
-  patches = let
-    # "Add support for Python3.7 (#151)":
-    py37-support = [ # https://github.com/uber/pyflame/pull/153
-      (fetchpatch { # "Add support for python3.7"
-        url = "https://github.com/uber/pyflame/commit/5ee674c4b09a29b82a0e2d7a4ce064fea3df1f4c.patch";
-        sha256 = "19v0yl8frbsq1dkvcmr1zsxf9v75bs8hvlkiv2x8cwylndvz2g5n";
-      })
-      (fetchpatch { # "Add python3.7 to travis test matrix"
-        url = "https://github.com/uber/pyflame/commit/610b5281502ff6d57471e84071f17a33d30f3bcf.patch";
-        sha256 = "13kwzrz0zwmdiirg061wvz7zvdl2w9dnrc81xbkxpm1hh8h0mi9z";
-      })
-      (fetchpatch { # "Update ppa and Ubuntu version"
-        url = "https://github.com/uber/pyflame/commit/ec82a43c90da64815a87d4e3fe2a12ec3c93dc38.patch";
-        sha256 = "1rrcsj5095ns5iyk6ij9kylv8hsrflxjld7b4s5dbpk8jqkf3ndi";
-      })
-      (fetchpatch { # "Clang-Format"
-        url = "https://github.com/uber/pyflame/commit/fb81e40398d6209c38d49d0b6758d9581b3c2bba.patch";
-        sha256 = "024namalrsai8ppl87lqsalfgd2fbqsnbkhpg8q93bvsdxldwc6r";
-      })
-    ];
-
-    # "Fix pyflame for code compiled with ld -z separate-code":
-    separate-code-support = [ # https://github.com/uber/pyflame/pull/170
-      (fetchpatch { # "Fix for code compiled with ld -z separate-code"
-        url = "https://github.com/uber/pyflame/commit/739a77d9b9abf9599f633d49c9ec98a201bfe058.patch";
-        sha256 = "03xhdysr5s73bw3a7nj2h45dylj9a4c1f1i3xqm1nngpd6arq4y6";
-      })
-    ];
-
-    # "Improve PtraceSeize error output"
-    full-ptrace-seize-errors = [ # https://github.com/uber/pyflame/pull/152
-      (fetchpatch { # "Print whole error output from PtraceSeize"
-        url = "https://github.com/uber/pyflame/commit/4b0e2c1b442b0f0c6ac5f56471359cea9886aa0f.patch";
-        sha256 = "0nkqs5zszf78cna0bavcdg18g7rdmn72li3091ygpkgxn77cnvis";
-      })
-      (fetchpatch { # "Print whole error for PtraceSeize"
-        url = "https://github.com/uber/pyflame/commit/1abb23abe4912c4a27553f0b3b5c934753f41f6d.patch";
-        sha256 = "07razp9rlq3s92j8a3iak3qk2h4x4xwz4y915h52ivvnxayscj89";
-      })
-    ];
-  in stdenv.lib.concatLists [
-    py37-support
-    # Without this, tests will leak memory and run forever.
-    separate-code-support
-    full-ptrace-seize-errors
-  ];
-
-  nativeBuildInputs = [ autoreconfHook pkgconfig procps ];
-  buildInputs = [ python37 python36 python2 python35 ];
-
-  postPatch = ''
-    patchShebangs .
-
-    # some tests will fail in the sandbox
-    substituteInPlace tests/test_end_to_end.py \
-      --replace 'skipif(IS_DOCKER' 'skipif(True'
-
-    # don't use patchShebangs here to be explicit about the python version
-    substituteInPlace utils/flame-chart-json \
-      --replace '#!usr/bin/env python' '#!${python3.interpreter}'
-
-    # Many tests require the build machine to have kernel.yama.ptrace_scope = 0,
-    # but hardened machines have it set to 1. On build machines that cannot run
-    # these tests, skip them to avoid breaking the build.
-    if [[ $(sysctl -n kernel.yama.ptrace_scope || echo 0) != "0" ]]; then
-      for test in \
-        test_monitor \
-        test_non_gil \
-        test_threaded \
-        test_unthreaded \
-        test_legacy_pid_handling \
-        test_exclude_idle \
-        test_exit_early \
-        test_sample_not_python \
-        test_include_ts \
-        test_include_ts_exclude_idle \
-        test_thread_dump \
-        test_no_line_numbers \
-        test_utf8_output; do
-
-        substituteInPlace tests/test_end_to_end.py \
-          --replace "def $test(" "\
-@pytest.mark.skip('build machine had kernel.yama.ptrace_scope != 0')
-def $test("
-      done
-    fi
-  '';
-
-  postInstall = ''
-    install -D utils/flame-chart-json $out/bin/flame-chart-json
-  '';
-
-  doCheck = true;
-  # reproduces the logic of their test script, but without downloading pytest
-  # from the internet with pip
-  checkPhase = let inherit (stdenv) lib; in
-    lib.concatMapStringsSep "\n" (python: ''
-      set -x
-      PYMAJORVERSION=${lib.substring 0 1 python.version} \
-        PATH=${lib.makeBinPath [ coreutils ]}\
-        PYTHONPATH= \
-        ${python.pkgs.pytest}/bin/pytest -v tests/
-      set +x
-    '') (lib.filter (x: x != null) buildInputs);
-
-  meta = with stdenv.lib; {
-    description = "A ptracing profiler for Python ";
-    longDescription = ''
-      Pyflame is a high performance profiling tool that generates flame graphs
-      for Python. Pyflame uses the Linux ptrace(2) system call to collect
-      profiling information. It can take snapshots of the Python call stack
-      without explicit instrumentation, meaning you can profile a program
-      without modifying its source code.
-    '';
-    homepage = https://github.com/uber/pyflame;
-    license = licenses.asl20;
-    maintainers = [ maintainers.symphorien ];
-    # arm: https://github.com/uber/pyflame/issues/136
-    platforms = [ "i686-linux" "x86_64-linux" ];
-  };
-}
diff --git a/pkgs/games/anki/default.nix b/pkgs/games/anki/default.nix
index c3caf9105d05..c1ba8851f5c4 100644
--- a/pkgs/games/anki/default.nix
+++ b/pkgs/games/anki/default.nix
@@ -163,10 +163,13 @@ buildPythonApplication rec {
     '';
 
     dontWrapQtApps = true;
-    makeWrapperArgs = [
-        ''--prefix PATH ':' "${lame}/bin:${mplayer}/bin"''
-        "\${qtWrapperArgs[@]}"
-    ];
+
+    preFixup = ''
+      makeWrapperArgs+=(
+        "''${qtWrapperArgs[@]}"
+        --prefix PATH ':' "${lame}/bin:${mplayer}/bin"
+      )
+    '';
 
     # now wrapPythonPrograms from postFixup will add both python and qt env variables
 
diff --git a/pkgs/games/mnemosyne/default.nix b/pkgs/games/mnemosyne/default.nix
index 675ce1a402fa..779d9a98522c 100644
--- a/pkgs/games/mnemosyne/default.nix
+++ b/pkgs/games/mnemosyne/default.nix
@@ -33,17 +33,18 @@ python.pkgs.buildPythonApplication rec {
   # No tests/ directrory in tarball
   doCheck = false;
 
-  dontWrapQtApps = true;
-  makeWrapperArgs = [
-    "\${qtWrapperArgs[@]}"
-  ];
-
   postInstall = ''
     mkdir -p $out/share
     mv $out/${python.sitePackages}/$out/share/locale $out/share
     rm -r $out/${python.sitePackages}/nix
   '';
 
+  dontWrapQtApps = true;
+
+  preFixup = ''
+    makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+  '';
+
   meta = {
     homepage = https://mnemosyne-proj.org/;
     description = "Spaced-repetition software";
diff --git a/pkgs/games/quake3/quake3e/default.nix b/pkgs/games/quake3/quake3e/default.nix
index 2c9367bfe761..1e179f2f9564 100644
--- a/pkgs/games/quake3/quake3e/default.nix
+++ b/pkgs/games/quake3/quake3e/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "Quake3e";
-  version = "2019-09-09";
+  version = "2019-11-29";
 
   src = fetchFromGitHub {
     owner = "ec-";
     repo = pname;
     rev = version;
-    sha256 = "0i9flw8h87lagdpbci6vgqkriv05p3bidgqb4pwrxls947zwfcw8";
+    sha256 = "1gpfl72rzwiawhcj3ir38sqdb95y7w7lm7wgj44lbn99z7bvkcn3";
   };
 
   buildInputs = [ curl libGL libX11 libXxf86dga alsaLib libXrandr libXxf86vm libXext ];
diff --git a/pkgs/shells/zsh/zsh-history/default.nix b/pkgs/shells/zsh/zsh-history/default.nix
index 98e97d78465a..ece3c87cb664 100644
--- a/pkgs/shells/zsh/zsh-history/default.nix
+++ b/pkgs/shells/zsh/zsh-history/default.nix
@@ -1,4 +1,4 @@
-{ lib, fetchFromGitHub, buildGoModule, installShellFiles }:
+{ lib, fetchFromGitHub, buildGoModule, installShellFiles, nixosTests }:
 
 buildGoModule rec {
   pname = "zsh-history";
@@ -29,4 +29,8 @@ buildGoModule rec {
     platforms = platforms.unix;
     maintainers = with maintainers; [ kampka ];
   };
+
+  passthru.tests = {
+    zsh-history-shell-integration = nixosTests.zsh-history;
+  };
 }
diff --git a/pkgs/tools/audio/beets/beet-check-tests.patch b/pkgs/tools/audio/beets/beet-check-tests.patch
new file mode 100644
index 000000000000..2de97b86c8b4
--- /dev/null
+++ b/pkgs/tools/audio/beets/beet-check-tests.patch
@@ -0,0 +1,17 @@
+diff --git a/test/cli_test.py b/test/cli_test.py
+index 26df140..2eb913c 100644
+--- a/test/cli_test.py
++++ b/test/cli_test.py
+@@ -372,12 +372,6 @@ class ToolListTest(TestHelper, TestCase):
+         self.assertIn('flac', stdout.getvalue())
+         self.assertIn('oggz-validate', stdout.getvalue())
+ 
+-    def test_found_mp3val(self):
+-        shutil.copy('/bin/echo', os.path.join(self.temp_dir, 'mp3val'))
+-        with captureStdout() as stdout:
+-            beets.ui._raw_main(['check', '--list-tools'])
+-        self.assertRegexpMatches(stdout.getvalue(), r'mp3val *found')
+-
+     def test_oggz_validate_not_found(self):
+         with captureStdout() as stdout:
+             beets.ui._raw_main(['check', '--list-tools'])
diff --git a/pkgs/tools/audio/beets/check-plugin.nix b/pkgs/tools/audio/beets/check-plugin.nix
new file mode 100644
index 000000000000..49ee97ead06a
--- /dev/null
+++ b/pkgs/tools/audio/beets/check-plugin.nix
@@ -0,0 +1,35 @@
+{ stdenv, fetchFromGitHub, beets, pythonPackages, flac, liboggz, mp3val }:
+
+pythonPackages.buildPythonApplication rec {
+  name = "beets-check";
+  version = "0.12.0";
+
+  src = fetchFromGitHub {
+    repo = "beets-check";
+    owner = "geigerzaehler";
+    rev = "v${version}";
+    sha256 = "0b2ijjf0gycs6b40sm33ida3sjygjiv4spb5mba52vysc7iwmnjn";
+  };
+
+  nativeBuildInputs = [ beets ];
+  checkInputs = [ pythonPackages.nose flac liboggz mp3val ];
+  propagatedBuildInputs = [ flac liboggz mp3val ];
+
+  # patch out broken tests
+  patches = [ ./beet-check-tests.patch ];
+
+  # patch out futures dependency, it is only needed for Python2 which we don't
+  # support.
+  prePatch = ''
+    sed -i "/futures/d" setup.py
+  '';
+
+  checkPhase = "nosetests";
+
+  meta = with stdenv.lib; {
+    description = "Beets plugin to Verify and store checksums in your library";
+    homepage = https://github.com/geigerzaehler/beets-check;
+    license = licenses.mit;
+    maintainers = with maintainers; [ lovesegfault ];
+  };
+}
diff --git a/pkgs/tools/audio/beets/default.nix b/pkgs/tools/audio/beets/default.nix
index 9509eccabdc1..b4dfa71ca965 100644
--- a/pkgs/tools/audio/beets/default.nix
+++ b/pkgs/tools/audio/beets/default.nix
@@ -29,6 +29,7 @@
 
 # External plugins
 , enableAlternatives   ? false
+, enableCheck          ? false, liboggz ? null
 , enableCopyArtifacts  ? false
 
 , bashInteractive, bash-completion
@@ -37,6 +38,7 @@
 assert enableAbsubmit    -> essentia-extractor            != null;
 assert enableAcoustid    -> pythonPackages.pyacoustid     != null;
 assert enableBadfiles    -> flac != null && mp3val != null;
+assert enableCheck       -> flac != null && mp3val != null && liboggz != null;
 assert enableConvert     -> ffmpeg != null;
 assert enableDiscogs     -> pythonPackages.discogs_client != null;
 assert enableFetchart    -> pythonPackages.responses      != null;
@@ -106,6 +108,7 @@ let
 
   plugins = {
     alternatives = callPackage ./alternatives-plugin.nix pluginArgs;
+    check = callPackage ./check-plugin.nix pluginArgs;
     copyartifacts = callPackage ./copyartifacts-plugin.nix pluginArgs;
   };
 
@@ -142,6 +145,7 @@ in pythonPackages.buildPythonApplication rec {
               || enableSubsonicupdate
               || enableAcousticbrainz)
                                     pythonPackages.requests
+    ++ optional enableCheck         plugins.check
     ++ optional enableConvert       ffmpeg
     ++ optional enableDiscogs       pythonPackages.discogs_client
     ++ optional enableGmusic        pythonPackages.gmusicapi
@@ -246,6 +250,10 @@ in pythonPackages.buildPythonApplication rec {
 
   makeWrapperArgs = [ "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\"" ];
 
+  passthru = {
+    externalPlugins = plugins;
+  };
+
   meta = {
     description = "Music tagger and library organizer";
     homepage = http://beets.io;
diff --git a/pkgs/tools/misc/exa/default.nix b/pkgs/tools/misc/exa/default.nix
index e05963b69027..0edd8a1b318f 100644
--- a/pkgs/tools/misc/exa/default.nix
+++ b/pkgs/tools/misc/exa/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, fetchFromGitHub, rustPlatform, cmake, perl, pkgconfig, zlib
+{ stdenv, fetchFromGitHub, fetchpatch, rustPlatform, cmake, perl, pkgconfig, zlib
 , darwin, libiconv, installShellFiles
 }:
 
@@ -17,6 +17,15 @@ buildRustPackage rec {
     sha256 = "14qlm9zb9v22hxbbi833xaq2b7qsxnmh15s317200vz5f1305hhw";
   };
 
+  patches = [
+    (fetchpatch {
+      # https://github.com/ogham/exa/pull/584
+      name = "fix-panic-on-broken-symlink-in-git-repository.patch";
+      url = "https://github.com/ogham/exa/pull/584/commits/a7a8e99cf3a15992afb2383435da0231917ffb54.patch";
+      sha256 = "0n5q483sz300jkp0sbb350hdinmkw7s6bmigdyr6ypz3fvygd9hx";
+    })
+  ];
+
   nativeBuildInputs = [ cmake pkgconfig perl installShellFiles ];
   buildInputs = [ zlib ]
   ++ stdenv.lib.optionals stdenv.isDarwin [
diff --git a/pkgs/tools/misc/pfetch/default.nix b/pkgs/tools/misc/pfetch/default.nix
new file mode 100644
index 000000000000..491844f26b75
--- /dev/null
+++ b/pkgs/tools/misc/pfetch/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "pfetch";
+  version = "0.4.0";
+
+  src = fetchFromGitHub {
+    owner = "dylanaraps";
+    repo = "pfetch";
+    rev = version;
+    sha256 = "180vvbmvak888vs4dgzlmqk0ss4qfsz09700n4p8s68j7krkxsfq";
+  };
+
+  dontbuild = true;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    cp pfetch $out/bin
+  '';
+
+  meta = with stdenv.lib; {
+    description = "A pretty system information tool written in POSIX sh";
+    homepage = https://github.com/dylanaraps/pfetch;
+    license = licenses.mit;
+    platforms = platforms.all;
+    maintainers = with maintainers; [ equirosa ];
+  };
+}
diff --git a/pkgs/tools/misc/tio/default.nix b/pkgs/tools/misc/tio/default.nix
index 3a8388280d65..9ee9b977ab29 100644
--- a/pkgs/tools/misc/tio/default.nix
+++ b/pkgs/tools/misc/tio/default.nix
@@ -16,6 +16,6 @@ stdenv.mkDerivation rec {
     homepage = https://tio.github.io/;
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ yegortimoshenko ];
-    platforms = platforms.linux;
+    platforms = platforms.unix;
   };
 }
diff --git a/pkgs/tools/misc/vdirsyncer/default.nix b/pkgs/tools/misc/vdirsyncer/default.nix
index 1cb3920a9c23..328c343ba702 100644
--- a/pkgs/tools/misc/vdirsyncer/default.nix
+++ b/pkgs/tools/misc/vdirsyncer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchFromGitHub, fetchpatch, rustPlatform, pkgconfig, openssl, Security }:
+{ stdenv, python3Packages, fetchFromGitHub, fetchpatch, rustPlatform, pkgconfig, openssl, CoreServices, Security }:
 
 # Packaging documentation at:
 # https://github.com/untitaker/vdirsyncer/blob/master/docs/packaging.rst
@@ -20,7 +20,7 @@ python3Packages.buildPythonApplication rec {
     inherit src;
     sourceRoot = "source/rust";
     cargoSha256 = "1n1dxq3klsry5mmbfff2jv7ih8mr5zvpncrdgba6qs93wi77qi0y";
-    buildInputs = [ pkgconfig openssl ] ++ stdenv.lib.optional stdenv.isDarwin Security;
+    buildInputs = [ pkgconfig openssl ] ++ stdenv.lib.optionals stdenv.isDarwin [ CoreServices Security ];
   };
 
   propagatedBuildInputs = with python3Packages; [
diff --git a/pkgs/tools/misc/vector/default.nix b/pkgs/tools/misc/vector/default.nix
index b5e341650303..a304873ca1e1 100644
--- a/pkgs/tools/misc/vector/default.nix
+++ b/pkgs/tools/misc/vector/default.nix
@@ -4,33 +4,22 @@
 
 , features ?
     (if stdenv.isAarch64
-     then [ "jemallocator" ]
-     else [ "leveldb" "jemallocator" ])
-
-# Unfortunately, buildRustPackage does not really support using overrideAttrs
-# on the underlying fields, because it doesn't pass them to stdenv.mkDerivation
-# as an attr. making it a parameter is the only way to do so. sigh
-
-, version ? "0.5.0"
-
-, srcRef ? {
-    rev    = "refs/tags/v${version}";
-    sha256 = "0niyxlvphn3awrpfh1hbqy767cckgjzyjrkqjxj844czxhh1hhff";
-  }
-
-, cargoSha256 ? "0bdgan891hrah54g6aaysqizkxrfsbidnxihai0i7h7knzq9gsk5"
-, patches ? []
+     then [ "shiplift/unix-socket" "jemallocator" ]
+     else [ "leveldb" "leveldb/leveldb-sys-2" "shiplift/unix-socket" "jemallocator" ])
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "vector";
-  inherit version cargoSha256 patches;
+  version = "0.6.0";
+
   src = fetchFromGitHub {
-    owner = "timberio";
-    repo  = pname;
-    inherit (srcRef) rev sha256;
+    owner  = "timberio";
+    repo   = pname;
+    rev    = "refs/tags/v${version}";
+    sha256 = "0bb4552nwkdpnxhaq2mn4iz5w92ggqxc1b78jq2vjbh1317sj9hw";
   };
 
+  cargoSha256 = "1akyzrscc6pv7ggb1kna05vvxhfzrf1b4kji4bah1ry3yyqxdjsj";
   buildInputs = [ openssl pkgconfig protobuf ]
                 ++ stdenv.lib.optional stdenv.isDarwin [ Security libiconv ];
 
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 29799af1cfe6..6b74d9edc396 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -5651,6 +5651,8 @@ in
     ssh = openssh;
   };
 
+  pfetch = callPackage ../tools/misc/pfetch { };
+
   pfstools = callPackage ../tools/graphics/pfstools { };
 
   philter = callPackage ../tools/networking/philter { };
@@ -10339,8 +10341,6 @@ in
 
   puppet-lint = callPackage ../development/tools/puppet/puppet-lint { };
 
-  pyflame = callPackage ../development/tools/profiling/pyflame { };
-
   pyrseas = callPackage ../development/tools/database/pyrseas { };
 
   qtcreator = libsForQt5.callPackage ../development/tools/qtcreator { };
@@ -21609,7 +21609,7 @@ in
   vcv-rack = callPackage ../applications/audio/vcv-rack { };
 
   vdirsyncer = callPackage ../tools/misc/vdirsyncer {
-    inherit (darwin.apple_sdk.frameworks) Security;
+    inherit (darwin.apple_sdk.frameworks) CoreServices Security;
   };
 
   vdirsyncerStable = callPackage ../tools/misc/vdirsyncer/stable.nix { };
@@ -23338,6 +23338,8 @@ in
 
   ### DESKTOP ENVIRONMENTS
 
+  cinnamon = recurseIntoAttrs (callPackage ../desktops/cinnamon { });
+
   deepin = recurseIntoAttrs (import ../desktops/deepin {
     inherit pkgs libsForQt5;
     inherit (lib) makeScope;
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index f3be97c30a7e..f46d953fb48a 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -444,6 +444,8 @@ let
 
     lru = callPackage ../development/ocaml-modules/lru { };
 
+    lua-ml = callPackage ../development/ocaml-modules/lua-ml { };
+
     lwt2 = callPackage ../development/ocaml-modules/lwt/legacy.nix { };
 
     lwt4 = callPackage ../development/ocaml-modules/lwt/4.x.nix { };
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 8a28f48e015b..d0b045a73897 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -182,7 +182,7 @@ in {
   aresponses = callPackage ../development/python-modules/aresponses { };
 
   argon2_cffi = callPackage ../development/python-modules/argon2_cffi { };
-  
+
   arviz = callPackage ../development/python-modules/arviz { };
 
   asana = callPackage ../development/python-modules/asana { };
@@ -1148,7 +1148,7 @@ in {
   pytesseract = callPackage ../development/python-modules/pytesseract { };
 
   pytest-bdd = callPackage ../development/python-modules/pytest-bdd { };
-  
+
   pytest-black = callPackage ../development/python-modules/pytest-black { };
 
   pytest-click = callPackage ../development/python-modules/pytest-click { };
@@ -5422,6 +5422,11 @@ in {
 
   xapian = callPackage ../development/python-modules/xapian { xapian = pkgs.xapian; };
 
+  xapp = callPackage ../development/python-modules/xapp {
+    inherit (pkgs) gtk3 gobject-introspection polkit;
+    inherit (pkgs.cinnamon) xapps;
+  };
+
   xlwt = callPackage ../development/python-modules/xlwt { };
 
   xxhash = callPackage ../development/python-modules/xxhash { };
@@ -5714,6 +5719,8 @@ in {
 
   twitter-common-options = callPackage ../development/python-modules/twitter-common-options { };
 
+  python-twitter = callPackage ../development/python-modules/python-twitter { };
+
   umalqurra = callPackage ../development/python-modules/umalqurra { };
 
   unicodecsv = callPackage ../development/python-modules/unicodecsv { };