about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md1
-rw-r--r--maintainers/maintainer-list.nix5
-rw-r--r--nixos/modules/programs/gnupg.nix15
-rw-r--r--nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix599
-rw-r--r--nixos/modules/services/web-servers/nginx/default.nix14
-rw-r--r--nixos/tests/all-tests.nix1
-rw-r--r--nixos/tests/pdns-recursor.nix12
-rw-r--r--pkgs/applications/audio/meters_lv2/default.nix14
-rw-r--r--pkgs/applications/audio/qsynth/default.nix16
-rw-r--r--pkgs/applications/audio/zynaddsubfx/default.nix4
-rw-r--r--pkgs/applications/editors/android-studio/default.nix6
-rw-r--r--pkgs/applications/editors/vscode/default.nix8
-rw-r--r--pkgs/applications/graphics/wings/default.nix4
-rw-r--r--pkgs/applications/misc/cura/default.nix14
-rw-r--r--pkgs/applications/misc/curaengine/default.nix4
-rw-r--r--pkgs/applications/misc/gramps/default.nix4
-rw-r--r--pkgs/applications/misc/workrave/default.nix4
-rw-r--r--pkgs/applications/networking/browsers/chromium/upstream-info.nix18
-rw-r--r--pkgs/applications/networking/flexget/default.nix13
-rw-r--r--pkgs/applications/networking/instant-messengers/coyim/default.nix10
-rw-r--r--pkgs/applications/networking/znc/default.nix4
-rw-r--r--pkgs/applications/office/calligra/default.nix2
-rw-r--r--pkgs/applications/office/grisbi/default.nix8
-rw-r--r--pkgs/applications/science/math/nauty/default.nix23
-rw-r--r--pkgs/applications/version-management/git-and-tools/subgit/default.nix4
-rw-r--r--pkgs/applications/video/xawtv/default.nix4
-rw-r--r--pkgs/applications/virtualization/charliecloud/default.nix48
-rw-r--r--pkgs/build-support/trivial-builders.nix2
-rw-r--r--pkgs/build-support/writers/default.nix10
-rw-r--r--pkgs/desktops/deepin/dbus-factory/default.nix2
-rw-r--r--pkgs/desktops/deepin/dde-api/default.nix96
-rw-r--r--pkgs/desktops/deepin/dde-api/deps.nix22
-rw-r--r--pkgs/desktops/deepin/dde-calendar/default.nix10
-rw-r--r--pkgs/desktops/deepin/dde-daemon/default.nix53
-rw-r--r--pkgs/desktops/deepin/dde-daemon/deps.nix26
-rw-r--r--pkgs/desktops/deepin/dde-polkit-agent/default.nix51
-rw-r--r--pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix15
-rw-r--r--pkgs/desktops/deepin/dde-session-ui/default.nix13
-rw-r--r--pkgs/desktops/deepin/deepin-desktop-base/default.nix40
-rw-r--r--pkgs/desktops/deepin/deepin-desktop-schemas/default.nix39
-rw-r--r--pkgs/desktops/deepin/deepin-gettext-tools/default.nix2
-rw-r--r--pkgs/desktops/deepin/deepin-gtk-theme/default.nix2
-rw-r--r--pkgs/desktops/deepin/deepin-icon-theme/default.nix26
-rw-r--r--pkgs/desktops/deepin/deepin-image-viewer/default.nix11
-rw-r--r--pkgs/desktops/deepin/deepin-menu/default.nix7
-rw-r--r--pkgs/desktops/deepin/deepin-metacity/default.nix15
-rw-r--r--pkgs/desktops/deepin/deepin-movie-reborn/default.nix4
-rw-r--r--pkgs/desktops/deepin/deepin-mutter/default.nix41
-rw-r--r--pkgs/desktops/deepin/deepin-sound-theme/default.nix2
-rw-r--r--pkgs/desktops/deepin/deepin-terminal/default.nix25
-rw-r--r--pkgs/desktops/deepin/deepin-wallpapers/default.nix10
-rw-r--r--pkgs/desktops/deepin/deepin-wm/default.nix38
-rw-r--r--pkgs/desktops/deepin/default.nix5
-rw-r--r--pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix43
-rw-r--r--pkgs/desktops/deepin/dtkcore/default.nix4
-rw-r--r--pkgs/desktops/deepin/dtkwidget/default.nix4
-rw-r--r--pkgs/desktops/deepin/go-dbus-factory/default.nix6
-rw-r--r--pkgs/desktops/deepin/go-dbus-generator/default.nix2
-rw-r--r--pkgs/desktops/deepin/go-gir-generator/default.nix14
-rw-r--r--pkgs/desktops/deepin/go-lib/default.nix14
-rw-r--r--pkgs/desktops/deepin/qt5dxcb-plugin/default.nix4
-rw-r--r--pkgs/desktops/deepin/qt5integration/default.nix4
-rwxr-xr-xpkgs/desktops/deepin/setup-hook.sh53
-rw-r--r--pkgs/desktops/deepin/update.nix2
-rw-r--r--pkgs/development/compilers/gcc-arm-embedded/6/default.nix19
-rw-r--r--pkgs/development/compilers/gcc-arm-embedded/7/default.nix15
-rw-r--r--pkgs/development/compilers/gcc-arm-embedded/8/default.nix15
-rw-r--r--pkgs/development/compilers/ghc/8.6.4.nix2
-rw-r--r--pkgs/development/compilers/llvm/8/lldb.nix4
-rw-r--r--pkgs/development/libraries/pcl/default.nix12
-rw-r--r--pkgs/development/libraries/physics/herwig/default.nix6
-rw-r--r--pkgs/development/libraries/physics/thepeg/default.nix4
-rw-r--r--pkgs/development/libraries/vapoursynth-mvtools/default.nix4
-rw-r--r--pkgs/development/libraries/wolfssl/default.nix4
-rw-r--r--pkgs/development/python-modules/aioesphomeapi/default.nix12
-rw-r--r--pkgs/development/python-modules/asynctest/default.nix4
-rw-r--r--pkgs/development/python-modules/cmd2/default.nix4
-rw-r--r--pkgs/development/python-modules/importlib-metadata/default.nix17
-rw-r--r--pkgs/development/python-modules/ldap/default.nix10
-rw-r--r--pkgs/development/python-modules/ldappool/default.nix9
-rw-r--r--pkgs/development/python-modules/libarcus/default.nix4
-rw-r--r--pkgs/development/python-modules/libsavitar/default.nix4
-rw-r--r--pkgs/development/python-modules/netdisco/default.nix4
-rw-r--r--pkgs/development/python-modules/progress/default.nix7
-rw-r--r--pkgs/development/python-modules/progressbar/default.nix3
-rw-r--r--pkgs/development/python-modules/sasmodels/default.nix4
-rw-r--r--pkgs/development/python-modules/shouldbe/default.nix8
-rw-r--r--pkgs/development/python-modules/uranium/default.nix4
-rw-r--r--pkgs/development/python-modules/zipp/default.nix31
-rw-r--r--pkgs/development/tools/godot/default.nix8
-rw-r--r--pkgs/development/tools/godot/dont_clobber_environment.patch9
-rw-r--r--pkgs/development/tools/godot/pkg_config_additions.patch23
-rw-r--r--pkgs/development/tools/scalafmt/default.nix8
-rw-r--r--pkgs/development/tools/sourcetrail/default.nix4
-rw-r--r--pkgs/games/eduke32/default.nix98
-rw-r--r--pkgs/games/leela-zero/default.nix6
-rw-r--r--pkgs/games/torcs/default.nix6
-rw-r--r--pkgs/misc/emulators/cdemu/analyzer.nix15
-rw-r--r--pkgs/misc/emulators/cdemu/client.nix8
-rw-r--r--pkgs/misc/emulators/cdemu/daemon.nix8
-rw-r--r--pkgs/misc/emulators/cdemu/gui.nix10
-rw-r--r--pkgs/misc/emulators/cdemu/libmirage.nix15
-rw-r--r--pkgs/misc/emulators/cdemu/vhba.nix4
-rw-r--r--pkgs/misc/scrcpy/default.nix19
-rw-r--r--pkgs/misc/vim-plugins/generated.nix144
-rw-r--r--pkgs/misc/vscode-extensions/default.nix8
-rw-r--r--pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix10
-rw-r--r--pkgs/servers/dns/nsd/default.nix4
-rw-r--r--pkgs/servers/dns/pdns-recursor/default.nix4
-rw-r--r--pkgs/servers/home-assistant/appdaemon.nix8
-rw-r--r--pkgs/servers/home-assistant/component-packages.nix1719
-rw-r--r--pkgs/servers/home-assistant/default.nix10
-rw-r--r--pkgs/servers/home-assistant/frontend.nix4
-rw-r--r--pkgs/servers/monitoring/grafana/default.nix6
-rw-r--r--pkgs/servers/sonarr/default.nix4
-rw-r--r--pkgs/tools/misc/ffsend/default.nix21
-rw-r--r--pkgs/tools/misc/nginx-config-formatter/default.nix6
-rw-r--r--pkgs/tools/misc/tlp/default.nix48
-rw-r--r--pkgs/tools/misc/vdirsyncer/default.nix10
-rw-r--r--pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix6
-rw-r--r--pkgs/tools/networking/i2p/default.nix4
-rw-r--r--pkgs/tools/system/rsyslog/default.nix4
-rw-r--r--pkgs/top-level/all-packages.nix5
-rw-r--r--pkgs/top-level/dotnet-packages.nix7
-rw-r--r--pkgs/top-level/python-packages.nix2
125 files changed, 2345 insertions, 1716 deletions
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 7b4ec78e4090..834a2e81c132 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,3 +1,4 @@
+<!-- Nixpkgs has a lot of new incoming Pull Requests, but not enough people to review this constant stream. Even if you aren't a committer, we would appreciate reviews of other PRs, especially simple ones like package updates. Just testing the relevant package/service and leaving a comment saying what you tested, how you tested it and whether it worked would be great. List of open PRs: <https://github.com/NixOS/nixpkgs/pulls>, for more about reviewing contributions: <https://hydra.nixos.org/job/nixpkgs/trunk/manual/latest/download/1/nixpkgs/manual.html#sec-reviewing-contributions>. Reviewing isn't mandatory, but it would help out a lot and reduce the average time-to-merge for all of us. Thanks a lot if you do! -->
 ###### Motivation for this change
 
 
diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix
index 87892f72121c..be1a3e2aaff2 100644
--- a/maintainers/maintainer-list.nix
+++ b/maintainers/maintainer-list.nix
@@ -3519,6 +3519,11 @@
     github = "olynch";
     name = "Owen Lynch";
   };
+  omnipotententity = {
+    email = "omnipotententity@gmail.com";
+    github = "omnipotententity";
+    name = "Michael Reilly";
+  };
   OPNA2608 = {
     email = "christoph.neidahl@gmail.com";
     github = "OPNA2608";
diff --git a/nixos/modules/programs/gnupg.nix b/nixos/modules/programs/gnupg.nix
index 22521280e936..9618d61a1f5b 100644
--- a/nixos/modules/programs/gnupg.nix
+++ b/nixos/modules/programs/gnupg.nix
@@ -11,6 +11,15 @@ in
 {
 
   options.programs.gnupg = {
+    package = mkOption {
+      type = types.package;
+      default = pkgs.gnupg;
+      defaultText = "pkgs.gnupg";
+      description = ''
+        The gpg package that should be used.
+      '';
+    };
+
     agent.enable = mkOption {
       type = types.bool;
       default = false;
@@ -75,7 +84,7 @@ in
       wantedBy = [ "sockets.target" ];
     };
 
-    systemd.packages = [ pkgs.gnupg ];
+    systemd.packages = [ cfg.package ];
 
     environment.interactiveShellInit = ''
       # Bind gpg-agent to this TTY if gpg commands are used.
@@ -84,12 +93,12 @@ in
     '' + (optionalString cfg.agent.enableSSHSupport ''
       # SSH agent protocol doesn't support changing TTYs, so bind the agent
       # to every new TTY.
-      ${pkgs.gnupg}/bin/gpg-connect-agent --quiet updatestartuptty /bye > /dev/null
+      ${cfg.package}/bin/gpg-connect-agent --quiet updatestartuptty /bye > /dev/null
     '');
 
     environment.extraInit = mkIf cfg.agent.enableSSHSupport ''
       if [ -z "$SSH_AUTH_SOCK" ]; then
-        export SSH_AUTH_SOCK=$(${pkgs.gnupg}/bin/gpgconf --list-dirs agent-ssh-socket)
+        export SSH_AUTH_SOCK=$(${cfg.package}/bin/gpgconf --list-dirs agent-ssh-socket)
       fi
     '';
 
diff --git a/nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix b/nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix
index 50775c5262fa..644aad82df2c 100644
--- a/nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix
+++ b/nixos/modules/services/web-apps/icingaweb2/icingaweb2.nix
@@ -3,112 +3,18 @@
   poolName = "icingaweb2";
   phpfpmSocketName = "/var/run/phpfpm/${poolName}.sock";
 
-  formatBool = b: if b then "1" else "0";
-
-  configIni = let
-    config = cfg.generalConfig;
-  in ''
-    [global]
-    show_stacktraces = "${formatBool config.showStacktraces}"
-    show_application_state_messages = "${formatBool config.showApplicationStateMessages}"
-    module_path = "${pkgs.icingaweb2}/modules${optionalString (builtins.length config.modulePath > 0) ":${concatStringsSep ":" config.modulePath}"}"
-    config_backend = "${config.configBackend}"
-    ${optionalString (config.configBackend == "db") ''config_resource = "${config.configResource}"''}
-
-    [logging]
-    log = "${config.log}"
-    ${optionalString (config.log != "none") ''level = "${config.logLevel}"''}
-    ${optionalString (config.log == "php" || config.log == "syslog") ''application = "${config.logApplication}"''}
-    ${optionalString (config.log == "syslog") ''facility = "${config.logFacility}"''}
-    ${optionalString (config.log == "file") ''file = "${config.logFile}"''}
-
-    [themes]
-    default = "${config.themeDefault}"
-    disabled = "${formatBool config.themeDisabled}"
-
-    [authentication]
-    ${optionalString (config.authDefaultDomain != null) ''default_domain = "${config.authDefaultDomain}"''}
-  '';
-
-  resourcesIni = concatStringsSep "\n" (mapAttrsToList (name: config: ''
-    [${name}]
-    type = "${config.type}"
-    ${optionalString (config.type == "db") ''
-      db = "${config.db}"
-      host = "${config.host}"
-      ${optionalString (config.port != null) ''port = "${toString config.port}"''}
-      username = "${config.username}"
-      password = "${config.password}"
-      dbname = "${config.dbname}"
-      ${optionalString (config.charset != null) ''charset = "${config.charset}"''}
-      use_ssl = "${formatBool config.useSSL}"
-      ${optionalString (config.sslCert != null) ''ssl_cert = "${config.sslCert}"''}
-      ${optionalString (config.sslKey != null) ''ssl_cert = "${config.sslKey}"''}
-      ${optionalString (config.sslCA != null) ''ssl_cert = "${config.sslCA}"''}
-      ${optionalString (config.sslCApath != null) ''ssl_cert = "${config.sslCApath}"''}
-      ${optionalString (config.sslCipher != null) ''ssl_cert = "${config.sslCipher}"''}
-    ''}
-    ${optionalString (config.type == "ldap") ''
-      hostname = "${config.host}"
-      ${optionalString (config.port != null) ''port = "${toString config.port}"''}
-      root_dn = "${config.rootDN}"
-      bind_dn = "${config.username}"
-      bind_pw = "${config.password}"
-      encryption = "${config.ldapEncryption}"
-      timeout = "${toString config.ldapTimeout}"
-    ''}
-    ${optionalString (config.type == "ssh") ''
-      user = "${config.username}"
-      private_key = "${config.sshPrivateKey}"
-    ''}
-
-  '') cfg.resources);
-
-  authenticationIni = concatStringsSep "\n" (mapAttrsToList (name: config: ''
-    [${name}]
-    backend = "${config.backend}"
-    ${optionalString (config.domain != null) ''domain = "${config.domain}"''}
-    ${optionalString (config.backend == "external" && config.externalStripRegex != null) ''strip_username_regexp = "${config.externalStripRegex}"''}
-    ${optionalString (config.backend != "external") ''resource = "${config.resource}"''}
-    ${optionalString (config.backend == "ldap" || config.backend == "msldap") ''
-      ${optionalString (config.ldapUserClass != null) ''user_class = "${config.ldapUserClass}"''}
-      ${optionalString (config.ldapUserNameAttr != null) ''user_name_attribute = "${config.ldapUserNameAttr}"''}
-      ${optionalString (config.ldapFilter != null) ''filter = "${config.ldapFilter}"''}
-    ''}
-  '') cfg.authentications);
-
-  groupsIni = concatStringsSep "\n" (mapAttrsToList (name: config: ''
-    [${name}]
-    backend = "${config.backend}"
-    resource = "${config.resource}"
-    ${optionalString (config.backend != "db") ''
-      ${optionalString (config.ldapUserClass != null) ''user_class = "${config.ldapUserClass}"''}
-      ${optionalString (config.ldapUserNameAttr != null) ''user_name_attribute = "${config.ldapUserNameAttr}"''}
-      ${optionalString (config.ldapGroupClass != null) ''group_class = "${config.ldapGroupClass}"''}
-      ${optionalString (config.ldapGroupNameAttr != null) ''group_name_attribute = "${config.ldapGroupNameAttr}"''}
-      ${optionalString (config.ldapGroupFilter != null) ''group_filter = "${config.ldapGroupFilter}"''}
-    ''}
-    ${optionalString (config.backend == "msldap" && config.ldapNestedSearch) ''nested_group_search = "1"''}
-  '') cfg.groupBackends);
-
-  rolesIni = let
-    optionalList = var: attribute: optionalString (builtins.length var > 0) ''${attribute} = "${concatStringsSep "," var}"'';
-  in concatStringsSep "\n" (mapAttrsToList (name: config: ''
-    [${name}]
-    ${optionalList config.users "users"}
-    ${optionalList config.groups "groups"}
-    ${optionalList config.permissions "permissions"}
-    ${optionalList config.permissions "permissions"}
-    ${concatStringsSep "\n" (mapAttrsToList (key: value: optionalList value key) config.extraAssignments)}
-  '') cfg.roles);
-
+  defaultConfig = {
+    global = {
+      module_path = "${pkgs.icingaweb2}/modules${optionalString (builtins.length config.modulePath > 0) ":${concatStringsSep ":" config.modulePath}"}";
+    };
+  };
 in {
   options.services.icingaweb2 = with types; {
     enable = mkEnableOption "the icingaweb2 web interface";
 
     pool = mkOption {
       type = str;
-      default = "${poolName}";
+      default = poolName;
       description = ''
          Name of existing PHP-FPM pool that is used to run Icingaweb2.
          If not specified, a pool will automatically created with default values.
@@ -143,7 +49,7 @@ in {
       default = {};
       example = literalExample ''
         {
-          "snow" = pkgs.icingaweb2Modules.theme-snow;
+          "snow" = icingaweb2Modules.theme-snow;
         }
       '';
       description = ''
@@ -153,419 +59,130 @@ in {
       '';
     };
 
-    generalConfig = {
-      mutable = mkOption {
-        type = bool;
-        default = false;
-        description = ''
-          Make config.ini mutable (e.g. via the web interface).
-          Not that you need to update module_path manually.
-        '';
-      };
-
-      showStacktraces = mkOption {
-        type = bool;
-        default = true;
-        description = "Enable stack traces in the Web UI";
-      };
-
-      showApplicationStateMessages = mkOption {
-        type = bool;
-        default = true;
-        description = "Enable application state messages in the Web UI";
-      };
-
-      modulePath = mkOption {
-        type = listOf str;
-        default = [];
-        description = "List of additional module search paths";
-      };
-
-      configBackend = mkOption {
-        type = enum [ "ini" "db" "none" ];
-        default = "db";
-        description = "Where to store user preferences";
-      };
-
-      configResource = mkOption {
-        type = nullOr str;
-        default = null;
-        description = "Database resource where user preferences are stored (if they are stored in a database)";
-      };
-
-      log = mkOption {
-        type = enum [ "syslog" "php" "file" "none" ];
-        default = "syslog";
-        description = "Logging target";
-      };
-
-      logLevel = mkOption {
-        type = enum [ "ERROR" "WARNING" "INFO" "DEBUG" ];
-        default = "ERROR";
-        description = "Maximum logging level to emit";
-      };
-
-      logApplication = mkOption {
-        type = str;
-        default = "icingaweb2";
-        description = "Application name to log under (syslog and php log)";
-      };
-
-      logFacility = mkOption {
-        type = enum [ "user" "local0" "local1" "local2" "local3" "local4" "local5" "local6" "local7" ];
-        default = "user";
-        description = "Syslog facility to log to";
-      };
-
-      logFile = mkOption {
-        type = str;
-        default = "/var/log/icingaweb2/icingaweb2.log";
-        description = "File to log to";
-      };
-
-      themeDefault = mkOption {
-        type = str;
-        default = "Icinga";
-        description = "Name of the default theme";
-      };
-
-      themeDisabled = mkOption {
-        type = bool;
-        default = false;
-        description = "Disallow users to change the theme";
-      };
-
-      authDefaultDomain = mkOption {
-        type = nullOr str;
-        default = null;
-        description = "Domain for users logging in without a qualified domain";
+    generalConfig = mkOption {
+      type = nullOr attrs;
+      default = null;
+      example = {
+        general = {
+          showStacktraces = 1;
+          config_resource = "icingaweb_db";
+        };
+        logging = {
+          log = "syslog";
+          level = "CRITICAL";
+        };
       };
-    };
+      description = ''
+        config.ini contents.
+        Will automatically be converted to a .ini file.
+        If you don't set global.module_path, the module will take care of it.
 
-    mutableResources = mkOption {
-      type = bool;
-      default = false;
-      description = "Make resources.ini mutable (e.g. via the web interface)";
+        If the value is null, no config.ini is created and you can
+        modify it manually (e.g. via the web interface).
+        Note that you need to update module_path manually.
+      '';
     };
 
     resources = mkOption {
-      default = {};
-      description = "Icingaweb 2 resources to define";
-      type = attrsOf (submodule ({ name, ... }: {
-        options = {
-          name = mkOption {
-            visible = false;
-            default = name;
-            type = str;
-            description = "Name of this resource";
-          };
-
-          type = mkOption {
-            type = enum [ "db" "ldap" "ssh" ];
-            default = "db";
-            description = "Type of this resouce";
-          };
-
-          db = mkOption {
-            type = enum [ "mysql" "pgsql" ];
-            default = "mysql";
-            description = "Type of this database resource";
-          };
-
-          host = mkOption {
-            type = str;
-            description = "Host to connect to";
-          };
-
-          port = mkOption {
-            type = nullOr port;
-            default = null;
-            description = "Port to connect on";
-          };
-
-          username = mkOption {
-            type = str;
-            description = "Database or SSH user or LDAP bind DN to connect with";
-          };
-
-          password = mkOption {
-            type = str;
-            description = "Password for the database user or LDAP bind DN";
-          };
-
-          dbname = mkOption {
-            type = str;
-            description = "Name of the database to connect to";
-          };
-
-          charset = mkOption {
-            type = nullOr str;
-            default = null;
-            example = "utf8";
-            description = "Database character set to connect with";
-          };
-
-          useSSL = mkOption {
-            type = nullOr bool;
-            default = false;
-            description = "Whether to connect to the database using SSL";
-          };
-
-          sslCert = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "The file path to the SSL certificate. Only available for the mysql database.";
-          };
-
-          sslKey = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "The file path to the SSL key. Only available for the mysql database.";
-          };
-
-          sslCA = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "The file path to the SSL certificate authority. Only available for the mysql database.";
-          };
-
-          sslCApath = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "The file path to the directory that contains the trusted SSL CA certificates in PEM format. Only available for the mysql database.";
-          };
-
-          sslCipher = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "A list of one or more permissible ciphers to use for SSL encryption, in a format understood by OpenSSL. Only available for the mysql database.";
-          };
-
-          rootDN = mkOption {
-            type = str;
-            description = "Root object of the LDAP tree";
-          };
-
-          ldapEncryption = mkOption {
-            type = enum [ "none" "starttls" "ldaps" ];
-            default = "none";
-            description = "LDAP encryption to use";
-          };
-
-          ldapTimeout = mkOption {
-            type = ints.positive;
-            default = 5;
-            description = "Connection timeout for every LDAP connection";
-          };
-
-          sshPrivateKey = mkOption {
-            type = str;
-            description = "The path to the private key of the user";
-          };
+      type = nullOr attrs;
+      default = null;
+      example = {
+        icingaweb_db = {
+          type = "db";
+          db = "mysql";
+          host = "localhost";
+          username = "icingaweb2";
+          password = "icingaweb2";
+          dbname = "icingaweb2";
         };
-      }));
-    };
+      };
+      description = ''
+        resources.ini contents.
+        Will automatically be converted to a .ini file.
 
-    mutableAuthConfig = mkOption {
-      type = bool;
-      default = true;
-      description = "Make authentication.ini mutable (e.g. via the web interface)";
+        If the value is null, no resources.ini is created and you can
+        modify it manually (e.g. via the web interface).
+        Note that if you set passwords here, they will go into the nix store.
+      '';
     };
 
     authentications = mkOption {
-      default = {};
-      description = "Icingaweb 2 authentications to define";
-      type = attrsOf (submodule ({ name, ... }: {
-        options = {
-          name = mkOption {
-            visible = false;
-            default = name;
-            type = str;
-            description = "Name of this authentication";
-          };
-
-          backend = mkOption {
-            type = enum [ "external" "ldap" "msldap" "db" ];
-            default = "db";
-            description = "The type of this authentication backend";
-          };
-
-          domain = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "Domain for domain-aware authentication";
-          };
-
-          externalStripRegex = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "Regular expression to strip off specific user name parts";
-          };
-
-          resource = mkOption {
-            type = str;
-            description = "Name of the database/LDAP resource";
-          };
-
-          ldapUserClass = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP user class";
-          };
-
-          ldapUserNameAttr = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP attribute which contains the username";
-          };
-
-          ldapFilter = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP search filter";
-          };
+      type = nullOr attrs;
+      default = null;
+      example = {
+        icingaweb = {
+          backend = "db";
+          resource = "icingaweb_db";
         };
-      }));
-    };
+      };
+      description = ''
+        authentication.ini contents.
+        Will automatically be converted to a .ini file.
 
-    mutableGroupsConfig = mkOption {
-      type = bool;
-      default = true;
-      description = "Make groups.ini mutable (e.g. via the web interface)";
+        If the value is null, no authentication.ini is created and you can
+        modify it manually (e.g. via the web interface).
+      '';
     };
 
     groupBackends = mkOption {
-      default = {};
-      description = "Icingaweb 2 group backends to define";
-      type = attrsOf (submodule ({ name, ... }: {
-        options = {
-          name = mkOption {
-            visible = false;
-            default = name;
-            type = str;
-            description = "Name of this group backend";
-          };
-
-          backend = mkOption {
-            type = enum [ "ldap" "msldap" "db" ];
-            default = "db";
-            description = "The type of this group backend";
-          };
-
-          resource = mkOption {
-            type = str;
-            description = "Name of the database/LDAP resource";
-          };
-
-          ldapUserClass = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP user class";
-          };
-
-          ldapUserNameAttr = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP attribute which contains the username";
-          };
-
-          ldapGroupClass = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP group class";
-          };
-
-          ldapGroupNameAttr = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP attribute which contains the groupname";
-          };
-
-          ldapGroupFilter = mkOption {
-            type = nullOr str;
-            default = null;
-            description = "LDAP group search filter";
-          };
-
-          ldapNestedSearch = mkOption {
-            type = bool;
-            default = false;
-            description = "Enable nested group search in Active Directory based on the user";
-          };
+      type = nullOr attrs;
+      default = null;
+      example = {
+        icingaweb = {
+          backend = "db";
+          resource = "icingaweb_db";
         };
-      }));
-    };
+      };
+      description = ''
+        groups.ini contents.
+        Will automatically be converted to a .ini file.
 
-    mutableRolesConfig = mkOption {
-      type = bool;
-      default = true;
-      description = "Make roles.ini mutable (e.g. via the web interface)";
+        If the value is null, no groups.ini is created and you can
+        modify it manually (e.g. via the web interface).
+      '';
     };
 
     roles = mkOption {
-      default = {};
-      description = "Icingaweb 2 roles to define";
-      type = attrsOf (submodule ({ name, ... }: {
-        options = {
-          name = mkOption {
-            visible = false;
-            default = name;
-            type = str;
-            description = "Name of this role";
-          };
-
-          users = mkOption {
-            type = listOf str;
-            default = [];
-            description = "List of users that are assigned to the role";
-          };
-
-          groups = mkOption {
-            type = listOf str;
-            default = [];
-            description = "List of groups that are assigned to the role";
-          };
-
-          permissions = mkOption {
-            type = listOf str;
-            default = [];
-            example = [ "application/share/navigation" "config/*" ];
-            description = "The permissions to grant";
-          };
-
-          extraAssignments = mkOption {
-            type = attrsOf (listOf str);
-            default = {};
-            example = { "monitoring/blacklist/properties" = [ "sla" "customer"]; };
-            description = "Additional assignments of this role";
-          };
+      type = nullOr attrs;
+      default = null;
+      example = {
+        Administrators = {
+          users = "admin";
+          permissions = "*";
         };
-      }));
+      };
+      description = ''
+        roles.ini contents.
+        Will automatically be converted to a .ini file.
+
+        If the value is null, no roles.ini is created and you can
+        modify it manually (e.g. via the web interface).
+      '';
     };
   };
 
   config = mkIf cfg.enable {
     services.phpfpm.poolConfigs = mkIf (cfg.pool == "${poolName}") {
-      "${poolName}" = {
-        listen = phpfpmSocketName;
-        phpOptions = ''
-          extension = ${pkgs.phpPackages.imagick}/lib/php/extensions/imagick.so
-          date.timezone = "${cfg.timezone}"
-        '';
-        extraConfig = ''
-          listen.owner = nginx
-          listen.group = nginx
-          listen.mode = 0600
-          user = icingaweb2
-          pm = dynamic
-          pm.max_children = 75
-          pm.start_servers = 2
-          pm.min_spare_servers = 2
-          pm.max_spare_servers = 10
-        '';
-      };
+      "${poolName}" = ''
+        listen = "${phpfpmSocketName}"
+        listen.owner = nginx
+        listen.group = nginx
+        listen.mode = 0600
+        user = icingaweb2
+        pm = dynamic
+        pm.max_children = 75
+        pm.start_servers = 2
+        pm.min_spare_servers = 2
+        pm.max_spare_servers = 10
+      '';
     };
 
+    services.phpfpm.phpOptions = mkIf (cfg.pool == "${poolName}")
+      ''
+        extension = ${pkgs.phpPackages.imagick}/lib/php/extensions/imagick.so
+        date.timezone = "${cfg.timezone}"
+      '';
+
     systemd.services."phpfpm-${poolName}".serviceConfig.ReadWritePaths = [ "/etc/icingaweb2" ];
 
     services.nginx = {
@@ -609,11 +226,11 @@ in {
       // doModule "test"
       // doModule "translation"
       # Configs
-      // optionalAttrs (!cfg.generalConfig.mutable) { "icingaweb2/config.ini".text = configIni; }
-      // optionalAttrs (!cfg.mutableResources) { "icingaweb2/resources.ini".text = resourcesIni; }
-      // optionalAttrs (!cfg.mutableAuthConfig) { "icingaweb2/authentication.ini".text = authenticationIni; }
-      // optionalAttrs (!cfg.mutableGroupsConfig) { "icingaweb2/groups.ini".text = groupsIni; }
-      // optionalAttrs (!cfg.mutableRolesConfig) { "icingaweb2/roles.ini".text = rolesIni; };
+      // optionalAttrs (cfg.generalConfig != null) { "icingaweb2/config.ini".text = generators.toINI {} (defaultConfig // cfg.generalConfig); }
+      // optionalAttrs (cfg.resources != null) { "icingaweb2/resources.ini".text = generators.toINI {} cfg.resources; }
+      // optionalAttrs (cfg.authentications != null) { "icingaweb2/authentication.ini".text = generators.toINI {} cfg.authentications; }
+      // optionalAttrs (cfg.groupBackends != null) { "icingaweb2/groups.ini".text = generators.toINI {} cfg.groupBackends; }
+      // optionalAttrs (cfg.roles != null) { "icingaweb2/roles.ini".text = generators.toINI {} cfg.roles; };
 
     # User and group
     users.groups.icingaweb2 = {};
diff --git a/nixos/modules/services/web-servers/nginx/default.nix b/nixos/modules/services/web-servers/nginx/default.nix
index bf9f0c21aedf..3a154ab75ba9 100644
--- a/nixos/modules/services/web-servers/nginx/default.nix
+++ b/nixos/modules/services/web-servers/nginx/default.nix
@@ -44,19 +44,7 @@ let
     }
   ''));
 
-  awkFormat = builtins.toFile "awkFormat-nginx.awk" ''
-    awk -f
-    {sub(/^[ \t]+/,"");idx=0}
-    /\{/{ctx++;idx=1}
-    /\}/{ctx--}
-    {id="";for(i=idx;i<ctx;i++)id=sprintf("%s%s", id, "\t");printf "%s%s\n", id, $0}
-  '';
-
-  configFile = pkgs.runCommand "nginx.conf" {} (''
-    awk -f ${awkFormat} ${pre-configFile} | sed '/^\s*$/d' > $out
-  '');
-
-  pre-configFile = pkgs.writeText "pre-nginx.conf" ''
+  configFile = pkgs.writers.writeNginxConfig "nginx.conf" ''
     user ${cfg.user} ${cfg.group};
     error_log ${cfg.logError};
     daemon off;
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index d47ebd4a51c7..b366f019f6e0 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -223,6 +223,7 @@ in
   syncthing-relay = handleTest ./syncthing-relay.nix {};
   systemd = handleTest ./systemd.nix {};
   systemd-confinement = handleTest ./systemd-confinement.nix {};
+  pdns-recursor = handleTest ./pdns-recursor.nix {};
   taskserver = handleTest ./taskserver.nix {};
   telegraf = handleTest ./telegraf.nix {};
   tomcat = handleTest ./tomcat.nix {};
diff --git a/nixos/tests/pdns-recursor.nix b/nixos/tests/pdns-recursor.nix
new file mode 100644
index 000000000000..bf6e6093d69c
--- /dev/null
+++ b/nixos/tests/pdns-recursor.nix
@@ -0,0 +1,12 @@
+import ./make-test.nix ({ pkgs, ... }: {
+  name = "powerdns";
+
+  nodes.server = { ... }: {
+    services.pdns-recursor.enable = true;
+  };
+
+  testScript = ''
+    $server->waitForUnit("pdns-recursor");
+    $server->waitForOpenPort("53");
+  '';
+})
diff --git a/pkgs/applications/audio/meters_lv2/default.nix b/pkgs/applications/audio/meters_lv2/default.nix
index 669ffbb2688a..a2368017cc1e 100644
--- a/pkgs/applications/audio/meters_lv2/default.nix
+++ b/pkgs/applications/audio/meters_lv2/default.nix
@@ -1,24 +1,24 @@
 { stdenv, fetchurl, pkgconfig
-, lv2, libGLU_combined, gtk2, cairo, pango, fftw }:
+, lv2, libGLU_combined, gtk2, cairo, pango, fftwFloat, libjack2 }:
 
 let
-  version = "0.8.1";
+  version = "0.9.10";
   name = "meters.lv2-${version}";
 
   # robtk submodule is pegged to this version
-  robtkVersion = "0.3.0";
+  robtkVersion = "0.6.2";
   robtkName = "robtk-${robtkVersion}";
 
   src = fetchurl {
     name = "${name}.tar.gz";
     url = "https://github.com/x42/meters.lv2/archive/v${version}.tar.gz";
-    sha256 = "142dg0j34mv5b0agajj2x1n9kgsmkfh08n1cjzk0j8n4xk2wb6ri";
+    sha256 = "0yfyn7j8g50w671b1z7ph4ppjx8ddj5c6nx53syp5y5mfr1b94nx";
   };
 
   robtkSrc = fetchurl {
     name = "${robtkName}.tar.gz";
     url = "https://github.com/x42/robtk/archive/v${robtkVersion}.tar.gz";
-    sha256 = "1ny89i2sgga56k7fxskp9y8sb7pfhp6wgw5mni842p19z6q7h8rq";
+    sha256 = "1v79xys1k2923wpivdjd44vand6c4agwvnrqi4c8kdv9r07b559v";
   };
 
 in
@@ -26,15 +26,13 @@ stdenv.mkDerivation {
   inherit name;
 
   nativeBuildInputs = [ pkgconfig ];
-  buildInputs = [ lv2 libGLU_combined gtk2 cairo pango fftw ];
+  buildInputs = [ lv2 libGLU_combined gtk2 cairo pango fftwFloat libjack2 ];
 
   srcs = [ src robtkSrc ];
   sourceRoot = name;
 
   postUnpack = "mv ${robtkName}/* ${name}/robtk"; # */
 
-  postPatch = "sed -i 's/fftw3f/fftw3/' Makefile";
-
   preConfigure = "makeFlagsArray=( PREFIX=$out )";
   meter_VERSION = version;
 
diff --git a/pkgs/applications/audio/qsynth/default.nix b/pkgs/applications/audio/qsynth/default.nix
index 26adc6394349..603ca8b36405 100644
--- a/pkgs/applications/audio/qsynth/default.nix
+++ b/pkgs/applications/audio/qsynth/default.nix
@@ -1,23 +1,17 @@
-{ stdenv, fetchurl, alsaLib, fluidsynth, libjack2, qtbase, qttools, qtx11extras, cmake, pkgconfig }:
+{ stdenv, fetchurl, alsaLib, fluidsynth, libjack2, qt5, autoconf, pkgconfig }:
 
 stdenv.mkDerivation  rec {
   name = "qsynth-${version}";
-  version = "0.5.2";
+  version = "0.5.5";
 
   src = fetchurl {
     url = "mirror://sourceforge/qsynth/${name}.tar.gz";
-    sha256 = "1rfkaxq1pyc4hv3l0i6wicianbcbm1wp53kh9i5d4jsljgisd1dv";
+    sha256 = "08x7znvbwi9miavcarymi7dsv8njmxzwzma20dbmz8j2aswm53w5";
   };
 
-  # cmake is looking for qsynth.desktop.in and fails if it doesn't find it
-  # seems like a bug and can presumable go in the next version after 0.5.2
-  postPatch = ''
-    mv src/qsynth.desktop src/qsynth.desktop.in
-  '';
+  nativeBuildInputs = [ autoconf pkgconfig ];
 
-  nativeBuildInputs = [ cmake pkgconfig ];
-
-  buildInputs = [ alsaLib fluidsynth libjack2 qtbase qttools qtx11extras ];
+  buildInputs = [ alsaLib fluidsynth libjack2 qt5.qtbase qt5.qttools qt5.qtx11extras ];
 
   enableParallelBuilding = true;
 
diff --git a/pkgs/applications/audio/zynaddsubfx/default.nix b/pkgs/applications/audio/zynaddsubfx/default.nix
index 1b3429f39d7f..b8cca7c72015 100644
--- a/pkgs/applications/audio/zynaddsubfx/default.nix
+++ b/pkgs/applications/audio/zynaddsubfx/default.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation  rec {
   name = "zynaddsubfx-${version}";
-  version = "3.0.3";
+  version = "3.0.4";
 
   src = fetchurl {
     url = "mirror://sourceforge/zynaddsubfx/zynaddsubfx-${version}.tar.bz2";
-    sha256 = "1hfpiqdm337gl4ynkmmp2qss2m5z8mzqzjrbiyg6w1v4js7l9phi";
+    sha256 = "18m4ax0x06y1hx4g2g3gf02v0bldkrrb5m7fsr5jlfp1kvjd2j1x";
   };
 
   buildInputs = [ alsaLib cairo libjack2 fftw fltk13 lash libjpeg libXpm minixml ntk zlib liblo ];
diff --git a/pkgs/applications/editors/android-studio/default.nix b/pkgs/applications/editors/android-studio/default.nix
index ebce09d52ce5..e5e5e179b890 100644
--- a/pkgs/applications/editors/android-studio/default.nix
+++ b/pkgs/applications/editors/android-studio/default.nix
@@ -18,9 +18,9 @@ let
     sha256Hash = "1v4apc73jdhavhzj8j46mzh15rw08w1hd9y9ykarj3b5q7i2vyq1";
   };
   latestVersion = { # canary & dev
-    version = "3.5.0.8"; # "Android Studio 3.5 Canary 9"
-    build = "191.5409101";
-    sha256Hash = "06fc5l40nxm0hyn8c34wsckxxyh1i2q5a53zd4nbhwxi8wsrda7i";
+    version = "3.5.0.9"; # "Android Studio 3.5 Canary 10"
+    build = "191.5416148";
+    sha256Hash = "03d2x6bqasw417dxc7b8y65rral73xm2ci512gprmsvwy42k3mqi";
   };
 in rec {
   # Old alias (TODO @primeos: Remove after 19.03 is branched off):
diff --git a/pkgs/applications/editors/vscode/default.nix b/pkgs/applications/editors/vscode/default.nix
index 07333a4b8032..ace5bd968cee 100644
--- a/pkgs/applications/editors/vscode/default.nix
+++ b/pkgs/applications/editors/vscode/default.nix
@@ -18,16 +18,16 @@ let
   }.${system};
 
   sha256 = {
-    "i686-linux" = "1qll0hyqyn3vb0v35h9y8rk4l3r6zzc5bkra6pb23bnr4bna4y80";
-    "x86_64-linux" = "1sfvv4g7kmvabqxasil41gasr7hsmgf8wwc4dl1940pb7x19fllq";
-    "x86_64-darwin" = "0gjdppr59pyb2wawvf7yyk7357a5naxga74zf9gc7d9s1fz78hls";
+    "i686-linux" = "0yfnsmixw3kh7lhb8npqhyihy146a31c1k90smn4kqvmlvm06jir";
+    "x86_64-linux" = "002bbwj4hxr58lbhjc05s3l9aw37ak06kp98hs8fpmznjsa5x14y";
+    "x86_64-darwin" = "1f9hkydlyjh2z5d99pwpsqg9yf05pgi5y0mbprgbxacayqcrq2nr";
   }.${system};
 
   archive_fmt = if system == "x86_64-darwin" then "zip" else "tar.gz";
 in
   stdenv.mkDerivation rec {
     name = "vscode-${version}";
-    version = "1.32.3";
+    version = "1.33.0";
 
     src = fetchurl {
       name = "VSCode_${version}_${plat}.${archive_fmt}";
diff --git a/pkgs/applications/graphics/wings/default.nix b/pkgs/applications/graphics/wings/default.nix
index 891f3586fa59..0a4e9ada0787 100644
--- a/pkgs/applications/graphics/wings/default.nix
+++ b/pkgs/applications/graphics/wings/default.nix
@@ -1,10 +1,10 @@
 { fetchurl, stdenv, erlang, cl, libGL, libGLU, runtimeShell }:
 
 stdenv.mkDerivation rec {
-  name = "wings-2.2.1";
+  name = "wings-2.2.3";
   src = fetchurl {
     url = "mirror://sourceforge/wings/${name}.tar.bz2";
-    sha256 = "1adlq3wd9bz0hjznpzsgilxgsbhr0kk01f06872mq37v4cbw76bh";
+    sha256 = "1b9xdmh0186xxs92i831vm9yq0il1hngi8bl9a1q7fs26wb8js1g";
   };
 
   ERL_LIBS = "${cl}/lib/erlang/lib";
diff --git a/pkgs/applications/misc/cura/default.nix b/pkgs/applications/misc/cura/default.nix
index f7907746d107..d570a2570d1c 100644
--- a/pkgs/applications/misc/cura/default.nix
+++ b/pkgs/applications/misc/cura/default.nix
@@ -1,14 +1,14 @@
-{ mkDerivation, lib, fetchFromGitHub, cmake, python3, qtbase, qtquickcontrols2, curaengine }:
+{ mkDerivation, lib, fetchFromGitHub, cmake, python3, qtbase, qtquickcontrols2, qtgraphicaleffects, curaengine }:
 
 mkDerivation rec {
   name = "cura-${version}";
-  version = "3.6.0";
+  version = "4.0.0";
 
   src = fetchFromGitHub {
     owner = "Ultimaker";
     repo = "Cura";
     rev = version;
-    sha256 = "0wzkbqdd1670smw1vnq634rkpcjwnhwcvimhvjq904gy2fylgr90";
+    sha256 = "18pxlmrw8m2mir177f0j9bma7rk29vam91gd86c0d458nw21q2qf";
   };
 
   materials = fetchFromGitHub {
@@ -18,7 +18,7 @@ mkDerivation rec {
     sha256 = "0g2dkph0ll7d9109n17vmfwb4fpc8lhyb1z1q68j8vblyvg08d12";
   };
 
-  buildInputs = [ qtbase qtquickcontrols2 ];
+  buildInputs = [ qtbase qtquickcontrols2 qtgraphicaleffects ];
   propagatedBuildInputs = with python3.pkgs; [
     libsavitar numpy-stl pyserial requests uranium zeroconf
   ];
@@ -27,6 +27,12 @@ mkDerivation rec {
   cmakeFlags = [
     "-DURANIUM_DIR=${python3.pkgs.uranium.src}"
     "-DCURA_VERSION=${version}"
+
+    # see https://github.com/Ultimaker/Cura/issues/5142
+    "-DCURA_SDK_VERSION=6.0.0"
+
+    # remove after 4.0.0, see https://github.com/void-linux/void-packages/pull/9880#issuecomment-475453025
+    "-DCURA_CLOUD_API_VERSION=1"
   ];
 
   postPatch = ''
diff --git a/pkgs/applications/misc/curaengine/default.nix b/pkgs/applications/misc/curaengine/default.nix
index ac0f9d542dde..9188e461e519 100644
--- a/pkgs/applications/misc/curaengine/default.nix
+++ b/pkgs/applications/misc/curaengine/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "curaengine-${version}";
-  version = "3.6.0";
+  version = "4.0.0";
 
   src = fetchFromGitHub {
     owner = "Ultimaker";
     repo = "CuraEngine";
     rev = version;
-    sha256 = "1iwmblvs3qw57698i8bbazyxha18bj9irnkcscdb0596g8q93fcm";
+    sha256 = "0p4zcckrlrpyp5xdqgvp0phmawyh4cy8vipim9fvgsfcin4vhrv7";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/pkgs/applications/misc/gramps/default.nix b/pkgs/applications/misc/gramps/default.nix
index db18ff73412c..e9026ded4702 100644
--- a/pkgs/applications/misc/gramps/default.nix
+++ b/pkgs/applications/misc/gramps/default.nix
@@ -1,5 +1,5 @@
 { stdenv, fetchFromGitHub, gtk3, pythonPackages, intltool, gnome3,
-  pango, gobject-introspection, wrapGAppsHook,
+  pango, gobject-introspection, wrapGAppsHook, gettext,
 # Optional packages:
  enableOSM ? true, osm-gps-map,
  enableGraphviz ? true, graphviz,
@@ -12,7 +12,7 @@ in buildPythonApplication rec {
   version = "5.0.1";
   name = "gramps-${version}";
 
-  nativeBuildInputs = [ wrapGAppsHook ];
+  nativeBuildInputs = [ wrapGAppsHook gettext ];
   buildInputs = [ intltool gtk3 gobject-introspection pango gnome3.gexiv2 ] 
     # Map support
     ++ stdenv.lib.optional enableOSM osm-gps-map
diff --git a/pkgs/applications/misc/workrave/default.nix b/pkgs/applications/misc/workrave/default.nix
index 7e54f943856a..1547d2962116 100644
--- a/pkgs/applications/misc/workrave/default.nix
+++ b/pkgs/applications/misc/workrave/default.nix
@@ -7,11 +7,11 @@
 
 stdenv.mkDerivation rec {
   name = "workrave-${version}";
-  version = "1.10.23";
+  version = "1.10.31";
 
   src = let
   in fetchFromGitHub {
-    sha256 = "1qhlwfhwk5agv4904d6bsf83k9k89q7bms6agg967vsca4905vcw";
+    sha256 = "0v2mx2idaxlsyv5w66b7pknlill9j9i2gqcs3vq54gak7ix9fj1p";
     rev = with stdenv.lib;
       "v" + concatStringsSep "_" (splitString "." version);
     repo = "workrave";
diff --git a/pkgs/applications/networking/browsers/chromium/upstream-info.nix b/pkgs/applications/networking/browsers/chromium/upstream-info.nix
index b4da79a49838..de83e0e0646c 100644
--- a/pkgs/applications/networking/browsers/chromium/upstream-info.nix
+++ b/pkgs/applications/networking/browsers/chromium/upstream-info.nix
@@ -1,18 +1,18 @@
 # This file is autogenerated from update.sh in the same directory.
 {
   beta = {
-    sha256 = "18xzddqi8rgng5vksx23jaiv103prxc38pshwp702nfjfqap7fwy";
-    sha256bin64 = "1r9nnc1xn319aqzxjh10n6nh714lghgskgdkpvw3hnvgb0v9jw4v";
-    version = "73.0.3683.86";
+    sha256 = "1lpgkf292f6v6v19zjp1si6vvizixk9192yjx76pq1d790678qrb";
+    sha256bin64 = "028c3gjh5zbxr53wkk3s5jvgwc2fz9cnvnyr58q4la91vyrbjslm";
+    version = "74.0.3729.61";
   };
   dev = {
-    sha256 = "0vdiaraw3jjr7ykdqbrhjzppvqs9d7jkkx1qyi50dyvrhipxdihz";
-    sha256bin64 = "0c5mnb1zz1mjs7h18f1c15ygqxl1kcpm2s1imyprh80mapmsxdxk";
-    version = "74.0.3729.22";
+    sha256 = "15197r2gbx4h7dsasvgz0vcl7mqmj0glc4sip99dw145drwdpmsq";
+    sha256bin64 = "1qf089l5k7l69msrn49z5lkg932n1rgnzgr9yg5ja89arcgynacv";
+    version = "75.0.3753.4";
   };
   stable = {
-    sha256 = "18xzddqi8rgng5vksx23jaiv103prxc38pshwp702nfjfqap7fwy";
-    sha256bin64 = "1mmm4lxvcfvdj6jpqaas51lx1c9zky4zp374phs3cmh9v8l2ijkb";
-    version = "73.0.3683.86";
+    sha256 = "1bskjr7yiwvdab1b5mp36y6964xqpgks6dqazm4qifwqvqcw80pb";
+    sha256bin64 = "00ndrqhmnk567sw6xj22m84126qvivq0jzfx0v46ya3kq6ln22gr";
+    version = "73.0.3683.103";
   };
 }
diff --git a/pkgs/applications/networking/flexget/default.nix b/pkgs/applications/networking/flexget/default.nix
index b8af1541809a..9afc61c3c0c4 100644
--- a/pkgs/applications/networking/flexget/default.nix
+++ b/pkgs/applications/networking/flexget/default.nix
@@ -1,4 +1,4 @@
-{ lib, python36 }:
+{ lib, python3 }:
 
 # Flexget have been a trouble maker in the past,
 # if you see flexget breaking when updating packages, don't worry.
@@ -6,7 +6,7 @@
 # -- Mic92
 
 let
-  python' = python36.override { inherit packageOverrides; };
+  python' = python3.override { inherit packageOverrides; };
 
   packageOverrides = self: super: {
     guessit = super.guessit.overridePythonAttrs (old: rec {
@@ -24,16 +24,14 @@ with python'.pkgs;
 
 buildPythonApplication rec {
   pname = "FlexGet";
-  version = "2.17.20";
+  version = "2.20.17";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "a09ef9482ed54f7e96eb8b4d08c59687c5c43a3341c9d2675383693e6c3681c3";
+    sha256 = "ed021d8d5c10555dad8dc1cb93c012e17b541fc25fc122b7ca76bb7e53fe82b3";
   };
 
   postPatch = ''
-    # build for the correct python version
-    substituteInPlace setup.cfg --replace $'[bdist_wheel]\npython-tag = py27' ""
     # remove dependency constraints
     sed 's/==\([0-9]\.\?\)\+//' -i requirements.txt
   '';
@@ -47,12 +45,13 @@ buildPythonApplication rec {
     beautifulsoup4 html5lib
     PyRSS2Gen pynzb rpyc jinja2
     requests dateutil jsonschema
-    pathpy guessit APScheduler
+    pathpy guessit rebulk APScheduler
     terminaltables colorclass
     cherrypy flask flask-restful
     flask-restplus flask-compress
     flask_login flask-cors
     pyparsing zxcvbn-python future
+    progressbar
     # Optional requirements
     deluge-client
     # Plugins
diff --git a/pkgs/applications/networking/instant-messengers/coyim/default.nix b/pkgs/applications/networking/instant-messengers/coyim/default.nix
index 86fb3d7de2c1..e2e94db089da 100644
--- a/pkgs/applications/networking/instant-messengers/coyim/default.nix
+++ b/pkgs/applications/networking/instant-messengers/coyim/default.nix
@@ -3,15 +3,15 @@
 
 buildGoPackage rec {
   name = "coyim-${version}";
-  version = "0.3.7_1";
+  version = "0.3.11";
 
-  goPackagePath = "github.com/twstrike/coyim";
+  goPackagePath = "github.com/coyim/coyim";
 
   src = fetchFromGitHub {
-    owner = "twstrike";
+    owner = "coyim";
     repo = "coyim";
-    rev = "df2c52fe865d38fa27e8a7af1d87612e8c048805";
-    sha256 = "1sna1n9dz1crws6cb1yjhy2kznbngjlbiw2diycshvbfigf7y7xl";
+    rev = "v${version}";
+    sha256 = "1g8nf56j17rdhhj7pv3ha1rb2mfc0mdvyzl35pgcki08w7iw08j3";
   };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook glib cairo gdk_pixbuf gtk3 gnome3.adwaita-icon-theme ];
diff --git a/pkgs/applications/networking/znc/default.nix b/pkgs/applications/networking/znc/default.nix
index 472f6c13c56f..deb768e6feb6 100644
--- a/pkgs/applications/networking/znc/default.nix
+++ b/pkgs/applications/networking/znc/default.nix
@@ -13,11 +13,11 @@ with stdenv.lib;
 
 stdenv.mkDerivation rec {
   name = "znc-${version}";
-  version = "1.7.2";
+  version = "1.7.3";
 
   src = fetchurl {
     url = "https://znc.in/releases/archive/${name}.tar.gz";
-    sha256 = "1ac2csl5jr56vahnxdynlvrhwlvcc1gqxvyifckc6cn5aj7ygd30";
+    sha256 = "0g8i5hsl4kinpz1wp0a2zniidv3w2sd6awq8676fds516wcc6k0y";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/applications/office/calligra/default.nix b/pkgs/applications/office/calligra/default.nix
index a7c6165bdd2b..4a050eb5d749 100644
--- a/pkgs/applications/office/calligra/default.nix
+++ b/pkgs/applications/office/calligra/default.nix
@@ -65,5 +65,7 @@ mkDerivation rec {
     maintainers = with maintainers; [ phreedom ebzzry zraexy ];
     platforms = platforms.linux;
     license = with licenses; [ gpl2 lgpl2 ];
+    hydraPlatforms = [];
+    broken = true; # fails to start, kde home not found
   };
 }
diff --git a/pkgs/applications/office/grisbi/default.nix b/pkgs/applications/office/grisbi/default.nix
index f901123065fa..338cdc170656 100644
--- a/pkgs/applications/office/grisbi/default.nix
+++ b/pkgs/applications/office/grisbi/default.nix
@@ -1,17 +1,17 @@
-{ fetchurl, stdenv, gtk, pkgconfig, libofx, intltool, wrapGAppsHook
+{ fetchurl, stdenv, gtk, pkgconfig, libgsf, libofx, intltool, wrapGAppsHook
 , hicolor-icon-theme, libsoup, gnome3 }:
 
 stdenv.mkDerivation rec {
   name = "grisbi-${version}";
-  version = "1.0.4";
+  version = "1.2.1";
 
   src = fetchurl {
     url = "mirror://sourceforge/grisbi/${name}.tar.bz2";
-    sha256 = "1rh2iqvi7lpz5l57vn7qk9azil3y1g65mfbi9hhbx956knh9bpf6";
+    sha1 = "1159c5491967fa7afd251783013579ffb45b891b";
   };
 
   nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
-  buildInputs = [ gtk libofx intltool hicolor-icon-theme libsoup
+  buildInputs = [ gtk libgsf libofx intltool hicolor-icon-theme libsoup
     gnome3.adwaita-icon-theme ];
 
   meta = with stdenv.lib; {
diff --git a/pkgs/applications/science/math/nauty/default.nix b/pkgs/applications/science/math/nauty/default.nix
index 5b431f419261..7351de53cfce 100644
--- a/pkgs/applications/science/math/nauty/default.nix
+++ b/pkgs/applications/science/math/nauty/default.nix
@@ -1,4 +1,8 @@
-{stdenv, fetchurl}:
+{ stdenv
+, lib
+, fetchurl
+, optimize ? false # impure
+}:
 stdenv.mkDerivation rec {
   name = "nauty-${version}";
   version = "26r11";
@@ -7,6 +11,13 @@ stdenv.mkDerivation rec {
     sha256 = "05z6mk7c31j70md83396cdjmvzzip1hqb88pfszzc6k4gy8h3m2y";
   };
   outputs = [ "out" "dev" ];
+  configureFlags = lib.optionals (!optimize) [
+    # Prevent nauty from sniffing some cpu features. While those are very
+    # widely available, it can lead to nasty bugs when they are not available:
+    # https://groups.google.com/forum/#!topic/sage-packaging/Pe4SRDNYlhA
+    "--disable-popcnt"
+    "--disable-clz"
+  ];
   buildInputs = [];
   installPhase = ''
     mkdir -p "$out"/{bin,share/doc/nauty} "$dev"/{lib,include/nauty}
@@ -14,18 +25,18 @@ stdenv.mkDerivation rec {
     find . -type f -perm -111 \! -name '*.*' \! -name configure -exec cp '{}' "$out/bin" \;
     cp [Rr][Ee][Aa][Dd]* COPYRIGHT This* [Cc]hange* "$out/share/doc/nauty"
 
-    cp *.h $dev/include/nauty
+    cp *.h "$dev/include/nauty"
     for i in *.a; do
       cp "$i" "$dev/lib/lib$i";
     done
   '';
   checkTarget = "checks";
-  meta = {
+  meta = with lib; {
     inherit version;
     description = ''Programs for computing automorphism groups of graphs and digraphs'';
-    license = stdenv.lib.licenses.asl20;
-    maintainers = [stdenv.lib.maintainers.raskin];
-    platforms = stdenv.lib.platforms.linux;
+    license = licenses.asl20;
+    maintainers = with maintainers; [ raskin timokau ];
+    platforms = platforms.linux;
     homepage = http://pallini.di.uniroma1.it/;
   };
 }
diff --git a/pkgs/applications/version-management/git-and-tools/subgit/default.nix b/pkgs/applications/version-management/git-and-tools/subgit/default.nix
index 7b36a142d15d..a129e0f75272 100644
--- a/pkgs/applications/version-management/git-and-tools/subgit/default.nix
+++ b/pkgs/applications/version-management/git-and-tools/subgit/default.nix
@@ -1,7 +1,7 @@
 { stdenv, fetchurl, unzip, makeWrapper, jre }:
 
 stdenv.mkDerivation rec {
-  name = "subgit-3.2.4";
+  name = "subgit-3.3.6";
 
   meta = {
     description = "A tool for a smooth, stress-free SVN to Git migration";
@@ -21,6 +21,6 @@ stdenv.mkDerivation rec {
 
   src = fetchurl {
     url = "http://subgit.com/download/${name}.zip";
-    sha256 = "13r6hi2zk46bs3j17anfc85kszlwliv2yc16qx834b3v4w68hajw";
+    sha256 = "1zfhl583lx7xdw9jwskv25p6m385wm3s5a311y0hnxxqwkjbgq1j";
   };
 }
diff --git a/pkgs/applications/video/xawtv/default.nix b/pkgs/applications/video/xawtv/default.nix
index f6f8016ec1d3..db9a5ce7850b 100644
--- a/pkgs/applications/video/xawtv/default.nix
+++ b/pkgs/applications/video/xawtv/default.nix
@@ -2,10 +2,10 @@
 , libFS, libXaw, libXpm, libXext, libSM, libICE, perl, linux}:
 
 stdenv.mkDerivation rec {
-  name = "xawtv-3.105";
+  name = "xawtv-3.106";
   src = fetchurl {
     url = "https://linuxtv.org/downloads/xawtv/${name}.tar.bz2";
-    sha256 = "03v4k0dychjz1kj890d9pc7v8jh084m01g71x1clmmvc6vc9kn1b";
+    sha256 = "174wd36rk0k23mgx9nlnpc398yd1f0wiv060963axg6sz0v4rksp";
   };
 
   preConfigure = ''
diff --git a/pkgs/applications/virtualization/charliecloud/default.nix b/pkgs/applications/virtualization/charliecloud/default.nix
new file mode 100644
index 000000000000..c55eb342e069
--- /dev/null
+++ b/pkgs/applications/virtualization/charliecloud/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, fetchFromGitHub, python }:
+
+stdenv.mkDerivation rec {
+
+  version = "0.9.8";
+  pname = "charliecloud";
+
+  src = fetchFromGitHub {
+    owner = "hpc";
+    repo = "charliecloud";
+    rev = "v${version}";
+    sha256 = "1w1wy4sj9zqfysrpf04shhppcf5ap4rp7i3ja81sv2fm27k4m9nl";
+  };
+
+  buildInputs = [ python ];
+
+  preConfigure = ''
+    substituteInPlace Makefile --replace '/bin/bash' '${stdenv.shell}'
+    patchShebangs test/
+  '';
+
+  makeFlags = [
+    "PREFIX=$(out)"
+    "LIBEXEC_DIR=lib/charliecloud"
+  ];
+
+  postInstall = ''
+    mkdir -p $out/share/charliecloud
+    mv $out/lib/charliecloud/examples $out/share/charliecloud
+    mv $out/lib/charliecloud/test $out/share/charliecloud
+  '';
+
+  meta = {
+    description = "User-defined software stacks (UDSS) for high-performance computing (HPC) centers";
+    longDescription = ''
+      Charliecloud uses Linux user namespaces to run containers with no
+      privileged operations or daemons and minimal configuration changes on
+      center resources. This simple approach avoids most security risks
+      while maintaining access to the performance and functionality already
+      on offer.
+    '';
+    homepage = https://hpc.github.io/charliecloud;
+    license = stdenv.lib.licenses.asl20;
+    maintainers = [ stdenv.lib.maintainers.bzizou ];
+    platforms = stdenv.lib.platforms.linux;
+  };
+
+}
diff --git a/pkgs/build-support/trivial-builders.nix b/pkgs/build-support/trivial-builders.nix
index 58bc7147ede4..ab83b73c5455 100644
--- a/pkgs/build-support/trivial-builders.nix
+++ b/pkgs/build-support/trivial-builders.nix
@@ -149,7 +149,7 @@ rec {
         ${text}
         '';
       checkPhase = ''
-        ${runtimeShell} -n $out/bin/${name}
+        ${stdenv.shell} -n $out/bin/${name}
       '';
     };
 
diff --git a/pkgs/build-support/writers/default.nix b/pkgs/build-support/writers/default.nix
index 6e932ce860f6..3454450c1f3a 100644
--- a/pkgs/build-support/writers/default.nix
+++ b/pkgs/build-support/writers/default.nix
@@ -178,6 +178,16 @@ rec {
   writeJSBin = name:
     writeJS "/bin/${name}";
 
+  writeNginxConfig = name: text: pkgs.runCommand name {
+    inherit text;
+    passAsFile = [ "text" ];
+  } /* sh */ ''
+    cp "$textPath" $out
+    ${pkgs.nginx-config-formatter}/bin/nginxfmt $out
+    ${pkgs.gnused}/bin/sed -i '/^$/d' $out
+    ${pkgs.gixy}/bin/gixy $out
+  '';
+
   # writePerl takes a name an attributeset with libraries and some perl sourcecode and
   # returns an executable
   #
diff --git a/pkgs/desktops/deepin/dbus-factory/default.nix b/pkgs/desktops/deepin/dbus-factory/default.nix
index 3c99c40ee807..ee0c81d7d39e 100644
--- a/pkgs/desktops/deepin/dbus-factory/default.nix
+++ b/pkgs/desktops/deepin/dbus-factory/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
     go-dbus-generator
   ];
 
-  makeFlags = [ "GOPATH=$(out)/share/go" ];
+  makeFlags = [ "GOPATH=${placeholder ''out''}/share/go" ];
 
   postPatch = ''
     sed -i -e 's:/share/gocode:/share/go:' Makefile
diff --git a/pkgs/desktops/deepin/dde-api/default.nix b/pkgs/desktops/deepin/dde-api/default.nix
index 6e61a30e258c..8db376e01fd7 100644
--- a/pkgs/desktops/deepin/dde-api/default.nix
+++ b/pkgs/desktops/deepin/dde-api/default.nix
@@ -1,12 +1,32 @@
 { stdenv, buildGoPackage, fetchFromGitHub, pkgconfig,
-  deepin-gettext-tools, go-dbus-factory, go-gir-generator, go-lib,
-  alsaLib, glib, gtk3, libcanberra, libgudev, librsvg, poppler,
-  pulseaudio, go, deepin }:
+  alsaLib,
+  bc,
+  blur-effect,
+  coreutils,
+  dbus-factory,
+  deepin,
+  deepin-gettext-tools,
+  fontconfig,
+  glib,
+  go,
+  go-dbus-factory,
+  go-gir-generator,
+  go-lib,
+  grub2,
+  gtk3,
+  libcanberra,
+  libgudev,
+  librsvg,
+  poppler,
+  pulseaudio,
+  rfkill,
+  xcur2png
+}:
 
 buildGoPackage rec {
   name = "${pname}-${version}";
   pname = "dde-api";
-  version = "3.5.0";
+  version = "3.18.1";
 
   goPackagePath = "pkg.deepin.io/dde/api";
 
@@ -14,33 +34,62 @@ buildGoPackage rec {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "1g3s0i5wa6qyv00yksz4r4cy2vhiknq8v0yx7aribvwm3gxf7jw3";
+    sha256 = "0y8v18f6l3ycysdn4qi7c93z805q7alji8wix4j4qh9x9r35d728";
   };
 
   goDeps = ./deps.nix;
 
+  outputs = [ "out" ];
+
   nativeBuildInputs = [
     pkgconfig
-    deepin-gettext-tools
-    go-dbus-factory
-    go-gir-generator
-    go-lib
+    deepin-gettext-tools # build
+    dbus-factory         # build
+    go-dbus-factory      # needed
+    go-gir-generator     # needed
+    go-lib               # build
+    deepin.setupHook
   ];
 
   buildInputs = [
-    alsaLib
-    glib
-    gtk3
-    libcanberra
-    libgudev
-    librsvg
-    poppler
-    pulseaudio
-  ];
+    alsaLib     # needed
+    bc          # run (to adjust grub theme?)
+    blur-effect # run (is it really needed?)
+    coreutils   # run (is it really needed?)
+    fontconfig  # run (is it really needed?)
+    #glib        # ? arch
+    grub2       # run (is it really needed?)
+    gtk3        # build run
+    libcanberra # build run
+    libgudev    # needed
+    librsvg     # build run
+    poppler     # build run
+    pulseaudio  # needed
+    rfkill      # run
+    xcur2png    # run
+    #locales     # run (locale-helper needs locale-gen, which is unavailable on NixOS?)
+ ];
 
   postPatch = ''
-    patchShebangs .
-    sed -i -e "s|/var|$bin/var|" Makefile
+    searchHardCodedPaths # debugging
+
+    sed -i -e "s|/var|$out/var|" Makefile
+
+    # TODO: confirm where to install grub themes
+    sed -i -e "s|/boot/grub|$out/boot/grub|" Makefile
+
+    fixPath $out /usr/lib/deepin-api \
+      lunar-calendar/main.go \
+      misc/services/com.deepin.api.CursorHelper.service \
+      misc/services/com.deepin.api.Graphic.service \
+      misc/services/com.deepin.api.LunarCalendar.service \
+      misc/services/com.deepin.api.Pinyin.service \
+      misc/system-services/com.deepin.api.Device.service \
+      misc/system-services/com.deepin.api.LocaleHelper.service \
+      misc/system-services/com.deepin.api.SoundThemePlayer.service \
+      misc/systemd/system/deepin-shutdown-sound.service \
+      theme_thumb/gtk/gtk.go \
+      thumbnails/gtk/gtk.go
   '';
 
   buildPhase = ''
@@ -49,10 +98,9 @@ buildGoPackage rec {
   '';
 
   installPhase = ''
-    make install PREFIX="$bin" SYSTEMD_LIB_DIR="$bin/lib" -C go/src/${goPackagePath}
-    mkdir -p $out/share
-    mv $bin/share/gocode $out/share/go
-    remove-references-to -t ${go} $bin/bin/* $bin/lib/deepin-api/*
+    make install PREFIX="$out" SYSTEMD_LIB_DIR="$out/lib" -C go/src/${goPackagePath}
+    mv $out/share/gocode $out/share/go
+    remove-references-to -t ${go} $out/bin/* $out/lib/deepin-api/*
   '';
 
   passthru.updateScript = deepin.updateScript { inherit name; };
diff --git a/pkgs/desktops/deepin/dde-api/deps.nix b/pkgs/desktops/deepin/dde-api/deps.nix
index bd7a13043da2..03758f0d43e1 100644
--- a/pkgs/desktops/deepin/dde-api/deps.nix
+++ b/pkgs/desktops/deepin/dde-api/deps.nix
@@ -1,4 +1,4 @@
-# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
 [
   {
     goPackagePath = "github.com/alecthomas/template";
@@ -32,8 +32,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/disintegration/imaging";
-      rev = "9458da53d1e65e098d48467a4317c403327e4424";
-      sha256 = "1b0ma9if8s892qfx5b1vjinxn00ah9vsyxijs8knkilrhf5vqcx4";
+      rev = "061e8a750a4db9667cdf9e2af7f4029ba506cb3b";
+      sha256 = "13fkknwz2iby5rdzv9sgam6p27zdgxis3sxgyls9sdir5lbhjhm7";
     };
   }
   {
@@ -41,8 +41,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/fogleman/gg";
-      rev = "0e0ff3ade7039063fe954cc1b45fad6cd4ac80db";
-      sha256 = "06gvsngfwizdxin90nldix5503fqgnwqmqvxzrz0xg5hfazwfra5";
+      rev = "0403632d5b905943a1c2a5b2763aaecd568467ec";
+      sha256 = "1nkldjghbqnzj2djfaxhiv35kk341xhcrj9m2dwq65v684iqkk8n";
     };
   }
   {
@@ -59,8 +59,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/linuxdeepin/go-x11-client";
-      rev = "03541136501cab4910ad8852fe749ef8e18907ca";
-      sha256 = "1iiw8qclpklim81hz1sdjp2ajw0ljvjz19n9jly86nbw6m8x4gkp";
+      rev = "48c75d615ef634d9b1c24f8e8a30f56201b4f561";
+      sha256 = "1x2i9wg6lyskls5qi3d2r84bdhyhgi8v1d8scxx9ysjaw9di9ldl";
     };
   }
   {
@@ -77,8 +77,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/image";
-      rev = "69cc3646b96e61de0b417f4815b86c36e65783ee";
-      sha256 = "0nkywb3r0qvwkmykpswnf0svxi463ycn293y5jjididzxv9qxdp9";
+      rev = "3fc05d484e9f77dd51816890e05f2602e4ca4d65";
+      sha256 = "0mcip8jpz2061j1z658rfskphc92wv6sapy81p95bnjdymi562k3";
     };
   }
   {
@@ -86,8 +86,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/net";
-      rev = "c44066c5c816ec500d459a2a324a753f78531ae0";
-      sha256 = "0mgww74bl15d0jvsh4f3qr1ckjzb8icb8hn0mgs5ppa0b2fgpc4f";
+      rev = "74de082e2cca95839e88aa0aeee5aadf6ce7710f";
+      sha256 = "0a4y3y0q5bkif7wvdkyjkvgnzlbh2n4zk7wsy5j95raf0i3zlw4s";
     };
   }
   {
diff --git a/pkgs/desktops/deepin/dde-calendar/default.nix b/pkgs/desktops/deepin/dde-calendar/default.nix
index 631471527f3a..0ef0da5c70b7 100644
--- a/pkgs/desktops/deepin/dde-calendar/default.nix
+++ b/pkgs/desktops/deepin/dde-calendar/default.nix
@@ -19,6 +19,7 @@ stdenv.mkDerivation rec {
     qmake
     qttools
     deepin-gettext-tools
+    deepin.setupHook
   ];
 
   buildInputs = [
@@ -27,11 +28,14 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    patchShebangs .
+    searchHardCodedPaths
+    patchShebangs translate_generation.sh
+    patchShebangs translate_desktop.sh
+
+    fixPath $out /usr com.deepin.Calendar.service
+
     sed -i translate_desktop.sh \
       -e "s,/usr/bin/deepin-desktop-ts-convert,deepin-desktop-ts-convert,"
-    sed -i com.deepin.Calendar.service \
-      -e "s,/usr,$out,"
   '';
 
   passthru.updateScript = deepin.updateScript { inherit name; };
diff --git a/pkgs/desktops/deepin/dde-daemon/default.nix b/pkgs/desktops/deepin/dde-daemon/default.nix
index 3678694be9ee..954d0971c250 100644
--- a/pkgs/desktops/deepin/dde-daemon/default.nix
+++ b/pkgs/desktops/deepin/dde-daemon/default.nix
@@ -1,13 +1,15 @@
 { stdenv, buildGoPackage, fetchFromGitHub, fetchpatch, pkgconfig,
   dbus-factory, go-dbus-factory, go-gir-generator, go-lib,
-  deepin-gettext-tools, dde-api, alsaLib, glib, gtk3, libinput, libnl,
-  librsvg, linux-pam, networkmanager, pulseaudio, xorg, gnome3,
-  python3Packages, hicolor-icon-theme, go, deepin }:
+  deepin-gettext-tools, dde-api, deepin-desktop-schemas,
+  deepin-wallpapers, deepin-desktop-base, alsaLib, glib, gtk3,
+  libgudev, libinput, libnl, librsvg, linux-pam, networkmanager,
+  pulseaudio, xorg, python3, hicolor-icon-theme, glibc, tzdata, go,
+  deepin, makeWrapper, wrapGAppsHook }:
 
 buildGoPackage rec {
   name = "${pname}-${version}";
   pname = "dde-daemon";
-  version = "3.6.0";
+  version = "3.24.1";
 
   goPackagePath = "pkg.deepin.io/dde/daemon";
 
@@ -15,15 +17,14 @@ buildGoPackage rec {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0gn2zp34wg79lvzdfla6yb4gs3f9ll83kj765zvig1wpx51nq1aj";
+    sha256 = "1qxj0mqnl10qj8qidpc1sv8gm4gj5965i07d003yxlxcw9cqwx7y";
   };
 
   patches = [
     # https://github.com/linuxdeepin/dde-daemon/issues/51
     (fetchpatch {
-      name = "dde-daemon_3.2.3.patch";
-      url = https://github.com/jouyouyun/tap-gesture-patches/raw/master/patches/dde-daemon_3.2.3.patch;
-      sha256 = "0a3xb15czpfl2vajpf7ycw37vr7fbw2png1a67mvjjkgx7d1k7dg";
+      url = https://github.com/jouyouyun/tap-gesture-patches/raw/master/patches/dde-daemon_3.8.0.patch;
+      sha256 = "1ampdsp9zlg263flswdw9gj10n7gxh7zi6w6z9jgh29xlai05pvh";
     })
   ];
 
@@ -38,46 +39,70 @@ buildGoPackage rec {
     go-gir-generator
     go-lib
     deepin-gettext-tools
-    dde-api
     linux-pam
     networkmanager
     networkmanager.dev
-    python3Packages.python
+    python3
+    makeWrapper
+    wrapGAppsHook
+    deepin.setupHook
   ];
 
   buildInputs = [
     alsaLib
+    dde-api
+    deepin-desktop-base
+    deepin-desktop-schemas
+    deepin-wallpapers
     glib
-    gnome3.libgudev
+    libgudev
     gtk3
     hicolor-icon-theme
     libinput
     libnl
     librsvg
     pulseaudio
+    tzdata
   ];
 
   postPatch = ''
-    patchShebangs .
+    searchHardCodedPaths
+    patchShebangs network/nm_generator/gen_nm_consts.py
 
-    sed -i network/nm_generator/Makefile -e 's,/usr/share/gir-1.0/NM-1.0.gir,${networkmanager.dev}/share/gir-1.0/NM-1.0.gir,'
+    fixPath $out /usr/share/dde/data launcher/manager.go dock/dock_manager_init.go
+    fixPath ${networkmanager.dev} /usr/share/gir-1.0/NM-1.0.gir network/nm_generator/Makefile
+    fixPath ${glibc.bin} /usr/bin/getconf systeminfo/utils.go
+    fixPath ${deepin-desktop-base} /etc/deepin-version systeminfo/version.go accounts/deepinversion.go
+    fixPath ${tzdata} /usr/share/zoneinfo timedate/zoneinfo/zone.go
+    fixPath ${dde-api} /usr/lib/deepin-api grub2/modify_manger.go accounts/image_blur.go
+    fixPath ${deepin-wallpapers} /usr/share/wallpapers appearance/background/list.go accounts/user.go
 
     sed -i -e "s|{DESTDIR}/etc|{DESTDIR}$out/etc|" Makefile
     sed -i -e "s|{DESTDIR}/var|{DESTDIR}$out/var|" Makefile
     sed -i -e "s|{DESTDIR}/lib|{DESTDIR}$out/lib|" Makefile
 
     find -type f -exec sed -i -e "s,/usr/lib/deepin-daemon,$out/lib/deepin-daemon," {} +
+
+    searchHardCodedPaths
   '';
 
   buildPhase = ''
-    make -C go/src/${goPackagePath}
     # compilation of the nm module is failing
     #make -C go/src/${goPackagePath}/network/nm_generator gen-nm-code
+    make -C go/src/${goPackagePath}
   '';
 
   installPhase = ''
     make install PREFIX="$out" -C go/src/${goPackagePath}
     remove-references-to -t ${go} $out/lib/deepin-daemon/*
+    searchHardCodedPaths $out
+  '';
+
+  postFixup = ''
+    # wrapGAppsHook does not work with binaries outside of $out/bin or $out/libexec
+    for binary in $out/lib/deepin-daemon/*; do
+      wrapProgram $binary "''${gappsWrapperArgs[@]}"
+    done
   '';
 
   passthru.updateScript = deepin.updateScript { inherit name; };
diff --git a/pkgs/desktops/deepin/dde-daemon/deps.nix b/pkgs/desktops/deepin/dde-daemon/deps.nix
index 3d241baa3260..fab2f9f93b20 100644
--- a/pkgs/desktops/deepin/dde-daemon/deps.nix
+++ b/pkgs/desktops/deepin/dde-daemon/deps.nix
@@ -1,4 +1,4 @@
-# This file was generated by https://github.com/kamilchm/go2nix v1.2.1
+# This file was generated by https://github.com/kamilchm/go2nix v1.3.0
 [
   {
     goPackagePath = "github.com/alecthomas/template";
@@ -41,8 +41,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/linuxdeepin/go-x11-client";
-      rev = "03541136501cab4910ad8852fe749ef8e18907ca";
-      sha256 = "1iiw8qclpklim81hz1sdjp2ajw0ljvjz19n9jly86nbw6m8x4gkp";
+      rev = "48c75d615ef634d9b1c24f8e8a30f56201b4f561";
+      sha256 = "1x2i9wg6lyskls5qi3d2r84bdhyhgi8v1d8scxx9ysjaw9di9ldl";
     };
   }
   {
@@ -50,8 +50,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/msteinert/pam";
-      rev = "f4cd9f5e29232537a12db1678f48c702ad6896b7";
-      sha256 = "1vjawxswy3f23v4d72kk95y3b557580670ai9ffvrwy6wy85qync";
+      rev = "f29b9f28d6f9a1f6c4e6fd5db731999eb946574b";
+      sha256 = "1v5z51mgyz2glm7v0mg60xs1as88wx6cqhys2khc5d3khkr8q0qp";
     };
   }
   {
@@ -68,8 +68,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/image";
-      rev = "69cc3646b96e61de0b417f4815b86c36e65783ee";
-      sha256 = "0nkywb3r0qvwkmykpswnf0svxi463ycn293y5jjididzxv9qxdp9";
+      rev = "3fc05d484e9f77dd51816890e05f2602e4ca4d65";
+      sha256 = "0mcip8jpz2061j1z658rfskphc92wv6sapy81p95bnjdymi562k3";
     };
   }
   {
@@ -77,8 +77,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/net";
-      rev = "c44066c5c816ec500d459a2a324a753f78531ae0";
-      sha256 = "0mgww74bl15d0jvsh4f3qr1ckjzb8icb8hn0mgs5ppa0b2fgpc4f";
+      rev = "74de082e2cca95839e88aa0aeee5aadf6ce7710f";
+      sha256 = "0a4y3y0q5bkif7wvdkyjkvgnzlbh2n4zk7wsy5j95raf0i3zlw4s";
     };
   }
   {
@@ -86,8 +86,8 @@
     fetch = {
       type = "git";
       url = "https://go.googlesource.com/text";
-      rev = "6f44c5a2ea40ee3593d98cdcc905cc1fdaa660e2";
-      sha256 = "00mwzxly5isgf0glz7k3k2dkyqkjfc4z55qxajx4lgcp3h8xn9xj";
+      rev = "e3703dcdd614d2d7488fff034c75c551ea25da95";
+      sha256 = "1xh106aslp04vbzb4hc7cc5fyg2ljwny8fwfwsp5mpbqr9ixkikv";
     };
   }
   {
@@ -104,8 +104,8 @@
     fetch = {
       type = "git";
       url = "https://github.com/linuxdeepin/go-lib.git";
-      rev = "b199d0dc96e979398ea3985334ccf9c20236d1a7";
-      sha256 = "0g84v1adnnyqc1mv45n3wlvnivkm1fi8ywszzgwx8irl3iddfvxv";
+      rev = "3558b2348565e983c7d4a57a0a21bbe716a55b83";
+      sha256 = "0p9yrxa3x71n3jxffh03ahjgimdzvxzhny632k363lkha6glvbnc";
     };
   }
 ]
diff --git a/pkgs/desktops/deepin/dde-polkit-agent/default.nix b/pkgs/desktops/deepin/dde-polkit-agent/default.nix
new file mode 100644
index 000000000000..17b88738c36f
--- /dev/null
+++ b/pkgs/desktops/deepin/dde-polkit-agent/default.nix
@@ -0,0 +1,51 @@
+{ stdenv, fetchFromGitHub, pkgconfig, qmake, qttools, polkit-qt,
+  dtkcore, dtkwidget, dde-qt-dbus-factory, deepin }:
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "dde-polkit-agent";
+  version = "0.2.4";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "1x7mv63g8412w1bq7fijsdzi8832qjb6gnr1nykcv7imzlycq9m6";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    qmake
+    qttools
+    deepin.setupHook
+  ];
+
+  buildInputs = [
+    dde-qt-dbus-factory
+    dtkcore
+    dtkwidget
+    polkit-qt
+  ];
+
+  postPatch = ''
+    searchHardCodedPaths
+    patchShebangs translate_generation.sh
+
+    fixPath $out /usr dde-polkit-agent.pro polkit-dde-authentication-agent-1.desktop
+    fixPath /run/current-system/sw /usr/lib/polkit-1-dde/plugins pluginmanager.cpp
+  '';
+
+  postFixup = ''
+    searchHardCodedPaths $out
+  '';
+
+  passthru.updateScript = deepin.updateScript { inherit name; };
+
+  meta = with stdenv.lib; {
+    description = "PolicyKit agent for Deepin Desktop Environment";
+    homepage = https://github.com/linuxdeepin/dde-polkit-agent;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix b/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix
index f28d8f77b3c3..1d9c13c17bbc 100644
--- a/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix
+++ b/pkgs/desktops/deepin/dde-qt-dbus-factory/default.nix
@@ -1,25 +1,28 @@
-{ stdenv, fetchFromGitHub, pkgconfig, qmake, python, deepin }:
+{ stdenv, fetchFromGitHub, pkgconfig, qmake, python3, deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "dde-qt-dbus-factory";
-  version = "1.0.5";
+  version = "1.1.1";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0cz55hsbhy1ab1mndv0sp6xnqrhz2y66w7pcxy8v9k87ii32czf8";
+    sha256 = "1b2i5m6fzkga72hbl85v2rng3qq53di39p7jj2f119wmlfbyp2vg";
   };
 
   nativeBuildInputs = [
     qmake
-    python
+    python3
+    deepin.setupHook
   ];
 
   postPatch = ''
-    sed -i libdframeworkdbus/{DFrameworkdbusConfig.in,libdframeworkdbus.pro} \
-      -e "s,/usr,$out,"
+    searchHardCodedPaths
+    fixPath $out /usr \
+      libdframeworkdbus/DFrameworkdbusConfig.in \
+      libdframeworkdbus/libdframeworkdbus.pro
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/desktops/deepin/dde-session-ui/default.nix b/pkgs/desktops/deepin/dde-session-ui/default.nix
index d3970cf87108..a61a0fdbb84e 100644
--- a/pkgs/desktops/deepin/dde-session-ui/default.nix
+++ b/pkgs/desktops/deepin/dde-session-ui/default.nix
@@ -1,18 +1,18 @@
 { stdenv, fetchFromGitHub, pkgconfig, qmake, qtsvg, qttools,
   qtx11extras, xkeyboard_config, xorg, lightdm_qt, gsettings-qt,
   dde-qt-dbus-factory, deepin-gettext-tools, dtkcore, dtkwidget,
-  hicolor-icon-theme, deepin }:
+  deepin-desktop-schemas, deepin, hicolor-icon-theme, wrapGAppsHook }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "dde-session-ui";
-  version = "4.6.2";
+  version = "4.9.0";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "1fxlrj7vv7nqllwpwc8mxiv9bfqcj9b2qwkpjaq326pfmg5p5lhq";
+    sha256 = "1bh7wbkzikcnka94nzqzl87cs2m6bslrv9r2hdsvqqr3aaad5za3";
   };
 
   nativeBuildInputs = [
@@ -20,6 +20,8 @@ stdenv.mkDerivation rec {
     qmake
     qttools
     deepin-gettext-tools
+    wrapGAppsHook
+    deepin.setupHook
   ];
 
   buildInputs = [
@@ -35,10 +37,13 @@ stdenv.mkDerivation rec {
     xorg.libXtst
     xkeyboard_config
     hicolor-icon-theme
+    deepin-desktop-schemas
   ];
 
   postPatch = ''
-    patchShebangs .
+    searchHardCodedPaths
+    patchShebangs translate_generation.sh
+    patchShebangs translate_desktop.sh
     sed -i translate_desktop.sh -e "s,/usr/bin/deepin-desktop-ts-convert,deepin-desktop-ts-convert,"
     find -type f -exec sed -i -e "s,path = /etc,path = $out/etc," {} +
     find -type f -exec sed -i -e "s,path = /usr,path = $out," {} +
diff --git a/pkgs/desktops/deepin/deepin-desktop-base/default.nix b/pkgs/desktops/deepin/deepin-desktop-base/default.nix
index 80a368c5be99..b5e75c217b1e 100644
--- a/pkgs/desktops/deepin/deepin-desktop-base/default.nix
+++ b/pkgs/desktops/deepin/deepin-desktop-base/default.nix
@@ -3,34 +3,40 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-desktop-base";
-  version = "2018.10.29";
+  version = "2019.03.29";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0l2zb7rpag2q36lqsgvirhjgmj7w243nsi1rywkypf2xm7g2v235";
+    sha256 = "1d016h95nsn5yay9f4c13hixfxj0q01hpxwj2x84i6qpx63dxdwq";
   };
 
+  nativeBuildInputs = [ deepin.setupHook ];
+
   buildInputs = [ deepin-wallpapers ];
 
+  # TODO: Fedora recommended dependencies:
+  #   deepin-wallpapers
+  #   plymouth-theme-deepin
+
   postPatch = ''
-    sed -i Makefile -e "s:/usr:$out:" -e "s:/etc:$out/etc:"
-  '';
+    searchHardCodedPaths
 
-  postInstall = ''
-    # Remove Deepin distro's lsb-release
-    rm $out/etc/lsb-release
+    fixPath $out /etc Makefile
+    fixPath $out /usr Makefile
 
+    # Remove Deepin distro's lsb-release
     # Don't override systemd timeouts
-    rm -r $out/etc/systemd
-
     # Remove apt-specific templates
-    rm -r $out/share/python-apt
-
-    # Remove empty backgrounds directory
-    rm -r $out/share/backgrounds
+    echo ----------------------------------------------------------------
+    echo grep --color=always -E 'lsb-release|systemd|python-apt|backgrounds' Makefile
+    grep --color=always -E 'lsb-release|systemd|python-apt|backgrounds' Makefile
+    echo ----------------------------------------------------------------
+    sed -i -E '/lsb-release|systemd|python-apt|backgrounds/d' Makefile
+  '';
 
+  postInstall = ''
     # Make a symlink for deepin-version
     ln -s ../lib/deepin/desktop-version $out/etc/deepin-version
   '';
@@ -39,6 +45,14 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "Base assets and definitions for Deepin Desktop Environment";
+    # TODO: revise
+    longDescription = ''
+      This package provides some components for Deepin desktop environment.
+      - deepin logo
+      - deepin desktop version
+      - login screen background image
+      - language information
+    '';
     homepage = https://github.com/linuxdeepin/deepin-desktop-base;
     license = licenses.gpl3;
     platforms = platforms.linux;
diff --git a/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix b/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix
index d2b70ec4a896..f0a3d711a1d7 100644
--- a/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix
+++ b/pkgs/desktops/deepin/deepin-desktop-schemas/default.nix
@@ -1,21 +1,22 @@
-{ stdenv, fetchFromGitHub, python, deepin-gtk-theme,
-  deepin-icon-theme, deepin-sound-theme, deepin-wallpapers, gnome3,
-  deepin }:
+{ stdenv, fetchFromGitHub, python3, gnome3, glib, deepin-gtk-theme,
+  deepin-icon-theme, deepin-sound-theme, deepin-wallpapers, deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-desktop-schemas";
-  version = "3.4.0";
+  version = "3.13.0";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "10x0rh9z925yzyp8h0vgmg4313smvran06lvr12c3931qkmkzwgq";
+    sha256 = "0bamjcpmsl8xhw3ksgl11wv5xwcdhrkl1namikfzc4an03sk1rdq";
   };
 
   nativeBuildInputs = [
-    python
+    python3
+    glib.dev
+    deepin.setupHook
   ];
 
   buildInputs = [
@@ -27,12 +28,34 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
+    searchHardCodedPaths
+
     # fix default background url
-    sed -i '/picture-uri/s|/usr/share/backgrounds/default_background.jpg|$out/share/backgrounds/deepin/default.png|' \
+    sed -i -e 's,/usr/share/backgrounds/default_background.jpg,/usr/share/backgrounds/deepin/desktop.jpg,' \
+      overrides/common/com.deepin.wrap.gnome.desktop.override
+      
+    fixPath ${deepin-wallpapers} /usr/share/backgrounds \
       overrides/common/com.deepin.wrap.gnome.desktop.override
+
+    fixPath ${deepin-wallpapers} /usr/share/wallpapers/deepin \
+      schemas/com.deepin.dde.appearance.gschema.xml
+
+    # still hardcoded paths:
+    #   /etc/gnome-settings-daemon/xrandr/monitors.xml                                ? gnome3.gnome-settings-daemon
+    #   /usr/share/backgrounds/gnome/adwaita-lock.jpg                                 ? gnome3.gnome-backgrounds
+    #   /usr/share/backgrounds/gnome/adwaita-timed.xml                                gnome3.gnome-backgrounds
+    #   /usr/share/desktop-directories
   '';
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "PREFIX=${placeholder ''out''}" ];
+
+  doCheck = true;
+  checkTarget = "test";
+
+  postInstall = ''
+    glib-compile-schemas --strict $out/share/glib-2.0/schemas
+    searchHardCodedPaths $out
+  '';
 
   passthru.updateScript = deepin.updateScript { inherit name; };
 
diff --git a/pkgs/desktops/deepin/deepin-gettext-tools/default.nix b/pkgs/desktops/deepin/deepin-gettext-tools/default.nix
index 779fae6a113e..d9a6f3701688 100644
--- a/pkgs/desktops/deepin/deepin-gettext-tools/default.nix
+++ b/pkgs/desktops/deepin/deepin-gettext-tools/default.nix
@@ -24,7 +24,7 @@ stdenv.mkDerivation rec {
     python3Packages.python
   ];
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "PREFIX=${placeholder ''out''}" ];
 
   postPatch = ''
     sed -e 's/sudo cp/cp/' -i src/generate_mo.py
diff --git a/pkgs/desktops/deepin/deepin-gtk-theme/default.nix b/pkgs/desktops/deepin/deepin-gtk-theme/default.nix
index 8d11ca8bf42a..e0657752d102 100644
--- a/pkgs/desktops/deepin/deepin-gtk-theme/default.nix
+++ b/pkgs/desktops/deepin/deepin-gtk-theme/default.nix
@@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
 
   propagatedUserEnvPkgs = [ gtk-engine-murrine ];
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "PREFIX=${placeholder ''out''}" ];
 
   passthru.updateScript = deepin.updateScript { inherit name; };
 
diff --git a/pkgs/desktops/deepin/deepin-icon-theme/default.nix b/pkgs/desktops/deepin/deepin-icon-theme/default.nix
index ef4574206019..3b6b61c1ae76 100644
--- a/pkgs/desktops/deepin/deepin-icon-theme/default.nix
+++ b/pkgs/desktops/deepin/deepin-icon-theme/default.nix
@@ -1,29 +1,39 @@
-{ stdenv, fetchFromGitHub, gtk3, papirus-icon-theme, deepin }:
+{ stdenv, fetchFromGitHub, gtk3, xcursorgen, papirus-icon-theme, deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-icon-theme";
-  version = "15.12.64";
+  version = "15.12.68";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0z1yrp6yg2hb67azrbd9ac743jjh83vxdf2j0mmv2lfpd4fqw8qc";
+    sha256 = "12jgz81s5qggmnkfg9m5f799r10p43qmh4zqxl1kjvlrqgvsc9rf";
   };
 
-  nativeBuildInputs = [ gtk3 papirus-icon-theme ];
+  nativeBuildInputs = [ gtk3 xcursorgen ];
 
-  postPatch = ''
-    patchShebangs .
+  buildInputs = [ papirus-icon-theme ];
 
-    # install in $out
-    sed -i -e "s|/usr|$out|g" Makefile tools/hicolor.links
+  postPatch = ''
+    patchShebangs tools/hicolor.links
+    patchShebangs tools/display_unused_links.sh
+    patchShebangs cursors-src/cursors/bitmaps/make.sh
+    patchShebangs cursors-src/render-cursors.sh
 
     # keep icon-theme.cache
     sed -i -e 's|\(-rm -f .*/icon-theme.cache\)|# \1|g' Makefile
   '';
 
+  buildTargets = "all hicolor-links";
+  installTargets = "install-icons install-cursors";
+  installFlags = [ "PREFIX=${placeholder ''out''}" ];
+
+  postInstall = ''
+    cp -a ./Sea ./usr/share/icons/hicolor "$out"/share/icons/
+  '';
+
   passthru.updateScript = deepin.updateScript { inherit name; };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/desktops/deepin/deepin-image-viewer/default.nix b/pkgs/desktops/deepin/deepin-image-viewer/default.nix
index 0b08f7cd39a0..7e2840f0f3f2 100644
--- a/pkgs/desktops/deepin/deepin-image-viewer/default.nix
+++ b/pkgs/desktops/deepin/deepin-image-viewer/default.nix
@@ -6,19 +6,20 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-image-viewer";
-  version = "1.3.1";
+  version = "1.3.10";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0dxdvm6hzj6izfxka35za8y7vacd06nksfgzx6xsv7ywzagri4k5";
+    sha256 = "0paanw9sd67ic9yrbzqhrwi4bf4lpvsk16jynx99n76j3jgyijkk";
   };
 
   nativeBuildInputs = [
     pkgconfig
     qmake
     qttools
+    deepin.setupHook
   ];
 
   buildInputs = [
@@ -33,12 +34,12 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    patchShebangs .
+    searchHardCodedPaths
+    patchShebangs viewer/generate_translations.sh
+    fixPath $out /usr viewer/com.deepin.ImageViewer.service
     sed -i qimage-plugins/freeimage/freeimage.pro \
            qimage-plugins/libraw/libraw.pro \
       -e "s,\$\$\[QT_INSTALL_PLUGINS\],$out/$qtPluginPrefix,"
-    sed -i viewer/com.deepin.ImageViewer.service \
-      -e "s,/usr,$out,"
   '';
 
   passthru.updateScript = deepin.updateScript { inherit name; };
diff --git a/pkgs/desktops/deepin/deepin-menu/default.nix b/pkgs/desktops/deepin/deepin-menu/default.nix
index 645abfedad71..5de292805b65 100644
--- a/pkgs/desktops/deepin/deepin-menu/default.nix
+++ b/pkgs/desktops/deepin/deepin-menu/default.nix
@@ -16,6 +16,7 @@ stdenv.mkDerivation rec {
   nativeBuildInputs = [
     pkgconfig
     qmake
+    deepin.setupHook
   ];
 
   buildInputs = [
@@ -25,7 +26,11 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    sed -i deepin-menu.pro -e "s,/usr,$out,"
+    searchHardCodedPaths
+    fixPath $out /usr \
+      data/com.deepin.menu.service \
+      deepin-menu.desktop \
+      deepin-menu.pro
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/desktops/deepin/deepin-metacity/default.nix b/pkgs/desktops/deepin/deepin-metacity/default.nix
index 28d68883d4b8..fdf2c240e2c8 100644
--- a/pkgs/desktops/deepin/deepin-metacity/default.nix
+++ b/pkgs/desktops/deepin/deepin-metacity/default.nix
@@ -1,25 +1,26 @@
-{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, gnome3, gtk3, libgtop, bamf,
-  json-glib, libcanberra-gtk3, libxkbcommon, libstartup_notification,
-  deepin-wallpapers, deepin-desktop-schemas, deepin }:
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, gnome3, glib,
+  gtk3, libgtop, bamf, json-glib, libcanberra-gtk3, libxkbcommon,
+  libstartup_notification, deepin-wallpapers, deepin-desktop-schemas,
+  deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-metacity";
-  version = "3.22.22";
+  version = "3.22.24";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0gr10dv8vphla6z7zqiyyg3n3ag4rrlz43c4kr7fd5xwx2bfvp3d";
+    sha256 = "1im0wz1zlxiag4kpp5d4hv0aa0ybr4bizarr3903hrqv0lp46hyx";
   };
 
   nativeBuildInputs = [
     pkgconfig
     intltool
     libtool
+    glib.dev
     gnome3.gnome-common
-    gnome3.glib.dev
   ];
 
   buildInputs = [
@@ -41,7 +42,7 @@ stdenv.mkDerivation rec {
       -e 's;/usr/share/backgrounds/default_background.jpg;${deepin-wallpapers}/share/backgrounds/deepin/desktop.jpg;'
   '';
 
-  NIX_CFLAGS_COMPILE = "-I${gnome3.glib.dev}/include/gio-unix-2.0";
+  NIX_CFLAGS_COMPILE = "-I${glib.dev}/include/gio-unix-2.0";
 
   configureFlags = [ "--disable-themes-documentation" ];
 
diff --git a/pkgs/desktops/deepin/deepin-movie-reborn/default.nix b/pkgs/desktops/deepin/deepin-movie-reborn/default.nix
index 3d195f8f1c0c..8a675ca1169e 100644
--- a/pkgs/desktops/deepin/deepin-movie-reborn/default.nix
+++ b/pkgs/desktops/deepin/deepin-movie-reborn/default.nix
@@ -5,13 +5,13 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-movie-reborn";
-  version = "3.2.14";
+  version = "3.2.21";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "1i9sdg2p6qp57rqzrnjbxnqj3mg1qggzyq3yykw271vs8h85a707";
+    sha256 = "09a4sirbdxnrwj9ww2v7b1s9ylsincqzpqm2zisny9zxy22fm8s9";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/deepin/deepin-mutter/default.nix b/pkgs/desktops/deepin/deepin-mutter/default.nix
index d2e29cd2cb8f..fc26440a3ef1 100644
--- a/pkgs/desktops/deepin/deepin-mutter/default.nix
+++ b/pkgs/desktops/deepin/deepin-mutter/default.nix
@@ -1,17 +1,19 @@
-{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, gnome3, gtk3, xorg,
-  libcanberra-gtk3, upower, xkeyboard_config, libxkbcommon,
-  libstartup_notification, libinput, cogl, clutter, systemd, deepin }:
+{ stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, gnome3, gtk3,
+  xorg, libcanberra-gtk3, upower, xkeyboard_config, libxkbcommon,
+  libstartup_notification, libinput, libgudev, cogl, clutter, systemd,
+  gsettings-desktop-schemas, deepin-desktop-schemas, wrapGAppsHook,
+  deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-mutter";
-  version = "3.20.35";
+  version = "3.20.38";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0mwk06kgw8qp8rg1j6px1zlya4x5rr9llax0qks59j56b3m9yim7";
+    sha256 = "1aq7606sgn2c6n8wfgxdryw3lprc4va0zjc0r65798w5656fdi31";
   };
 
   nativeBuildInputs = [
@@ -19,27 +21,32 @@ stdenv.mkDerivation rec {
     intltool
     libtool
     gnome3.gnome-common
+    wrapGAppsHook
+    deepin.setupHook
   ];
 
   buildInputs = [
-    gtk3
+    clutter
+    cogl
+    deepin-desktop-schemas
     gnome3.gnome-desktop
-    gnome3.gsettings-desktop-schemas
-    gnome3.libgudev
     gnome3.zenity
-    upower
-    xorg.libxkbfile
-    libxkbcommon
+    gsettings-desktop-schemas
+    gtk3
     libcanberra-gtk3
-    libstartup_notification
+    libgudev
     libinput
-    xkeyboard_config
-    cogl
-    clutter
+    libstartup_notification
+    libxkbcommon
     systemd
+    upower
+    xkeyboard_config
+    xorg.libxkbfile
   ];
 
-  enableParallelBuilding = true;
+  postPatch = ''
+    searchHardCodedPaths
+  '';
 
   configureFlags = [
     "--enable-native-backend"
@@ -50,6 +57,8 @@ stdenv.mkDerivation rec {
     NOCONFIGURE=1 ./autogen.sh
   '';
 
+  enableParallelBuilding = true;
+
   passthru.updateScript = deepin.updateScript { inherit name; };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/desktops/deepin/deepin-sound-theme/default.nix b/pkgs/desktops/deepin/deepin-sound-theme/default.nix
index bb004372497f..bb752cc1ca90 100644
--- a/pkgs/desktops/deepin/deepin-sound-theme/default.nix
+++ b/pkgs/desktops/deepin/deepin-sound-theme/default.nix
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
     sha256 = "1sw4nrn7q7wk1hpicm05apyc0mihaw42iqm52wb8ib8gm1qiylr9";
   };
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "PREFIX=${placeholder ''out''}" ];
 
   passthru.updateScript = deepin.updateScript { inherit name; };
 
diff --git a/pkgs/desktops/deepin/deepin-terminal/default.nix b/pkgs/desktops/deepin/deepin-terminal/default.nix
index 70e15441436d..74337974acca 100644
--- a/pkgs/desktops/deepin/deepin-terminal/default.nix
+++ b/pkgs/desktops/deepin/deepin-terminal/default.nix
@@ -1,19 +1,19 @@
 { stdenv, fetchurl, fetchFromGitHub, pkgconfig, cmake, ninja, vala,
-  gettext, gobject-introspection, at-spi2-core, dbus, epoxy, expect,
-  gtk3, json-glib, libXdmcp, libgee, libpthreadstubs, librsvg,
-  libsecret, libtasn1, libxcb, libxkbcommon, p11-kit, pcre, vte, wnck,
-  deepin-menu, deepin-shortcut-viewer, deepin }:
+  gettext, at-spi2-core, dbus, epoxy, expect, gtk3, json-glib,
+  libXdmcp, libgee, libpthreadstubs, librsvg, libsecret, libtasn1,
+  libxcb, libxkbcommon, p11-kit, pcre, vte, wnck, libselinux,
+  libsepol, utillinux, deepin-menu, deepin-shortcut-viewer, deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-terminal";
-  version = "3.0.10.2";
+  version = "3.2.1.2";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = "deepin-terminal";
     rev = version;
-    sha256 = "0ylhp8q9kfdq9l69drawjaf0q8vcqyflb2a3zfnwbnf06dlpvkz6";
+    sha256 = "0dj386csbiw0yqz9nj6ij0s4d0ak9lpq2bmsfs17bjkgdp0ayp90";
   };
 
   nativeBuildInputs = [
@@ -22,7 +22,8 @@ stdenv.mkDerivation rec {
     ninja
     vala
     gettext
-    gobject-introspection # For setup hook
+    libselinux libsepol utillinux # required by gio
+    deepin.setupHook
   ];
 
   buildInputs = [
@@ -49,15 +50,19 @@ stdenv.mkDerivation rec {
   ];
 
   postPatch = ''
-    patchShebangs .
+    searchHardCodedPaths
   '';
 
-  enableParallelBuilding = true;
+  cmakeFlags = [
+    "-DTEST_BUILD=OFF"
+    "-DUSE_VENDOR_LIB=OFF"
+    "-DVERSION=${version}"
+  ];
 
   passthru.updateScript = deepin.updateScript { inherit name; };
 
   meta = with stdenv.lib; {
-    description = "The default terminal emulation for Deepin";
+    description = "Default terminal emulator for Deepin";
     longDescription = ''
       Deepin terminal, it sharpens your focus in the world of command line!
       It is an advanced terminal emulator with workspace, multiple
diff --git a/pkgs/desktops/deepin/deepin-wallpapers/default.nix b/pkgs/desktops/deepin/deepin-wallpapers/default.nix
index 8f04bd482184..f99974ba9c26 100644
--- a/pkgs/desktops/deepin/deepin-wallpapers/default.nix
+++ b/pkgs/desktops/deepin/deepin-wallpapers/default.nix
@@ -3,19 +3,21 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-wallpapers";
-  version = "1.7.5";
+  version = "1.7.7";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = "deepin-wallpapers";
     rev = version;
-    sha256 = "0mfjkh81ci0gjwmgycrh32by7v9b73nyvyjbqd29ccpb8bpyyakn";
+    sha256 = "09cfnxbpms98ibqbi4xd51181q3az5n8rmndcdr9w12kyzniz7xv";
   };
 
-  nativeBuildInputs = [ dde-api.bin ];
+  nativeBuildInputs = [ dde-api deepin.setupHook ];
 
   postPatch = ''
-    sed -i -e "s:/usr/lib/deepin-api:${dde-api.bin}/lib/deepin-api:" Makefile
+    searchHardCodedPaths # debugging
+
+    sed -i -e "s:/usr/lib/deepin-api:${dde-api}/lib/deepin-api:" Makefile
     sed -i -e "s:/usr/share/wallpapers:$out/share/wallpapers:" Makefile
   '';
 
diff --git a/pkgs/desktops/deepin/deepin-wm/default.nix b/pkgs/desktops/deepin/deepin-wm/default.nix
index ea2f06aae607..d1ae0557aaa7 100644
--- a/pkgs/desktops/deepin/deepin-wm/default.nix
+++ b/pkgs/desktops/deepin/deepin-wm/default.nix
@@ -1,49 +1,55 @@
 { stdenv, fetchFromGitHub, pkgconfig, intltool, libtool, vala, gnome3,
-  bamf, clutter-gtk, pantheon, libcanberra-gtk3, libwnck3,
-  deepin-mutter, deepin-wallpapers, deepin-desktop-schemas,
-  hicolor-icon-theme, deepin }:
+  bamf, clutter-gtk, pantheon, libgee, libcanberra-gtk3, libwnck3,
+  deepin-menu, deepin-mutter, deepin-wallpapers,
+  deepin-desktop-schemas, wrapGAppsHook, deepin }:
 
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "deepin-wm";
-  version = "1.9.34";
+  version = "1.9.37";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "13hydcalifdc6723k8l4pk905y9sxic5x1fqww0fyx7j6b3hm13f";
+    sha256 = "1xd2x0kyav2cxnk0bybl7lrmak1r2468slxz5a6anrdriw9l10gi";
   };
 
   nativeBuildInputs = [
     pkgconfig
     intltool
     libtool
-    gnome3.gnome-common
     vala
+    gnome3.gnome-common
+    wrapGAppsHook
+    deepin.setupHook
   ];
 
   buildInputs = [
-    gnome3.gnome-desktop
-    gnome3.libgee
     bamf
     clutter-gtk
-    pantheon.granite
-    libcanberra-gtk3
-    libwnck3
+    deepin-desktop-schemas
+    deepin-menu
     deepin-mutter
     deepin-wallpapers
-    deepin-desktop-schemas
-    hicolor-icon-theme
+    gnome3.gnome-desktop
+    libcanberra-gtk3
+    libgee
+    libwnck3
+    pantheon.granite
   ];
 
   postPatch = ''
-    sed -i src/Background/BackgroundSource.vala \
-      -e 's;/usr/share/backgrounds/default_background.jpg;${deepin-wallpapers}/share/backgrounds/deepin/desktop.jpg;'
+    searchHardCodedPaths
+    fixPath ${deepin-wallpapers} /usr/share/backgrounds src/Background/BackgroundSource.vala
+    # fix background path
+    sed -i 's|default_background.jpg|deepin/desktop.jpg|' src/Background/BackgroundSource.vala
   '';
 
+  NIX_CFLAGS_COMPILE = "-DWNCK_I_KNOW_THIS_IS_UNSTABLE";
+
   preConfigure = ''
-    ./autogen.sh
+    NOCONFIGURE=1 ./autogen.sh
   '';
 
   enableParallelBuilding = true;
diff --git a/pkgs/desktops/deepin/default.nix b/pkgs/desktops/deepin/default.nix
index 4c0e44f6b726..d864fd77389e 100644
--- a/pkgs/desktops/deepin/default.nix
+++ b/pkgs/desktops/deepin/default.nix
@@ -2,6 +2,8 @@
 
 let
   packages = self: with self; {
+    setupHook = ./setup-hook.sh;
+
     updateScript = callPackage ./update.nix { };
 
     dbus-factory = callPackage ./dbus-factory { };
@@ -14,6 +16,7 @@ let
       # XXX: the build is finding references to Go when compiled with go v1.12
       go = go_1_11;
     };
+    dde-polkit-agent = callPackage ./dde-polkit-agent { };
     dde-qt-dbus-factory = callPackage ./dde-qt-dbus-factory { };
     dde-session-ui = callPackage ./dde-session-ui { };
     deepin-desktop-base = callPackage ./deepin-desktop-base { };
@@ -29,11 +32,11 @@ let
     deepin-shortcut-viewer = callPackage ./deepin-shortcut-viewer { };
     deepin-sound-theme = callPackage ./deepin-sound-theme { };
     deepin-terminal = callPackage ./deepin-terminal {
-      inherit (pkgs.gnome3) libgee;
       wnck = pkgs.libwnck3;
     };
     deepin-wallpapers = callPackage ./deepin-wallpapers { };
     deepin-wm = callPackage ./deepin-wm { };
+    dpa-ext-gnomekeyring = callPackage ./dpa-ext-gnomekeyring { };
     dtkcore = callPackage ./dtkcore { };
     dtkwm = callPackage ./dtkwm { };
     dtkwidget = callPackage ./dtkwidget { };
diff --git a/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix b/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix
new file mode 100644
index 000000000000..4baa2262cd6e
--- /dev/null
+++ b/pkgs/desktops/deepin/dpa-ext-gnomekeyring/default.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchFromGitHub, pkgconfig, qmake, qttools, gnome3,
+  dde-polkit-agent, deepin }:
+
+stdenv.mkDerivation rec {
+  name = "${pname}-${version}";
+  pname = "dpa-ext-gnomekeyring";
+  version = "0.1.0";
+
+  src = fetchFromGitHub {
+    owner = "linuxdeepin";
+    repo = pname;
+    rev = version;
+    sha256 = "168j42nwyw7vcgwc0fha2pjpwwlgir70fq1hns4ia1dkdqa1nhzw";
+  };
+
+  nativeBuildInputs = [
+    pkgconfig
+    qmake
+    qttools
+    deepin.setupHook
+  ];
+
+  buildInputs = [
+    dde-polkit-agent
+    gnome3.libgnome-keyring
+  ];
+
+  postPatch = ''
+    searchHardCodedPaths
+    patchShebangs translate_generation.sh
+    fixPath $out /usr dpa-ext-gnomekeyring.pro gnomekeyringextention.cpp
+  '';
+
+  passthru.updateScript = deepin.updateScript { inherit name; };
+
+  meta = with stdenv.lib; {
+    description = "GNOME keyring extension for dde-polkit-agent";
+    homepage = https://github.com/linuxdeepin/dpa-ext-gnomekeyring;
+    license = licenses.gpl3;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ romildo ];
+  };
+}
diff --git a/pkgs/desktops/deepin/dtkcore/default.nix b/pkgs/desktops/deepin/dtkcore/default.nix
index 9904c58128f5..4081a40a96e2 100644
--- a/pkgs/desktops/deepin/dtkcore/default.nix
+++ b/pkgs/desktops/deepin/dtkcore/default.nix
@@ -3,13 +3,13 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "dtkcore";
-  version = "2.0.9.8";
+  version = "2.0.10";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "06jj5gpy2qbmc21nf0fnbvgw7nbjjgvzx7m2vg9byw5il8l4g22h";
+    sha256 = "0dwpq6c38gaa95mgjnwj3vjz57n0cz6jfk950xi6s9ww2f4g6kq7";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/deepin/dtkwidget/default.nix b/pkgs/desktops/deepin/dtkwidget/default.nix
index b61f31e40ee9..b55a5fbc9fe9 100644
--- a/pkgs/desktops/deepin/dtkwidget/default.nix
+++ b/pkgs/desktops/deepin/dtkwidget/default.nix
@@ -5,13 +5,13 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "dtkwidget";
-  version = "2.0.9.10";
+  version = "2.0.10";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0757dzy82bfv97b1gzkwa9zx3jzfbap20v3r1h7lkfcfw95410iw";
+    sha256 = "11a7yirfkcj3rq7va9av4m1pr22mq1yx1j9k18xrqv36n0rlbrr6";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/deepin/go-dbus-factory/default.nix b/pkgs/desktops/deepin/go-dbus-factory/default.nix
index 01d504eda896..ad2926fa403f 100644
--- a/pkgs/desktops/deepin/go-dbus-factory/default.nix
+++ b/pkgs/desktops/deepin/go-dbus-factory/default.nix
@@ -3,16 +3,16 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "go-dbus-factory";
-  version = "0.0.7.1";
+  version = "0.4.0";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0gj2xxv45gh7wr5ry3mcsi46kdsyq9nbd7znssn34kapiv40ixcx";
+    sha256 = "1i1ymi2qpcbf4d6rnfzrbq5n2vwnn8dvbq9xlw7jls3jpr3d5r00";
   };
 
-  makeFlags = [ "PREFIX=$(out)" ];
+  makeFlags = [ "PREFIX=${placeholder ''out''}" ];
 
   postPatch = ''
     sed -i -e 's:/share/gocode:/share/go:' Makefile
diff --git a/pkgs/desktops/deepin/go-dbus-generator/default.nix b/pkgs/desktops/deepin/go-dbus-generator/default.nix
index 1e3da129a612..92cf3960c736 100644
--- a/pkgs/desktops/deepin/go-dbus-generator/default.nix
+++ b/pkgs/desktops/deepin/go-dbus-generator/default.nix
@@ -18,7 +18,7 @@ stdenv.mkDerivation rec {
   ];
 
   makeFlags = [
-    "PREFIX=$(out)"
+    "PREFIX=${placeholder ''out''}"
     "GOCACHE=$(TMPDIR)/go-cache"
   ];
 
diff --git a/pkgs/desktops/deepin/go-gir-generator/default.nix b/pkgs/desktops/deepin/go-gir-generator/default.nix
index bd979b31784f..03c906585e3d 100644
--- a/pkgs/desktops/deepin/go-gir-generator/default.nix
+++ b/pkgs/desktops/deepin/go-gir-generator/default.nix
@@ -4,23 +4,15 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "go-gir-generator";
-  version = "1.1.0";
+  version = "2.0.0";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0grp4ffy3vmlknzmymnxq1spwshff2ylqsw82pj4y2v2fcvnqfvb";
+    sha256 = "0d93qzp3dlia5d1yxw0rwca76qk3jyamj9xzmk13vzig8zw0jx16";
   };
 
-  patches = [
-    # fix: dde-api build error with gobject-introspection 1.58+
-    (fetchurl {
-      url = https://github.com/linuxdeepin/go-gir-generator/commit/a7ab229201e28d1be727f5021b3588fa4a1acf5f.patch;
-      sha256 = "13ywalwkjg8wwvd0pvmc2rv1h38airyvimdn9jfb5wis9xm48401";
-    })
-  ];
-
   nativeBuildInputs = [
     pkgconfig
     go
@@ -36,7 +28,7 @@ stdenv.mkDerivation rec {
   '';
 
   makeFlags = [
-    "PREFIX=$(out)"
+    "PREFIX=${placeholder ''out''}"
     "GOCACHE=$(TMPDIR)/go-cache"
   ];
 
diff --git a/pkgs/desktops/deepin/go-lib/default.nix b/pkgs/desktops/deepin/go-lib/default.nix
index 684f1dd7f32d..41315c440901 100644
--- a/pkgs/desktops/deepin/go-lib/default.nix
+++ b/pkgs/desktops/deepin/go-lib/default.nix
@@ -4,13 +4,13 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "go-lib";
-  version = "1.3.0";
+  version = "1.10.0";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "0g84v1adnnyqc1mv45n3wlvnivkm1fi8ywszzgwx8irl3iddfvxv";
+    sha256 = "090l33y79gdj2xy1bhk2ksl6hvmsfhmx0bhygm4y4d0iqckf2x2m";
   };
 
   buildInputs = [
@@ -21,10 +21,12 @@ stdenv.mkDerivation rec {
     mobile-broadband-provider-info
   ];
 
-  makeFlags = [
-    "PREFIX=$(out)"
-    "GOSITE_DIR=$(out)/share/go"
-  ];
+  installPhase = ''
+    mkdir -p $out/share/go/src/pkg.deepin.io/lib
+    cp -a * $out/share/go/src/pkg.deepin.io/lib
+
+    rm -r $out/share/go/src/pkg.deepin.io/lib/debian
+  '';
 
   passthru.updateScript = deepin.updateScript { inherit name; };
 
diff --git a/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix b/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix
index c4ce0ca563bd..7d2c89165087 100644
--- a/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix
+++ b/pkgs/desktops/deepin/qt5dxcb-plugin/default.nix
@@ -4,13 +4,13 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "qt5dxcb-plugin";
-  version = "1.1.13";
+  version = "1.1.25";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "12lvh3agw3qdviqf32brmzba5kscnj5al5jhc08lq69a9kmip05x";
+    sha256 = "1nadmj1hdpw4n3kpk3dlx22bmxdli66abhjl73hwrbvszmmcm9vp";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/deepin/qt5integration/default.nix b/pkgs/desktops/deepin/qt5integration/default.nix
index 809156377225..634bac5cf97d 100644
--- a/pkgs/desktops/deepin/qt5integration/default.nix
+++ b/pkgs/desktops/deepin/qt5integration/default.nix
@@ -5,13 +5,13 @@
 stdenv.mkDerivation rec {
   name = "${pname}-${version}";
   pname = "qt5integration";
-  version = "0.3.6";
+  version = "0.3.8";
 
   src = fetchFromGitHub {
     owner = "linuxdeepin";
     repo = pname;
     rev = version;
-    sha256 = "1v9whlqn07c5c8xnaiicdshj9n88a667gfbn8y8bk5bfylilfzcy";
+    sha256 = "12d6iv2x0q2n73rscma30q31nh7h26gmhlf665gkgl2j825hlx5n";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/desktops/deepin/setup-hook.sh b/pkgs/desktops/deepin/setup-hook.sh
new file mode 100755
index 000000000000..15fe5be1538d
--- /dev/null
+++ b/pkgs/desktops/deepin/setup-hook.sh
@@ -0,0 +1,53 @@
+# Helper functions for deepin packaging
+
+searchHardCodedPaths() {
+    # looks for ocurrences of hard coded paths in given (current)
+    # directory and command invocations for the purpose of debugging a
+    # derivation
+
+    local dir=$1
+
+    echo ----------- looking for command invocations
+    grep --color=always -r -E '\<(ExecStart|Exec|startDetached|execute|exec\.(Command|LookPath))\>' $dir || true
+
+    echo ----------- looking for hard coded paths
+    grep --color=always -r -E '/(usr|bin|sbin|etc|var|opt)\>' $dir || true
+
+    echo ----------- done
+}
+
+fixPath() {
+    # Usage:
+    #
+    #   fixPath <parent dir> <path> <files>
+    #
+    # replaces occurences of <path> by <parent_dir><path> in <files>
+    # removing /usr from the start of <path> if present
+
+    local parentdir=$1
+    local path=$2
+    local newpath=$parentdir$(echo $path | sed "s,^/usr,,")
+    local files=("${@:3}")
+    echo ======= grep --color=always "${path}" "${files[@]}"
+    grep --color=always "${path}" "${files[@]}"
+    echo +++++++ sed -i -e "s,$path,$newpath,g" "${files[@]}"
+    sed -i -e "s,$path,$newpath,g" "${files[@]}"
+}
+
+searchForUnresolvedDLL() {
+    # Usage:
+    #
+    #   searchForUnresolvedDLL <dir>
+    #
+    # looks in <dir> for executables with unresolved dynamic library paths
+
+    local dir="$1"
+    echo ======= Looking for executables with unresolved dynamic library dependencies
+    echo $dir
+    for f in $(find -L "$dir" -type f -executable); do
+      if (ldd $f | grep -q "not found"); then
+        echo $f
+        ldd $f | grep --color=always "not found"
+      fi
+    done
+}
diff --git a/pkgs/desktops/deepin/update.nix b/pkgs/desktops/deepin/update.nix
index 22a6acb8ce31..089d9289827e 100644
--- a/pkgs/desktops/deepin/update.nix
+++ b/pkgs/desktops/deepin/update.nix
@@ -1,5 +1,5 @@
 { stdenv, lib, writeScript, coreutils, curl, gnugrep, gnused, jq, common-updater-scripts, nix }:
-{ name, ignored-versions ? "^2014\\.|^v[0-9]+" }:
+{ name, ignored-versions ? "^2014(\\.|rc)|^v[0-9]+" }:
 
 let
   nameAndVersion = builtins.parseDrvName name;
diff --git a/pkgs/development/compilers/gcc-arm-embedded/6/default.nix b/pkgs/development/compilers/gcc-arm-embedded/6/default.nix
index 82edf0e33cfa..9e5a172eed84 100644
--- a/pkgs/development/compilers/gcc-arm-embedded/6/default.nix
+++ b/pkgs/development/compilers/gcc-arm-embedded/6/default.nix
@@ -5,16 +5,17 @@ stdenv.mkDerivation rec {
   version = "6-2017-q2-update";
   subdir = "6-2017q2";
 
-  platformString =
-    if stdenv.isLinux then "linux"
-    else if stdenv.isDarwin then "mac"
-    else throw "unsupported platform";
-
-  urlString = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-${platformString}.tar.bz2";
-
   src =
-    if stdenv.isLinux then fetchurl { url=urlString; sha256="1hvwi02mx34al525sngnl0cm7dkmzxfkb1brq9kvbv28wcplp3p6"; }
-    else if stdenv.isDarwin then fetchurl { url=urlString; sha256="0019ylpq4inq7p5gydpmc9m8ni72fz2csrjlqmgx1698998q0c3x"; }
+    if stdenv.isLinux then
+      fetchurl {
+        url = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-linux.tar.bz2";
+        sha256="1hvwi02mx34al525sngnl0cm7dkmzxfkb1brq9kvbv28wcplp3p6";
+      }
+    else if stdenv.isDarwin then
+      fetchurl {
+        url = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-mac.tar.bz2";
+        sha256="0019ylpq4inq7p5gydpmc9m8ni72fz2csrjlqmgx1698998q0c3x";
+      }
     else throw "unsupported platform";
 
   phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
diff --git a/pkgs/development/compilers/gcc-arm-embedded/7/default.nix b/pkgs/development/compilers/gcc-arm-embedded/7/default.nix
index 39fc3c517f81..80e042b5c2e9 100644
--- a/pkgs/development/compilers/gcc-arm-embedded/7/default.nix
+++ b/pkgs/development/compilers/gcc-arm-embedded/7/default.nix
@@ -7,9 +7,18 @@ stdenv.mkDerivation rec {
   version = "7-2018-q2-update";
   subdir = "7-2018q2";
 
-  urlString = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-linux.tar.bz2";
-
-  src = fetchurl { url=urlString; sha256="0sgysp3hfpgrkcbfiwkp0a7ymqs02khfbrjabm52b5z61sgi05xv"; };
+  src =
+  if stdenv.isLinux then
+    fetchurl {
+      url = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-linux.tar.bz2";
+      sha256="0sgysp3hfpgrkcbfiwkp0a7ymqs02khfbrjabm52b5z61sgi05xv";
+    }
+  else if stdenv.isDarwin then
+    fetchurl {
+      url = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-mac.tar.bz2";
+      sha256="0nc7m0mpa39qyhfyydxkkyqm7spfc27xf6ygi2vd2aym4r9azi61";
+    }
+  else throw "unsupported platform";
 
   phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
 
diff --git a/pkgs/development/compilers/gcc-arm-embedded/8/default.nix b/pkgs/development/compilers/gcc-arm-embedded/8/default.nix
index a26131cb0536..ee57dcc8c144 100644
--- a/pkgs/development/compilers/gcc-arm-embedded/8/default.nix
+++ b/pkgs/development/compilers/gcc-arm-embedded/8/default.nix
@@ -7,9 +7,18 @@ stdenv.mkDerivation rec {
   version = "8-2018-q4-major";
   subdir = "8-2018q4";
 
-  urlString = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-linux.tar.bz2";
-
-  src = fetchurl { url=urlString; sha256="fb31fbdfe08406ece43eef5df623c0b2deb8b53e405e2c878300f7a1f303ee52"; };
+  src =
+  if stdenv.isLinux then
+    fetchurl {
+      url = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-linux.tar.bz2";
+      sha256="fb31fbdfe08406ece43eef5df623c0b2deb8b53e405e2c878300f7a1f303ee52";
+    }
+  else if stdenv.isDarwin then
+    fetchurl {
+      url = "https://developer.arm.com/-/media/Files/downloads/gnu-rm/${subdir}/gcc-arm-none-eabi-${version}-mac.tar.bz2";
+      sha256="0q44r57fizpk1z3ngcjwal3rxgsnzjyfknpgwlwzmw5r9p98wlhb";
+    }
+  else throw "unsupported platform";
 
   phases = [ "unpackPhase" "installPhase" "fixupPhase" ];
 
diff --git a/pkgs/development/compilers/ghc/8.6.4.nix b/pkgs/development/compilers/ghc/8.6.4.nix
index d9c63edc9155..6cd7522bae87 100644
--- a/pkgs/development/compilers/ghc/8.6.4.nix
+++ b/pkgs/development/compilers/ghc/8.6.4.nix
@@ -155,7 +155,7 @@ stdenv.mkDerivation (rec {
   configureFlags = [
     "--datadir=$doc/share/doc/ghc"
     "--with-curses-includes=${ncurses.dev}/include" "--with-curses-libraries=${ncurses.out}/lib"
-  ] ++ stdenv.lib.optionals (libffi != null) ["--with-system-libffi" "--with-ffi-includes=${libffi.dev}/include" "--with-ffi-libraries=${libffi.out}/lib"
+  ] ++ stdenv.lib.optionals (libffi != null) ["--with-system-libffi" "--with-ffi-includes=${targetPackages.libffi.dev}/include" "--with-ffi-libraries=${targetPackages.libffi.out}/lib"
   ] ++ stdenv.lib.optional (targetPlatform == hostPlatform && !enableIntegerSimple) [
     "--with-gmp-includes=${targetPackages.gmp.dev}/include" "--with-gmp-libraries=${targetPackages.gmp.out}/lib"
   ] ++ stdenv.lib.optional (targetPlatform == hostPlatform && hostPlatform.libc != "glibc" && !targetPlatform.isWindows) [
diff --git a/pkgs/development/compilers/llvm/8/lldb.nix b/pkgs/development/compilers/llvm/8/lldb.nix
index d40eeb4a2074..ae9198e99d27 100644
--- a/pkgs/development/compilers/llvm/8/lldb.nix
+++ b/pkgs/development/compilers/llvm/8/lldb.nix
@@ -45,6 +45,10 @@ stdenv.mkDerivation {
   postInstall = ''
     mkdir -p $out/share/man/man1
     cp ../docs/lldb.1 $out/share/man/man1/
+
+    install -D ../tools/lldb-vscode/package.json $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/package.json
+    mkdir $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
+    ln -s $out/bin/lldb-vscode $out/share/vscode/extensions/llvm-org.lldb-vscode-0.1.0/bin
   '';
 
   meta = with stdenv.lib; {
diff --git a/pkgs/development/libraries/pcl/default.nix b/pkgs/development/libraries/pcl/default.nix
index 14eff45e4a17..08a1613c2feb 100644
--- a/pkgs/development/libraries/pcl/default.nix
+++ b/pkgs/development/libraries/pcl/default.nix
@@ -4,23 +4,15 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "pcl-1.8.1";
+  name = "pcl-1.9.1";
 
   src = fetchFromGitHub {
     owner = "PointCloudLibrary";
     repo = "pcl";
     rev = name;
-    sha256 = "05wvqqi2fyk5innw4mg356r71c1hmc9alc7xkf4g81ds3b3867xq";
+    sha256 = "0g0am3bf14sadfw231l5nmf5d2g1p9i7yq12c6q8rl7nw501ny9j";
   };
 
-  patches = [
-    # boost-1.67 compatibility
-    (fetchpatch {
-      url = "https://github.com/PointCloudLibrary/pcl/commit/2309bdab20fb2a385d374db6a87349199279db18.patch";
-      sha256 = "112p4687xrm0vsm0magmkvsm1hpks9hj42fm0lncy3yy2j1v3r4h";
-      name = "boost167-random.patch";
-  })];
-
   enableParallelBuilding = true;
 
   nativeBuildInputs = [ pkgconfig cmake ];
diff --git a/pkgs/development/libraries/physics/herwig/default.nix b/pkgs/development/libraries/physics/herwig/default.nix
index 722dccaea7be..7a146bb7309a 100644
--- a/pkgs/development/libraries/physics/herwig/default.nix
+++ b/pkgs/development/libraries/physics/herwig/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "herwig-${version}";
-  version = "7.1.4";
+  version = "7.1.5";
 
   src = fetchurl {
     url = "https://www.hepforge.org/archive/herwig/Herwig-${version}.tar.bz2";
-    sha256 = "1awr1jz0q873x8bgwiilzklhk1zkgm6slvpychpnvsf9vk05mmdx";
+    sha256 = "0jnrv59zfa41gc37pqr3vaiz5jkh7w0k0alcax37b3mlbsnacr9r";
   };
 
   nativeBuildInputs = [ autoconf automake libtool ];
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
     ++ (with lhapdf.pdf_sets; [ MMHT2014lo68cl MMHT2014nlo68cl ]);
 
   postPatch = ''
-    patchShebangs ./cat_with_cpplines
+    patchShebangs ./
   '';
 
   configureFlags = [
diff --git a/pkgs/development/libraries/physics/thepeg/default.nix b/pkgs/development/libraries/physics/thepeg/default.nix
index 63bc3c06e102..046413c64f49 100644
--- a/pkgs/development/libraries/physics/thepeg/default.nix
+++ b/pkgs/development/libraries/physics/thepeg/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "thepeg-${version}";
-  version = "2.1.4";
+  version = "2.1.5";
 
   src = fetchurl {
     url = "https://www.hepforge.org/archive/thepeg/ThePEG-${version}.tar.bz2";
-    sha256 = "1x9dfxmsbmzmsxrv3cczfyrnqkxjcpy89v6v7ycysrx9k8qkf320";
+    sha256 = "1rmmwhk9abn9mc9j3127axjwpvymv21ld4wcivwz01pldkxh06n6";
   };
 
   buildInputs = [ boost fastjet gsl hepmc lhapdf rivet zlib ];
diff --git a/pkgs/development/libraries/vapoursynth-mvtools/default.nix b/pkgs/development/libraries/vapoursynth-mvtools/default.nix
index ecc6b7c30fc7..abdf9fbeed3c 100644
--- a/pkgs/development/libraries/vapoursynth-mvtools/default.nix
+++ b/pkgs/development/libraries/vapoursynth-mvtools/default.nix
@@ -4,13 +4,13 @@
 
 stdenv.mkDerivation rec {
   name = "vapoursynth-mvtools-${version}";
-  version = "20";
+  version = "21";
 
   src = fetchFromGitHub {
     owner  = "dubhater";
     repo   = "vapoursynth-mvtools";
     rev    = "v${version}";
-    sha256 = "0nbq04wbmz7xqfcfpdvgg0p8xhh2xdcwhhx5gwr4j8bm611v0npz";
+    sha256 = "0vjxpp4jmmjhcp8z81idsbgq6jyx0l4r4i32b8alnp6c9fahjh6p";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/development/libraries/wolfssl/default.nix b/pkgs/development/libraries/wolfssl/default.nix
index 8f3808bffcbc..e7feaabc739a 100644
--- a/pkgs/development/libraries/wolfssl/default.nix
+++ b/pkgs/development/libraries/wolfssl/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   name = "wolfssl-${version}";
-  version = "3.15.7";
+  version = "4.0.0";
 
   src = fetchFromGitHub {
     owner = "wolfSSL";
     repo = "wolfssl";
     rev = "v${version}-stable";
-    sha256 = "128z1f7nry278kdjzq950cr81bml8p17fgdchmpvy0awhh7r20y9";
+    sha256 = "155lmgz81ky0x04c8m2yzlsm58i9jk6hiw1ajc3wizvbpczbca57";
   };
 
   configureFlags = [ "--enable-all" ];
diff --git a/pkgs/development/python-modules/aioesphomeapi/default.nix b/pkgs/development/python-modules/aioesphomeapi/default.nix
index 39545e61ecdc..80c85a2614ca 100644
--- a/pkgs/development/python-modules/aioesphomeapi/default.nix
+++ b/pkgs/development/python-modules/aioesphomeapi/default.nix
@@ -1,4 +1,4 @@
-{ buildPythonPackage, fetchPypi, attrs, protobuf, zeroconf }:
+{ lib, buildPythonPackage, fetchPypi, attrs, protobuf, zeroconf }:
 
 buildPythonPackage rec {
   pname = "aioesphomeapi";
@@ -11,5 +11,13 @@ buildPythonPackage rec {
 
   propagatedBuildInputs = [ attrs protobuf zeroconf ];
 
-  meta = {};
+  # no tests implemented
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Python Client for ESPHome native API";
+    homepage = https://github.com/esphome/aioesphomeapi;
+    license = licenses.mit;
+    maintainers = with maintainers; [ dotlambda ];
+  };
 }
diff --git a/pkgs/development/python-modules/asynctest/default.nix b/pkgs/development/python-modules/asynctest/default.nix
index 187e0924ccac..020ba9df8b00 100644
--- a/pkgs/development/python-modules/asynctest/default.nix
+++ b/pkgs/development/python-modules/asynctest/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "asynctest";
-  version = "0.12.2";
+  version = "0.12.3";
 
   disabled = pythonOlder "3.4";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "77520850ae21620ec31738f4a7b467acaa44de6d3752d8ac7a9f4dcf55d77853";
+    sha256 = "bbeb45bb41344d2cbb814b4c89c04f2c568742352736cabf7af6fcbed06f66cc";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/cmd2/default.nix b/pkgs/development/python-modules/cmd2/default.nix
index ff9e70b41463..5751d62b9fce 100644
--- a/pkgs/development/python-modules/cmd2/default.nix
+++ b/pkgs/development/python-modules/cmd2/default.nix
@@ -6,11 +6,11 @@
 }:
 buildPythonPackage rec {
   pname = "cmd2";
-  version = "0.9.10";
+  version = "0.9.11";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "00d68374abe02363a417160e5836022be5c8f8bdac1da5dd101fadb6f8e96619";
+    sha256 = "0hjj587dwnl5767wbl875vglvdr1f5z5jzb5wliip78lbyq3b8rl";
   };
 
   LC_ALL="en_US.UTF-8";
diff --git a/pkgs/development/python-modules/importlib-metadata/default.nix b/pkgs/development/python-modules/importlib-metadata/default.nix
index 55c835e75cce..046cfbad26b6 100644
--- a/pkgs/development/python-modules/importlib-metadata/default.nix
+++ b/pkgs/development/python-modules/importlib-metadata/default.nix
@@ -1,29 +1,36 @@
 { lib
 , buildPythonPackage
 , fetchPypi
+, setuptools_scm
+, zipp
 , pathlib2
 , contextlib2
+, configparser
 , isPy3k
 , importlib-resources
+, packaging
 }:
 
 buildPythonPackage rec {
   pname = "importlib-metadata";
-  version = "0.6";
+  version = "0.8";
 
   src = fetchPypi {
     pname = "importlib_metadata";
     inherit version;
-    sha256 = "36b02c84f9001adf65209fefdf951be8e9014a95eab9938c0779ad5670359b1c";
+    sha256 = "b50191ead8c70adfa12495fba19ce6d75f2e0275c14c5a7beb653d6799b512bd";
   };
 
-  propagatedBuildInputs = [] ++ lib.optionals (!isPy3k) [ pathlib2 contextlib2 ];
+  nativeBuildInputs = [ setuptools_scm ];
 
-  checkInputs = [ importlib-resources ];
+  propagatedBuildInputs = [ zipp ]
+    ++ lib.optionals (!isPy3k) [ pathlib2 contextlib2 configparser ];
+
+  checkInputs = [ importlib-resources packaging ];
 
   meta = with lib; {
     description = "Read metadata from Python packages";
     homepage = https://importlib-metadata.readthedocs.io/;
     license = licenses.asl20;
   };
-}
\ No newline at end of file
+}
diff --git a/pkgs/development/python-modules/ldap/default.nix b/pkgs/development/python-modules/ldap/default.nix
index 09d399d25b37..8f5cd7e7e881 100644
--- a/pkgs/development/python-modules/ldap/default.nix
+++ b/pkgs/development/python-modules/ldap/default.nix
@@ -4,11 +4,11 @@
 
 buildPythonPackage rec {
   pname = "python-ldap";
-  version = "3.1.0";
+  version = "3.2.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "41975e79406502c092732c57ef0c2c2eb318d91e8e765f81f5d4ab6c1db727c5";
+    sha256 = "13nvrhp85yr0jyxixcjj012iw8l9wynxxlykm9j3alss6waln73x";
   };
 
   propagatedBuildInputs = [ pyasn1 pyasn1-modules ];
@@ -28,4 +28,10 @@ buildPythonPackage rec {
   '';
 
   doCheck = !stdenv.isDarwin;
+
+  meta = with stdenv.lib; {
+    description = "Python modules for implementing LDAP clients";
+    homepage = https://www.python-ldap.org/;
+    license = licenses.psfl;
+  };
 }
diff --git a/pkgs/development/python-modules/ldappool/default.nix b/pkgs/development/python-modules/ldappool/default.nix
index 460d743b1eda..3ad0ae3b7232 100644
--- a/pkgs/development/python-modules/ldappool/default.nix
+++ b/pkgs/development/python-modules/ldappool/default.nix
@@ -1,5 +1,5 @@
 { lib, buildPythonPackage, fetchPypi
-, pbr, ldap, fixtures, testresources, testtools }:
+, pbr, ldap, prettytable, fixtures, testresources, testtools }:
 
 buildPythonPackage rec {
   name = "ldappool-${version}";
@@ -11,9 +11,14 @@ buildPythonPackage rec {
     sha256 = "d9c9ec29be3f3e64164be84fe080a3087108836f307a12ec62f7d18988293df3";
   };
 
+  postPatch = ''
+    # Tests run without most of the dependencies
+    echo "" > test-requirements.txt
+  '';
+
   nativeBuildInputs = [ pbr ];
 
-  propagatedBuildInputs = [ ldap ];
+  propagatedBuildInputs = [ ldap prettytable ];
 
   checkInputs = [ fixtures testresources testtools ];
 
diff --git a/pkgs/development/python-modules/libarcus/default.nix b/pkgs/development/python-modules/libarcus/default.nix
index 004fedf79b4d..671949669492 100644
--- a/pkgs/development/python-modules/libarcus/default.nix
+++ b/pkgs/development/python-modules/libarcus/default.nix
@@ -3,14 +3,14 @@
 
 buildPythonPackage rec {
   pname = "libarcus";
-  version = "3.6.0";
+  version = "4.0.0";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "Ultimaker";
     repo = "libArcus";
     rev = version;
-    sha256 = "1zbp6axai47k3p2q497wiajls1h17wss143zynbwbwrqinsfiw43";
+    sha256 = "14c62bsc2cynhaajpdidcqpq2vqwshrdkqyzwvpsjjbfmlx3b1ay";
   };
 
   disabled = pythonOlder "3.4.0";
diff --git a/pkgs/development/python-modules/libsavitar/default.nix b/pkgs/development/python-modules/libsavitar/default.nix
index 52760420b83c..dc783ba8f33a 100644
--- a/pkgs/development/python-modules/libsavitar/default.nix
+++ b/pkgs/development/python-modules/libsavitar/default.nix
@@ -2,14 +2,14 @@
 
 buildPythonPackage rec {
   pname = "libsavitar";
-  version = "3.6.0";
+  version = "4.0.0";
   format = "other";
 
   src = fetchFromGitHub {
     owner = "Ultimaker";
     repo = "libSavitar";
     rev = version;
-    sha256 = "1bz8ga0n9aw65hqzajbr93dcv5g555iaihbhs1jq2k47cx66klzv";
+    sha256 = "1q70l37qafzfkpw8vlagmpd2w576b6jc1xmxp3wf3qfq45j8kya0";
   };
 
   postPatch = ''
diff --git a/pkgs/development/python-modules/netdisco/default.nix b/pkgs/development/python-modules/netdisco/default.nix
index d3fac8df084a..1c9af258995d 100644
--- a/pkgs/development/python-modules/netdisco/default.nix
+++ b/pkgs/development/python-modules/netdisco/default.nix
@@ -2,13 +2,13 @@
 
 buildPythonPackage rec {
   pname = "netdisco";
-  version = "2.5.0";
+  version = "2.6.0";
 
   disabled = !isPy3k;
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "2ecb9830ceed5cf8f2ccc5a9bbe02ca5f6851435f5315a5402f0123311f13b37";
+    sha256 = "2b3aca14a1807712a053f11fd80dc251dd821ee4899aefece515287981817762";
   };
 
   propagatedBuildInputs = [ requests zeroconf netifaces ];
diff --git a/pkgs/development/python-modules/progress/default.nix b/pkgs/development/python-modules/progress/default.nix
index 4b8269136ad2..d6c8d9125d16 100644
--- a/pkgs/development/python-modules/progress/default.nix
+++ b/pkgs/development/python-modules/progress/default.nix
@@ -5,17 +5,14 @@
 }:
 
 buildPythonPackage rec {
-  version = "1.4";
+  version = "1.5";
   pname = "progress";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "5e2f9da88ed8236a76fffbee3ceefd259589cf42dfbc2cec2877102189fae58a";
+    sha256 = "0wj3wvdgfmqj44n32wag3mzpp5fjqkkd321x67v1prxvs78yvv39";
   };
 
-  # tests not packaged with pypi release
-  doCheck = false;
-
   checkPhase = ''
     ${python.interpreter} test_progress.py
   '';
diff --git a/pkgs/development/python-modules/progressbar/default.nix b/pkgs/development/python-modules/progressbar/default.nix
index a8e8bf07ad56..a68ecf59ad0e 100644
--- a/pkgs/development/python-modules/progressbar/default.nix
+++ b/pkgs/development/python-modules/progressbar/default.nix
@@ -4,9 +4,6 @@ buildPythonPackage rec {
   pname = "progressbar";
   version = "2.5";
 
-  # https://github.com/niltonvolpato/python-progressbar/issues/54
-  disabled = isPy3k;
-
   src = fetchPypi {
     inherit pname version;
     sha256 = "5d81cb529da2e223b53962afd6c8ca0f05c6670e40309a7219eacc36af9b6c63";
diff --git a/pkgs/development/python-modules/sasmodels/default.nix b/pkgs/development/python-modules/sasmodels/default.nix
index 88cdbf8a8fd8..116ada8e9544 100644
--- a/pkgs/development/python-modules/sasmodels/default.nix
+++ b/pkgs/development/python-modules/sasmodels/default.nix
@@ -4,13 +4,13 @@
 
 buildPythonPackage rec {
   pname = "sasmodels";
-  version = "0.98";
+  version = "0.99";
 
   src = fetchFromGitHub {
     owner = "SasView";
     repo = "sasmodels";
     rev = "v${version}";
-    sha256 = "02y4lpjwaa73pr46ylk0pw0kbill4nfzqgnfv16v5m0z9smd76ir";
+    sha256 = "1lcvn42h29i0mg4i75xn0dbk711q9ycyhm3h95skqy8i61qmjrx6";
   };
 
   buildInputs = [ opencl-headers ];
diff --git a/pkgs/development/python-modules/shouldbe/default.nix b/pkgs/development/python-modules/shouldbe/default.nix
index df868bb4d5e5..ccff9ff4b9f8 100644
--- a/pkgs/development/python-modules/shouldbe/default.nix
+++ b/pkgs/development/python-modules/shouldbe/default.nix
@@ -6,19 +6,17 @@
 }:
 
 buildPythonPackage rec {
-  version = "0.1.0";
+  version = "0.1.2";
   pname = "shouldbe";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "07pchxpv1xvjbck0xy44k3a1jrvklg0wbyccn14w0i7d135d4174";
+    sha256 = "16zbvjxf71dl4yfbgcr6idyim3mdrfvix1dv8b95p0s9z07372pj";
   };
 
-  buildInputs = [ nose ];
+  checkInputs = [ nose ];
   propagatedBuildInputs = [ forbiddenfruit ];
 
-  doCheck = false;  # Segmentation fault on py 3.5
-
   meta = with stdenv.lib; {
     description = "Python Assertion Helpers inspired by Shouldly";
     homepage =  https://pypi.python.org/pypi/shouldbe/;
diff --git a/pkgs/development/python-modules/uranium/default.nix b/pkgs/development/python-modules/uranium/default.nix
index 351279476c8c..b4081870fbe6 100644
--- a/pkgs/development/python-modules/uranium/default.nix
+++ b/pkgs/development/python-modules/uranium/default.nix
@@ -2,7 +2,7 @@
 , pyqt5, numpy, scipy, shapely, libarcus, doxygen, gettext, pythonOlder }:
 
 buildPythonPackage rec {
-  version = "3.6.0";
+  version = "4.0.0";
   pname = "uranium";
   format = "other";
 
@@ -10,7 +10,7 @@ buildPythonPackage rec {
     owner = "Ultimaker";
     repo = "Uranium";
     rev = version;
-    sha256 = "02hid13h8anb9bgv2hhrcdg10bxdxa9hj9pbdv3gw3lpn9r2va98";
+    sha256 = "1dzn064np76q0xpypcwsa7k7arzihg79xw1pgcvdizk9kzc6rw3y";
   };
 
   disabled = pythonOlder "3.5.0";
diff --git a/pkgs/development/python-modules/zipp/default.nix b/pkgs/development/python-modules/zipp/default.nix
new file mode 100644
index 000000000000..2c060c9881c0
--- /dev/null
+++ b/pkgs/development/python-modules/zipp/default.nix
@@ -0,0 +1,31 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, setuptools_scm
+, pytest
+, pytest-flake8
+}:
+
+buildPythonPackage rec {
+  pname = "zipp";
+  version = "0.3.3";
+
+  src = fetchPypi {
+    inherit pname version;
+    sha256 = "55ca87266c38af6658b84db8cfb7343cdb0bf275f93c7afaea0d8e7a209c7478";
+  };
+
+  nativeBuildInputs = [ setuptools_scm ];
+
+  checkInputs = [ pytest pytest-flake8 ];
+
+  checkPhase = ''
+    pytest
+  '';
+
+  meta = with lib; {
+    description = "Pathlib-compatible object wrapper for zip files";
+    homepage = https://github.com/jaraco/zipp;
+    license = licenses.mit;
+  };
+}
diff --git a/pkgs/development/tools/godot/default.nix b/pkgs/development/tools/godot/default.nix
index dd6a413cebf2..fe684bbf7b6f 100644
--- a/pkgs/development/tools/godot/default.nix
+++ b/pkgs/development/tools/godot/default.nix
@@ -10,13 +10,13 @@ let
   };
 in stdenv.mkDerivation rec {
   name    = "godot-${version}";
-  version = "3.0.6";
+  version = "3.1";
 
   src = fetchFromGitHub {
     owner  = "godotengine";
     repo   = "godot";
     rev    = "${version}-stable";
-    sha256 = "0g64h0x8dlv6aa9ggfcidk2mknkfl5li7z1phcav8aqp9srj8avf";
+    sha256 = "1z37znqzbn0x8s04pb9dxzni9jzl8m59nfrr14vypww42f9l5i7i";
   };
 
   nativeBuildInputs = [ pkgconfig ];
@@ -51,10 +51,10 @@ in stdenv.mkDerivation rec {
     cp misc/dist/linux/godot.6 "$man/share/man/man6/"
 
     mkdir -p "$out"/share/{applications,icons/hicolor/scalable/apps}
-    cp misc/dist/linux/godot.desktop "$out/share/applications/"
+    cp misc/dist/linux/org.godotengine.Godot.desktop "$out/share/applications/"
     cp icon.svg "$out/share/icons/hicolor/scalable/apps/godot.svg"
     cp icon.png "$out/share/icons/godot.png"
-    substituteInPlace "$out/share/applications/godot.desktop" \
+    substituteInPlace "$out/share/applications/org.godotengine.Godot.desktop" \
       --replace "Exec=godot" "Exec=$out/bin/godot"
   '';
 
diff --git a/pkgs/development/tools/godot/dont_clobber_environment.patch b/pkgs/development/tools/godot/dont_clobber_environment.patch
index c57c85588a01..96a8464b5668 100644
--- a/pkgs/development/tools/godot/dont_clobber_environment.patch
+++ b/pkgs/development/tools/godot/dont_clobber_environment.patch
@@ -1,7 +1,7 @@
 +++ build/SConstruct
-@@ -69,10 +69,10 @@
-         custom_tools = ['mingw']
- 
+@@ -63,10 +63,10 @@ elif platform_arg == 'javascript':
+     custom_tools = ['cc', 'c++', 'ar', 'link', 'textfile', 'zip']
+
  env_base = Environment(tools=custom_tools)
 -if 'TERM' in os.environ:
 -    env_base['ENV']['TERM'] = os.environ['TERM']
@@ -11,6 +11,7 @@
 +    if (k in os.environ):
 +        env_base["ENV"][k] = os.environ[k]
 +
- env_base.global_defaults = global_defaults
  env_base.android_maven_repos = []
  env_base.android_flat_dirs = []
+ env_base.android_dependencies = []
+
diff --git a/pkgs/development/tools/godot/pkg_config_additions.patch b/pkgs/development/tools/godot/pkg_config_additions.patch
index 286372f060ae..409baaa6f266 100644
--- a/pkgs/development/tools/godot/pkg_config_additions.patch
+++ b/pkgs/development/tools/godot/pkg_config_additions.patch
@@ -1,13 +1,22 @@
 +++ b/platform/x11/detect.py
-@@ -142,6 +142,11 @@
-     env.ParseConfig('pkg-config xcursor --cflags --libs')
-     env.ParseConfig('pkg-config xinerama --cflags --libs')
-     env.ParseConfig('pkg-config xrandr --cflags --libs')
-+    env.ParseConfig('pkg-config xrender --cflags --libs')
+@@ -175,6 +175,11 @@ def configure(env):
+     env.ParseConfig('pkg-config xrender --cflags --libs')
+     env.ParseConfig('pkg-config xi --cflags --libs')
+ 
 +    env.ParseConfig('pkg-config xext --cflags --libs')
 +    env.ParseConfig('pkg-config xfixes --cflags --libs')
 +    env.ParseConfig('pkg-config glu --cflags --libs')
 +    env.ParseConfig('pkg-config zlib --cflags --libs')
- 
++
      if (env['touch']):
-         x11_error = os.system("pkg-config xi --modversion > /dev/null ")
+         env.Append(CPPFLAGS=['-DTOUCH_ENABLED'])
+ 
+@@ -264,7 +269,7 @@ def configure(env):
+         print("Enabling ALSA")
+         env.Append(CPPFLAGS=["-DALSA_ENABLED", "-DALSAMIDI_ENABLED"])
+ 	# Don't parse --cflags, we don't need to add /usr/include/alsa to include path
+-        env.ParseConfig('pkg-config alsa --libs')
++        env.ParseConfig('pkg-config alsa --cflags --libs')
+     else:
+         print("ALSA libraries not found, disabling driver")
+ 
diff --git a/pkgs/development/tools/scalafmt/default.nix b/pkgs/development/tools/scalafmt/default.nix
index 40ed7f44d8c3..db3a2af8f5b5 100644
--- a/pkgs/development/tools/scalafmt/default.nix
+++ b/pkgs/development/tools/scalafmt/default.nix
@@ -2,18 +2,18 @@
 
 let
   baseName = "scalafmt";
-  version = "1.5.1";
+  version = "2.0.0-RC5";
   deps = stdenv.mkDerivation {
     name = "${baseName}-deps-${version}";
     buildCommand = ''
       export COURSIER_CACHE=$(pwd)
-      ${coursier}/bin/coursier fetch com.geirsson:scalafmt-cli_2.12:${version} > deps
+      ${coursier}/bin/coursier fetch org.scalameta:scalafmt-cli_2.12:${version} > deps
       mkdir -p $out/share/java
       cp $(< deps) $out/share/java/
     '';
     outputHashMode = "recursive";
     outputHashAlgo = "sha256";
-    outputHash     = "15xfys9wdlx3rrqb2ab6qcfngkf6sa8v8q8shh10kk8jrc30g6dk";
+    outputHash     = "0y2nja4dj3l7f7m9dxr8xwda8vv27dwj090gfsa78a20vq1d3xxw";
   };
 in
 stdenv.mkDerivation rec {
@@ -36,7 +36,7 @@ stdenv.mkDerivation rec {
 
   meta = with stdenv.lib; {
     description = "Opinionated code formatter for Scala";
-    homepage = http://scalafmt.org;
+    homepage = http://scalameta.org/scalafmt;
     license = licenses.asl20;
     maintainers = [ maintainers.markus1189 ];
   };
diff --git a/pkgs/development/tools/sourcetrail/default.nix b/pkgs/development/tools/sourcetrail/default.nix
index 2182f8697aab..42042b87198d 100644
--- a/pkgs/development/tools/sourcetrail/default.nix
+++ b/pkgs/development/tools/sourcetrail/default.nix
@@ -3,12 +3,12 @@
 
 stdenv.mkDerivation rec {
   name = "sourcetrail-${version}";
-  version = "2018.3.55";
+  version = "2019.1.11";
 
   src = fetchurl {
     name = "sourtrail.tar.gz";
     url = "https://www.sourcetrail.com/downloads/${version}/linux/64bit";
-    sha256 = "6f5fbbecc221e7165ecbf1c4d208e302dade4feea9d43eb3265521efc0a376e2";
+    sha256 = "09f3qdgdqg6dlai43050qh4iv1d4j43isk81q68swalpnvjn72w0";
   };
 
   nativeBuildInputs = [ autoPatchelfHook ];
diff --git a/pkgs/games/eduke32/default.nix b/pkgs/games/eduke32/default.nix
index c51f014b179d..3407659d977b 100644
--- a/pkgs/games/eduke32/default.nix
+++ b/pkgs/games/eduke32/default.nix
@@ -1,76 +1,78 @@
-{ stdenv, fetchurl, flac, gtk2, libvorbis, libvpx, makeDesktopItem, libGLU_combined, nasm
-, pkgconfig, SDL2, SDL2_mixer, runtimeShell }:
+{ stdenv, fetchurl, makeWrapper, pkgconfig, nasm, makeDesktopItem
+, flac, gtk2, libvorbis, libvpx, libGLU_combined
+, SDL2, SDL2_mixer }:
 
 let
-  year = "2015";
-  date = "20150420";
-  rev = "5160";
-in stdenv.mkDerivation rec {
+  version = "20190330";
+  rev = "7470";
+
+  desktopItem = makeDesktopItem {
+    name = "eduke32";
+    exec = "@out@/bin/${wrapper}";
+    comment = "Duke Nukem 3D port";
+    desktopName = "Enhanced Duke Nukem 3D";
+    genericName = "Duke Nukem 3D port";
+    categories = "Application;Game;";
+  };
+
+  wrapper = "eduke32-wrapper";
+
+in stdenv.mkDerivation {
   name = "eduke32-${version}";
-  version = "${date}-${rev}";
 
   src = fetchurl {
-    url = "http://dukeworld.duke4.net/eduke32/synthesis/old/${year}/${version}/eduke32_src_${version}.tar.xz";
-    sha256 = "1nlq5jbglg00c1z1vsyl627fh0mqfxvk5qyxav5vzla2b4svik2v";
+    url = "http://dukeworld.duke4.net/eduke32/synthesis/latest/eduke32_src_${version}-${rev}.tar.xz";
+    sha256 = "09a7l23i6sygicc82w1in9hjw0jvivlf7q0vw8kcx9j98lm23mkn";
   };
 
-  buildInputs = [ flac gtk2 libvorbis libvpx libGLU_combined SDL2 SDL2_mixer ]
+  buildInputs = [ flac gtk2 libvorbis libvpx libGLU_combined SDL2 SDL2_mixer ];
+
+  nativeBuildInputs = [ makeWrapper pkgconfig ]
     ++ stdenv.lib.optional (stdenv.hostPlatform.system == "i686-linux") nasm;
-  nativeBuildInputs = [ pkgconfig ];
 
   postPatch = ''
-    substituteInPlace build/src/glbuild.c \
-      --replace libGL.so	${libGLU_combined}/lib/libGL.so \
-      --replace libGLU.so	${libGLU_combined}/lib/libGLU.so
+    substituteInPlace source/build/src/glbuild.cpp \
+      --replace libGLU.so ${libGLU_combined}/lib/libGLU.so
+
+    for f in glad.c glad_wgl.c ; do
+      substituteInPlace source/glad/src/$f \
+        --replace libGL.so ${libGLU_combined}/lib/libGL.so
+    done
   '';
 
-  NIX_CFLAGS_COMPILE = "-I${SDL2.dev}/include/SDL2 -I${SDL2_mixer}/include/SDL2";
-  NIX_LDFLAGS = "-L${SDL2}/lib";
+  NIX_CFLAGS_COMPILE = [
+    "-I${SDL2.dev}/include/SDL2"
+    "-I${SDL2_mixer}/include/SDL2"
+  ];
 
   makeFlags = [
-    "LINKED_GTK=1"
     "SDLCONFIG=${SDL2}/bin/sdl2-config"
-    "VC_REV=${rev}"
   ];
 
-  desktopItem = makeDesktopItem {
-    name = "eduke32";
-    exec = "eduke32-wrapper";
-    comment = "Duke Nukem 3D port";
-    desktopName = "Enhanced Duke Nukem 3D";
-    genericName = "Duke Nukem 3D port";
-    categories = "Application;Game;";
-  };
+  enableParallelBuilding = true;
 
   installPhase = ''
-    # Make wrapper script
-    cat > eduke32-wrapper <<EOF
-    #!${runtimeShell}
-
-    if [ "$EDUKE32_DATA_DIR" = "" ]; then
-        EDUKE32_DATA_DIR=/var/lib/games/eduke32
-    fi
-    if [ "$EDUKE32_GRP_FILE" = "" ]; then
-        EDUKE32_GRP_FILE=\$EDUKE32_DATA_DIR/DUKE3D.GRP
-    fi
-
-    cd \$EDUKE32_DATA_DIR
-    exec $out/bin/eduke32 -g \$EDUKE32_GRP_FILE
-    EOF
-
-    # Install binaries
-    mkdir -p $out/bin
-    install -Dm755 eduke32{,-wrapper} mapster32 $out/bin
-
-    # Install desktop item
+    runHook preInstall
+
+    install -Dm755 -t $out/bin eduke32 mapster32
+
+    makeWrapper $out/bin/eduke32 $out/bin/${wrapper} \
+      --set-default EDUKE32_DATA_DIR /var/lib/games/eduke32 \
+      --add-flags '-g "$EDUKE32_DATA_DIR/DUKE3D.GRP"'
+
     cp -rv ${desktopItem}/share $out
+    substituteInPlace $out/share/applications/eduke32.desktop \
+      --subst-var out
+
+    runHook postInstall
   '';
 
   meta = with stdenv.lib; {
     description = "Enhanched port of Duke Nukem 3D for various platforms";
-    license = licenses.gpl2Plus;
     homepage = http://eduke32.com;
+    license = licenses.gpl2Plus;
     maintainers = with maintainers; [ sander ];
-    platforms = with platforms; linux;
+    # Darwin is untested (supported by upstream)
+    platforms = platforms.all;
   };
 }
diff --git a/pkgs/games/leela-zero/default.nix b/pkgs/games/leela-zero/default.nix
index c1238b7b3bbb..efe7a6a76e98 100644
--- a/pkgs/games/leela-zero/default.nix
+++ b/pkgs/games/leela-zero/default.nix
@@ -3,13 +3,13 @@
 
 stdenv.mkDerivation rec {
   name = "leela-zero-${version}";
-  version = "0.16";
+  version = "0.17";
 
   src = fetchFromGitHub {
     owner = "gcp";
     repo = "leela-zero";
     rev = "v${version}";
-    sha256 = "1px7wqvlv414gklzgrmppp8wzc2mkskinm1p75j4snbqr8qpbn5s";
+    sha256 = "1k04ld1ysabxb8ivci3ji5by9vb3yvnflkf2fscs1x0bp7d6j101";
     fetchSubmodules = true;
   };
 
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     description = "Go engine modeled after AlphaGo Zero";
     homepage    = https://github.com/gcp/leela-zero;
     license     = licenses.gpl3;
-    maintainers = [ maintainers.averelld ];
+    maintainers = [ maintainers.averelld maintainers.omnipotententity ];
     platforms   = platforms.linux;
   };
 }
diff --git a/pkgs/games/torcs/default.nix b/pkgs/games/torcs/default.nix
index f1718201998c..7497084f8d02 100644
--- a/pkgs/games/torcs/default.nix
+++ b/pkgs/games/torcs/default.nix
@@ -12,15 +12,15 @@ stdenv.mkDerivation rec {
 
   patches = [
     (fetchpatch {
-      url = "https://anonscm.debian.org/git/pkg-games/torcs.git/plain/debian/patches/gcc6-isnan.patch";
+      url = "https://salsa.debian.org/games-team/torcs/raw/master/debian/patches/gcc6-isnan.patch";
       sha256 = "16scmq30vwb8429ah9d4ws0v1w6ai59lvn7hcgnvfzyap42ry876";
     })
     (fetchpatch {
-      url = "https://anonscm.debian.org/git/pkg-games/torcs.git/plain/debian/patches/format-argument.patch";
+      url = "https://salsa.debian.org/games-team/torcs/raw/master/debian/patches/format-argument.patch";
       sha256 = "04advcx88yh23ww767iysydzhp370x7cqp2wf9hk2y1qvw7mxsja";
     })
     (fetchpatch {
-      url = "https://anonscm.debian.org/git/pkg-games/torcs.git/plain/debian/patches/glibc-default-source.patch";
+      url = "https://salsa.debian.org/games-team/torcs/raw/master/debian/patches/glibc-default-source.patch";
       sha256 = "0k4hgpddnhv68mdc9ics7ah8q54j60g394d7zmcmzg6l3bjd9pyp";
     })
   ];
diff --git a/pkgs/misc/emulators/cdemu/analyzer.nix b/pkgs/misc/emulators/cdemu/analyzer.nix
index 87893a931363..a57fda56ddd4 100644
--- a/pkgs/misc/emulators/cdemu/analyzer.nix
+++ b/pkgs/misc/emulators/cdemu/analyzer.nix
@@ -1,15 +1,20 @@
-{ callPackage, gtk3, glib, libxml2, gnuplot, makeWrapper, gnome3, gdk_pixbuf, librsvg, intltool }:
+{ callPackage, makeWrapper, gobject-introspection, cmake
+, python3Packages, gtk3, glib, libxml2, gnuplot, gnome3, gdk_pixbuf, librsvg, intltool, libmirage }:
 let pkg = import ./base.nix {
-  version = "3.1.0";
+  version = "3.2.2";
   pkgName = "image-analyzer";
-  pkgSha256 = "1pr23kxx83xp83h27fkdv86f3bxclkx056f9jx8jhnpn113xp7r2";
+  pkgSha256 = "0by3nd5c413cvk3jmv3md6q0axbiidy061g9dhf37qzwgcakcx8j";
 };
 in callPackage pkg {
-  buildInputs = [ glib gtk3 libxml2 gnuplot (callPackage ./libmirage.nix {}) makeWrapper
-                  gnome3.adwaita-icon-theme gdk_pixbuf librsvg intltool ];
+  buildInputs = [ glib gtk3 libxml2 gnuplot libmirage makeWrapper
+                  gnome3.adwaita-icon-theme gdk_pixbuf librsvg intltool
+                  python3Packages.python python3Packages.pygobject3 python3Packages.matplotlib ];
   drvParams = {
+    nativeBuildInputs = [ gobject-introspection cmake ];
     postFixup = ''
       wrapProgram $out/bin/image-analyzer \
+        --set PYTHONPATH "$PYTHONPATH" \
+        --set GI_TYPELIB_PATH "$GI_TYPELIB_PATH" \
         --prefix XDG_DATA_DIRS : "$out/share:$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH"
     '';
   };
diff --git a/pkgs/misc/emulators/cdemu/client.nix b/pkgs/misc/emulators/cdemu/client.nix
index ec4341a29459..dbf471d35d1d 100644
--- a/pkgs/misc/emulators/cdemu/client.nix
+++ b/pkgs/misc/emulators/cdemu/client.nix
@@ -1,11 +1,11 @@
-{ callPackage, pythonPackages, intltool, makeWrapper }:
+{ callPackage, python3Packages, intltool, makeWrapper }:
 let pkg = import ./base.nix {
-  version = "3.1.0";
+  version = "3.2.1";
   pkgName = "cdemu-client";
-  pkgSha256 = "0s6q923g5vkahw5fki6c7a25f68y78zfx4pfsy0xww0z1f5hfsik";
+  pkgSha256 = "1d8m24qvv62xcwafw5zs4yf39vs64kxl4idqcngd8yyjhrb2ykg5";
 };
 in callPackage pkg {
-  buildInputs = [ pythonPackages.python pythonPackages.dbus-python pythonPackages.pygobject3
+  buildInputs = [ python3Packages.python python3Packages.dbus-python python3Packages.pygobject3
                   intltool makeWrapper ];
   drvParams = {
     postFixup = ''
diff --git a/pkgs/misc/emulators/cdemu/daemon.nix b/pkgs/misc/emulators/cdemu/daemon.nix
index 587224e71d78..a80327ce91c0 100644
--- a/pkgs/misc/emulators/cdemu/daemon.nix
+++ b/pkgs/misc/emulators/cdemu/daemon.nix
@@ -1,9 +1,9 @@
-{ callPackage, glib, libao, intltool }:
+{ callPackage, glib, libao, intltool, libmirage }:
 let pkg = import ./base.nix {
-  version = "3.1.0";
+  version = "3.2.2";
   pkgName = "cdemu-daemon";
-  pkgSha256 = "0kxwhwjvcr40sjlrvln9gasjwkkfc3wxpcz0rxmffp92w8phz3s9";
+  pkgSha256 = "0himyrhhfjsr4ff5aci7240bpm9x34h20pid412ci8fm16nk929b";
 };
 in callPackage pkg {
-  buildInputs = [ glib libao (callPackage ./libmirage.nix {}) intltool ];
+  buildInputs = [ glib libao libmirage intltool ];
 }
diff --git a/pkgs/misc/emulators/cdemu/gui.nix b/pkgs/misc/emulators/cdemu/gui.nix
index 14560919b71a..331ad0ded248 100644
--- a/pkgs/misc/emulators/cdemu/gui.nix
+++ b/pkgs/misc/emulators/cdemu/gui.nix
@@ -1,15 +1,17 @@
-{ callPackage, pythonPackages, gtk3, glib, libnotify, intltool, makeWrapper, gnome3, gdk_pixbuf, librsvg }:
+{ callPackage, makeWrapper, gobject-introspection, cmake
+, python3Packages, gtk3, glib, libnotify, intltool, gnome3, gdk_pixbuf, librsvg }:
 let
   pkg = import ./base.nix {
-    version = "3.1.0";
+    version = "3.2.1";
     pkgName = "gcdemu";
-    pkgSha256 = "0rmnw302fk9vli22v54qx19lqxy23syxi154klxz2vma009q0p02";
+    pkgSha256 = "0lmyvhbf57wcm8k2a33j2dhy4gblaiycy33q070gdrxi37xk7w5g";
   };
-  inherit (pythonPackages) python pygobject3;
+  inherit (python3Packages) python pygobject3;
 in callPackage pkg {
   buildInputs = [ python pygobject3 gtk3 glib libnotify intltool makeWrapper
                   gnome3.adwaita-icon-theme gdk_pixbuf librsvg ];
   drvParams = {
+    nativeBuildInputs = [ gobject-introspection cmake ];
     postFixup = ''
       wrapProgram $out/bin/gcdemu \
         --set PYTHONPATH "$PYTHONPATH" \
diff --git a/pkgs/misc/emulators/cdemu/libmirage.nix b/pkgs/misc/emulators/cdemu/libmirage.nix
index 3813ceef6115..0ead78305cd0 100644
--- a/pkgs/misc/emulators/cdemu/libmirage.nix
+++ b/pkgs/misc/emulators/cdemu/libmirage.nix
@@ -1,9 +1,18 @@
-{ callPackage, glib, libsndfile, zlib, bzip2, lzma, libsamplerate, intltool }:
+{ callPackage, gobject-introspection, cmake, pkgconfig
+, glib, libsndfile, zlib, bzip2, lzma, libsamplerate, intltool
+, pcre, utillinux, libselinux, libsepol }:
+
 let pkg = import ./base.nix {
-  version = "3.1.0";
+  version = "3.2.2";
   pkgName = "libmirage";
-  pkgSha256 = "0qvkvnvxqx8hqzcqzh7sqjzgbc1nrd91lzv33lr8c6fgaq8cqzmn";
+  pkgSha256 = "0gwrfia0fyhi0b3p2pfyyvrcfcb0qysfzgpdqsqjqbx4xaqx5wpi";
 };
 in callPackage pkg {
   buildInputs = [ glib libsndfile zlib bzip2 lzma libsamplerate intltool ];
+  drvParams = {
+    PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_GIRDIR = "${placeholder "out"}/share/gir-1.0";
+    PKG_CONFIG_GOBJECT_INTROSPECTION_1_0_TYPELIBDIR = "${placeholder "out"}/lib/girepository-1.0";
+    nativeBuildInputs = [ cmake gobject-introspection pkgconfig ];
+    propagatedBuildInputs = [ pcre utillinux libselinux libsepol ];
+  };
 }
diff --git a/pkgs/misc/emulators/cdemu/vhba.nix b/pkgs/misc/emulators/cdemu/vhba.nix
index 73ef7bc6a180..2ce3f606d733 100644
--- a/pkgs/misc/emulators/cdemu/vhba.nix
+++ b/pkgs/misc/emulators/cdemu/vhba.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "vhba-${version}";
-  version = "20170610";
+  version = "20190302";
 
   src  = fetchurl {
     url = "mirror://sourceforge/cdemu/vhba-module-${version}.tar.bz2";
-    sha256 = "1v6r0bgx0a65vlh36b1l2965xybngbpga6rp54k4z74xk0zwjw3r";
+    sha256 = "0wvxxc064i8czza91gh0dhmh55x2nbs7szzyh4g30w0c98hmc1n5";
   };
 
   makeFlags = [ "KDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build" "INSTALL_MOD_PATH=$(out)" ];
diff --git a/pkgs/misc/scrcpy/default.nix b/pkgs/misc/scrcpy/default.nix
index 87762eb4b258..20ba1295c422 100644
--- a/pkgs/misc/scrcpy/default.nix
+++ b/pkgs/misc/scrcpy/default.nix
@@ -9,33 +9,30 @@
 }:
 
 let
-  version = "1.5";
+  version = "1.8";
   prebuilt_server = fetchurl {
-    url = "https://github.com/Genymobile/scrcpy/releases/download/v${version}-fixversion/scrcpy-server-v${version}.jar";
-    sha256 = "1pi47khfrs9pygs32l9rj8l927z0sdm8bhkrzzkk6ki9c1psnynr";
+    url = "https://github.com/Genymobile/scrcpy/releases/download/v${version}/scrcpy-server-v${version}.jar";
+    sha256 = "1h755k5xpchlm7wq2yk5mlwjnh7y4yhviffixacby0srj3pmb443";
   };
 in
 stdenv.mkDerivation rec {
-  name = "scrcpy-${version}";
+  pname = "scrcpy";
   inherit version;
+
   src = fetchFromGitHub {
     owner = "Genymobile";
-    repo = "scrcpy";
-    rev = "v${version}-fixversion";
-    sha256 = "0magmc44pahw1f4jhzkhjlfc31mk3qq43hzn9513idcl4kh4sb8i";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1cx7y3w699s3i8s53l1mb7lkrnbix457hf17liwh00jzb0i7aga7";
   };
 
   # postPatch:
   #   screen.c: When run without a hardware accelerator, this allows the command to continue working rather than failing unexpectedly.
   #   This can happen when running on non-NixOS because then scrcpy seems to have a hard time using the host OpenGL-supporting hardware.
   #   It would be better to fix the OpenGL problem, but that seems much more intrusive.
-  #
-  #   command.c: When copying over the prebuilt binary to mobile, it also copies the permissions of the nix store, and thus it cannot delete normally.
   postPatch = ''
     substituteInPlace app/src/screen.c \
       --replace "SDL_RENDERER_ACCELERATED" "SDL_RENDERER_ACCELERATED || SDL_RENDERER_SOFTWARE"
-    substituteInPlace app/src/command.c \
-      --replace 'const char *const adb_cmd[] = {"shell", "rm", path};' 'const char *const adb_cmd[] = {"shell", "rm", "-f", path};'
   '';
 
   nativeBuildInputs = [ makeWrapper meson ninja pkgconfig ];
diff --git a/pkgs/misc/vim-plugins/generated.nix b/pkgs/misc/vim-plugins/generated.nix
index 1f20bf2d0ead..d66a79e4df91 100644
--- a/pkgs/misc/vim-plugins/generated.nix
+++ b/pkgs/misc/vim-plugins/generated.nix
@@ -61,12 +61,12 @@ let
 
   ale = buildVimPluginFrom2Nix {
     pname = "ale";
-    version = "2019-03-29";
+    version = "2019-04-04";
     src = fetchFromGitHub {
       owner = "w0rp";
       repo = "ale";
-      rev = "89273b65b8de9d3d428e7b1f5c0c347938f5a863";
-      sha256 = "1qgkipiizvzw0jp3f6qp1qkdyvb64hhkimndp0i3gcgfkikbp64p";
+      rev = "cdf89f8269aec31d0dfddf3a2769027d72d38155";
+      sha256 = "13zj7sahhan1w50jkncina979cyk3kca5ly68571bzccyzm8dazi";
     };
   };
 
@@ -248,12 +248,12 @@ let
 
   command-t = buildVimPluginFrom2Nix {
     pname = "command-t";
-    version = "2018-09-19";
+    version = "2019-03-31";
     src = fetchFromGitHub {
       owner = "wincent";
       repo = "command-t";
-      rev = "7364a410bc4f0d7febc183678cd565066dfd1e73";
-      sha256 = "1a14ddq6jkfklicdgkpbizzlrx2r4isxarbav5q86w86rwkx3jfi";
+      rev = "792d6079d32f1973c142c6fab89d2fdc94019ac8";
+      sha256 = "0bi2bmx0k6fwi1jwajgafbb750ajlzz1jncvvg0cssv6h5syxvpk";
       fetchSubmodules = true;
     };
   };
@@ -403,12 +403,12 @@ let
 
   denite-nvim = buildVimPluginFrom2Nix {
     pname = "denite-nvim";
-    version = "2019-03-29";
+    version = "2019-04-02";
     src = fetchFromGitHub {
       owner = "Shougo";
       repo = "denite.nvim";
-      rev = "8dbf62b3e894ec7749dcedeb10942ac737182089";
-      sha256 = "18ri0jjnzd21icsivrarlxkr48hzplwbaz3840yjqxg83y1alxzh";
+      rev = "280ea09f278d7301910e7b6abefccd75400bec0b";
+      sha256 = "0dcmbmwh29svin6gn4x5carlgy9plax64p4w0f0cx69440zhl4r0";
     };
   };
 
@@ -494,12 +494,12 @@ let
 
   deoplete-nvim = buildVimPluginFrom2Nix {
     pname = "deoplete-nvim";
-    version = "2019-03-29";
+    version = "2019-03-31";
     src = fetchFromGitHub {
       owner = "Shougo";
       repo = "deoplete.nvim";
-      rev = "06e8981d5a24a17dcebfb51d69eb2e94a69924db";
-      sha256 = "1mnskw3a5axannm7mnwzvvsz9n2b3a1cmhkahp649x99r6h6992d";
+      rev = "19f1dc07f382534d16e5e21f2dddf5109d64ae68";
+      sha256 = "1l9zpvh9hwbd32l2g8h0pq3xh5cixbmqdqznwrksx1da12v2w7aa";
     };
   };
 
@@ -527,12 +527,12 @@ let
 
   echodoc-vim = buildVimPluginFrom2Nix {
     pname = "echodoc-vim";
-    version = "2019-03-24";
+    version = "2019-04-04";
     src = fetchFromGitHub {
       owner = "Shougo";
       repo = "echodoc.vim";
-      rev = "0b2e6e1c40691b6ebc4ac3f9efe0e9e73debb1cc";
-      sha256 = "0kfdyvcbqd3vwrhsl5bc2b38hw5cqh5sl3srq97y4v93hi5rf72q";
+      rev = "1dfd4d45eb169bba4a5d5a3a4210e663e4a18dfe";
+      sha256 = "021qx04ka3w3w7wlv0p3lrpwxnlvxn0xkv7qwx6fk6594xfbaxi7";
     };
   };
 
@@ -550,12 +550,12 @@ let
 
   elm-vim = buildVimPluginFrom2Nix {
     pname = "elm-vim";
-    version = "2018-11-13";
+    version = "2019-04-05";
     src = fetchFromGitHub {
       owner = "elmcast";
       repo = "elm-vim";
-      rev = "d22c0ba13afb554257a8c176962e2216cc18edd1";
-      sha256 = "03lmbv4zkjdnyzrna7g9pqdgf3jqhi9g59fzjnay4af59hijs1v3";
+      rev = "165107a9fd2b20c8f050fc4f977b4e41c790b1e7";
+      sha256 = "0gf7b49by0ybx3ndz7sz5dwcfnps4sz6wsr02lyarj8f8116ysy5";
     };
   };
 
@@ -1774,12 +1774,12 @@ let
 
   traces-vim = buildVimPluginFrom2Nix {
     pname = "traces-vim";
-    version = "2019-03-28";
+    version = "2019-04-04";
     src = fetchFromGitHub {
       owner = "markonm";
       repo = "traces.vim";
-      rev = "03c24a851181b206ac48beabeee6c2c08d257327";
-      sha256 = "1bbk1ni18rdhpb5w6xhiwdpyyfhc80cljbxvbkpblykg39l0crhx";
+      rev = "1220a0ca044ce9a1622ec2aa60d0d9ef5e801cb4";
+      sha256 = "0j7yhhgfl1ymqkl5lp9vqm3w9l2jkf863xpffw9f0ddmjmk3b7am";
     };
   };
 
@@ -1862,12 +1862,12 @@ let
 
   vim = buildVimPluginFrom2Nix {
     pname = "vim";
-    version = "2019-03-22";
+    version = "2019-04-02";
     src = fetchFromGitHub {
       owner = "dracula";
       repo = "vim";
-      rev = "25a22bb3338bbe7fec142b9582b2f811f1742f76";
-      sha256 = "0ri5z9z2bi5n519c039brqysyykpfmrmjylkq43qsrxiq18fsia8";
+      rev = "9b856347b905dc616baf02b48d7631bc3084726e";
+      sha256 = "0w9aj42hb8x7601gbgf0ggs7p3sm5wrv23bnvrjgdlf3mapg6dwy";
     };
   };
 
@@ -2324,12 +2324,12 @@ let
 
   vim-devicons = buildVimPluginFrom2Nix {
     pname = "vim-devicons";
-    version = "2019-02-22";
+    version = "2019-04-05";
     src = fetchFromGitHub {
       owner = "ryanoasis";
       repo = "vim-devicons";
-      rev = "83808e891068490f2b2325e39edcde5c585bd4ea";
-      sha256 = "18j3sa36zz5vx6hamdmjl25n7ilvh1q2fqfqs6casbdnqmmds1dy";
+      rev = "3a23ac26fd68a2db158cbe3c2ebbae2c142861ce";
+      sha256 = "1n324w9dxp9h7k1bg1hhad5f7pva05kns6mqd5d3yhsidfsxshlb";
     };
   };
 
@@ -2346,12 +2346,12 @@ let
 
   vim-dirvish = buildVimPluginFrom2Nix {
     pname = "vim-dirvish";
-    version = "2019-03-27";
+    version = "2019-04-01";
     src = fetchFromGitHub {
       owner = "justinmk";
       repo = "vim-dirvish";
-      rev = "6fb15d43078b55f30cce5cb73571e6a8f1634124";
-      sha256 = "198c61vz5j27n07r1dx94cr0fzc9pfnz28zl86b3v02y2ry39q27";
+      rev = "ae60a79106dd32d75d3c5cf4dfe44fd658d634ec";
+      sha256 = "1dpyavqhsn7japg5li2fflhn4rq5y5c5m24772550awzd5nx0bif";
     };
   };
 
@@ -2500,12 +2500,12 @@ let
 
   vim-flake8 = buildVimPluginFrom2Nix {
     pname = "vim-flake8";
-    version = "2019-01-10";
+    version = "2019-04-03";
     src = fetchFromGitHub {
       owner = "nvie";
       repo = "vim-flake8";
-      rev = "c6b43f88e4cbce052843e8cbd9593cc7753208fe";
-      sha256 = "0z4c2n8b9vi19qqdmljyms173dmkiarlf4yxx1ix1wvqmnpcr6zf";
+      rev = "ce9ac790430699d346aa074d7f339f2e738284e3";
+      sha256 = "1dlpmsads32c8v49dqgnz1d06bh0aikgl1xq2whiimm2va9vfjng";
     };
   };
 
@@ -2522,12 +2522,12 @@ let
 
   vim-fugitive = buildVimPluginFrom2Nix {
     pname = "vim-fugitive";
-    version = "2019-03-01";
+    version = "2019-04-04";
     src = fetchFromGitHub {
       owner = "tpope";
       repo = "vim-fugitive";
-      rev = "bd0b87d36ad80e8acd94f22028d15ebb441b1c28";
-      sha256 = "0ira81j7n2gvrpracag8393yxs5ya4wl8g5ygngl65qrk7y0bj0j";
+      rev = "1b3668b89fee230c6025dc47c01c82fc1e282ac0";
+      sha256 = "0b2z44cw71c0awlajcsln4b43kchhwlb90l461vq7ipmwp3wm8r1";
     };
   };
 
@@ -2588,12 +2588,12 @@ let
 
   vim-go = buildVimPluginFrom2Nix {
     pname = "vim-go";
-    version = "2019-03-28";
+    version = "2019-03-31";
     src = fetchFromGitHub {
       owner = "fatih";
       repo = "vim-go";
-      rev = "17d4c087f0ad1dec22df17048f05629b75dee600";
-      sha256 = "0kmqix5asajkadlk8r7aczs0cg8nfqkapscaqqg9kcsf5a4ng47y";
+      rev = "f04098811b8a7aba3dba699ed98f6f6e39b7d7ac";
+      sha256 = "01fsyyqlf1kygy4l3kbb1jcydgaqjmhhzbdf2liv3hx42signcqw";
     };
   };
 
@@ -2610,12 +2610,12 @@ let
 
   vim-grepper = buildVimPluginFrom2Nix {
     pname = "vim-grepper";
-    version = "2019-03-28";
+    version = "2019-04-02";
     src = fetchFromGitHub {
       owner = "mhinz";
       repo = "vim-grepper";
-      rev = "9e3c7eb2013c83e45ced71383b59941fc871e786";
-      sha256 = "0agc6wlphjr0vmd8a7x9ws1clarrmh8iba8drgs5zdifqhg5q7vl";
+      rev = "1b31eeed2fd672300dc0c52ffbb23397c7243215";
+      sha256 = "18i241a6v0mdzyznwr0al00zvnr0rqfz0khpjx730w6vk1whrp52";
     };
   };
 
@@ -3348,12 +3348,12 @@ let
 
   vim-ruby = buildVimPluginFrom2Nix {
     pname = "vim-ruby";
-    version = "2019-03-13";
+    version = "2019-04-04";
     src = fetchFromGitHub {
       owner = "vim-ruby";
       repo = "vim-ruby";
-      rev = "4abc4340abff09698fc5c8fe91dec87e3c3e2255";
-      sha256 = "0nfhan8gwkv30k7wln2a5b4a144jihnl2hmb8jwrlhw11hh5nrlx";
+      rev = "96d5db458f868255393fdc2732d6bef21a45c68f";
+      sha256 = "1nv51c441d44igjcb3hlib1zbd65h98ywkjyp50hbz5rjkx17mvv";
     };
   };
 
@@ -3425,12 +3425,12 @@ let
 
   vim-signify = buildVimPluginFrom2Nix {
     pname = "vim-signify";
-    version = "2019-03-28";
+    version = "2019-04-05";
     src = fetchFromGitHub {
       owner = "mhinz";
       repo = "vim-signify";
-      rev = "7afad33753b6ca6d0ff4d98fbc0ab29b6692a7b7";
-      sha256 = "0xlkrni8dh0s6c77k2j507fis839vdbbcc70gs9rqhgw7aykhjvr";
+      rev = "f34fea0eff09d0fb4ec54aec3c07345e6c4486d9";
+      sha256 = "0486sqmz33qcvizdicssp4lajgh2rv0sskz6rndpd7qnm54mn968";
     };
   };
 
@@ -3447,12 +3447,12 @@ let
 
   vim-slime = buildVimPluginFrom2Nix {
     pname = "vim-slime";
-    version = "2019-02-08";
+    version = "2019-04-02";
     src = fetchFromGitHub {
       owner = "jpalardy";
       repo = "vim-slime";
-      rev = "1ff17cc7e8eeaf660daa5efee9e66ef83e00e686";
-      sha256 = "1mrgpkyarc6igd7anzlwpbis6cwsy759ssxapfxmj1q69hyvmdl6";
+      rev = "9035bef4c91fd730d76b5fdc994f1dcdcef49405";
+      sha256 = "1f65nq1hgvblm074hbqy647vixzhkimr1yhqjlrqg7mjiffrkr43";
     };
   };
 
@@ -3480,12 +3480,12 @@ let
 
   vim-snippets = buildVimPluginFrom2Nix {
     pname = "vim-snippets";
-    version = "2019-03-22";
+    version = "2019-04-03";
     src = fetchFromGitHub {
       owner = "honza";
       repo = "vim-snippets";
-      rev = "cbbf1559166f9c308ae0f4634c11bdf282ddafba";
-      sha256 = "1hyn8fxaa7r55s51q9axm1awd10xmw29bmsfizy92vs3a8dxcqny";
+      rev = "4214407a5eda0d49ad591e41b6eb91f4682fa81f";
+      sha256 = "1jvbjnfwpqc53vp5plwyvqnkabi4h6d67sg4dg3byrfs3d0rpzmx";
     };
   };
 
@@ -3612,12 +3612,12 @@ let
 
   vim-terraform = buildVimPluginFrom2Nix {
     pname = "vim-terraform";
-    version = "2019-03-13";
+    version = "2019-03-31";
     src = fetchFromGitHub {
       owner = "hashivim";
       repo = "vim-terraform";
-      rev = "e7cd4746946205ab03039f2d0d0af3c0d55d4c4d";
-      sha256 = "0fv9w5hadyzp871p739mrjsfj0m4xang3lkz3gsv1cxw3iglkfld";
+      rev = "a44bf0b1a142bb39e84e5d525f7d98b5d3a66057";
+      sha256 = "12wyjfmwz3lsd45vv4ava361ph6gravggi9vvvr9qgf5zc1shd3b";
     };
   };
 
@@ -3744,23 +3744,23 @@ let
 
   vim-wakatime = buildVimPluginFrom2Nix {
     pname = "vim-wakatime";
-    version = "2019-03-17";
+    version = "2019-03-31";
     src = fetchFromGitHub {
       owner = "wakatime";
       repo = "vim-wakatime";
-      rev = "e287f95b596b832585439f77fad4b1e039d6d217";
-      sha256 = "19all4i5f1kxf092qjnbxwcg18w1zllpnhf2ma9idj0ccbpl2ds5";
+      rev = "fdd56e0e1b0f9cafc0268076c4636f97ccd081dc";
+      sha256 = "1b1m4d1dn1ymqrj6bbl44hnmf0rh93jipjlrrbk9gr3fc0x99xmh";
     };
   };
 
   vim-watchdogs = buildVimPluginFrom2Nix {
     pname = "vim-watchdogs";
-    version = "2017-12-03";
+    version = "2019-04-03";
     src = fetchFromGitHub {
       owner = "osyo-manga";
       repo = "vim-watchdogs";
-      rev = "a6415c2d928af8c1aacdbce9b1ed8d315891eb03";
-      sha256 = "0n6aqsgn0q1qgpj4yznqwbsbbk2a077gnjlq86ii3jhkzh5fzcff";
+      rev = "33d74aaeb1ef71512baff9eea20a42e06f4f0bc4";
+      sha256 = "0jkkrlw9x524vvsggq51z0yyvys75dv2h21ijxzdqni49kf4vyhk";
     };
   };
 
@@ -3865,12 +3865,12 @@ let
 
   vimtex = buildVimPluginFrom2Nix {
     pname = "vimtex";
-    version = "2019-03-29";
+    version = "2019-04-02";
     src = fetchFromGitHub {
       owner = "lervag";
       repo = "vimtex";
-      rev = "de82404c995cf8c529c3fb5cd8a8367e37e66c44";
-      sha256 = "1ysm5vva5v72nxlhi27lqxccsvq4j5xk78rs1zgiqki63zdacbp0";
+      rev = "068ef61e6e9364093272edc4f0cf997a349c0a98";
+      sha256 = "1p81l2ckl1s2xddzhd9fxjsv9a6vhz77gn5jxwlp0in284v2lp2i";
     };
   };
 
@@ -3887,12 +3887,12 @@ let
 
   vimwiki = buildVimPluginFrom2Nix {
     pname = "vimwiki";
-    version = "2019-03-20";
+    version = "2019-03-24";
     src = fetchFromGitHub {
       owner = "vimwiki";
       repo = "vimwiki";
-      rev = "a5ef4787505cb0c10544ef0a76fe9efbbc546972";
-      sha256 = "0dh13ixkxp3fbbysxxd0rpmm5g7gaj0sa2d2bihlba8pf4dw3iv1";
+      rev = "6766c37ce09a623b3de7ddb86ca30278eea37a82";
+      sha256 = "0qz4yx8l0mmwv3s3s4l03af32dymj4b1sz2x4fpdx42g04k1avy2";
     };
   };
 
@@ -3997,12 +3997,12 @@ let
 
   yats-vim = buildVimPluginFrom2Nix {
     pname = "yats-vim";
-    version = "2019-03-07";
+    version = "2019-03-31";
     src = fetchFromGitHub {
       owner = "HerringtonDarkholme";
       repo = "yats.vim";
-      rev = "cad825d5af13a59a17fb10369c2d89508f4cae3e";
-      sha256 = "197p0gs6x50kiwf6p4r3r5a1paz2lm089xb8zq0xvlab8fb6mfyy";
+      rev = "2126e8306cd21a58fb5e089376af8272abe36bb5";
+      sha256 = "08pdwq3cw7fszw75450z404ylcb5nni0p350jxsd7bd3vikdfxp9";
       fetchSubmodules = true;
     };
   };
diff --git a/pkgs/misc/vscode-extensions/default.nix b/pkgs/misc/vscode-extensions/default.nix
index b7d0a4d951ef..1c4c59f4ecb1 100644
--- a/pkgs/misc/vscode-extensions/default.nix
+++ b/pkgs/misc/vscode-extensions/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, callPackage, vscode-utils }:
+{ stdenv, callPackage, vscode-utils, llvmPackages_8 }:
 
 let
   inherit (vscode-utils) buildVscodeMarketplaceExtension;
@@ -56,13 +56,15 @@ rec {
     mktplcRef = {
       name = "vim";
       publisher = "vscodevim";
-      version = "1.2.0";
-      sha256 = "0c7nv3razc3xjjzmb0q9a89dgry77h79rbkmc8nbfpa1if7lsvcp";
+      version = "1.3.0";
+      sha256 = "18z24w7smjjnv945f8qyy6dl95xckyqa6gg3gijfcigvq5sgyawc";
     };
     meta = {
       license = stdenv.lib.licenses.mit;
     };
   };
 
+  llvm-org.lldb-vscode = llvmPackages_8.lldb;
+
   WakaTime.vscode-wakatime = callPackage ./wakatime {};
 }
diff --git a/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix b/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
index df917888dc77..ee0a02763d14 100644
--- a/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
+++ b/pkgs/os-specific/linux/firmware/firmware-linux-nonfree/default.nix
@@ -2,12 +2,12 @@
 
 stdenv.mkDerivation rec {
   name = "firmware-linux-nonfree-${version}";
-  version = "2019-02-13";
+  version = "2019-03-12";
 
   src = fetchgit {
     url = "https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git";
-    rev = "710963fe53ee3f227556d36839df3858daf6e232";
-    sha256 = "1q3jvlqqxba08s2mrh9hwl0d5w6nhkwj63j0m6amxqpf10k49jxp";
+    rev = "20190312";
+    sha256 = "1wk8l75rg7idvsyli29a1fii4xwz3vnm8d65fjw8d3azihdrhbyy";
   };
 
   installFlags = [ "DESTDIR=$(out)" ];
@@ -15,10 +15,6 @@ stdenv.mkDerivation rec {
   # Firmware blobs do not need fixing and should not be modified
   dontFixup = true;
 
-  outputHashMode = "recursive";
-  outputHashAlgo = "sha256";
-  outputHash = "13gqnr6gm7336pm48v5p37clphwwdmgbrcipsg3w44wdwgc7fa2f";
-
   meta = with stdenv.lib; {
     description = "Binary firmware collection packaged by kernel.org";
     homepage = http://packages.debian.org/sid/firmware-linux-nonfree;
diff --git a/pkgs/servers/dns/nsd/default.nix b/pkgs/servers/dns/nsd/default.nix
index 8c0fc7377661..4b86ccbdfe6e 100644
--- a/pkgs/servers/dns/nsd/default.nix
+++ b/pkgs/servers/dns/nsd/default.nix
@@ -15,11 +15,11 @@
 }:
 
 stdenv.mkDerivation rec {
-  name = "nsd-4.1.26";
+  name = "nsd-4.1.27";
 
   src = fetchurl {
     url = "https://www.nlnetlabs.nl/downloads/nsd/${name}.tar.gz";
-    sha256 = "1x0mvj4872dzj1rr9adnchdm4dhn41xmc459p5j4s0r13m1l32lz";
+    sha256 = "1sjfbwr4vq25304hr9vmd9j821g2vzv8lpy95hpsravc80q5zaqv";
   };
 
   prePatch = ''
diff --git a/pkgs/servers/dns/pdns-recursor/default.nix b/pkgs/servers/dns/pdns-recursor/default.nix
index e8603d249421..0e5ea98f30e8 100644
--- a/pkgs/servers/dns/pdns-recursor/default.nix
+++ b/pkgs/servers/dns/pdns-recursor/default.nix
@@ -8,11 +8,11 @@ with stdenv.lib;
 
 stdenv.mkDerivation rec {
   name = "pdns-recursor-${version}";
-  version = "4.1.11";
+  version = "4.1.12";
 
   src = fetchurl {
     url = "https://downloads.powerdns.com/releases/pdns-recursor-${version}.tar.bz2";
-    sha256 = "0w6nyjiid8d9rv6qsq42x210val6lqrm9shpid4s8gjxahmxbiwy";
+    sha256 = "1j5hrpz4c9dqd30piqd8xyjmirdxp4dy71nx9rwq8l4i4nc0l774";
   };
 
   nativeBuildInputs = [ pkgconfig ];
diff --git a/pkgs/servers/home-assistant/appdaemon.nix b/pkgs/servers/home-assistant/appdaemon.nix
index b2a58ce61ba6..ca8ddbc7af33 100644
--- a/pkgs/servers/home-assistant/appdaemon.nix
+++ b/pkgs/servers/home-assistant/appdaemon.nix
@@ -40,10 +40,10 @@ let
       });
 
       pyyaml = super.pyyaml.overridePythonAttrs (oldAttrs: rec {
-        version = "3.13";
+        version = "5.1";
         src = oldAttrs.src.override {
           inherit version;
-          sha256 = "3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf";
+          sha256 = "436bc774ecf7c103814098159fbb84c2715d25980175292c648f2da143909f95";
         };
       });
 
@@ -52,11 +52,11 @@ let
 
 in python.pkgs.buildPythonApplication rec {
   pname = "appdaemon";
-  version = "3.0.3";
+  version = "3.0.4";
 
   src = python.pkgs.fetchPypi {
     inherit pname version;
-    sha256 = "3e2f5184a51a3b2b473610704344d188226bd7e9a2c2fb762ee90621d38390c6";
+    sha256 = "e2393b5e0bb34e94e61f5debc95ad74c1c6929635b74bf8ba15c22b40cbdec69";
   };
 
   propagatedBuildInputs = with python.pkgs; [
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix
index 778b132bb700..26dd0fa877b6 100644
--- a/pkgs/servers/home-assistant/component-packages.nix
+++ b/pkgs/servers/home-assistant/component-packages.nix
@@ -2,7 +2,7 @@
 # Do not edit!
 
 {
-  version = "0.90.2";
+  version = "0.91.1";
   components = {
     "abode" = ps: with ps; [  ];
     "abode.alarm_control_panel" = ps: with ps; [  ];
@@ -13,33 +13,29 @@
     "abode.lock" = ps: with ps; [  ];
     "abode.sensor" = ps: with ps; [  ];
     "abode.switch" = ps: with ps; [  ];
+    "acer_projector" = ps: with ps; [  ];
+    "acer_projector.switch" = ps: with ps; [ pyserial ];
+    "actiontec" = ps: with ps; [  ];
+    "actiontec.device_tracker" = ps: with ps; [  ];
     "ads" = ps: with ps; [  ];
     "ads.binary_sensor" = ps: with ps; [  ];
     "ads.light" = ps: with ps; [  ];
     "ads.sensor" = ps: with ps; [  ];
     "ads.switch" = ps: with ps; [  ];
+    "aftership" = ps: with ps; [  ];
+    "aftership.sensor" = ps: with ps; [  ];
     "air_quality" = ps: with ps; [  ];
-    "air_quality.demo" = ps: with ps; [  ];
-    "air_quality.nilu" = ps: with ps; [  ];
-    "air_quality.norway_air" = ps: with ps; [  ];
-    "air_quality.opensensemap" = ps: with ps; [  ];
+    "airvisual" = ps: with ps; [  ];
+    "airvisual.sensor" = ps: with ps; [ pyairvisual ];
+    "aladdin_connect" = ps: with ps; [  ];
+    "aladdin_connect.cover" = ps: with ps; [  ];
     "alarm_control_panel" = ps: with ps; [  ];
-    "alarm_control_panel.alarmdotcom" = ps: with ps; [  ];
-    "alarm_control_panel.canary" = ps: with ps; [  ];
-    "alarm_control_panel.concord232" = ps: with ps; [  ];
-    "alarm_control_panel.demo" = ps: with ps; [  ];
-    "alarm_control_panel.ialarm" = ps: with ps; [  ];
-    "alarm_control_panel.manual" = ps: with ps; [  ];
-    "alarm_control_panel.manual_mqtt" = ps: with ps; [ paho-mqtt ];
-    "alarm_control_panel.ness_alarm" = ps: with ps; [  ];
-    "alarm_control_panel.nx584" = ps: with ps; [  ];
-    "alarm_control_panel.spc" = ps: with ps; [  ];
-    "alarm_control_panel.totalconnect" = ps: with ps; [  ];
-    "alarm_control_panel.yale_smart_alarm" = ps: with ps; [  ];
     "alarmdecoder" = ps: with ps; [  ];
     "alarmdecoder.alarm_control_panel" = ps: with ps; [  ];
     "alarmdecoder.binary_sensor" = ps: with ps; [  ];
     "alarmdecoder.sensor" = ps: with ps; [  ];
+    "alarmdotcom" = ps: with ps; [  ];
+    "alarmdotcom.alarm_control_panel" = ps: with ps; [  ];
     "alert" = ps: with ps; [  ];
     "alexa" = ps: with ps; [ aiohttp-cors ];
     "alexa.auth" = ps: with ps; [  ];
@@ -47,6 +43,10 @@
     "alexa.flash_briefings" = ps: with ps; [  ];
     "alexa.intent" = ps: with ps; [  ];
     "alexa.smart_home" = ps: with ps; [  ];
+    "alpha_vantage" = ps: with ps; [  ];
+    "alpha_vantage.sensor" = ps: with ps; [  ];
+    "amazon_polly" = ps: with ps; [  ];
+    "amazon_polly.tts" = ps: with ps; [ boto3 ];
     "ambient_station" = ps: with ps; [  ];
     "ambient_station.binary_sensor" = ps: with ps; [  ];
     "ambient_station.config_flow" = ps: with ps; [  ];
@@ -62,34 +62,59 @@
     "android_ip_webcam.switch" = ps: with ps; [  ];
     "androidtv" = ps: with ps; [  ];
     "androidtv.media_player" = ps: with ps; [  ];
+    "anel_pwrctrl" = ps: with ps; [  ];
+    "anel_pwrctrl.switch" = ps: with ps; [  ];
+    "anthemav" = ps: with ps; [  ];
+    "anthemav.media_player" = ps: with ps; [  ];
     "apcupsd" = ps: with ps; [  ];
     "apcupsd.binary_sensor" = ps: with ps; [  ];
     "apcupsd.sensor" = ps: with ps; [  ];
     "api" = ps: with ps; [ aiohttp-cors ];
+    "api_streams" = ps: with ps; [  ];
+    "apns" = ps: with ps; [  ];
+    "apns.notify" = ps: with ps; [  ];
     "apple_tv" = ps: with ps; [ pyatv ];
     "apple_tv.media_player" = ps: with ps; [ pyatv ];
     "apple_tv.remote" = ps: with ps; [ pyatv ];
     "aqualogic" = ps: with ps; [  ];
     "aqualogic.sensor" = ps: with ps; [  ];
     "aqualogic.switch" = ps: with ps; [  ];
+    "aquostv" = ps: with ps; [  ];
+    "aquostv.media_player" = ps: with ps; [  ];
     "arduino" = ps: with ps; [  ];
     "arduino.sensor" = ps: with ps; [  ];
     "arduino.switch" = ps: with ps; [  ];
+    "arest" = ps: with ps; [  ];
+    "arest.binary_sensor" = ps: with ps; [  ];
+    "arest.sensor" = ps: with ps; [  ];
+    "arest.switch" = ps: with ps; [  ];
     "arlo" = ps: with ps; [  ];
     "arlo.alarm_control_panel" = ps: with ps; [  ];
     "arlo.camera" = ps: with ps; [ ha-ffmpeg ];
     "arlo.sensor" = ps: with ps; [  ];
+    "aruba" = ps: with ps; [  ];
+    "aruba.device_tracker" = ps: with ps; [ pexpect ];
+    "arwn" = ps: with ps; [  ];
+    "arwn.sensor" = ps: with ps; [ paho-mqtt ];
+    "asterisk_cdr" = ps: with ps; [  ];
+    "asterisk_cdr.mailbox" = ps: with ps; [  ];
     "asterisk_mbox" = ps: with ps; [  ];
     "asterisk_mbox.mailbox" = ps: with ps; [  ];
     "asuswrt" = ps: with ps; [  ];
+    "asuswrt.device_tracker" = ps: with ps; [  ];
+    "asuswrt.sensor" = ps: with ps; [  ];
     "august" = ps: with ps; [  ];
     "august.binary_sensor" = ps: with ps; [  ];
     "august.camera" = ps: with ps; [  ];
     "august.lock" = ps: with ps; [  ];
+    "aurora" = ps: with ps; [  ];
+    "aurora.binary_sensor" = ps: with ps; [  ];
     "auth" = ps: with ps; [ aiohttp-cors ];
     "auth.indieauth" = ps: with ps; [  ];
     "auth.login_flow" = ps: with ps; [  ];
     "auth.mfa_setup_flow" = ps: with ps; [  ];
+    "automatic" = ps: with ps; [  ];
+    "automatic.device_tracker" = ps: with ps; [ aiohttp-cors ];
     "automation" = ps: with ps; [  ];
     "automation.event" = ps: with ps; [  ];
     "automation.geo_location" = ps: with ps; [  ];
@@ -104,108 +129,129 @@
     "automation.time_pattern" = ps: with ps; [  ];
     "automation.webhook" = ps: with ps; [ aiohttp-cors ];
     "automation.zone" = ps: with ps; [  ];
+    "avion" = ps: with ps; [  ];
+    "avion.light" = ps: with ps; [  ];
+    "awair" = ps: with ps; [  ];
+    "awair.sensor" = ps: with ps; [  ];
+    "aws" = ps: with ps; [  ];
+    "aws.config_flow" = ps: with ps; [  ];
+    "aws.const" = ps: with ps; [  ];
+    "aws.notify" = ps: with ps; [  ];
+    "aws_lambda" = ps: with ps; [  ];
+    "aws_lambda.notify" = ps: with ps; [ boto3 ];
+    "aws_sns" = ps: with ps; [  ];
+    "aws_sns.notify" = ps: with ps; [ boto3 ];
+    "aws_sqs" = ps: with ps; [  ];
+    "aws_sqs.notify" = ps: with ps; [ boto3 ];
     "axis" = ps: with ps; [  ];
     "axis.binary_sensor" = ps: with ps; [  ];
     "axis.camera" = ps: with ps; [  ];
+    "axis.config_flow" = ps: with ps; [  ];
+    "axis.const" = ps: with ps; [  ];
+    "axis.device" = ps: with ps; [  ];
+    "axis.errors" = ps: with ps; [  ];
+    "baidu" = ps: with ps; [  ];
+    "baidu.tts" = ps: with ps; [  ];
+    "bayesian" = ps: with ps; [  ];
+    "bayesian.binary_sensor" = ps: with ps; [  ];
     "bbb_gpio" = ps: with ps; [  ];
     "bbb_gpio.binary_sensor" = ps: with ps; [  ];
     "bbb_gpio.switch" = ps: with ps; [  ];
+    "bbox" = ps: with ps; [  ];
+    "bbox.device_tracker" = ps: with ps; [  ];
+    "bbox.sensor" = ps: with ps; [  ];
+    "bh1750" = ps: with ps; [  ];
+    "bh1750.sensor" = ps: with ps; [  ];
     "binary_sensor" = ps: with ps; [  ];
-    "binary_sensor.arest" = ps: with ps; [  ];
-    "binary_sensor.aurora" = ps: with ps; [  ];
-    "binary_sensor.bayesian" = ps: with ps; [  ];
-    "binary_sensor.command_line" = ps: with ps; [  ];
-    "binary_sensor.concord232" = ps: with ps; [  ];
-    "binary_sensor.demo" = ps: with ps; [  ];
-    "binary_sensor.ffmpeg_motion" = ps: with ps; [ ha-ffmpeg ];
-    "binary_sensor.ffmpeg_noise" = ps: with ps; [ ha-ffmpeg ];
-    "binary_sensor.flic" = ps: with ps; [  ];
-    "binary_sensor.hikvision" = ps: with ps; [  ];
-    "binary_sensor.iss" = ps: with ps; [  ];
-    "binary_sensor.mystrom" = ps: with ps; [ aiohttp-cors ];
-    "binary_sensor.ness_alarm" = ps: with ps; [  ];
-    "binary_sensor.nx584" = ps: with ps; [  ];
-    "binary_sensor.ping" = ps: with ps; [  ];
-    "binary_sensor.random" = ps: with ps; [  ];
-    "binary_sensor.rest" = ps: with ps; [  ];
-    "binary_sensor.rflink" = ps: with ps; [  ];
-    "binary_sensor.ring" = ps: with ps; [  ];
-    "binary_sensor.sleepiq" = ps: with ps; [  ];
-    "binary_sensor.spc" = ps: with ps; [  ];
-    "binary_sensor.tapsaff" = ps: with ps; [  ];
-    "binary_sensor.tcp" = ps: with ps; [  ];
-    "binary_sensor.template" = ps: with ps; [  ];
-    "binary_sensor.threshold" = ps: with ps; [  ];
-    "binary_sensor.tod" = ps: with ps; [  ];
-    "binary_sensor.trend" = ps: with ps; [ numpy ];
-    "binary_sensor.uptimerobot" = ps: with ps; [  ];
-    "binary_sensor.vultr" = ps: with ps; [ vultr ];
-    "binary_sensor.workday" = ps: with ps; [  ];
+    "bitcoin" = ps: with ps; [  ];
+    "bitcoin.sensor" = ps: with ps; [  ];
+    "blackbird" = ps: with ps; [  ];
+    "blackbird.media_player" = ps: with ps; [  ];
     "blink" = ps: with ps; [  ];
     "blink.alarm_control_panel" = ps: with ps; [  ];
     "blink.binary_sensor" = ps: with ps; [  ];
     "blink.camera" = ps: with ps; [  ];
     "blink.sensor" = ps: with ps; [  ];
+    "blinksticklight" = ps: with ps; [  ];
+    "blinksticklight.light" = ps: with ps; [ BlinkStick ];
+    "blinkt" = ps: with ps; [  ];
+    "blinkt.light" = ps: with ps; [  ];
+    "blockchain" = ps: with ps; [  ];
+    "blockchain.sensor" = ps: with ps; [  ];
     "bloomsky" = ps: with ps; [  ];
     "bloomsky.binary_sensor" = ps: with ps; [  ];
     "bloomsky.camera" = ps: with ps; [  ];
     "bloomsky.sensor" = ps: with ps; [  ];
+    "bluesound" = ps: with ps; [  ];
+    "bluesound.media_player" = ps: with ps; [ xmltodict ];
+    "bluetooth_le_tracker" = ps: with ps; [  ];
+    "bluetooth_le_tracker.device_tracker" = ps: with ps; [  ];
+    "bluetooth_tracker" = ps: with ps; [  ];
+    "bluetooth_tracker.device_tracker" = ps: with ps; [ bt_proximity ];
+    "bme280" = ps: with ps; [  ];
+    "bme280.sensor" = ps: with ps; [  ];
+    "bme680" = ps: with ps; [  ];
+    "bme680.sensor" = ps: with ps; [  ];
     "bmw_connected_drive" = ps: with ps; [  ];
     "bmw_connected_drive.binary_sensor" = ps: with ps; [  ];
     "bmw_connected_drive.device_tracker" = ps: with ps; [  ];
     "bmw_connected_drive.lock" = ps: with ps; [  ];
     "bmw_connected_drive.sensor" = ps: with ps; [  ];
+    "bom" = ps: with ps; [  ];
+    "bom.sensor" = ps: with ps; [  ];
+    "bom.weather" = ps: with ps; [  ];
+    "braviatv" = ps: with ps; [  ];
+    "braviatv.media_player" = ps: with ps; [  ];
+    "broadlink" = ps: with ps; [  ];
+    "broadlink.sensor" = ps: with ps; [ broadlink ];
+    "broadlink.switch" = ps: with ps; [ broadlink ];
+    "brottsplatskartan" = ps: with ps; [  ];
+    "brottsplatskartan.sensor" = ps: with ps; [  ];
     "browser" = ps: with ps; [  ];
+    "brunt" = ps: with ps; [  ];
+    "brunt.cover" = ps: with ps; [  ];
+    "bt_home_hub_5" = ps: with ps; [  ];
+    "bt_home_hub_5.device_tracker" = ps: with ps; [  ];
+    "bt_smarthub" = ps: with ps; [  ];
+    "bt_smarthub.device_tracker" = ps: with ps; [  ];
+    "buienradar" = ps: with ps; [  ];
+    "buienradar.sensor" = ps: with ps; [  ];
+    "buienradar.weather" = ps: with ps; [  ];
+    "caldav" = ps: with ps; [  ];
+    "caldav.calendar" = ps: with ps; [  ];
     "calendar" = ps: with ps; [ aiohttp-cors ];
-    "calendar.caldav" = ps: with ps; [  ];
-    "calendar.demo" = ps: with ps; [  ];
-    "calendar.todoist" = ps: with ps; [ todoist ];
     "camera" = ps: with ps; [ aiohttp-cors ];
-    "camera.canary" = ps: with ps; [ ha-ffmpeg ];
-    "camera.demo" = ps: with ps; [  ];
-    "camera.familyhub" = ps: with ps; [  ];
-    "camera.ffmpeg" = ps: with ps; [ ha-ffmpeg ];
-    "camera.foscam" = ps: with ps; [  ];
-    "camera.generic" = ps: with ps; [  ];
-    "camera.local_file" = ps: with ps; [  ];
-    "camera.mjpeg" = ps: with ps; [  ];
-    "camera.onvif" = ps: with ps; [ ha-ffmpeg ];
-    "camera.proxy" = ps: with ps; [ pillow ];
-    "camera.push" = ps: with ps; [ aiohttp-cors ];
-    "camera.ring" = ps: with ps; [ ha-ffmpeg ];
-    "camera.rpi_camera" = ps: with ps; [  ];
-    "camera.synology" = ps: with ps; [  ];
-    "camera.uvc" = ps: with ps; [  ];
-    "camera.xeoma" = ps: with ps; [  ];
-    "camera.xiaomi" = ps: with ps; [ ha-ffmpeg ];
-    "camera.yi" = ps: with ps; [ ha-ffmpeg ];
+    "camera.const" = ps: with ps; [  ];
+    "camera.prefs" = ps: with ps; [  ];
     "canary" = ps: with ps; [  ];
+    "canary.alarm_control_panel" = ps: with ps; [  ];
+    "canary.camera" = ps: with ps; [ ha-ffmpeg ];
+    "canary.sensor" = ps: with ps; [  ];
     "cast" = ps: with ps; [ PyChromecast ];
     "cast.media_player" = ps: with ps; [ PyChromecast ];
+    "cert_expiry" = ps: with ps; [  ];
+    "cert_expiry.sensor" = ps: with ps; [  ];
+    "channels" = ps: with ps; [  ];
+    "channels.media_player" = ps: with ps; [  ];
+    "cisco_ios" = ps: with ps; [  ];
+    "cisco_ios.device_tracker" = ps: with ps; [ pexpect ];
     "cisco_mobility_express" = ps: with ps; [  ];
     "cisco_mobility_express.device_tracker" = ps: with ps; [  ];
+    "ciscospark" = ps: with ps; [  ];
+    "ciscospark.notify" = ps: with ps; [  ];
+    "citybikes" = ps: with ps; [  ];
+    "citybikes.sensor" = ps: with ps; [  ];
+    "clementine" = ps: with ps; [  ];
+    "clementine.media_player" = ps: with ps; [  ];
+    "clickatell" = ps: with ps; [  ];
+    "clickatell.notify" = ps: with ps; [  ];
+    "clicksend" = ps: with ps; [  ];
+    "clicksend.notify" = ps: with ps; [  ];
+    "clicksend_tts" = ps: with ps; [  ];
+    "clicksend_tts.notify" = ps: with ps; [  ];
     "climate" = ps: with ps; [  ];
     "climate.const" = ps: with ps; [  ];
-    "climate.coolmaster" = ps: with ps; [  ];
-    "climate.demo" = ps: with ps; [  ];
-    "climate.dyson" = ps: with ps; [  ];
-    "climate.ephember" = ps: with ps; [  ];
-    "climate.eq3btsmart" = ps: with ps; [ construct ];
-    "climate.flexit" = ps: with ps; [  ];
-    "climate.generic_thermostat" = ps: with ps; [  ];
-    "climate.heatmiser" = ps: with ps; [  ];
-    "climate.honeywell" = ps: with ps; [  ];
-    "climate.melissa" = ps: with ps; [  ];
-    "climate.mill" = ps: with ps; [  ];
-    "climate.nuheat" = ps: with ps; [  ];
-    "climate.oem" = ps: with ps; [  ];
-    "climate.proliphix" = ps: with ps; [  ];
-    "climate.radiotherm" = ps: with ps; [  ];
     "climate.reproduce_state" = ps: with ps; [  ];
-    "climate.sensibo" = ps: with ps; [  ];
-    "climate.touchline" = ps: with ps; [  ];
-    "climate.venstar" = ps: with ps; [  ];
-    "climate.zhong_hong" = ps: with ps; [  ];
     "cloud" = ps: with ps; [ aiohttp-cors ];
     "cloud.binary_sensor" = ps: with ps; [ aiohttp-cors ];
     "cloud.const" = ps: with ps; [  ];
@@ -213,10 +259,28 @@
     "cloud.prefs" = ps: with ps; [  ];
     "cloud.utils" = ps: with ps; [  ];
     "cloudflare" = ps: with ps; [  ];
+    "cmus" = ps: with ps; [  ];
+    "cmus.media_player" = ps: with ps; [  ];
+    "co2signal" = ps: with ps; [  ];
+    "co2signal.sensor" = ps: with ps; [  ];
     "coinbase" = ps: with ps; [  ];
+    "coinbase.sensor" = ps: with ps; [  ];
+    "coinmarketcap" = ps: with ps; [  ];
+    "coinmarketcap.sensor" = ps: with ps; [ coinmarketcap ];
+    "comed_hourly_pricing" = ps: with ps; [  ];
+    "comed_hourly_pricing.sensor" = ps: with ps; [  ];
     "comfoconnect" = ps: with ps; [  ];
     "comfoconnect.fan" = ps: with ps; [  ];
     "comfoconnect.sensor" = ps: with ps; [  ];
+    "command_line" = ps: with ps; [  ];
+    "command_line.binary_sensor" = ps: with ps; [  ];
+    "command_line.cover" = ps: with ps; [  ];
+    "command_line.notify" = ps: with ps; [  ];
+    "command_line.sensor" = ps: with ps; [  ];
+    "command_line.switch" = ps: with ps; [  ];
+    "concord232" = ps: with ps; [  ];
+    "concord232.alarm_control_panel" = ps: with ps; [  ];
+    "concord232.binary_sensor" = ps: with ps; [  ];
     "config" = ps: with ps; [ aiohttp-cors ];
     "config.area_registry" = ps: with ps; [  ];
     "config.auth" = ps: with ps; [  ];
@@ -232,31 +296,36 @@
     "configurator" = ps: with ps; [  ];
     "conversation" = ps: with ps; [ aiohttp-cors ];
     "conversation.util" = ps: with ps; [  ];
+    "coolmaster" = ps: with ps; [  ];
+    "coolmaster.climate" = ps: with ps; [  ];
     "counter" = ps: with ps; [  ];
     "cover" = ps: with ps; [  ];
-    "cover.aladdin_connect" = ps: with ps; [  ];
-    "cover.brunt" = ps: with ps; [  ];
-    "cover.command_line" = ps: with ps; [  ];
-    "cover.demo" = ps: with ps; [  ];
-    "cover.garadget" = ps: with ps; [  ];
-    "cover.gogogate2" = ps: with ps; [  ];
-    "cover.group" = ps: with ps; [  ];
-    "cover.myq" = ps: with ps; [  ];
-    "cover.opengarage" = ps: with ps; [  ];
-    "cover.rflink" = ps: with ps; [  ];
-    "cover.template" = ps: with ps; [  ];
     "cppm_tracker" = ps: with ps; [  ];
     "cppm_tracker.device_tracker" = ps: with ps; [  ];
+    "cpuspeed" = ps: with ps; [  ];
+    "cpuspeed.sensor" = ps: with ps; [ py-cpuinfo ];
+    "crimereports" = ps: with ps; [  ];
+    "crimereports.sensor" = ps: with ps; [  ];
+    "cups" = ps: with ps; [  ];
+    "cups.sensor" = ps: with ps; [ pycups ];
+    "currencylayer" = ps: with ps; [  ];
+    "currencylayer.sensor" = ps: with ps; [  ];
     "daikin" = ps: with ps; [  ];
     "daikin.climate" = ps: with ps; [  ];
     "daikin.config_flow" = ps: with ps; [  ];
     "daikin.const" = ps: with ps; [  ];
     "daikin.sensor" = ps: with ps; [  ];
+    "daikin.switch" = ps: with ps; [  ];
     "danfoss_air" = ps: with ps; [  ];
     "danfoss_air.binary_sensor" = ps: with ps; [  ];
     "danfoss_air.sensor" = ps: with ps; [  ];
     "danfoss_air.switch" = ps: with ps; [  ];
+    "darksky" = ps: with ps; [  ];
+    "darksky.sensor" = ps: with ps; [ python-forecastio ];
+    "darksky.weather" = ps: with ps; [ python-forecastio ];
     "datadog" = ps: with ps; [ datadog ];
+    "ddwrt" = ps: with ps; [  ];
+    "ddwrt.device_tracker" = ps: with ps; [  ];
     "deconz" = ps: with ps; [  ];
     "deconz.binary_sensor" = ps: with ps; [  ];
     "deconz.climate" = ps: with ps; [  ];
@@ -264,68 +333,77 @@
     "deconz.const" = ps: with ps; [  ];
     "deconz.cover" = ps: with ps; [  ];
     "deconz.deconz_device" = ps: with ps; [  ];
+    "deconz.errors" = ps: with ps; [  ];
     "deconz.gateway" = ps: with ps; [  ];
     "deconz.light" = ps: with ps; [  ];
     "deconz.scene" = ps: with ps; [  ];
     "deconz.sensor" = ps: with ps; [  ];
     "deconz.switch" = ps: with ps; [  ];
+    "decora" = ps: with ps; [  ];
+    "decora.light" = ps: with ps; [  ];
+    "decora_wifi" = ps: with ps; [  ];
+    "decora_wifi.light" = ps: with ps; [  ];
     "default_config" = ps: with ps; [ pynacl aiohttp-cors distro sqlalchemy zeroconf ];
+    "deluge" = ps: with ps; [  ];
+    "deluge.sensor" = ps: with ps; [ deluge-client ];
+    "deluge.switch" = ps: with ps; [ deluge-client ];
     "demo" = ps: with ps; [ aiohttp-cors ];
+    "demo.air_quality" = ps: with ps; [  ];
+    "demo.alarm_control_panel" = ps: with ps; [  ];
+    "demo.binary_sensor" = ps: with ps; [  ];
+    "demo.calendar" = ps: with ps; [  ];
+    "demo.camera" = ps: with ps; [  ];
+    "demo.climate" = ps: with ps; [  ];
+    "demo.cover" = ps: with ps; [  ];
+    "demo.device_tracker" = ps: with ps; [  ];
+    "demo.fan" = ps: with ps; [  ];
+    "demo.geo_location" = ps: with ps; [  ];
+    "demo.image_processing" = ps: with ps; [  ];
+    "demo.light" = ps: with ps; [  ];
+    "demo.lock" = ps: with ps; [  ];
+    "demo.mailbox" = ps: with ps; [  ];
+    "demo.media_player" = ps: with ps; [  ];
+    "demo.notify" = ps: with ps; [  ];
     "demo.remote" = ps: with ps; [  ];
+    "demo.sensor" = ps: with ps; [  ];
+    "demo.switch" = ps: with ps; [  ];
+    "demo.tts" = ps: with ps; [  ];
+    "demo.vacuum" = ps: with ps; [  ];
+    "demo.water_heater" = ps: with ps; [  ];
+    "demo.weather" = ps: with ps; [  ];
+    "denon" = ps: with ps; [  ];
+    "denon.media_player" = ps: with ps; [  ];
+    "denonavr" = ps: with ps; [  ];
+    "denonavr.media_player" = ps: with ps; [  ];
+    "deutsche_bahn" = ps: with ps; [  ];
+    "deutsche_bahn.sensor" = ps: with ps; [  ];
     "device_sun_light_trigger" = ps: with ps; [  ];
     "device_tracker" = ps: with ps; [  ];
-    "device_tracker.actiontec" = ps: with ps; [  ];
-    "device_tracker.aruba" = ps: with ps; [ pexpect ];
-    "device_tracker.asuswrt" = ps: with ps; [  ];
-    "device_tracker.automatic" = ps: with ps; [ aiohttp-cors ];
-    "device_tracker.bbox" = ps: with ps; [  ];
-    "device_tracker.bluetooth_le_tracker" = ps: with ps; [  ];
-    "device_tracker.bluetooth_tracker" = ps: with ps; [ bt_proximity ];
-    "device_tracker.bt_home_hub_5" = ps: with ps; [  ];
-    "device_tracker.bt_smarthub" = ps: with ps; [  ];
-    "device_tracker.cisco_ios" = ps: with ps; [ pexpect ];
-    "device_tracker.ddwrt" = ps: with ps; [  ];
-    "device_tracker.demo" = ps: with ps; [  ];
-    "device_tracker.ee_brightbox" = ps: with ps; [  ];
-    "device_tracker.fritz" = ps: with ps; [ fritzconnection ];
-    "device_tracker.google_maps" = ps: with ps; [  ];
-    "device_tracker.hitron_coda" = ps: with ps; [  ];
-    "device_tracker.huawei_router" = ps: with ps; [  ];
-    "device_tracker.icloud" = ps: with ps; [  ];
-    "device_tracker.keenetic_ndms2" = ps: with ps; [  ];
-    "device_tracker.linksys_ap" = ps: with ps; [ beautifulsoup4 ];
-    "device_tracker.linksys_smart" = ps: with ps; [  ];
-    "device_tracker.luci" = ps: with ps; [  ];
-    "device_tracker.meraki" = ps: with ps; [ aiohttp-cors ];
-    "device_tracker.mikrotik" = ps: with ps; [  ];
-    "device_tracker.mqtt_json" = ps: with ps; [ paho-mqtt ];
-    "device_tracker.netgear" = ps: with ps; [  ];
-    "device_tracker.nmap_tracker" = ps: with ps; [  ];
-    "device_tracker.ping" = ps: with ps; [  ];
-    "device_tracker.quantum_gateway" = ps: with ps; [  ];
-    "device_tracker.ritassist" = ps: with ps; [  ];
-    "device_tracker.sky_hub" = ps: with ps; [  ];
-    "device_tracker.snmp" = ps: with ps; [ pysnmp ];
-    "device_tracker.swisscom" = ps: with ps; [  ];
-    "device_tracker.synology_srm" = ps: with ps; [  ];
-    "device_tracker.thomson" = ps: with ps; [  ];
-    "device_tracker.tile" = ps: with ps; [  ];
-    "device_tracker.tomato" = ps: with ps; [  ];
-    "device_tracker.tplink" = ps: with ps; [  ];
-    "device_tracker.traccar" = ps: with ps; [  ];
-    "device_tracker.trackr" = ps: with ps; [  ];
-    "device_tracker.ubee" = ps: with ps; [  ];
-    "device_tracker.ubus" = ps: with ps; [  ];
-    "device_tracker.unifi" = ps: with ps; [ pyunifi ];
-    "device_tracker.unifi_direct" = ps: with ps; [ pexpect ];
-    "device_tracker.upc_connect" = ps: with ps; [ defusedxml ];
-    "device_tracker.xfinity" = ps: with ps; [  ];
-    "device_tracker.xiaomi" = ps: with ps; [  ];
+    "dht" = ps: with ps; [  ];
+    "dht.sensor" = ps: with ps; [  ];
     "dialogflow" = ps: with ps; [ aiohttp-cors ];
     "digital_ocean" = ps: with ps; [ digital-ocean ];
     "digital_ocean.binary_sensor" = ps: with ps; [ digital-ocean ];
     "digital_ocean.switch" = ps: with ps; [ digital-ocean ];
+    "digitalloggers" = ps: with ps; [  ];
+    "digitalloggers.switch" = ps: with ps; [  ];
+    "directv" = ps: with ps; [  ];
+    "directv.media_player" = ps: with ps; [  ];
+    "discogs" = ps: with ps; [  ];
+    "discogs.sensor" = ps: with ps; [ discogs_client ];
+    "discord" = ps: with ps; [  ];
+    "discord.notify" = ps: with ps; [ discordpy ];
     "discovery" = ps: with ps; [ netdisco ];
+    "dlib_face_detect" = ps: with ps; [  ];
+    "dlib_face_detect.image_processing" = ps: with ps; [ face_recognition ];
+    "dlib_face_identify" = ps: with ps; [  ];
+    "dlib_face_identify.image_processing" = ps: with ps; [ face_recognition ];
+    "dlink" = ps: with ps; [  ];
+    "dlink.switch" = ps: with ps; [  ];
+    "dlna_dmr" = ps: with ps; [  ];
+    "dlna_dmr.media_player" = ps: with ps; [  ];
+    "dnsip" = ps: with ps; [  ];
+    "dnsip.sensor" = ps: with ps; [ aiodns ];
     "dominos" = ps: with ps; [ aiohttp-cors ];
     "doorbird" = ps: with ps; [  ];
     "doorbird.camera" = ps: with ps; [  ];
@@ -334,10 +412,28 @@
     "dovado.notify" = ps: with ps; [  ];
     "dovado.sensor" = ps: with ps; [  ];
     "downloader" = ps: with ps; [  ];
+    "dsmr" = ps: with ps; [  ];
+    "dsmr.sensor" = ps: with ps; [  ];
+    "dte_energy_bridge" = ps: with ps; [  ];
+    "dte_energy_bridge.sensor" = ps: with ps; [  ];
+    "dublin_bus_transport" = ps: with ps; [  ];
+    "dublin_bus_transport.sensor" = ps: with ps; [  ];
     "duckdns" = ps: with ps; [  ];
+    "duke_energy" = ps: with ps; [  ];
+    "duke_energy.sensor" = ps: with ps; [  ];
+    "dunehd" = ps: with ps; [  ];
+    "dunehd.media_player" = ps: with ps; [  ];
+    "dwd_weather_warnings" = ps: with ps; [  ];
+    "dwd_weather_warnings.sensor" = ps: with ps; [  ];
     "dweet" = ps: with ps; [  ];
     "dweet.sensor" = ps: with ps; [  ];
     "dyson" = ps: with ps; [  ];
+    "dyson.climate" = ps: with ps; [  ];
+    "dyson.fan" = ps: with ps; [  ];
+    "dyson.sensor" = ps: with ps; [  ];
+    "dyson.vacuum" = ps: with ps; [  ];
+    "ebox" = ps: with ps; [  ];
+    "ebox.sensor" = ps: with ps; [  ];
     "ebusd" = ps: with ps; [  ];
     "ebusd.const" = ps: with ps; [  ];
     "ebusd.sensor" = ps: with ps; [  ];
@@ -350,17 +446,29 @@
     "ecobee.notify" = ps: with ps; [  ];
     "ecobee.sensor" = ps: with ps; [  ];
     "ecobee.weather" = ps: with ps; [  ];
+    "econet" = ps: with ps; [  ];
+    "econet.water_heater" = ps: with ps; [  ];
     "ecovacs" = ps: with ps; [  ];
     "ecovacs.vacuum" = ps: with ps; [  ];
+    "eddystone_temperature" = ps: with ps; [  ];
+    "eddystone_temperature.sensor" = ps: with ps; [ construct ];
+    "edimax" = ps: with ps; [  ];
+    "edimax.switch" = ps: with ps; [  ];
     "edp_redy" = ps: with ps; [  ];
     "edp_redy.sensor" = ps: with ps; [  ];
     "edp_redy.switch" = ps: with ps; [  ];
+    "ee_brightbox" = ps: with ps; [  ];
+    "ee_brightbox.device_tracker" = ps: with ps; [  ];
+    "efergy" = ps: with ps; [  ];
+    "efergy.sensor" = ps: with ps; [  ];
     "egardia" = ps: with ps; [  ];
     "egardia.alarm_control_panel" = ps: with ps; [  ];
     "egardia.binary_sensor" = ps: with ps; [  ];
     "eight_sleep" = ps: with ps; [  ];
     "eight_sleep.binary_sensor" = ps: with ps; [  ];
     "eight_sleep.sensor" = ps: with ps; [  ];
+    "eliqonline" = ps: with ps; [  ];
+    "eliqonline.sensor" = ps: with ps; [  ];
     "elkm1" = ps: with ps; [  ];
     "elkm1.alarm_control_panel" = ps: with ps; [  ];
     "elkm1.climate" = ps: with ps; [  ];
@@ -368,6 +476,10 @@
     "elkm1.scene" = ps: with ps; [  ];
     "elkm1.sensor" = ps: with ps; [  ];
     "elkm1.switch" = ps: with ps; [  ];
+    "emby" = ps: with ps; [  ];
+    "emby.media_player" = ps: with ps; [  ];
+    "emoncms" = ps: with ps; [  ];
+    "emoncms.sensor" = ps: with ps; [  ];
     "emoncms_history" = ps: with ps; [  ];
     "emulated_hue" = ps: with ps; [ aiohttp-cors ];
     "emulated_hue.hue_api" = ps: with ps; [  ];
@@ -383,31 +495,60 @@
     "enocean.light" = ps: with ps; [  ];
     "enocean.sensor" = ps: with ps; [  ];
     "enocean.switch" = ps: with ps; [  ];
+    "enphase_envoy" = ps: with ps; [  ];
+    "enphase_envoy.sensor" = ps: with ps; [  ];
+    "entur_public_transport" = ps: with ps; [  ];
+    "entur_public_transport.sensor" = ps: with ps; [  ];
+    "envirophat" = ps: with ps; [  ];
+    "envirophat.sensor" = ps: with ps; [  ];
     "envisalink" = ps: with ps; [  ];
     "envisalink.alarm_control_panel" = ps: with ps; [  ];
     "envisalink.binary_sensor" = ps: with ps; [  ];
     "envisalink.sensor" = ps: with ps; [  ];
+    "ephember" = ps: with ps; [  ];
+    "ephember.climate" = ps: with ps; [  ];
+    "epson" = ps: with ps; [  ];
+    "epson.media_player" = ps: with ps; [  ];
+    "eq3btsmart" = ps: with ps; [  ];
+    "eq3btsmart.climate" = ps: with ps; [ construct ];
     "esphome" = ps: with ps; [ aioesphomeapi ];
-    "esphome.binary_sensor" = ps: with ps; [  ];
+    "esphome.binary_sensor" = ps: with ps; [ aioesphomeapi ];
+    "esphome.camera" = ps: with ps; [ aioesphomeapi ];
     "esphome.config_flow" = ps: with ps; [  ];
-    "esphome.cover" = ps: with ps; [  ];
-    "esphome.fan" = ps: with ps; [  ];
-    "esphome.light" = ps: with ps; [  ];
-    "esphome.sensor" = ps: with ps; [  ];
-    "esphome.switch" = ps: with ps; [  ];
+    "esphome.cover" = ps: with ps; [ aioesphomeapi ];
+    "esphome.fan" = ps: with ps; [ aioesphomeapi ];
+    "esphome.light" = ps: with ps; [ aioesphomeapi ];
+    "esphome.sensor" = ps: with ps; [ aioesphomeapi ];
+    "esphome.switch" = ps: with ps; [ aioesphomeapi ];
+    "etherscan" = ps: with ps; [  ];
+    "etherscan.sensor" = ps: with ps; [  ];
     "eufy" = ps: with ps; [  ];
     "eufy.light" = ps: with ps; [  ];
     "eufy.switch" = ps: with ps; [  ];
+    "everlights" = ps: with ps; [  ];
+    "everlights.light" = ps: with ps; [  ];
     "evohome" = ps: with ps; [  ];
     "evohome.climate" = ps: with ps; [  ];
+    "facebook" = ps: with ps; [  ];
+    "facebook.notify" = ps: with ps; [  ];
+    "facebox" = ps: with ps; [  ];
+    "facebox.image_processing" = ps: with ps; [  ];
+    "fail2ban" = ps: with ps; [  ];
+    "fail2ban.sensor" = ps: with ps; [  ];
+    "familyhub" = ps: with ps; [  ];
+    "familyhub.camera" = ps: with ps; [  ];
     "fan" = ps: with ps; [  ];
-    "fan.demo" = ps: with ps; [  ];
-    "fan.dyson" = ps: with ps; [  ];
-    "fan.template" = ps: with ps; [  ];
     "fastdotcom" = ps: with ps; [  ];
     "fastdotcom.sensor" = ps: with ps; [  ];
+    "fedex" = ps: with ps; [  ];
+    "fedex.sensor" = ps: with ps; [  ];
     "feedreader" = ps: with ps; [  ];
     "ffmpeg" = ps: with ps; [ ha-ffmpeg ];
+    "ffmpeg.camera" = ps: with ps; [ ha-ffmpeg ];
+    "ffmpeg_motion" = ps: with ps; [  ];
+    "ffmpeg_motion.binary_sensor" = ps: with ps; [ ha-ffmpeg ];
+    "ffmpeg_noise" = ps: with ps; [  ];
+    "ffmpeg_noise.binary_sensor" = ps: with ps; [ ha-ffmpeg ];
     "fibaro" = ps: with ps; [  ];
     "fibaro.binary_sensor" = ps: with ps; [  ];
     "fibaro.cover" = ps: with ps; [  ];
@@ -415,30 +556,100 @@
     "fibaro.scene" = ps: with ps; [  ];
     "fibaro.sensor" = ps: with ps; [  ];
     "fibaro.switch" = ps: with ps; [  ];
+    "fido" = ps: with ps; [  ];
+    "fido.sensor" = ps: with ps; [  ];
+    "file" = ps: with ps; [  ];
+    "file.notify" = ps: with ps; [  ];
+    "file.sensor" = ps: with ps; [  ];
+    "filesize" = ps: with ps; [  ];
+    "filesize.sensor" = ps: with ps; [  ];
+    "filter" = ps: with ps; [  ];
+    "filter.sensor" = ps: with ps; [  ];
+    "fints" = ps: with ps; [  ];
+    "fints.sensor" = ps: with ps; [ fints ];
+    "fitbit" = ps: with ps; [  ];
+    "fitbit.sensor" = ps: with ps; [ aiohttp-cors ];
+    "fixer" = ps: with ps; [  ];
+    "fixer.sensor" = ps: with ps; [  ];
+    "flexit" = ps: with ps; [  ];
+    "flexit.climate" = ps: with ps; [  ];
+    "flic" = ps: with ps; [  ];
+    "flic.binary_sensor" = ps: with ps; [  ];
+    "flock" = ps: with ps; [  ];
+    "flock.notify" = ps: with ps; [  ];
+    "flunearyou" = ps: with ps; [  ];
+    "flunearyou.sensor" = ps: with ps; [  ];
+    "flux" = ps: with ps; [  ];
+    "flux.switch" = ps: with ps; [  ];
+    "flux_led" = ps: with ps; [  ];
+    "flux_led.light" = ps: with ps; [  ];
+    "folder" = ps: with ps; [  ];
+    "folder.sensor" = ps: with ps; [  ];
     "folder_watcher" = ps: with ps; [ watchdog ];
+    "foobot" = ps: with ps; [  ];
+    "foobot.sensor" = ps: with ps; [  ];
+    "foscam" = ps: with ps; [  ];
+    "foscam.camera" = ps: with ps; [  ];
     "foursquare" = ps: with ps; [ aiohttp-cors ];
+    "free_mobile" = ps: with ps; [  ];
+    "free_mobile.notify" = ps: with ps; [  ];
     "freebox" = ps: with ps; [  ];
     "freebox.device_tracker" = ps: with ps; [  ];
     "freebox.sensor" = ps: with ps; [  ];
+    "freebox.switch" = ps: with ps; [  ];
     "freedns" = ps: with ps; [  ];
+    "fritz" = ps: with ps; [  ];
+    "fritz.device_tracker" = ps: with ps; [ fritzconnection ];
     "fritzbox" = ps: with ps; [  ];
     "fritzbox.binary_sensor" = ps: with ps; [  ];
     "fritzbox.climate" = ps: with ps; [  ];
     "fritzbox.sensor" = ps: with ps; [  ];
     "fritzbox.switch" = ps: with ps; [  ];
+    "fritzbox_callmonitor" = ps: with ps; [  ];
+    "fritzbox_callmonitor.sensor" = ps: with ps; [ fritzconnection ];
+    "fritzbox_netmonitor" = ps: with ps; [  ];
+    "fritzbox_netmonitor.sensor" = ps: with ps; [ fritzconnection ];
+    "fritzdect" = ps: with ps; [  ];
+    "fritzdect.switch" = ps: with ps; [  ];
     "frontend" = ps: with ps; [ aiohttp-cors ];
     "frontend.storage" = ps: with ps; [  ];
+    "frontier_silicon" = ps: with ps; [  ];
+    "frontier_silicon.media_player" = ps: with ps; [  ];
+    "futurenow" = ps: with ps; [  ];
+    "futurenow.light" = ps: with ps; [  ];
+    "garadget" = ps: with ps; [  ];
+    "garadget.cover" = ps: with ps; [  ];
     "gc100" = ps: with ps; [  ];
     "gc100.binary_sensor" = ps: with ps; [  ];
     "gc100.switch" = ps: with ps; [  ];
+    "gearbest" = ps: with ps; [  ];
+    "gearbest.sensor" = ps: with ps; [  ];
+    "geizhals" = ps: with ps; [  ];
+    "geizhals.sensor" = ps: with ps; [  ];
+    "generic" = ps: with ps; [  ];
+    "generic.camera" = ps: with ps; [  ];
+    "generic_thermostat" = ps: with ps; [  ];
+    "generic_thermostat.climate" = ps: with ps; [  ];
+    "geo_json_events" = ps: with ps; [  ];
+    "geo_json_events.geo_location" = ps: with ps; [  ];
     "geo_location" = ps: with ps; [  ];
-    "geo_location.demo" = ps: with ps; [  ];
-    "geo_location.geo_json_events" = ps: with ps; [  ];
-    "geo_location.nsw_rural_fire_service_feed" = ps: with ps; [  ];
-    "geo_location.usgs_earthquakes_feed" = ps: with ps; [  ];
+    "geo_rss_events" = ps: with ps; [  ];
+    "geo_rss_events.sensor" = ps: with ps; [  ];
     "geofency" = ps: with ps; [ aiohttp-cors ];
     "geofency.device_tracker" = ps: with ps; [ aiohttp-cors ];
+    "github" = ps: with ps; [  ];
+    "github.sensor" = ps: with ps; [ PyGithub ];
+    "gitlab_ci" = ps: with ps; [  ];
+    "gitlab_ci.sensor" = ps: with ps; [ python-gitlab ];
+    "gitter" = ps: with ps; [  ];
+    "gitter.sensor" = ps: with ps; [  ];
+    "glances" = ps: with ps; [  ];
+    "glances.sensor" = ps: with ps; [  ];
+    "gntp" = ps: with ps; [  ];
+    "gntp.notify" = ps: with ps; [  ];
     "goalfeed" = ps: with ps; [  ];
+    "gogogate2" = ps: with ps; [  ];
+    "gogogate2.cover" = ps: with ps; [  ];
     "google" = ps: with ps; [ google_api_python_client httplib2 oauth2client ];
     "google.calendar" = ps: with ps; [  ];
     "google.tts" = ps: with ps; [  ];
@@ -449,16 +660,38 @@
     "google_assistant.smart_home" = ps: with ps; [  ];
     "google_assistant.trait" = ps: with ps; [  ];
     "google_domains" = ps: with ps; [  ];
+    "google_maps" = ps: with ps; [  ];
+    "google_maps.device_tracker" = ps: with ps; [  ];
     "google_pubsub" = ps: with ps; [ google_cloud_pubsub ];
+    "google_travel_time" = ps: with ps; [  ];
+    "google_travel_time.sensor" = ps: with ps; [  ];
+    "google_wifi" = ps: with ps; [  ];
+    "google_wifi.sensor" = ps: with ps; [  ];
     "googlehome" = ps: with ps; [  ];
     "googlehome.device_tracker" = ps: with ps; [  ];
     "googlehome.sensor" = ps: with ps; [  ];
+    "gpmdp" = ps: with ps; [  ];
+    "gpmdp.media_player" = ps: with ps; [ websocket_client ];
+    "gpsd" = ps: with ps; [  ];
+    "gpsd.sensor" = ps: with ps; [  ];
     "gpslogger" = ps: with ps; [ aiohttp-cors ];
     "gpslogger.device_tracker" = ps: with ps; [ aiohttp-cors ];
     "graphite" = ps: with ps; [  ];
     "greeneye_monitor" = ps: with ps; [  ];
+    "greeneye_monitor.sensor" = ps: with ps; [  ];
+    "greenwave" = ps: with ps; [  ];
+    "greenwave.light" = ps: with ps; [  ];
     "group" = ps: with ps; [  ];
+    "group.cover" = ps: with ps; [  ];
+    "group.light" = ps: with ps; [  ];
+    "group.notify" = ps: with ps; [  ];
     "group.reproduce_state" = ps: with ps; [  ];
+    "gstreamer" = ps: with ps; [  ];
+    "gstreamer.media_player" = ps: with ps; [  ];
+    "gtfs" = ps: with ps; [  ];
+    "gtfs.sensor" = ps: with ps; [  ];
+    "gtt" = ps: with ps; [  ];
+    "gtt.sensor" = ps: with ps; [  ];
     "habitica" = ps: with ps; [  ];
     "habitica.sensor" = ps: with ps; [  ];
     "hangouts" = ps: with ps; [  ];
@@ -467,6 +700,8 @@
     "hangouts.hangouts_bot" = ps: with ps; [  ];
     "hangouts.intents" = ps: with ps; [  ];
     "hangouts.notify" = ps: with ps; [  ];
+    "harman_kardon_avr" = ps: with ps; [  ];
+    "harman_kardon_avr.media_player" = ps: with ps; [  ];
     "harmony" = ps: with ps; [  ];
     "harmony.remote" = ps: with ps; [  ];
     "hassio" = ps: with ps; [ aiohttp-cors ];
@@ -475,11 +710,28 @@
     "hassio.discovery" = ps: with ps; [  ];
     "hassio.handler" = ps: with ps; [  ];
     "hassio.http" = ps: with ps; [  ];
+    "hassio.ingress" = ps: with ps; [  ];
+    "haveibeenpwned" = ps: with ps; [  ];
+    "haveibeenpwned.sensor" = ps: with ps; [  ];
+    "hddtemp" = ps: with ps; [  ];
+    "hddtemp.sensor" = ps: with ps; [  ];
     "hdmi_cec" = ps: with ps; [  ];
     "hdmi_cec.media_player" = ps: with ps; [  ];
     "hdmi_cec.switch" = ps: with ps; [  ];
+    "heatmiser" = ps: with ps; [  ];
+    "heatmiser.climate" = ps: with ps; [  ];
+    "hikvision" = ps: with ps; [  ];
+    "hikvision.binary_sensor" = ps: with ps; [  ];
+    "hikvisioncam" = ps: with ps; [  ];
+    "hikvisioncam.switch" = ps: with ps; [  ];
+    "hipchat" = ps: with ps; [  ];
+    "hipchat.notify" = ps: with ps; [  ];
     "history" = ps: with ps; [ aiohttp-cors sqlalchemy ];
     "history_graph" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "history_stats" = ps: with ps; [  ];
+    "history_stats.sensor" = ps: with ps; [ aiohttp-cors sqlalchemy ];
+    "hitron_coda" = ps: with ps; [  ];
+    "hitron_coda.device_tracker" = ps: with ps; [  ];
     "hive" = ps: with ps; [  ];
     "hive.binary_sensor" = ps: with ps; [  ];
     "hive.climate" = ps: with ps; [  ];
@@ -488,6 +740,8 @@
     "hive.switch" = ps: with ps; [  ];
     "hlk_sw16" = ps: with ps; [  ];
     "hlk_sw16.switch" = ps: with ps; [  ];
+    "homeassistant" = ps: with ps; [  ];
+    "homeassistant.scene" = ps: with ps; [  ];
     "homekit" = ps: with ps; [  ];
     "homekit.const" = ps: with ps; [  ];
     "homekit.util" = ps: with ps; [  ];
@@ -528,6 +782,16 @@
     "homematicip_cloud.weather" = ps: with ps; [  ];
     "homeworks" = ps: with ps; [  ];
     "homeworks.light" = ps: with ps; [  ];
+    "honeywell" = ps: with ps; [  ];
+    "honeywell.climate" = ps: with ps; [  ];
+    "hook" = ps: with ps; [  ];
+    "hook.switch" = ps: with ps; [  ];
+    "horizon" = ps: with ps; [  ];
+    "horizon.media_player" = ps: with ps; [  ];
+    "hp_ilo" = ps: with ps; [  ];
+    "hp_ilo.sensor" = ps: with ps; [  ];
+    "html5" = ps: with ps; [  ];
+    "html5.notify" = ps: with ps; [ aiohttp-cors ];
     "http" = ps: with ps; [ aiohttp-cors ];
     "http.auth" = ps: with ps; [  ];
     "http.ban" = ps: with ps; [  ];
@@ -537,23 +801,39 @@
     "http.real_ip" = ps: with ps; [  ];
     "http.static" = ps: with ps; [  ];
     "http.view" = ps: with ps; [  ];
+    "htu21d" = ps: with ps; [  ];
+    "htu21d.sensor" = ps: with ps; [  ];
     "huawei_lte" = ps: with ps; [  ];
     "huawei_lte.device_tracker" = ps: with ps; [  ];
     "huawei_lte.notify" = ps: with ps; [  ];
     "huawei_lte.sensor" = ps: with ps; [  ];
+    "huawei_router" = ps: with ps; [  ];
+    "huawei_router.device_tracker" = ps: with ps; [  ];
     "hue" = ps: with ps; [ aiohue ];
     "hue.bridge" = ps: with ps; [  ];
     "hue.config_flow" = ps: with ps; [  ];
     "hue.const" = ps: with ps; [  ];
     "hue.errors" = ps: with ps; [  ];
     "hue.light" = ps: with ps; [ aiohue ];
+    "hunterdouglas_powerview" = ps: with ps; [  ];
+    "hunterdouglas_powerview.scene" = ps: with ps; [  ];
     "hydrawise" = ps: with ps; [  ];
     "hydrawise.binary_sensor" = ps: with ps; [  ];
     "hydrawise.sensor" = ps: with ps; [  ];
     "hydrawise.switch" = ps: with ps; [  ];
+    "hydroquebec" = ps: with ps; [  ];
+    "hydroquebec.sensor" = ps: with ps; [  ];
+    "hyperion" = ps: with ps; [  ];
+    "hyperion.light" = ps: with ps; [  ];
+    "ialarm" = ps: with ps; [  ];
+    "ialarm.alarm_control_panel" = ps: with ps; [  ];
+    "icloud" = ps: with ps; [  ];
+    "icloud.device_tracker" = ps: with ps; [  ];
     "idteck_prox" = ps: with ps; [  ];
     "ifttt" = ps: with ps; [ aiohttp-cors pyfttt ];
     "ifttt.alarm_control_panel" = ps: with ps; [ aiohttp-cors pyfttt ];
+    "iglo" = ps: with ps; [  ];
+    "iglo.light" = ps: with ps; [  ];
     "ihc" = ps: with ps; [ defusedxml ];
     "ihc.binary_sensor" = ps: with ps; [ defusedxml ];
     "ihc.const" = ps: with ps; [  ];
@@ -563,19 +843,12 @@
     "ihc.switch" = ps: with ps; [ defusedxml ];
     "ihc.util" = ps: with ps; [  ];
     "image_processing" = ps: with ps; [ aiohttp-cors ];
-    "image_processing.demo" = ps: with ps; [  ];
-    "image_processing.dlib_face_detect" = ps: with ps; [ face_recognition ];
-    "image_processing.dlib_face_identify" = ps: with ps; [ face_recognition ];
-    "image_processing.facebox" = ps: with ps; [  ];
-    "image_processing.microsoft_face_detect" = ps: with ps; [ aiohttp-cors ];
-    "image_processing.microsoft_face_identify" = ps: with ps; [ aiohttp-cors ];
-    "image_processing.openalpr_cloud" = ps: with ps; [  ];
-    "image_processing.openalpr_local" = ps: with ps; [  ];
-    "image_processing.opencv" = ps: with ps; [ numpy ];
-    "image_processing.qrcode" = ps: with ps; [ pillow ];
-    "image_processing.seven_segments" = ps: with ps; [  ];
-    "image_processing.tensorflow" = ps: with ps; [ numpy pillow protobuf ];
+    "imap" = ps: with ps; [  ];
+    "imap.sensor" = ps: with ps; [  ];
+    "imap_email_content" = ps: with ps; [  ];
+    "imap_email_content.sensor" = ps: with ps; [  ];
     "influxdb" = ps: with ps; [ influxdb ];
+    "influxdb.sensor" = ps: with ps; [ influxdb ];
     "input_boolean" = ps: with ps; [  ];
     "input_datetime" = ps: with ps; [  ];
     "input_number" = ps: with ps; [  ];
@@ -590,6 +863,8 @@
     "insteon.switch" = ps: with ps; [  ];
     "insteon_local" = ps: with ps; [  ];
     "insteon_plm" = ps: with ps; [  ];
+    "integration" = ps: with ps; [  ];
+    "integration.sensor" = ps: with ps; [  ];
     "intent_script" = ps: with ps; [  ];
     "introduction" = ps: with ps; [  ];
     "ios" = ps: with ps; [ aiohttp-cors zeroconf ];
@@ -603,6 +878,12 @@
     "ipma.config_flow" = ps: with ps; [  ];
     "ipma.const" = ps: with ps; [  ];
     "ipma.weather" = ps: with ps; [  ];
+    "irish_rail_transport" = ps: with ps; [  ];
+    "irish_rail_transport.sensor" = ps: with ps; [  ];
+    "islamic_prayer_times" = ps: with ps; [  ];
+    "islamic_prayer_times.sensor" = ps: with ps; [  ];
+    "iss" = ps: with ps; [  ];
+    "iss.binary_sensor" = ps: with ps; [  ];
     "isy994" = ps: with ps; [  ];
     "isy994.binary_sensor" = ps: with ps; [  ];
     "isy994.cover" = ps: with ps; [  ];
@@ -613,15 +894,25 @@
     "isy994.switch" = ps: with ps; [  ];
     "itach" = ps: with ps; [  ];
     "itach.remote" = ps: with ps; [  ];
+    "itunes" = ps: with ps; [  ];
+    "itunes.media_player" = ps: with ps; [  ];
+    "jewish_calendar" = ps: with ps; [  ];
+    "jewish_calendar.sensor" = ps: with ps; [  ];
     "joaoapps_join" = ps: with ps; [  ];
     "joaoapps_join.notify" = ps: with ps; [  ];
     "juicenet" = ps: with ps; [  ];
     "juicenet.sensor" = ps: with ps; [  ];
+    "kankun" = ps: with ps; [  ];
+    "kankun.switch" = ps: with ps; [  ];
+    "keenetic_ndms2" = ps: with ps; [  ];
+    "keenetic_ndms2.device_tracker" = ps: with ps; [  ];
     "keyboard" = ps: with ps; [  ];
     "keyboard_remote" = ps: with ps; [ evdev ];
     "kira" = ps: with ps; [  ];
     "kira.remote" = ps: with ps; [  ];
     "kira.sensor" = ps: with ps; [  ];
+    "kiwi" = ps: with ps; [  ];
+    "kiwi.lock" = ps: with ps; [  ];
     "knx" = ps: with ps; [  ];
     "knx.binary_sensor" = ps: with ps; [  ];
     "knx.climate" = ps: with ps; [  ];
@@ -631,80 +922,91 @@
     "knx.scene" = ps: with ps; [  ];
     "knx.sensor" = ps: with ps; [  ];
     "knx.switch" = ps: with ps; [  ];
+    "kodi" = ps: with ps; [  ];
+    "kodi.media_player" = ps: with ps; [ jsonrpc-async jsonrpc-websocket ];
+    "kodi.notify" = ps: with ps; [ jsonrpc-async ];
     "konnected" = ps: with ps; [ aiohttp-cors ];
     "konnected.binary_sensor" = ps: with ps; [ aiohttp-cors ];
     "konnected.const" = ps: with ps; [  ];
     "konnected.handlers" = ps: with ps; [  ];
     "konnected.sensor" = ps: with ps; [ aiohttp-cors ];
     "konnected.switch" = ps: with ps; [ aiohttp-cors ];
+    "kwb" = ps: with ps; [  ];
+    "kwb.sensor" = ps: with ps; [  ];
+    "lacrosse" = ps: with ps; [  ];
+    "lacrosse.sensor" = ps: with ps; [  ];
     "lametric" = ps: with ps; [  ];
     "lametric.notify" = ps: with ps; [  ];
+    "lannouncer" = ps: with ps; [  ];
+    "lannouncer.notify" = ps: with ps; [  ];
+    "lastfm" = ps: with ps; [  ];
+    "lastfm.sensor" = ps: with ps; [ pylast ];
+    "launch_library" = ps: with ps; [  ];
+    "launch_library.sensor" = ps: with ps; [  ];
     "lcn" = ps: with ps; [  ];
     "lcn.const" = ps: with ps; [  ];
     "lcn.cover" = ps: with ps; [  ];
     "lcn.light" = ps: with ps; [  ];
+    "lcn.sensor" = ps: with ps; [  ];
     "lcn.switch" = ps: with ps; [  ];
+    "lg_netcast" = ps: with ps; [  ];
+    "lg_netcast.media_player" = ps: with ps; [  ];
+    "lg_soundbar" = ps: with ps; [  ];
+    "lg_soundbar.media_player" = ps: with ps; [  ];
     "lifx" = ps: with ps; [ aiolifx ];
     "lifx.light" = ps: with ps; [ aiolifx aiolifx-effects ];
+    "lifx_cloud" = ps: with ps; [  ];
+    "lifx_cloud.scene" = ps: with ps; [  ];
+    "lifx_legacy" = ps: with ps; [  ];
+    "lifx_legacy.light" = ps: with ps; [  ];
     "light" = ps: with ps; [  ];
-    "light.avion" = ps: with ps; [  ];
-    "light.blinksticklight" = ps: with ps; [ BlinkStick ];
-    "light.blinkt" = ps: with ps; [  ];
-    "light.decora" = ps: with ps; [  ];
-    "light.decora_wifi" = ps: with ps; [  ];
-    "light.demo" = ps: with ps; [  ];
-    "light.everlights" = ps: with ps; [  ];
-    "light.flux_led" = ps: with ps; [  ];
-    "light.futurenow" = ps: with ps; [  ];
-    "light.greenwave" = ps: with ps; [  ];
-    "light.group" = ps: with ps; [  ];
-    "light.hyperion" = ps: with ps; [  ];
-    "light.iglo" = ps: with ps; [  ];
-    "light.lifx_legacy" = ps: with ps; [  ];
-    "light.limitlessled" = ps: with ps; [ limitlessled ];
-    "light.litejet" = ps: with ps; [  ];
-    "light.lw12wifi" = ps: with ps; [  ];
-    "light.mystrom" = ps: with ps; [  ];
-    "light.nanoleaf" = ps: with ps; [  ];
-    "light.niko_home_control" = ps: with ps; [  ];
-    "light.opple" = ps: with ps; [  ];
-    "light.osramlightify" = ps: with ps; [  ];
-    "light.piglow" = ps: with ps; [  ];
-    "light.rflink" = ps: with ps; [  ];
-    "light.rpi_gpio_pwm" = ps: with ps; [  ];
-    "light.sensehat" = ps: with ps; [  ];
-    "light.switch" = ps: with ps; [  ];
-    "light.template" = ps: with ps; [  ];
-    "light.tikteck" = ps: with ps; [  ];
-    "light.x10" = ps: with ps; [  ];
-    "light.yeelight" = ps: with ps; [  ];
-    "light.yeelightsunflower" = ps: with ps; [  ];
-    "light.zengge" = ps: with ps; [  ];
     "lightwave" = ps: with ps; [  ];
     "lightwave.light" = ps: with ps; [  ];
     "lightwave.switch" = ps: with ps; [  ];
+    "limitlessled" = ps: with ps; [  ];
+    "limitlessled.light" = ps: with ps; [ limitlessled ];
+    "linksys_ap" = ps: with ps; [  ];
+    "linksys_ap.device_tracker" = ps: with ps; [ beautifulsoup4 ];
+    "linksys_smart" = ps: with ps; [  ];
+    "linksys_smart.device_tracker" = ps: with ps; [  ];
+    "linky" = ps: with ps; [  ];
+    "linky.sensor" = ps: with ps; [  ];
     "linode" = ps: with ps; [ linode-api ];
     "linode.binary_sensor" = ps: with ps; [ linode-api ];
     "linode.switch" = ps: with ps; [ linode-api ];
+    "linux_battery" = ps: with ps; [  ];
+    "linux_battery.sensor" = ps: with ps; [ batinfo ];
     "lirc" = ps: with ps; [  ];
     "litejet" = ps: with ps; [  ];
+    "litejet.light" = ps: with ps; [  ];
+    "litejet.scene" = ps: with ps; [  ];
+    "litejet.switch" = ps: with ps; [  ];
+    "liveboxplaytv" = ps: with ps; [  ];
+    "liveboxplaytv.media_player" = ps: with ps; [  ];
+    "llamalab_automate" = ps: with ps; [  ];
+    "llamalab_automate.notify" = ps: with ps; [  ];
+    "local_file" = ps: with ps; [  ];
+    "local_file.camera" = ps: with ps; [  ];
     "locative" = ps: with ps; [ aiohttp-cors ];
     "locative.device_tracker" = ps: with ps; [ aiohttp-cors ];
     "lock" = ps: with ps; [  ];
-    "lock.demo" = ps: with ps; [  ];
-    "lock.kiwi" = ps: with ps; [  ];
-    "lock.lockitron" = ps: with ps; [  ];
-    "lock.nello" = ps: with ps; [  ];
-    "lock.nuki" = ps: with ps; [  ];
-    "lock.sesame" = ps: with ps; [  ];
-    "lock.template" = ps: with ps; [  ];
+    "lockitron" = ps: with ps; [  ];
+    "lockitron.lock" = ps: with ps; [  ];
     "logbook" = ps: with ps; [ aiohttp-cors sqlalchemy ];
     "logentries" = ps: with ps; [  ];
     "logger" = ps: with ps; [  ];
     "logi_circle" = ps: with ps; [  ];
     "logi_circle.camera" = ps: with ps; [  ];
     "logi_circle.sensor" = ps: with ps; [  ];
+    "london_air" = ps: with ps; [  ];
+    "london_air.sensor" = ps: with ps; [  ];
+    "london_underground" = ps: with ps; [  ];
+    "london_underground.sensor" = ps: with ps; [  ];
+    "loopenergy" = ps: with ps; [  ];
+    "loopenergy.sensor" = ps: with ps; [  ];
     "lovelace" = ps: with ps; [  ];
+    "luci" = ps: with ps; [  ];
+    "luci.device_tracker" = ps: with ps; [  ];
     "luftdaten" = ps: with ps; [ luftdaten ];
     "luftdaten.config_flow" = ps: with ps; [  ];
     "luftdaten.const" = ps: with ps; [  ];
@@ -723,12 +1025,24 @@
     "lutron_caseta.light" = ps: with ps; [  ];
     "lutron_caseta.scene" = ps: with ps; [  ];
     "lutron_caseta.switch" = ps: with ps; [  ];
+    "lw12wifi" = ps: with ps; [  ];
+    "lw12wifi.light" = ps: with ps; [  ];
+    "lyft" = ps: with ps; [  ];
+    "lyft.sensor" = ps: with ps; [  ];
+    "magicseaweed" = ps: with ps; [  ];
+    "magicseaweed.sensor" = ps: with ps; [  ];
     "mailbox" = ps: with ps; [ aiohttp-cors ];
-    "mailbox.asterisk_cdr" = ps: with ps; [  ];
-    "mailbox.demo" = ps: with ps; [  ];
     "mailgun" = ps: with ps; [ aiohttp-cors ];
     "mailgun.notify" = ps: with ps; [ aiohttp-cors ];
+    "manual" = ps: with ps; [  ];
+    "manual.alarm_control_panel" = ps: with ps; [  ];
+    "manual_mqtt" = ps: with ps; [  ];
+    "manual_mqtt.alarm_control_panel" = ps: with ps; [ paho-mqtt ];
     "map" = ps: with ps; [  ];
+    "marytts" = ps: with ps; [  ];
+    "marytts.tts" = ps: with ps; [  ];
+    "mastodon" = ps: with ps; [  ];
+    "mastodon.notify" = ps: with ps; [  ];
     "matrix" = ps: with ps; [ matrix-client ];
     "matrix.notify" = ps: with ps; [ matrix-client ];
     "maxcube" = ps: with ps; [  ];
@@ -736,76 +1050,55 @@
     "maxcube.climate" = ps: with ps; [  ];
     "media_extractor" = ps: with ps; [ aiohttp-cors youtube-dl-light ];
     "media_player" = ps: with ps; [ aiohttp-cors ];
-    "media_player.anthemav" = ps: with ps; [  ];
-    "media_player.aquostv" = ps: with ps; [  ];
-    "media_player.blackbird" = ps: with ps; [  ];
-    "media_player.bluesound" = ps: with ps; [ xmltodict ];
-    "media_player.braviatv" = ps: with ps; [  ];
-    "media_player.channels" = ps: with ps; [  ];
-    "media_player.clementine" = ps: with ps; [  ];
-    "media_player.cmus" = ps: with ps; [  ];
     "media_player.const" = ps: with ps; [  ];
-    "media_player.demo" = ps: with ps; [  ];
-    "media_player.denon" = ps: with ps; [  ];
-    "media_player.denonavr" = ps: with ps; [  ];
-    "media_player.directv" = ps: with ps; [  ];
-    "media_player.dlna_dmr" = ps: with ps; [  ];
-    "media_player.dunehd" = ps: with ps; [  ];
-    "media_player.emby" = ps: with ps; [  ];
-    "media_player.epson" = ps: with ps; [  ];
-    "media_player.frontier_silicon" = ps: with ps; [  ];
-    "media_player.gpmdp" = ps: with ps; [ websocket_client ];
-    "media_player.gstreamer" = ps: with ps; [  ];
-    "media_player.harman_kardon_avr" = ps: with ps; [  ];
-    "media_player.horizon" = ps: with ps; [  ];
-    "media_player.itunes" = ps: with ps; [  ];
-    "media_player.kodi" = ps: with ps; [ jsonrpc-async jsonrpc-websocket ];
-    "media_player.lg_netcast" = ps: with ps; [  ];
-    "media_player.lg_soundbar" = ps: with ps; [  ];
-    "media_player.liveboxplaytv" = ps: with ps; [  ];
-    "media_player.mediaroom" = ps: with ps; [  ];
-    "media_player.monoprice" = ps: with ps; [  ];
-    "media_player.mpchc" = ps: with ps; [  ];
-    "media_player.mpd" = ps: with ps; [ mpd2 ];
-    "media_player.nad" = ps: with ps; [  ];
-    "media_player.onkyo" = ps: with ps; [ onkyo-eiscp ];
-    "media_player.openhome" = ps: with ps; [  ];
-    "media_player.panasonic_bluray" = ps: with ps; [  ];
-    "media_player.panasonic_viera" = ps: with ps; [ wakeonlan ];
-    "media_player.pandora" = ps: with ps; [ pexpect ];
-    "media_player.philips_js" = ps: with ps; [  ];
-    "media_player.pioneer" = ps: with ps; [  ];
-    "media_player.pjlink" = ps: with ps; [  ];
-    "media_player.plex" = ps: with ps; [  ];
     "media_player.reproduce_state" = ps: with ps; [  ];
-    "media_player.russound_rio" = ps: with ps; [  ];
-    "media_player.russound_rnet" = ps: with ps; [  ];
-    "media_player.samsungtv" = ps: with ps; [ wakeonlan ];
-    "media_player.snapcast" = ps: with ps; [ snapcast ];
-    "media_player.songpal" = ps: with ps; [  ];
-    "media_player.soundtouch" = ps: with ps; [ libsoundtouch ];
-    "media_player.spotify" = ps: with ps; [ aiohttp-cors ];
-    "media_player.squeezebox" = ps: with ps; [  ];
-    "media_player.ue_smart_radio" = ps: with ps; [  ];
-    "media_player.universal" = ps: with ps; [  ];
-    "media_player.vizio" = ps: with ps; [  ];
-    "media_player.vlc" = ps: with ps; [  ];
-    "media_player.volumio" = ps: with ps; [  ];
-    "media_player.xiaomi_tv" = ps: with ps; [  ];
-    "media_player.yamaha" = ps: with ps; [  ];
-    "media_player.yamaha_musiccast" = ps: with ps; [  ];
-    "media_player.ziggo_mediabox_xl" = ps: with ps; [  ];
+    "mediaroom" = ps: with ps; [  ];
+    "mediaroom.media_player" = ps: with ps; [  ];
     "melissa" = ps: with ps; [  ];
+    "melissa.climate" = ps: with ps; [  ];
+    "meraki" = ps: with ps; [  ];
+    "meraki.device_tracker" = ps: with ps; [ aiohttp-cors ];
+    "message_bird" = ps: with ps; [  ];
+    "message_bird.notify" = ps: with ps; [  ];
+    "met" = ps: with ps; [  ];
+    "met.weather" = ps: with ps; [  ];
     "meteo_france" = ps: with ps; [  ];
     "meteo_france.sensor" = ps: with ps; [  ];
     "meteo_france.weather" = ps: with ps; [  ];
+    "metoffice" = ps: with ps; [  ];
+    "metoffice.sensor" = ps: with ps; [  ];
+    "metoffice.weather" = ps: with ps; [  ];
+    "mfi" = ps: with ps; [  ];
+    "mfi.sensor" = ps: with ps; [  ];
+    "mfi.switch" = ps: with ps; [  ];
+    "mhz19" = ps: with ps; [  ];
+    "mhz19.sensor" = ps: with ps; [  ];
+    "microsoft" = ps: with ps; [  ];
+    "microsoft.tts" = ps: with ps; [  ];
     "microsoft_face" = ps: with ps; [ aiohttp-cors ];
+    "microsoft_face_detect" = ps: with ps; [  ];
+    "microsoft_face_detect.image_processing" = ps: with ps; [ aiohttp-cors ];
+    "microsoft_face_identify" = ps: with ps; [  ];
+    "microsoft_face_identify.image_processing" = ps: with ps; [ aiohttp-cors ];
+    "miflora" = ps: with ps; [  ];
+    "miflora.sensor" = ps: with ps; [  ];
+    "mikrotik" = ps: with ps; [  ];
+    "mikrotik.device_tracker" = ps: with ps; [  ];
+    "mill" = ps: with ps; [  ];
+    "mill.climate" = ps: with ps; [  ];
+    "min_max" = ps: with ps; [  ];
+    "min_max.sensor" = ps: with ps; [  ];
+    "mitemp_bt" = ps: with ps; [  ];
+    "mitemp_bt.sensor" = ps: with ps; [  ];
+    "mjpeg" = ps: with ps; [  ];
+    "mjpeg.camera" = ps: with ps; [  ];
     "mobile_app" = ps: with ps; [ pynacl aiohttp-cors ];
     "mobile_app.binary_sensor" = ps: with ps; [ pynacl aiohttp-cors ];
     "mobile_app.const" = ps: with ps; [  ];
     "mobile_app.entity" = ps: with ps; [  ];
     "mobile_app.helpers" = ps: with ps; [  ];
     "mobile_app.http_api" = ps: with ps; [  ];
+    "mobile_app.notify" = ps: with ps; [ pynacl aiohttp-cors ];
     "mobile_app.sensor" = ps: with ps; [ pynacl aiohttp-cors ];
     "mobile_app.webhook" = ps: with ps; [  ];
     "mobile_app.websocket_api" = ps: with ps; [  ];
@@ -817,6 +1110,22 @@
     "modbus.climate" = ps: with ps; [  ];
     "modbus.sensor" = ps: with ps; [  ];
     "modbus.switch" = ps: with ps; [  ];
+    "modem_callerid" = ps: with ps; [  ];
+    "modem_callerid.sensor" = ps: with ps; [  ];
+    "mold_indicator" = ps: with ps; [  ];
+    "mold_indicator.sensor" = ps: with ps; [  ];
+    "monoprice" = ps: with ps; [  ];
+    "monoprice.media_player" = ps: with ps; [  ];
+    "moon" = ps: with ps; [  ];
+    "moon.sensor" = ps: with ps; [  ];
+    "mopar" = ps: with ps; [  ];
+    "mopar.lock" = ps: with ps; [  ];
+    "mopar.sensor" = ps: with ps; [  ];
+    "mopar.switch" = ps: with ps; [  ];
+    "mpchc" = ps: with ps; [  ];
+    "mpchc.media_player" = ps: with ps; [  ];
+    "mpd" = ps: with ps; [  ];
+    "mpd.media_player" = ps: with ps; [ mpd2 ];
     "mqtt" = ps: with ps; [ paho-mqtt ];
     "mqtt.alarm_control_panel" = ps: with ps; [ paho-mqtt ];
     "mqtt.binary_sensor" = ps: with ps; [ paho-mqtt ];
@@ -836,11 +1145,20 @@
     "mqtt.switch" = ps: with ps; [ paho-mqtt ];
     "mqtt.vacuum" = ps: with ps; [ paho-mqtt ];
     "mqtt_eventstream" = ps: with ps; [ paho-mqtt ];
+    "mqtt_json" = ps: with ps; [  ];
+    "mqtt_json.device_tracker" = ps: with ps; [ paho-mqtt ];
+    "mqtt_room" = ps: with ps; [  ];
+    "mqtt_room.sensor" = ps: with ps; [ paho-mqtt ];
     "mqtt_statestream" = ps: with ps; [ paho-mqtt ];
+    "mvglive" = ps: with ps; [  ];
+    "mvglive.sensor" = ps: with ps; [ PyMVGLive ];
     "mychevy" = ps: with ps; [  ];
     "mychevy.binary_sensor" = ps: with ps; [  ];
     "mychevy.sensor" = ps: with ps; [  ];
     "mycroft" = ps: with ps; [  ];
+    "mycroft.notify" = ps: with ps; [  ];
+    "myq" = ps: with ps; [  ];
+    "myq.cover" = ps: with ps; [  ];
     "mysensors" = ps: with ps; [  ];
     "mysensors.binary_sensor" = ps: with ps; [  ];
     "mysensors.climate" = ps: with ps; [  ];
@@ -855,13 +1173,27 @@
     "mysensors.notify" = ps: with ps; [  ];
     "mysensors.sensor" = ps: with ps; [  ];
     "mysensors.switch" = ps: with ps; [  ];
+    "mystrom" = ps: with ps; [  ];
+    "mystrom.binary_sensor" = ps: with ps; [ aiohttp-cors ];
+    "mystrom.light" = ps: with ps; [  ];
+    "mystrom.switch" = ps: with ps; [  ];
     "mythicbeastsdns" = ps: with ps; [  ];
+    "nad" = ps: with ps; [  ];
+    "nad.media_player" = ps: with ps; [  ];
     "namecheapdns" = ps: with ps; [ defusedxml ];
+    "nanoleaf" = ps: with ps; [  ];
+    "nanoleaf.light" = ps: with ps; [  ];
     "neato" = ps: with ps; [ pybotvac ];
     "neato.camera" = ps: with ps; [ pybotvac ];
     "neato.switch" = ps: with ps; [ pybotvac ];
     "neato.vacuum" = ps: with ps; [ pybotvac ];
+    "nederlandse_spoorwegen" = ps: with ps; [  ];
+    "nederlandse_spoorwegen.sensor" = ps: with ps; [  ];
+    "nello" = ps: with ps; [  ];
+    "nello.lock" = ps: with ps; [  ];
     "ness_alarm" = ps: with ps; [  ];
+    "ness_alarm.alarm_control_panel" = ps: with ps; [  ];
+    "ness_alarm.binary_sensor" = ps: with ps; [  ];
     "nest" = ps: with ps; [  ];
     "nest.binary_sensor" = ps: with ps; [  ];
     "nest.camera" = ps: with ps; [  ];
@@ -875,70 +1207,93 @@
     "netatmo.camera" = ps: with ps; [ aiohttp-cors ];
     "netatmo.climate" = ps: with ps; [ aiohttp-cors ];
     "netatmo.sensor" = ps: with ps; [ aiohttp-cors ];
+    "netatmo_public" = ps: with ps; [  ];
+    "netatmo_public.sensor" = ps: with ps; [ aiohttp-cors ];
+    "netdata" = ps: with ps; [  ];
+    "netdata.sensor" = ps: with ps; [  ];
+    "netgear" = ps: with ps; [  ];
+    "netgear.device_tracker" = ps: with ps; [  ];
     "netgear_lte" = ps: with ps; [  ];
     "netgear_lte.notify" = ps: with ps; [  ];
     "netgear_lte.sensor" = ps: with ps; [  ];
+    "netgear_lte.sensor_types" = ps: with ps; [  ];
+    "netio" = ps: with ps; [  ];
+    "netio.switch" = ps: with ps; [ aiohttp-cors ];
+    "neurio_energy" = ps: with ps; [  ];
+    "neurio_energy.sensor" = ps: with ps; [  ];
+    "nfandroidtv" = ps: with ps; [  ];
+    "nfandroidtv.notify" = ps: with ps; [  ];
+    "niko_home_control" = ps: with ps; [  ];
+    "niko_home_control.light" = ps: with ps; [  ];
+    "nilu" = ps: with ps; [  ];
+    "nilu.air_quality" = ps: with ps; [  ];
     "nissan_leaf" = ps: with ps; [  ];
     "nissan_leaf.binary_sensor" = ps: with ps; [  ];
     "nissan_leaf.device_tracker" = ps: with ps; [  ];
     "nissan_leaf.sensor" = ps: with ps; [  ];
     "nissan_leaf.switch" = ps: with ps; [  ];
+    "nmap_tracker" = ps: with ps; [  ];
+    "nmap_tracker.device_tracker" = ps: with ps; [  ];
+    "nmbs" = ps: with ps; [  ];
+    "nmbs.sensor" = ps: with ps; [  ];
     "no_ip" = ps: with ps; [  ];
+    "noaa_tides" = ps: with ps; [  ];
+    "noaa_tides.sensor" = ps: with ps; [  ];
+    "norway_air" = ps: with ps; [  ];
+    "norway_air.air_quality" = ps: with ps; [  ];
     "notify" = ps: with ps; [  ];
-    "notify.apns" = ps: with ps; [  ];
-    "notify.aws_lambda" = ps: with ps; [ boto3 ];
-    "notify.aws_sns" = ps: with ps; [ boto3 ];
-    "notify.aws_sqs" = ps: with ps; [ boto3 ];
-    "notify.ciscospark" = ps: with ps; [  ];
-    "notify.clickatell" = ps: with ps; [  ];
-    "notify.clicksend" = ps: with ps; [  ];
-    "notify.clicksend_tts" = ps: with ps; [  ];
-    "notify.command_line" = ps: with ps; [  ];
-    "notify.demo" = ps: with ps; [  ];
-    "notify.discord" = ps: with ps; [ discordpy ];
-    "notify.facebook" = ps: with ps; [  ];
-    "notify.file" = ps: with ps; [  ];
-    "notify.flock" = ps: with ps; [  ];
-    "notify.free_mobile" = ps: with ps; [  ];
-    "notify.gntp" = ps: with ps; [  ];
-    "notify.group" = ps: with ps; [  ];
-    "notify.hipchat" = ps: with ps; [  ];
-    "notify.html5" = ps: with ps; [ aiohttp-cors ];
-    "notify.kodi" = ps: with ps; [ jsonrpc-async ];
-    "notify.lannouncer" = ps: with ps; [  ];
-    "notify.llamalab_automate" = ps: with ps; [  ];
-    "notify.mastodon" = ps: with ps; [  ];
-    "notify.message_bird" = ps: with ps; [  ];
-    "notify.mycroft" = ps: with ps; [  ];
-    "notify.nfandroidtv" = ps: with ps; [  ];
-    "notify.prowl" = ps: with ps; [  ];
-    "notify.pushbullet" = ps: with ps; [ pushbullet ];
-    "notify.pushetta" = ps: with ps; [  ];
-    "notify.pushover" = ps: with ps; [ python-pushover ];
-    "notify.pushsafer" = ps: with ps; [  ];
-    "notify.rest" = ps: with ps; [  ];
-    "notify.rocketchat" = ps: with ps; [  ];
-    "notify.sendgrid" = ps: with ps; [  ];
-    "notify.simplepush" = ps: with ps; [  ];
-    "notify.slack" = ps: with ps; [  ];
-    "notify.smtp" = ps: with ps; [  ];
-    "notify.stride" = ps: with ps; [  ];
-    "notify.synology_chat" = ps: with ps; [  ];
-    "notify.syslog" = ps: with ps; [  ];
-    "notify.telegram" = ps: with ps; [ python-telegram-bot ];
-    "notify.twilio_call" = ps: with ps; [ aiohttp-cors twilio ];
-    "notify.twilio_sms" = ps: with ps; [ aiohttp-cors twilio ];
-    "notify.twitter" = ps: with ps; [  ];
-    "notify.xmpp" = ps: with ps; [ slixmpp ];
-    "notify.yessssms" = ps: with ps; [  ];
+    "nsw_fuel_station" = ps: with ps; [  ];
+    "nsw_fuel_station.sensor" = ps: with ps; [  ];
+    "nsw_rural_fire_service_feed" = ps: with ps; [  ];
+    "nsw_rural_fire_service_feed.geo_location" = ps: with ps; [  ];
     "nuheat" = ps: with ps; [  ];
+    "nuheat.climate" = ps: with ps; [  ];
     "nuimo_controller" = ps: with ps; [  ];
+    "nuki" = ps: with ps; [  ];
+    "nuki.lock" = ps: with ps; [  ];
+    "nut" = ps: with ps; [  ];
+    "nut.sensor" = ps: with ps; [  ];
+    "nx584" = ps: with ps; [  ];
+    "nx584.alarm_control_panel" = ps: with ps; [  ];
+    "nx584.binary_sensor" = ps: with ps; [  ];
+    "nzbget" = ps: with ps; [  ];
+    "nzbget.sensor" = ps: with ps; [  ];
     "octoprint" = ps: with ps; [  ];
     "octoprint.binary_sensor" = ps: with ps; [  ];
     "octoprint.sensor" = ps: with ps; [  ];
+    "oem" = ps: with ps; [  ];
+    "oem.climate" = ps: with ps; [  ];
+    "ohmconnect" = ps: with ps; [  ];
+    "ohmconnect.sensor" = ps: with ps; [ defusedxml ];
     "onboarding" = ps: with ps; [ aiohttp-cors ];
     "onboarding.const" = ps: with ps; [  ];
     "onboarding.views" = ps: with ps; [  ];
+    "onewire" = ps: with ps; [  ];
+    "onewire.sensor" = ps: with ps; [  ];
+    "onkyo" = ps: with ps; [  ];
+    "onkyo.media_player" = ps: with ps; [ onkyo-eiscp ];
+    "onvif" = ps: with ps; [  ];
+    "onvif.camera" = ps: with ps; [ ha-ffmpeg ];
+    "openalpr_cloud" = ps: with ps; [  ];
+    "openalpr_cloud.image_processing" = ps: with ps; [  ];
+    "openalpr_local" = ps: with ps; [  ];
+    "openalpr_local.image_processing" = ps: with ps; [  ];
+    "opencv" = ps: with ps; [  ];
+    "opencv.image_processing" = ps: with ps; [ numpy ];
+    "openevse" = ps: with ps; [  ];
+    "openevse.sensor" = ps: with ps; [  ];
+    "openexchangerates" = ps: with ps; [  ];
+    "openexchangerates.sensor" = ps: with ps; [  ];
+    "opengarage" = ps: with ps; [  ];
+    "opengarage.cover" = ps: with ps; [  ];
+    "openhardwaremonitor" = ps: with ps; [  ];
+    "openhardwaremonitor.sensor" = ps: with ps; [  ];
+    "openhome" = ps: with ps; [  ];
+    "openhome.media_player" = ps: with ps; [  ];
+    "opensensemap" = ps: with ps; [  ];
+    "opensensemap.air_quality" = ps: with ps; [  ];
+    "opensky" = ps: with ps; [  ];
+    "opensky.sensor" = ps: with ps; [  ];
     "opentherm_gw" = ps: with ps; [  ];
     "opentherm_gw.binary_sensor" = ps: with ps; [  ];
     "opentherm_gw.climate" = ps: with ps; [  ];
@@ -948,6 +1303,17 @@
     "openuv.config_flow" = ps: with ps; [  ];
     "openuv.const" = ps: with ps; [  ];
     "openuv.sensor" = ps: with ps; [  ];
+    "openweathermap" = ps: with ps; [  ];
+    "openweathermap.sensor" = ps: with ps; [ pyowm ];
+    "openweathermap.weather" = ps: with ps; [ pyowm ];
+    "opple" = ps: with ps; [  ];
+    "opple.light" = ps: with ps; [  ];
+    "orvibo" = ps: with ps; [  ];
+    "orvibo.switch" = ps: with ps; [  ];
+    "osramlightify" = ps: with ps; [  ];
+    "osramlightify.light" = ps: with ps; [  ];
+    "otp" = ps: with ps; [  ];
+    "otp.sensor" = ps: with ps; [ pyotp ];
     "owlet" = ps: with ps; [  ];
     "owlet.binary_sensor" = ps: with ps; [  ];
     "owlet.const" = ps: with ps; [  ];
@@ -955,30 +1321,95 @@
     "owntracks" = ps: with ps; [ pynacl aiohttp-cors ];
     "owntracks.config_flow" = ps: with ps; [  ];
     "owntracks.device_tracker" = ps: with ps; [ pynacl aiohttp-cors ];
+    "panasonic_bluray" = ps: with ps; [  ];
+    "panasonic_bluray.media_player" = ps: with ps; [  ];
+    "panasonic_viera" = ps: with ps; [  ];
+    "panasonic_viera.media_player" = ps: with ps; [ wakeonlan ];
+    "pandora" = ps: with ps; [  ];
+    "pandora.media_player" = ps: with ps; [ pexpect ];
     "panel_custom" = ps: with ps; [ aiohttp-cors ];
     "panel_iframe" = ps: with ps; [ aiohttp-cors ];
+    "pencom" = ps: with ps; [  ];
+    "pencom.switch" = ps: with ps; [  ];
     "persistent_notification" = ps: with ps; [  ];
     "person" = ps: with ps; [  ];
+    "philips_js" = ps: with ps; [  ];
+    "philips_js.media_player" = ps: with ps; [  ];
+    "pi_hole" = ps: with ps; [  ];
+    "pi_hole.sensor" = ps: with ps; [  ];
+    "picotts" = ps: with ps; [  ];
+    "picotts.tts" = ps: with ps; [  ];
+    "piglow" = ps: with ps; [  ];
+    "piglow.light" = ps: with ps; [  ];
     "pilight" = ps: with ps; [  ];
     "pilight.binary_sensor" = ps: with ps; [  ];
     "pilight.sensor" = ps: with ps; [  ];
     "pilight.switch" = ps: with ps; [  ];
+    "ping" = ps: with ps; [  ];
+    "ping.binary_sensor" = ps: with ps; [  ];
+    "ping.device_tracker" = ps: with ps; [  ];
+    "pioneer" = ps: with ps; [  ];
+    "pioneer.media_player" = ps: with ps; [  ];
+    "pjlink" = ps: with ps; [  ];
+    "pjlink.media_player" = ps: with ps; [  ];
     "plant" = ps: with ps; [  ];
+    "plex" = ps: with ps; [  ];
+    "plex.media_player" = ps: with ps; [  ];
+    "plex.sensor" = ps: with ps; [  ];
     "plum_lightpad" = ps: with ps; [  ];
     "plum_lightpad.light" = ps: with ps; [  ];
+    "pocketcasts" = ps: with ps; [  ];
+    "pocketcasts.sensor" = ps: with ps; [  ];
     "point" = ps: with ps; [ aiohttp-cors ];
     "point.alarm_control_panel" = ps: with ps; [  ];
     "point.binary_sensor" = ps: with ps; [  ];
     "point.config_flow" = ps: with ps; [  ];
     "point.const" = ps: with ps; [  ];
     "point.sensor" = ps: with ps; [  ];
+    "pollen" = ps: with ps; [  ];
+    "pollen.sensor" = ps: with ps; [ numpy ];
+    "postnl" = ps: with ps; [  ];
+    "postnl.sensor" = ps: with ps; [  ];
+    "prezzibenzina" = ps: with ps; [  ];
+    "prezzibenzina.sensor" = ps: with ps; [  ];
+    "proliphix" = ps: with ps; [  ];
+    "proliphix.climate" = ps: with ps; [  ];
     "prometheus" = ps: with ps; [ aiohttp-cors prometheus_client ];
+    "prowl" = ps: with ps; [  ];
+    "prowl.notify" = ps: with ps; [  ];
     "proximity" = ps: with ps; [  ];
+    "proxy" = ps: with ps; [  ];
+    "proxy.camera" = ps: with ps; [ pillow ];
     "ps4" = ps: with ps; [  ];
     "ps4.config_flow" = ps: with ps; [  ];
     "ps4.const" = ps: with ps; [  ];
     "ps4.media_player" = ps: with ps; [  ];
+    "pulseaudio_loopback" = ps: with ps; [  ];
+    "pulseaudio_loopback.switch" = ps: with ps; [  ];
+    "push" = ps: with ps; [  ];
+    "push.camera" = ps: with ps; [ aiohttp-cors ];
+    "pushbullet" = ps: with ps; [  ];
+    "pushbullet.notify" = ps: with ps; [ pushbullet ];
+    "pushbullet.sensor" = ps: with ps; [ pushbullet ];
+    "pushetta" = ps: with ps; [  ];
+    "pushetta.notify" = ps: with ps; [  ];
+    "pushover" = ps: with ps; [  ];
+    "pushover.notify" = ps: with ps; [ python-pushover ];
+    "pushsafer" = ps: with ps; [  ];
+    "pushsafer.notify" = ps: with ps; [  ];
+    "pvoutput" = ps: with ps; [  ];
+    "pvoutput.sensor" = ps: with ps; [  ];
+    "pyload" = ps: with ps; [  ];
+    "pyload.sensor" = ps: with ps; [  ];
     "python_script" = ps: with ps; [  ];
+    "qbittorrent" = ps: with ps; [  ];
+    "qbittorrent.sensor" = ps: with ps; [  ];
+    "qnap" = ps: with ps; [  ];
+    "qnap.sensor" = ps: with ps; [  ];
+    "qrcode" = ps: with ps; [  ];
+    "qrcode.image_processing" = ps: with ps; [ pillow ];
+    "quantum_gateway" = ps: with ps; [  ];
+    "quantum_gateway.device_tracker" = ps: with ps; [  ];
     "qwikswitch" = ps: with ps; [  ];
     "qwikswitch.binary_sensor" = ps: with ps; [  ];
     "qwikswitch.light" = ps: with ps; [  ];
@@ -987,7 +1418,13 @@
     "rachio" = ps: with ps; [  ];
     "rachio.binary_sensor" = ps: with ps; [  ];
     "rachio.switch" = ps: with ps; [  ];
+    "radarr" = ps: with ps; [  ];
+    "radarr.sensor" = ps: with ps; [  ];
+    "radiotherm" = ps: with ps; [  ];
+    "radiotherm.climate" = ps: with ps; [  ];
     "rainbird" = ps: with ps; [  ];
+    "rainbird.sensor" = ps: with ps; [  ];
+    "rainbird.switch" = ps: with ps; [  ];
     "raincloud" = ps: with ps; [  ];
     "raincloud.binary_sensor" = ps: with ps; [  ];
     "raincloud.sensor" = ps: with ps; [  ];
@@ -998,20 +1435,41 @@
     "rainmachine.const" = ps: with ps; [  ];
     "rainmachine.sensor" = ps: with ps; [  ];
     "rainmachine.switch" = ps: with ps; [  ];
+    "random" = ps: with ps; [  ];
+    "random.binary_sensor" = ps: with ps; [  ];
+    "random.sensor" = ps: with ps; [  ];
     "raspihats" = ps: with ps; [  ];
     "raspihats.binary_sensor" = ps: with ps; [  ];
     "raspihats.switch" = ps: with ps; [  ];
+    "raspyrfm" = ps: with ps; [  ];
+    "raspyrfm.switch" = ps: with ps; [  ];
+    "recollect_waste" = ps: with ps; [  ];
+    "recollect_waste.sensor" = ps: with ps; [  ];
     "recorder" = ps: with ps; [ sqlalchemy ];
     "recorder.const" = ps: with ps; [  ];
     "recorder.migration" = ps: with ps; [  ];
     "recorder.purge" = ps: with ps; [  ];
     "recorder.util" = ps: with ps; [  ];
+    "recswitch" = ps: with ps; [  ];
+    "recswitch.switch" = ps: with ps; [  ];
     "reddit" = ps: with ps; [  ];
     "reddit.sensor" = ps: with ps; [ praw ];
+    "rejseplanen" = ps: with ps; [  ];
+    "rejseplanen.sensor" = ps: with ps; [  ];
     "remember_the_milk" = ps: with ps; [ httplib2 ];
     "remote" = ps: with ps; [  ];
+    "rest" = ps: with ps; [  ];
+    "rest.binary_sensor" = ps: with ps; [  ];
+    "rest.notify" = ps: with ps; [  ];
+    "rest.sensor" = ps: with ps; [  ];
+    "rest.switch" = ps: with ps; [  ];
     "rest_command" = ps: with ps; [  ];
     "rflink" = ps: with ps; [  ];
+    "rflink.binary_sensor" = ps: with ps; [  ];
+    "rflink.cover" = ps: with ps; [  ];
+    "rflink.light" = ps: with ps; [  ];
+    "rflink.sensor" = ps: with ps; [  ];
+    "rflink.switch" = ps: with ps; [  ];
     "rfxtrx" = ps: with ps; [  ];
     "rfxtrx.binary_sensor" = ps: with ps; [  ];
     "rfxtrx.cover" = ps: with ps; [  ];
@@ -1019,280 +1477,122 @@
     "rfxtrx.sensor" = ps: with ps; [  ];
     "rfxtrx.switch" = ps: with ps; [  ];
     "ring" = ps: with ps; [  ];
+    "ring.binary_sensor" = ps: with ps; [  ];
+    "ring.camera" = ps: with ps; [ ha-ffmpeg ];
+    "ring.sensor" = ps: with ps; [  ];
+    "ripple" = ps: with ps; [  ];
+    "ripple.sensor" = ps: with ps; [  ];
+    "ritassist" = ps: with ps; [  ];
+    "ritassist.device_tracker" = ps: with ps; [  ];
+    "rmvtransport" = ps: with ps; [  ];
+    "rmvtransport.sensor" = ps: with ps; [  ];
+    "rocketchat" = ps: with ps; [  ];
+    "rocketchat.notify" = ps: with ps; [  ];
     "roku" = ps: with ps; [  ];
     "roku.media_player" = ps: with ps; [  ];
     "roku.remote" = ps: with ps; [  ];
+    "roomba" = ps: with ps; [  ];
+    "roomba.vacuum" = ps: with ps; [  ];
     "route53" = ps: with ps; [ boto3 ];
+    "rova" = ps: with ps; [  ];
+    "rova.sensor" = ps: with ps; [  ];
+    "rpi_camera" = ps: with ps; [  ];
+    "rpi_camera.camera" = ps: with ps; [  ];
     "rpi_gpio" = ps: with ps; [  ];
     "rpi_gpio.binary_sensor" = ps: with ps; [  ];
     "rpi_gpio.cover" = ps: with ps; [  ];
     "rpi_gpio.switch" = ps: with ps; [  ];
+    "rpi_gpio_pwm" = ps: with ps; [  ];
+    "rpi_gpio_pwm.light" = ps: with ps; [  ];
     "rpi_pfio" = ps: with ps; [  ];
     "rpi_pfio.binary_sensor" = ps: with ps; [  ];
     "rpi_pfio.switch" = ps: with ps; [  ];
+    "rpi_rf" = ps: with ps; [  ];
+    "rpi_rf.switch" = ps: with ps; [  ];
     "rss_feed_template" = ps: with ps; [ aiohttp-cors ];
+    "rtorrent" = ps: with ps; [  ];
+    "rtorrent.sensor" = ps: with ps; [  ];
+    "russound_rio" = ps: with ps; [  ];
+    "russound_rio.media_player" = ps: with ps; [  ];
+    "russound_rnet" = ps: with ps; [  ];
+    "russound_rnet.media_player" = ps: with ps; [  ];
+    "ruter" = ps: with ps; [  ];
+    "ruter.sensor" = ps: with ps; [  ];
     "sabnzbd" = ps: with ps; [  ];
     "sabnzbd.sensor" = ps: with ps; [  ];
+    "samsungtv" = ps: with ps; [  ];
+    "samsungtv.media_player" = ps: with ps; [ wakeonlan ];
     "satel_integra" = ps: with ps; [  ];
     "satel_integra.alarm_control_panel" = ps: with ps; [  ];
     "satel_integra.binary_sensor" = ps: with ps; [  ];
     "scene" = ps: with ps; [  ];
-    "scene.homeassistant" = ps: with ps; [  ];
-    "scene.hunterdouglas_powerview" = ps: with ps; [  ];
-    "scene.lifx_cloud" = ps: with ps; [  ];
-    "scene.litejet" = ps: with ps; [  ];
+    "scrape" = ps: with ps; [  ];
+    "scrape.sensor" = ps: with ps; [ beautifulsoup4 ];
     "script" = ps: with ps; [  ];
     "scsgate" = ps: with ps; [  ];
     "scsgate.cover" = ps: with ps; [  ];
     "scsgate.light" = ps: with ps; [  ];
     "scsgate.switch" = ps: with ps; [  ];
+    "season" = ps: with ps; [  ];
+    "season.sensor" = ps: with ps; [ ephem ];
+    "sendgrid" = ps: with ps; [  ];
+    "sendgrid.notify" = ps: with ps; [  ];
     "sense" = ps: with ps; [  ];
     "sense.binary_sensor" = ps: with ps; [  ];
     "sense.sensor" = ps: with ps; [  ];
+    "sensehat" = ps: with ps; [  ];
+    "sensehat.light" = ps: with ps; [  ];
+    "sensehat.sensor" = ps: with ps; [  ];
+    "sensibo" = ps: with ps; [  ];
+    "sensibo.climate" = ps: with ps; [  ];
     "sensor" = ps: with ps; [  ];
-    "sensor.aftership" = ps: with ps; [  ];
-    "sensor.airvisual" = ps: with ps; [ pyairvisual ];
-    "sensor.alpha_vantage" = ps: with ps; [  ];
-    "sensor.api_streams" = ps: with ps; [  ];
-    "sensor.arest" = ps: with ps; [  ];
-    "sensor.arwn" = ps: with ps; [ paho-mqtt ];
-    "sensor.asuswrt" = ps: with ps; [  ];
-    "sensor.awair" = ps: with ps; [  ];
-    "sensor.bbox" = ps: with ps; [  ];
-    "sensor.bh1750" = ps: with ps; [  ];
-    "sensor.bitcoin" = ps: with ps; [  ];
-    "sensor.blockchain" = ps: with ps; [  ];
-    "sensor.bme280" = ps: with ps; [  ];
-    "sensor.bme680" = ps: with ps; [  ];
-    "sensor.bom" = ps: with ps; [  ];
-    "sensor.broadlink" = ps: with ps; [ broadlink ];
-    "sensor.brottsplatskartan" = ps: with ps; [  ];
-    "sensor.buienradar" = ps: with ps; [  ];
-    "sensor.canary" = ps: with ps; [  ];
-    "sensor.cert_expiry" = ps: with ps; [  ];
-    "sensor.citybikes" = ps: with ps; [  ];
-    "sensor.co2signal" = ps: with ps; [  ];
-    "sensor.coinbase" = ps: with ps; [  ];
-    "sensor.coinmarketcap" = ps: with ps; [ coinmarketcap ];
-    "sensor.comed_hourly_pricing" = ps: with ps; [  ];
-    "sensor.command_line" = ps: with ps; [  ];
-    "sensor.cpuspeed" = ps: with ps; [ py-cpuinfo ];
-    "sensor.crimereports" = ps: with ps; [  ];
-    "sensor.cups" = ps: with ps; [ pycups ];
-    "sensor.currencylayer" = ps: with ps; [  ];
-    "sensor.darksky" = ps: with ps; [ python-forecastio ];
-    "sensor.deluge" = ps: with ps; [ deluge-client ];
-    "sensor.demo" = ps: with ps; [  ];
-    "sensor.deutsche_bahn" = ps: with ps; [  ];
-    "sensor.dht" = ps: with ps; [  ];
-    "sensor.discogs" = ps: with ps; [ discogs_client ];
-    "sensor.dnsip" = ps: with ps; [ aiodns ];
-    "sensor.dsmr" = ps: with ps; [  ];
-    "sensor.dte_energy_bridge" = ps: with ps; [  ];
-    "sensor.dublin_bus_transport" = ps: with ps; [  ];
-    "sensor.duke_energy" = ps: with ps; [  ];
-    "sensor.dwd_weather_warnings" = ps: with ps; [  ];
-    "sensor.dyson" = ps: with ps; [  ];
-    "sensor.ebox" = ps: with ps; [  ];
-    "sensor.eddystone_temperature" = ps: with ps; [ construct ];
-    "sensor.efergy" = ps: with ps; [  ];
-    "sensor.eliqonline" = ps: with ps; [  ];
-    "sensor.emoncms" = ps: with ps; [  ];
-    "sensor.enphase_envoy" = ps: with ps; [  ];
-    "sensor.entur_public_transport" = ps: with ps; [  ];
-    "sensor.envirophat" = ps: with ps; [  ];
-    "sensor.etherscan" = ps: with ps; [  ];
-    "sensor.fail2ban" = ps: with ps; [  ];
-    "sensor.fedex" = ps: with ps; [  ];
-    "sensor.fido" = ps: with ps; [  ];
-    "sensor.file" = ps: with ps; [  ];
-    "sensor.filesize" = ps: with ps; [  ];
-    "sensor.filter" = ps: with ps; [  ];
-    "sensor.fints" = ps: with ps; [ fints ];
-    "sensor.fitbit" = ps: with ps; [ aiohttp-cors ];
-    "sensor.fixer" = ps: with ps; [  ];
-    "sensor.flunearyou" = ps: with ps; [  ];
-    "sensor.folder" = ps: with ps; [  ];
-    "sensor.foobot" = ps: with ps; [  ];
-    "sensor.fritzbox_callmonitor" = ps: with ps; [ fritzconnection ];
-    "sensor.fritzbox_netmonitor" = ps: with ps; [ fritzconnection ];
-    "sensor.gearbest" = ps: with ps; [  ];
-    "sensor.geizhals" = ps: with ps; [  ];
-    "sensor.geo_rss_events" = ps: with ps; [  ];
-    "sensor.github" = ps: with ps; [ PyGithub ];
-    "sensor.gitlab_ci" = ps: with ps; [ python-gitlab ];
-    "sensor.gitter" = ps: with ps; [  ];
-    "sensor.glances" = ps: with ps; [  ];
-    "sensor.google_travel_time" = ps: with ps; [  ];
-    "sensor.google_wifi" = ps: with ps; [  ];
-    "sensor.gpsd" = ps: with ps; [  ];
-    "sensor.greeneye_monitor" = ps: with ps; [  ];
-    "sensor.gtfs" = ps: with ps; [  ];
-    "sensor.gtt" = ps: with ps; [  ];
-    "sensor.haveibeenpwned" = ps: with ps; [  ];
-    "sensor.hddtemp" = ps: with ps; [  ];
-    "sensor.history_stats" = ps: with ps; [ aiohttp-cors sqlalchemy ];
-    "sensor.hp_ilo" = ps: with ps; [  ];
-    "sensor.htu21d" = ps: with ps; [  ];
-    "sensor.hydroquebec" = ps: with ps; [  ];
-    "sensor.iliad_italy" = ps: with ps; [  ];
-    "sensor.imap" = ps: with ps; [  ];
-    "sensor.imap_email_content" = ps: with ps; [  ];
-    "sensor.influxdb" = ps: with ps; [ influxdb ];
-    "sensor.integration" = ps: with ps; [  ];
-    "sensor.irish_rail_transport" = ps: with ps; [  ];
-    "sensor.islamic_prayer_times" = ps: with ps; [  ];
-    "sensor.jewish_calendar" = ps: with ps; [  ];
-    "sensor.kwb" = ps: with ps; [  ];
-    "sensor.lacrosse" = ps: with ps; [  ];
-    "sensor.lastfm" = ps: with ps; [ pylast ];
-    "sensor.launch_library" = ps: with ps; [  ];
-    "sensor.linky" = ps: with ps; [  ];
-    "sensor.linux_battery" = ps: with ps; [ batinfo ];
-    "sensor.london_air" = ps: with ps; [  ];
-    "sensor.london_underground" = ps: with ps; [  ];
-    "sensor.loopenergy" = ps: with ps; [  ];
-    "sensor.lyft" = ps: with ps; [  ];
-    "sensor.magicseaweed" = ps: with ps; [  ];
-    "sensor.metoffice" = ps: with ps; [  ];
-    "sensor.mfi" = ps: with ps; [  ];
-    "sensor.mhz19" = ps: with ps; [  ];
-    "sensor.miflora" = ps: with ps; [  ];
-    "sensor.min_max" = ps: with ps; [  ];
-    "sensor.mitemp_bt" = ps: with ps; [  ];
-    "sensor.modem_callerid" = ps: with ps; [  ];
-    "sensor.mold_indicator" = ps: with ps; [  ];
-    "sensor.moon" = ps: with ps; [  ];
-    "sensor.mopar" = ps: with ps; [  ];
-    "sensor.mqtt_room" = ps: with ps; [ paho-mqtt ];
-    "sensor.mvglive" = ps: with ps; [ PyMVGLive ];
-    "sensor.nederlandse_spoorwegen" = ps: with ps; [  ];
-    "sensor.netatmo_public" = ps: with ps; [ aiohttp-cors ];
-    "sensor.netdata" = ps: with ps; [  ];
-    "sensor.neurio_energy" = ps: with ps; [  ];
-    "sensor.nmbs" = ps: with ps; [  ];
-    "sensor.noaa_tides" = ps: with ps; [  ];
-    "sensor.nsw_fuel_station" = ps: with ps; [  ];
-    "sensor.nut" = ps: with ps; [  ];
-    "sensor.nzbget" = ps: with ps; [  ];
-    "sensor.ohmconnect" = ps: with ps; [ defusedxml ];
-    "sensor.onewire" = ps: with ps; [  ];
-    "sensor.openevse" = ps: with ps; [  ];
-    "sensor.openexchangerates" = ps: with ps; [  ];
-    "sensor.openhardwaremonitor" = ps: with ps; [  ];
-    "sensor.opensky" = ps: with ps; [  ];
-    "sensor.openweathermap" = ps: with ps; [ pyowm ];
-    "sensor.otp" = ps: with ps; [ pyotp ];
-    "sensor.pi_hole" = ps: with ps; [  ];
-    "sensor.plex" = ps: with ps; [  ];
-    "sensor.pocketcasts" = ps: with ps; [  ];
-    "sensor.pollen" = ps: with ps; [ numpy ];
-    "sensor.postnl" = ps: with ps; [  ];
-    "sensor.prezzibenzina" = ps: with ps; [  ];
-    "sensor.pushbullet" = ps: with ps; [ pushbullet ];
-    "sensor.pvoutput" = ps: with ps; [  ];
-    "sensor.pyload" = ps: with ps; [  ];
-    "sensor.qbittorrent" = ps: with ps; [  ];
-    "sensor.qnap" = ps: with ps; [  ];
-    "sensor.radarr" = ps: with ps; [  ];
-    "sensor.rainbird" = ps: with ps; [  ];
-    "sensor.random" = ps: with ps; [  ];
-    "sensor.recollect_waste" = ps: with ps; [  ];
-    "sensor.rejseplanen" = ps: with ps; [  ];
-    "sensor.rest" = ps: with ps; [  ];
-    "sensor.rflink" = ps: with ps; [  ];
-    "sensor.ring" = ps: with ps; [  ];
-    "sensor.ripple" = ps: with ps; [  ];
-    "sensor.rmvtransport" = ps: with ps; [  ];
-    "sensor.rova" = ps: with ps; [  ];
-    "sensor.rtorrent" = ps: with ps; [  ];
-    "sensor.ruter" = ps: with ps; [  ];
-    "sensor.scrape" = ps: with ps; [ beautifulsoup4 ];
-    "sensor.season" = ps: with ps; [ ephem ];
-    "sensor.sensehat" = ps: with ps; [  ];
-    "sensor.serial" = ps: with ps; [  ];
-    "sensor.serial_pm" = ps: with ps; [  ];
-    "sensor.seventeentrack" = ps: with ps; [  ];
-    "sensor.shodan" = ps: with ps; [ shodan ];
-    "sensor.sht31" = ps: with ps; [  ];
-    "sensor.sigfox" = ps: with ps; [  ];
-    "sensor.simulated" = ps: with ps; [  ];
-    "sensor.skybeacon" = ps: with ps; [  ];
-    "sensor.sleepiq" = ps: with ps; [  ];
-    "sensor.sma" = ps: with ps; [  ];
-    "sensor.snmp" = ps: with ps; [ pysnmp ];
-    "sensor.sochain" = ps: with ps; [  ];
-    "sensor.socialblade" = ps: with ps; [  ];
-    "sensor.solaredge" = ps: with ps; [  ];
-    "sensor.sonarr" = ps: with ps; [  ];
-    "sensor.spotcrime" = ps: with ps; [  ];
-    "sensor.sql" = ps: with ps; [ sqlalchemy ];
-    "sensor.srp_energy" = ps: with ps; [  ];
-    "sensor.starlingbank" = ps: with ps; [  ];
-    "sensor.startca" = ps: with ps; [ xmltodict ];
-    "sensor.statistics" = ps: with ps; [  ];
-    "sensor.steam_online" = ps: with ps; [  ];
-    "sensor.supervisord" = ps: with ps; [  ];
-    "sensor.swiss_hydrological_data" = ps: with ps; [  ];
-    "sensor.swiss_public_transport" = ps: with ps; [  ];
-    "sensor.syncthru" = ps: with ps; [  ];
-    "sensor.synologydsm" = ps: with ps; [  ];
-    "sensor.systemmonitor" = ps: with ps; [ psutil ];
-    "sensor.sytadin" = ps: with ps; [ beautifulsoup4 ];
-    "sensor.tank_utility" = ps: with ps; [  ];
-    "sensor.tautulli" = ps: with ps; [  ];
-    "sensor.tcp" = ps: with ps; [  ];
-    "sensor.ted5000" = ps: with ps; [ xmltodict ];
-    "sensor.teksavvy" = ps: with ps; [  ];
-    "sensor.temper" = ps: with ps; [  ];
-    "sensor.template" = ps: with ps; [  ];
-    "sensor.thermoworks_smoke" = ps: with ps; [  ];
-    "sensor.time_date" = ps: with ps; [  ];
-    "sensor.torque" = ps: with ps; [ aiohttp-cors ];
-    "sensor.trafikverket_weatherstation" = ps: with ps; [  ];
-    "sensor.transport_nsw" = ps: with ps; [  ];
-    "sensor.travisci" = ps: with ps; [  ];
-    "sensor.twitch" = ps: with ps; [  ];
-    "sensor.uber" = ps: with ps; [  ];
-    "sensor.uk_transport" = ps: with ps; [  ];
-    "sensor.ups" = ps: with ps; [  ];
-    "sensor.uptime" = ps: with ps; [  ];
-    "sensor.uscis" = ps: with ps; [  ];
-    "sensor.vasttrafik" = ps: with ps; [  ];
-    "sensor.version" = ps: with ps; [  ];
-    "sensor.viaggiatreno" = ps: with ps; [  ];
-    "sensor.volkszaehler" = ps: with ps; [  ];
-    "sensor.vultr" = ps: with ps; [ vultr ];
-    "sensor.waqi" = ps: with ps; [  ];
-    "sensor.waze_travel_time" = ps: with ps; [ WazeRouteCalculator ];
-    "sensor.whois" = ps: with ps; [  ];
-    "sensor.worldclock" = ps: with ps; [  ];
-    "sensor.worldtidesinfo" = ps: with ps; [  ];
-    "sensor.worxlandroid" = ps: with ps; [  ];
-    "sensor.wsdot" = ps: with ps; [  ];
-    "sensor.wunderground" = ps: with ps; [  ];
-    "sensor.xbox_live" = ps: with ps; [  ];
-    "sensor.yr" = ps: with ps; [ xmltodict ];
-    "sensor.yweather" = ps: with ps; [ yahooweather ];
-    "sensor.zamg" = ps: with ps; [  ];
-    "sensor.zestimate" = ps: with ps; [ xmltodict ];
+    "serial" = ps: with ps; [  ];
+    "serial.sensor" = ps: with ps; [  ];
+    "serial_pm" = ps: with ps; [  ];
+    "serial_pm.sensor" = ps: with ps; [  ];
+    "sesame" = ps: with ps; [  ];
+    "sesame.lock" = ps: with ps; [  ];
+    "seven_segments" = ps: with ps; [  ];
+    "seven_segments.image_processing" = ps: with ps; [  ];
+    "seventeentrack" = ps: with ps; [  ];
+    "seventeentrack.sensor" = ps: with ps; [  ];
     "shell_command" = ps: with ps; [  ];
     "shiftr" = ps: with ps; [ paho-mqtt ];
+    "shodan" = ps: with ps; [  ];
+    "shodan.sensor" = ps: with ps; [ shodan ];
     "shopping_list" = ps: with ps; [ aiohttp-cors ];
+    "sht31" = ps: with ps; [  ];
+    "sht31.sensor" = ps: with ps; [  ];
+    "sigfox" = ps: with ps; [  ];
+    "sigfox.sensor" = ps: with ps; [  ];
+    "simplepush" = ps: with ps; [  ];
+    "simplepush.notify" = ps: with ps; [  ];
     "simplisafe" = ps: with ps; [  ];
     "simplisafe.alarm_control_panel" = ps: with ps; [  ];
     "simplisafe.config_flow" = ps: with ps; [  ];
     "simplisafe.const" = ps: with ps; [  ];
+    "simulated" = ps: with ps; [  ];
+    "simulated.sensor" = ps: with ps; [  ];
     "sisyphus" = ps: with ps; [  ];
     "sisyphus.light" = ps: with ps; [  ];
     "sisyphus.media_player" = ps: with ps; [  ];
+    "sky_hub" = ps: with ps; [  ];
+    "sky_hub.device_tracker" = ps: with ps; [  ];
+    "skybeacon" = ps: with ps; [  ];
+    "skybeacon.sensor" = ps: with ps; [  ];
     "skybell" = ps: with ps; [  ];
     "skybell.binary_sensor" = ps: with ps; [  ];
     "skybell.camera" = ps: with ps; [  ];
     "skybell.light" = ps: with ps; [  ];
     "skybell.sensor" = ps: with ps; [  ];
     "skybell.switch" = ps: with ps; [  ];
+    "slack" = ps: with ps; [  ];
+    "slack.notify" = ps: with ps; [  ];
     "sleepiq" = ps: with ps; [  ];
+    "sleepiq.binary_sensor" = ps: with ps; [  ];
+    "sleepiq.sensor" = ps: with ps; [  ];
+    "sma" = ps: with ps; [  ];
+    "sma.sensor" = ps: with ps; [  ];
     "smappee" = ps: with ps; [  ];
     "smappee.sensor" = ps: with ps; [  ];
     "smappee.switch" = ps: with ps; [  ];
@@ -1313,11 +1613,35 @@
     "smhi.config_flow" = ps: with ps; [  ];
     "smhi.const" = ps: with ps; [  ];
     "smhi.weather" = ps: with ps; [  ];
+    "smtp" = ps: with ps; [  ];
+    "smtp.notify" = ps: with ps; [  ];
+    "snapcast" = ps: with ps; [  ];
+    "snapcast.media_player" = ps: with ps; [ snapcast ];
     "snips" = ps: with ps; [ paho-mqtt ];
+    "snmp" = ps: with ps; [  ];
+    "snmp.device_tracker" = ps: with ps; [ pysnmp ];
+    "snmp.sensor" = ps: with ps; [ pysnmp ];
+    "snmp.switch" = ps: with ps; [ pysnmp ];
+    "sochain" = ps: with ps; [  ];
+    "sochain.sensor" = ps: with ps; [  ];
+    "socialblade" = ps: with ps; [  ];
+    "socialblade.sensor" = ps: with ps; [  ];
+    "solaredge" = ps: with ps; [  ];
+    "solaredge.sensor" = ps: with ps; [  ];
+    "sonarr" = ps: with ps; [  ];
+    "sonarr.sensor" = ps: with ps; [  ];
+    "songpal" = ps: with ps; [  ];
+    "songpal.media_player" = ps: with ps; [  ];
     "sonos" = ps: with ps; [  ];
     "sonos.media_player" = ps: with ps; [  ];
+    "sony_projector" = ps: with ps; [  ];
+    "sony_projector.switch" = ps: with ps; [  ];
+    "soundtouch" = ps: with ps; [  ];
+    "soundtouch.media_player" = ps: with ps; [ libsoundtouch ];
     "spaceapi" = ps: with ps; [ aiohttp-cors ];
     "spc" = ps: with ps; [  ];
+    "spc.alarm_control_panel" = ps: with ps; [  ];
+    "spc.binary_sensor" = ps: with ps; [  ];
     "speedtestdotnet" = ps: with ps; [ speedtest-cli ];
     "speedtestdotnet.const" = ps: with ps; [  ];
     "speedtestdotnet.sensor" = ps: with ps; [ speedtest-cli ];
@@ -1325,53 +1649,66 @@
     "spider.climate" = ps: with ps; [  ];
     "spider.switch" = ps: with ps; [  ];
     "splunk" = ps: with ps; [  ];
+    "spotcrime" = ps: with ps; [  ];
+    "spotcrime.sensor" = ps: with ps; [  ];
+    "spotify" = ps: with ps; [  ];
+    "spotify.media_player" = ps: with ps; [ aiohttp-cors ];
+    "sql" = ps: with ps; [  ];
+    "sql.sensor" = ps: with ps; [ sqlalchemy ];
+    "squeezebox" = ps: with ps; [  ];
+    "squeezebox.media_player" = ps: with ps; [  ];
+    "srp_energy" = ps: with ps; [  ];
+    "srp_energy.sensor" = ps: with ps; [  ];
+    "starlingbank" = ps: with ps; [  ];
+    "starlingbank.sensor" = ps: with ps; [  ];
+    "startca" = ps: with ps; [  ];
+    "startca.sensor" = ps: with ps; [ xmltodict ];
+    "statistics" = ps: with ps; [  ];
+    "statistics.sensor" = ps: with ps; [  ];
     "statsd" = ps: with ps; [ statsd ];
+    "steam_online" = ps: with ps; [  ];
+    "steam_online.sensor" = ps: with ps; [  ];
     "stream" = ps: with ps; [ aiohttp-cors av ];
     "stream.const" = ps: with ps; [  ];
     "stream.core" = ps: with ps; [  ];
     "stream.hls" = ps: with ps; [  ];
+    "stream.recorder" = ps: with ps; [  ];
     "stream.worker" = ps: with ps; [  ];
+    "stride" = ps: with ps; [  ];
+    "stride.notify" = ps: with ps; [  ];
     "sun" = ps: with ps; [  ];
+    "supervisord" = ps: with ps; [  ];
+    "supervisord.sensor" = ps: with ps; [  ];
+    "swiss_hydrological_data" = ps: with ps; [  ];
+    "swiss_hydrological_data.sensor" = ps: with ps; [  ];
+    "swiss_public_transport" = ps: with ps; [  ];
+    "swiss_public_transport.sensor" = ps: with ps; [  ];
+    "swisscom" = ps: with ps; [  ];
+    "swisscom.device_tracker" = ps: with ps; [  ];
     "switch" = ps: with ps; [  ];
-    "switch.acer_projector" = ps: with ps; [ pyserial ];
-    "switch.anel_pwrctrl" = ps: with ps; [  ];
-    "switch.arest" = ps: with ps; [  ];
-    "switch.broadlink" = ps: with ps; [ broadlink ];
-    "switch.command_line" = ps: with ps; [  ];
-    "switch.deluge" = ps: with ps; [ deluge-client ];
-    "switch.demo" = ps: with ps; [  ];
-    "switch.digitalloggers" = ps: with ps; [  ];
-    "switch.dlink" = ps: with ps; [  ];
-    "switch.edimax" = ps: with ps; [  ];
-    "switch.flux" = ps: with ps; [  ];
-    "switch.fritzdect" = ps: with ps; [  ];
-    "switch.hikvisioncam" = ps: with ps; [  ];
-    "switch.hook" = ps: with ps; [  ];
-    "switch.kankun" = ps: with ps; [  ];
-    "switch.litejet" = ps: with ps; [  ];
-    "switch.mfi" = ps: with ps; [  ];
-    "switch.mystrom" = ps: with ps; [  ];
-    "switch.netio" = ps: with ps; [ aiohttp-cors ];
-    "switch.orvibo" = ps: with ps; [  ];
-    "switch.pencom" = ps: with ps; [  ];
-    "switch.pulseaudio_loopback" = ps: with ps; [  ];
-    "switch.rainbird" = ps: with ps; [  ];
-    "switch.raspyrfm" = ps: with ps; [  ];
-    "switch.recswitch" = ps: with ps; [  ];
-    "switch.rest" = ps: with ps; [  ];
-    "switch.rflink" = ps: with ps; [  ];
-    "switch.rpi_rf" = ps: with ps; [  ];
-    "switch.snmp" = ps: with ps; [ pysnmp ];
-    "switch.sony_projector" = ps: with ps; [  ];
-    "switch.switchbot" = ps: with ps; [  ];
-    "switch.switchmate" = ps: with ps; [  ];
-    "switch.telnet" = ps: with ps; [  ];
-    "switch.template" = ps: with ps; [  ];
-    "switch.vesync" = ps: with ps; [  ];
-    "switch.vultr" = ps: with ps; [ vultr ];
-    "switch.wake_on_lan" = ps: with ps; [ wakeonlan ];
+    "switch.light" = ps: with ps; [  ];
+    "switchbot" = ps: with ps; [  ];
+    "switchbot.switch" = ps: with ps; [  ];
+    "switchmate" = ps: with ps; [  ];
+    "switchmate.switch" = ps: with ps; [  ];
+    "syncthru" = ps: with ps; [  ];
+    "syncthru.sensor" = ps: with ps; [  ];
+    "synology" = ps: with ps; [  ];
+    "synology.camera" = ps: with ps; [  ];
+    "synology_chat" = ps: with ps; [  ];
+    "synology_chat.notify" = ps: with ps; [  ];
+    "synology_srm" = ps: with ps; [  ];
+    "synology_srm.device_tracker" = ps: with ps; [  ];
+    "synologydsm" = ps: with ps; [  ];
+    "synologydsm.sensor" = ps: with ps; [  ];
+    "syslog" = ps: with ps; [  ];
+    "syslog.notify" = ps: with ps; [  ];
     "system_health" = ps: with ps; [ aiohttp-cors ];
     "system_log" = ps: with ps; [ aiohttp-cors ];
+    "systemmonitor" = ps: with ps; [  ];
+    "systemmonitor.sensor" = ps: with ps; [ psutil ];
+    "sytadin" = ps: with ps; [  ];
+    "sytadin.sensor" = ps: with ps; [ beautifulsoup4 ];
     "tado" = ps: with ps; [  ];
     "tado.climate" = ps: with ps; [  ];
     "tado.device_tracker" = ps: with ps; [  ];
@@ -1382,6 +1719,21 @@
     "tahoma.scene" = ps: with ps; [  ];
     "tahoma.sensor" = ps: with ps; [  ];
     "tahoma.switch" = ps: with ps; [  ];
+    "tank_utility" = ps: with ps; [  ];
+    "tank_utility.sensor" = ps: with ps; [  ];
+    "tapsaff" = ps: with ps; [  ];
+    "tapsaff.binary_sensor" = ps: with ps; [  ];
+    "tautulli" = ps: with ps; [  ];
+    "tautulli.sensor" = ps: with ps; [  ];
+    "tcp" = ps: with ps; [  ];
+    "tcp.binary_sensor" = ps: with ps; [  ];
+    "tcp.sensor" = ps: with ps; [  ];
+    "ted5000" = ps: with ps; [  ];
+    "ted5000.sensor" = ps: with ps; [ xmltodict ];
+    "teksavvy" = ps: with ps; [  ];
+    "teksavvy.sensor" = ps: with ps; [  ];
+    "telegram" = ps: with ps; [  ];
+    "telegram.notify" = ps: with ps; [ python-telegram-bot ];
     "telegram_bot" = ps: with ps; [ python-telegram-bot ];
     "telegram_bot.broadcast" = ps: with ps; [  ];
     "telegram_bot.polling" = ps: with ps; [  ];
@@ -1400,6 +1752,20 @@
     "tellstick.light" = ps: with ps; [  ];
     "tellstick.sensor" = ps: with ps; [  ];
     "tellstick.switch" = ps: with ps; [  ];
+    "telnet" = ps: with ps; [  ];
+    "telnet.switch" = ps: with ps; [  ];
+    "temper" = ps: with ps; [  ];
+    "temper.sensor" = ps: with ps; [  ];
+    "template" = ps: with ps; [  ];
+    "template.binary_sensor" = ps: with ps; [  ];
+    "template.cover" = ps: with ps; [  ];
+    "template.fan" = ps: with ps; [  ];
+    "template.light" = ps: with ps; [  ];
+    "template.lock" = ps: with ps; [  ];
+    "template.sensor" = ps: with ps; [  ];
+    "template.switch" = ps: with ps; [  ];
+    "tensorflow" = ps: with ps; [  ];
+    "tensorflow.image_processing" = ps: with ps; [ numpy pillow protobuf ];
     "tesla" = ps: with ps; [  ];
     "tesla.binary_sensor" = ps: with ps; [  ];
     "tesla.climate" = ps: with ps; [  ];
@@ -1407,47 +1773,78 @@
     "tesla.lock" = ps: with ps; [  ];
     "tesla.sensor" = ps: with ps; [  ];
     "tesla.switch" = ps: with ps; [  ];
+    "tfiac" = ps: with ps; [  ];
+    "tfiac.climate" = ps: with ps; [  ];
+    "thermoworks_smoke" = ps: with ps; [  ];
+    "thermoworks_smoke.sensor" = ps: with ps; [  ];
     "thethingsnetwork" = ps: with ps; [  ];
     "thethingsnetwork.sensor" = ps: with ps; [  ];
     "thingspeak" = ps: with ps; [  ];
     "thinkingcleaner" = ps: with ps; [  ];
     "thinkingcleaner.sensor" = ps: with ps; [  ];
     "thinkingcleaner.switch" = ps: with ps; [  ];
+    "thomson" = ps: with ps; [  ];
+    "thomson.device_tracker" = ps: with ps; [  ];
+    "threshold" = ps: with ps; [  ];
+    "threshold.binary_sensor" = ps: with ps; [  ];
     "tibber" = ps: with ps; [  ];
     "tibber.notify" = ps: with ps; [  ];
     "tibber.sensor" = ps: with ps; [  ];
+    "tikteck" = ps: with ps; [  ];
+    "tikteck.light" = ps: with ps; [  ];
+    "tile" = ps: with ps; [  ];
+    "tile.device_tracker" = ps: with ps; [  ];
+    "time_date" = ps: with ps; [  ];
+    "time_date.sensor" = ps: with ps; [  ];
     "timer" = ps: with ps; [  ];
+    "tod" = ps: with ps; [  ];
+    "tod.binary_sensor" = ps: with ps; [  ];
+    "todoist" = ps: with ps; [  ];
+    "todoist.calendar" = ps: with ps; [ todoist ];
     "tof" = ps: with ps; [  ];
     "tof.sensor" = ps: with ps; [  ];
+    "tomato" = ps: with ps; [  ];
+    "tomato.device_tracker" = ps: with ps; [  ];
     "toon" = ps: with ps; [  ];
     "toon.binary_sensor" = ps: with ps; [  ];
     "toon.climate" = ps: with ps; [  ];
     "toon.config_flow" = ps: with ps; [  ];
     "toon.const" = ps: with ps; [  ];
     "toon.sensor" = ps: with ps; [  ];
+    "torque" = ps: with ps; [  ];
+    "torque.sensor" = ps: with ps; [ aiohttp-cors ];
+    "totalconnect" = ps: with ps; [  ];
+    "totalconnect.alarm_control_panel" = ps: with ps; [  ];
+    "touchline" = ps: with ps; [  ];
+    "touchline.climate" = ps: with ps; [  ];
     "tplink" = ps: with ps; [  ];
+    "tplink.device_tracker" = ps: with ps; [  ];
     "tplink.light" = ps: with ps; [  ];
     "tplink.switch" = ps: with ps; [  ];
     "tplink_lte" = ps: with ps; [  ];
     "tplink_lte.notify" = ps: with ps; [  ];
+    "traccar" = ps: with ps; [  ];
+    "traccar.device_tracker" = ps: with ps; [  ];
+    "trackr" = ps: with ps; [  ];
+    "trackr.device_tracker" = ps: with ps; [  ];
     "tradfri" = ps: with ps; [  ];
     "tradfri.config_flow" = ps: with ps; [  ];
     "tradfri.const" = ps: with ps; [  ];
     "tradfri.light" = ps: with ps; [  ];
     "tradfri.sensor" = ps: with ps; [  ];
     "tradfri.switch" = ps: with ps; [  ];
+    "trafikverket_weatherstation" = ps: with ps; [  ];
+    "trafikverket_weatherstation.sensor" = ps: with ps; [  ];
     "transmission" = ps: with ps; [ transmissionrpc ];
     "transmission.sensor" = ps: with ps; [ transmissionrpc ];
     "transmission.switch" = ps: with ps; [ transmissionrpc ];
+    "transport_nsw" = ps: with ps; [  ];
+    "transport_nsw.sensor" = ps: with ps; [  ];
+    "travisci" = ps: with ps; [  ];
+    "travisci.sensor" = ps: with ps; [  ];
+    "trend" = ps: with ps; [  ];
+    "trend.binary_sensor" = ps: with ps; [ numpy ];
     "tts" = ps: with ps; [ aiohttp-cors mutagen ];
-    "tts.amazon_polly" = ps: with ps; [ boto3 ];
-    "tts.baidu" = ps: with ps; [  ];
-    "tts.demo" = ps: with ps; [  ];
-    "tts.marytts" = ps: with ps; [  ];
-    "tts.microsoft" = ps: with ps; [  ];
-    "tts.picotts" = ps: with ps; [  ];
-    "tts.voicerss" = ps: with ps; [  ];
-    "tts.yandextts" = ps: with ps; [  ];
     "tuya" = ps: with ps; [  ];
     "tuya.climate" = ps: with ps; [  ];
     "tuya.cover" = ps: with ps; [  ];
@@ -1456,11 +1853,36 @@
     "tuya.scene" = ps: with ps; [  ];
     "tuya.switch" = ps: with ps; [  ];
     "twilio" = ps: with ps; [ aiohttp-cors twilio ];
+    "twilio_call" = ps: with ps; [  ];
+    "twilio_call.notify" = ps: with ps; [ aiohttp-cors twilio ];
+    "twilio_sms" = ps: with ps; [  ];
+    "twilio_sms.notify" = ps: with ps; [ aiohttp-cors twilio ];
+    "twitch" = ps: with ps; [  ];
+    "twitch.sensor" = ps: with ps; [  ];
+    "twitter" = ps: with ps; [  ];
+    "twitter.notify" = ps: with ps; [  ];
+    "ubee" = ps: with ps; [  ];
+    "ubee.device_tracker" = ps: with ps; [  ];
+    "uber" = ps: with ps; [  ];
+    "uber.sensor" = ps: with ps; [  ];
+    "ubus" = ps: with ps; [  ];
+    "ubus.device_tracker" = ps: with ps; [  ];
+    "ue_smart_radio" = ps: with ps; [  ];
+    "ue_smart_radio.media_player" = ps: with ps; [  ];
+    "uk_transport" = ps: with ps; [  ];
+    "uk_transport.sensor" = ps: with ps; [  ];
     "unifi" = ps: with ps; [ aiounifi ];
     "unifi.const" = ps: with ps; [  ];
     "unifi.controller" = ps: with ps; [  ];
+    "unifi.device_tracker" = ps: with ps; [ pyunifi ];
     "unifi.errors" = ps: with ps; [  ];
     "unifi.switch" = ps: with ps; [ aiounifi ];
+    "unifi_direct" = ps: with ps; [  ];
+    "unifi_direct.device_tracker" = ps: with ps; [ pexpect ];
+    "universal" = ps: with ps; [  ];
+    "universal.media_player" = ps: with ps; [  ];
+    "upc_connect" = ps: with ps; [  ];
+    "upc_connect.device_tracker" = ps: with ps; [ defusedxml ];
     "upcloud" = ps: with ps; [  ];
     "upcloud.binary_sensor" = ps: with ps; [  ];
     "upcloud.switch" = ps: with ps; [  ];
@@ -1469,16 +1891,27 @@
     "upnp.const" = ps: with ps; [  ];
     "upnp.device" = ps: with ps; [  ];
     "upnp.sensor" = ps: with ps; [  ];
+    "ups" = ps: with ps; [  ];
+    "ups.sensor" = ps: with ps; [  ];
+    "uptime" = ps: with ps; [  ];
+    "uptime.sensor" = ps: with ps; [  ];
+    "uptimerobot" = ps: with ps; [  ];
+    "uptimerobot.binary_sensor" = ps: with ps; [  ];
+    "uscis" = ps: with ps; [  ];
+    "uscis.sensor" = ps: with ps; [  ];
+    "usgs_earthquakes_feed" = ps: with ps; [  ];
+    "usgs_earthquakes_feed.geo_location" = ps: with ps; [  ];
     "usps" = ps: with ps; [  ];
     "usps.camera" = ps: with ps; [  ];
     "usps.sensor" = ps: with ps; [  ];
     "utility_meter" = ps: with ps; [  ];
     "utility_meter.const" = ps: with ps; [  ];
     "utility_meter.sensor" = ps: with ps; [  ];
+    "uvc" = ps: with ps; [  ];
+    "uvc.camera" = ps: with ps; [  ];
     "vacuum" = ps: with ps; [  ];
-    "vacuum.demo" = ps: with ps; [  ];
-    "vacuum.dyson" = ps: with ps; [  ];
-    "vacuum.roomba" = ps: with ps; [  ];
+    "vasttrafik" = ps: with ps; [  ];
+    "vasttrafik.sensor" = ps: with ps; [  ];
     "velbus" = ps: with ps; [  ];
     "velbus.binary_sensor" = ps: with ps; [  ];
     "velbus.climate" = ps: with ps; [  ];
@@ -1488,6 +1921,8 @@
     "velux" = ps: with ps; [  ];
     "velux.cover" = ps: with ps; [  ];
     "velux.scene" = ps: with ps; [  ];
+    "venstar" = ps: with ps; [  ];
+    "venstar.climate" = ps: with ps; [  ];
     "vera" = ps: with ps; [  ];
     "vera.binary_sensor" = ps: with ps; [  ];
     "vera.climate" = ps: with ps; [  ];
@@ -1504,6 +1939,22 @@
     "verisure.lock" = ps: with ps; [  ];
     "verisure.sensor" = ps: with ps; [  ];
     "verisure.switch" = ps: with ps; [  ];
+    "version" = ps: with ps; [  ];
+    "version.sensor" = ps: with ps; [  ];
+    "vesync" = ps: with ps; [  ];
+    "vesync.switch" = ps: with ps; [  ];
+    "viaggiatreno" = ps: with ps; [  ];
+    "viaggiatreno.sensor" = ps: with ps; [  ];
+    "vizio" = ps: with ps; [  ];
+    "vizio.media_player" = ps: with ps; [  ];
+    "vlc" = ps: with ps; [  ];
+    "vlc.media_player" = ps: with ps; [  ];
+    "voicerss" = ps: with ps; [  ];
+    "voicerss.tts" = ps: with ps; [  ];
+    "volkszaehler" = ps: with ps; [  ];
+    "volkszaehler.sensor" = ps: with ps; [  ];
+    "volumio" = ps: with ps; [  ];
+    "volumio.media_player" = ps: with ps; [  ];
     "volvooncall" = ps: with ps; [  ];
     "volvooncall.binary_sensor" = ps: with ps; [  ];
     "volvooncall.device_tracker" = ps: with ps; [  ];
@@ -1511,25 +1962,22 @@
     "volvooncall.sensor" = ps: with ps; [  ];
     "volvooncall.switch" = ps: with ps; [  ];
     "vultr" = ps: with ps; [ vultr ];
+    "vultr.binary_sensor" = ps: with ps; [ vultr ];
+    "vultr.sensor" = ps: with ps; [ vultr ];
+    "vultr.switch" = ps: with ps; [ vultr ];
     "w800rf32" = ps: with ps; [  ];
     "w800rf32.binary_sensor" = ps: with ps; [  ];
     "wake_on_lan" = ps: with ps; [ wakeonlan ];
+    "wake_on_lan.switch" = ps: with ps; [ wakeonlan ];
+    "waqi" = ps: with ps; [  ];
+    "waqi.sensor" = ps: with ps; [  ];
     "water_heater" = ps: with ps; [  ];
-    "water_heater.demo" = ps: with ps; [  ];
-    "water_heater.econet" = ps: with ps; [  ];
     "waterfurnace" = ps: with ps; [  ];
     "waterfurnace.sensor" = ps: with ps; [  ];
     "watson_iot" = ps: with ps; [  ];
+    "waze_travel_time" = ps: with ps; [  ];
+    "waze_travel_time.sensor" = ps: with ps; [ WazeRouteCalculator ];
     "weather" = ps: with ps; [  ];
-    "weather.bom" = ps: with ps; [  ];
-    "weather.buienradar" = ps: with ps; [  ];
-    "weather.darksky" = ps: with ps; [ python-forecastio ];
-    "weather.demo" = ps: with ps; [  ];
-    "weather.met" = ps: with ps; [  ];
-    "weather.metoffice" = ps: with ps; [  ];
-    "weather.openweathermap" = ps: with ps; [ pyowm ];
-    "weather.yweather" = ps: with ps; [ yahooweather ];
-    "weather.zamg" = ps: with ps; [  ];
     "webhook" = ps: with ps; [ aiohttp-cors ];
     "weblink" = ps: with ps; [  ];
     "webostv" = ps: with ps; [  ];
@@ -1545,11 +1993,14 @@
     "websocket_api.http" = ps: with ps; [  ];
     "websocket_api.messages" = ps: with ps; [  ];
     "websocket_api.permissions" = ps: with ps; [  ];
+    "websocket_api.sensor" = ps: with ps; [  ];
     "wemo" = ps: with ps; [  ];
     "wemo.binary_sensor" = ps: with ps; [  ];
     "wemo.fan" = ps: with ps; [  ];
     "wemo.light" = ps: with ps; [  ];
     "wemo.switch" = ps: with ps; [  ];
+    "whois" = ps: with ps; [  ];
+    "whois.sensor" = ps: with ps; [  ];
     "wink" = ps: with ps; [  ];
     "wink.alarm_control_panel" = ps: with ps; [  ];
     "wink.binary_sensor" = ps: with ps; [  ];
@@ -1566,7 +2017,30 @@
     "wirelesstag.binary_sensor" = ps: with ps; [  ];
     "wirelesstag.sensor" = ps: with ps; [  ];
     "wirelesstag.switch" = ps: with ps; [  ];
+    "workday" = ps: with ps; [  ];
+    "workday.binary_sensor" = ps: with ps; [  ];
+    "worldclock" = ps: with ps; [  ];
+    "worldclock.sensor" = ps: with ps; [  ];
+    "worldtidesinfo" = ps: with ps; [  ];
+    "worldtidesinfo.sensor" = ps: with ps; [  ];
+    "worxlandroid" = ps: with ps; [  ];
+    "worxlandroid.sensor" = ps: with ps; [  ];
+    "wsdot" = ps: with ps; [  ];
+    "wsdot.sensor" = ps: with ps; [  ];
+    "wunderground" = ps: with ps; [  ];
+    "wunderground.sensor" = ps: with ps; [  ];
     "wunderlist" = ps: with ps; [  ];
+    "x10" = ps: with ps; [  ];
+    "x10.light" = ps: with ps; [  ];
+    "xbox_live" = ps: with ps; [  ];
+    "xbox_live.sensor" = ps: with ps; [  ];
+    "xeoma" = ps: with ps; [  ];
+    "xeoma.camera" = ps: with ps; [  ];
+    "xfinity" = ps: with ps; [  ];
+    "xfinity.device_tracker" = ps: with ps; [  ];
+    "xiaomi" = ps: with ps; [  ];
+    "xiaomi.camera" = ps: with ps; [ ha-ffmpeg ];
+    "xiaomi.device_tracker" = ps: with ps; [  ];
     "xiaomi_aqara" = ps: with ps; [  ];
     "xiaomi_aqara.binary_sensor" = ps: with ps; [  ];
     "xiaomi_aqara.cover" = ps: with ps; [  ];
@@ -1582,13 +2056,46 @@
     "xiaomi_miio.sensor" = ps: with ps; [ construct ];
     "xiaomi_miio.switch" = ps: with ps; [ construct ];
     "xiaomi_miio.vacuum" = ps: with ps; [ construct ];
+    "xiaomi_tv" = ps: with ps; [  ];
+    "xiaomi_tv.media_player" = ps: with ps; [  ];
+    "xmpp" = ps: with ps; [  ];
+    "xmpp.notify" = ps: with ps; [ slixmpp ];
     "xs1" = ps: with ps; [  ];
     "xs1.climate" = ps: with ps; [  ];
     "xs1.sensor" = ps: with ps; [  ];
     "xs1.switch" = ps: with ps; [  ];
+    "yale_smart_alarm" = ps: with ps; [  ];
+    "yale_smart_alarm.alarm_control_panel" = ps: with ps; [  ];
+    "yamaha" = ps: with ps; [  ];
+    "yamaha.media_player" = ps: with ps; [  ];
+    "yamaha_musiccast" = ps: with ps; [  ];
+    "yamaha_musiccast.media_player" = ps: with ps; [  ];
+    "yandextts" = ps: with ps; [  ];
+    "yandextts.tts" = ps: with ps; [  ];
+    "yeelight" = ps: with ps; [  ];
+    "yeelight.binary_sensor" = ps: with ps; [  ];
+    "yeelight.light" = ps: with ps; [  ];
+    "yeelightsunflower" = ps: with ps; [  ];
+    "yeelightsunflower.light" = ps: with ps; [  ];
+    "yessssms" = ps: with ps; [  ];
+    "yessssms.notify" = ps: with ps; [  ];
+    "yi" = ps: with ps; [  ];
+    "yi.camera" = ps: with ps; [ ha-ffmpeg ];
+    "yr" = ps: with ps; [  ];
+    "yr.sensor" = ps: with ps; [ xmltodict ];
+    "yweather" = ps: with ps; [  ];
+    "yweather.sensor" = ps: with ps; [ yahooweather ];
+    "yweather.weather" = ps: with ps; [ yahooweather ];
     "zabbix" = ps: with ps; [  ];
     "zabbix.sensor" = ps: with ps; [  ];
+    "zamg" = ps: with ps; [  ];
+    "zamg.sensor" = ps: with ps; [  ];
+    "zamg.weather" = ps: with ps; [  ];
+    "zengge" = ps: with ps; [  ];
+    "zengge.light" = ps: with ps; [  ];
     "zeroconf" = ps: with ps; [ aiohttp-cors zeroconf ];
+    "zestimate" = ps: with ps; [  ];
+    "zestimate.sensor" = ps: with ps; [ xmltodict ];
     "zha" = ps: with ps; [  ];
     "zha.api" = ps: with ps; [  ];
     "zha.binary_sensor" = ps: with ps; [  ];
@@ -1601,11 +2108,15 @@
     "zha.light" = ps: with ps; [  ];
     "zha.sensor" = ps: with ps; [  ];
     "zha.switch" = ps: with ps; [  ];
+    "zhong_hong" = ps: with ps; [  ];
+    "zhong_hong.climate" = ps: with ps; [  ];
     "zigbee" = ps: with ps; [  ];
     "zigbee.binary_sensor" = ps: with ps; [  ];
     "zigbee.light" = ps: with ps; [  ];
     "zigbee.sensor" = ps: with ps; [  ];
     "zigbee.switch" = ps: with ps; [  ];
+    "ziggo_mediabox_xl" = ps: with ps; [  ];
+    "ziggo_mediabox_xl.media_player" = ps: with ps; [  ];
     "zone" = ps: with ps; [  ];
     "zone.config_flow" = ps: with ps; [  ];
     "zone.const" = ps: with ps; [  ];
diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix
index 9e5fb6bfb008..85aa4caf0833 100644
--- a/pkgs/servers/home-assistant/default.nix
+++ b/pkgs/servers/home-assistant/default.nix
@@ -48,8 +48,8 @@ let
       "3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf")
     (mkOverride "requests" "2.21.0"
       "502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e")
-    (mkOverride "ruamel_yaml" "0.15.88"
-      "ac56193c47a31c9efa151064a9e921865cdad0f7a991d229e7197e12fe8e0cd7")
+    (mkOverride "ruamel_yaml" "0.15.89"
+      "86d034aa9e2ab3eacc5f75f5cd6a469a2af533b6d9e60ea92edbba540d21b9b7")
     (mkOverride "voluptuous" "0.11.5"
       "567a56286ef82a9d7ae0628c5842f65f516abcb496e74f3f59f1d7b28df314ef")
     (mkOverride "voluptuous-serialize" "2.1.0"
@@ -97,7 +97,7 @@ let
   extraBuildInputs = extraPackages py.pkgs;
 
   # Don't forget to run parse-requirements.py after updating
-  hassVersion = "0.90.2";
+  hassVersion = "0.91.1";
 
 in with py.pkgs; buildPythonApplication rec {
   pname = "homeassistant";
@@ -112,7 +112,7 @@ in with py.pkgs; buildPythonApplication rec {
     owner = "home-assistant";
     repo = "home-assistant";
     rev = version;
-    sha256 = "0byikidvrvx8nxgddhpqz609rxb91j1kcppziv4ibb57g6lj7iwx";
+    sha256 = "1y2sv9qq7zmb85n2f5b3csnc60xi87ccpkmhz8ii9gkjw6swikyh";
   };
 
   propagatedBuildInputs = [
@@ -133,7 +133,7 @@ in with py.pkgs; buildPythonApplication rec {
     # Some basic components should be tested however
     py.test \
       tests/components/{api,config,configurator,demo,discovery,frontend,group,history,history_graph} \
-      tests/components/{http,init,introduction,logger,script,shell_command,system_log,websocket_api}
+      tests/components/{homeassistant,http,introduction,logger,script,shell_command,system_log,websocket_api}
   '';
 
   makeWrapperArgs = lib.optional skipPip "--add-flags --skip-pip";
diff --git a/pkgs/servers/home-assistant/frontend.nix b/pkgs/servers/home-assistant/frontend.nix
index a011e35ae64e..f8349c24f7fb 100644
--- a/pkgs/servers/home-assistant/frontend.nix
+++ b/pkgs/servers/home-assistant/frontend.nix
@@ -2,11 +2,11 @@
 
 buildPythonPackage rec {
   pname = "home-assistant-frontend";
-  version = "20190321.0";
+  version = "20190331.0";
 
   src = fetchPypi {
     inherit pname version;
-    sha256 = "0sk96mnmvsbcqjjcrlgfsxkywms0zmajjgn3ibvk4sfn5wn53bg7";
+    sha256 = "2d266a4d3d31af9a50debb99b0e9e9650044698f9157753bec785785057264cf";
   };
 
   propagatedBuildInputs = [ user-agents ];
diff --git a/pkgs/servers/monitoring/grafana/default.nix b/pkgs/servers/monitoring/grafana/default.nix
index 73705c3c963c..7021b2210bd5 100644
--- a/pkgs/servers/monitoring/grafana/default.nix
+++ b/pkgs/servers/monitoring/grafana/default.nix
@@ -1,7 +1,7 @@
 { lib, buildGoPackage, fetchurl, fetchFromGitHub, phantomjs2 }:
 
 buildGoPackage rec {
-  version = "6.1.0";
+  version = "6.1.1";
   name = "grafana-${version}";
   goPackagePath = "github.com/grafana/grafana";
 
@@ -11,12 +11,12 @@ buildGoPackage rec {
     rev = "v${version}";
     owner = "grafana";
     repo = "grafana";
-    sha256 = "0h66ndqpbv2l1srn3z4qjg78d69146ryynkvn5ynrbvka4fzg0yp";
+    sha256 = "1n7wr89sbpdi1zpqvmyidp9y0mjdnxgdv7bj6gc9kkp6dskqk1r8";
   };
 
   srcStatic = fetchurl {
     url = "https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-${version}.linux-amd64.tar.gz";
-    sha256 = "0180zfm9py0ah74vh384cxbvgnx5mfbkdc8fbiqlmfz0wvlpvz7q";
+    sha256 = "0dbqqm3z2z4bxgq9y2lbjx6znjgqmsyz8qih2b4z6j3fvixfa5sw";
   };
 
   postPatch = ''
diff --git a/pkgs/servers/sonarr/default.nix b/pkgs/servers/sonarr/default.nix
index 7405f716933b..12cd3bfaad93 100644
--- a/pkgs/servers/sonarr/default.nix
+++ b/pkgs/servers/sonarr/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   name = "sonarr-${version}";
-  version = "2.0.0.5301";
+  version = "2.0.0.5322";
 
   src = fetchurl {
     url = "https://download.sonarr.tv/v2/master/mono/NzbDrone.master.${version}.mono.tar.gz";
-    sha256 = "16jjxs0gj5jdy0r4ynhck36b2balphqj24n2gfabrlgxsc6g20jv";
+    sha256 = "0vwljxnlrrssbdzxqq4yr93v323gr3x6jmg30gki58anf012q9pw";
   };
 
   buildInputs = [
diff --git a/pkgs/tools/misc/ffsend/default.nix b/pkgs/tools/misc/ffsend/default.nix
index 0ba3472ae702..c59ddd084983 100644
--- a/pkgs/tools/misc/ffsend/default.nix
+++ b/pkgs/tools/misc/ffsend/default.nix
@@ -2,34 +2,39 @@
 , darwin
 
 , x11Support ? stdenv.isLinux
-, xclip ? null
+, xclip ? null, xsel ? null
+, preferXsel ? false # if true and xsel is non-null, use it instead of xclip
 }:
 
-assert x11Support -> xclip != null;
+assert (x11Support && stdenv.isLinux) -> xclip != null || xsel != null;
 
 with rustPlatform;
 
 buildRustPackage rec {
   name = "ffsend-${version}";
-  version = "0.2.39";
+  version = "0.2.42";
 
   src = fetchFromGitLab {
     owner = "timvisee";
     repo = "ffsend";
     rev = "v${version}";
-    sha256 = "0109g2h8673q6kx1lbci59zg9iczj676fvbip3sf1xfypvca22j9";
+    sha256 = "0lsdn967rq6hf3fmkynznsvj8fcka5wi1mpcl3wfa7hf58r266yq";
   };
 
-  cargoSha256 = "0yf9zfilj2whhnmbvh8p8vz4gkd8ds21gshylwp4ykqwv5p59nqq";
+  cargoSha256 = "1f1npdr8v9vlv3xdraq1qang4l0j0w9slbws4da5ylw195nb4qx5";
 
   nativeBuildInputs = [ cmake pkgconfig ];
   buildInputs = [ openssl ]
   ++ stdenv.lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices Security AppKit ])
   ;
 
-  preBuild = if x11Support then ''
-    export XCLIP_PATH="${xclip}/bin/xclip"
-  '' else null;
+  preBuild = stdenv.lib.optionalString (x11Support && stdenv.isLinux) (
+    if preferXsel && xsel != null then ''
+      export XSEL_PATH="${xsel}/bin/xsel"
+    '' else ''
+      export XCLIP_PATH="${xclip}/bin/xclip"
+    ''
+  );
 
   postInstall = ''
     install -Dm644 contrib/completions/_ffsend "$out/share/zsh/site-functions/_ffsend"
diff --git a/pkgs/tools/misc/nginx-config-formatter/default.nix b/pkgs/tools/misc/nginx-config-formatter/default.nix
index 37218f848684..e19eac1c51e5 100644
--- a/pkgs/tools/misc/nginx-config-formatter/default.nix
+++ b/pkgs/tools/misc/nginx-config-formatter/default.nix
@@ -1,14 +1,14 @@
 { stdenv, fetchFromGitHub, python3 }:
 
 stdenv.mkDerivation rec {
-  version = "2016-06-16";
+  version = "2019-02-13";
   name = "nginx-config-formatter-${version}";
 
   src = fetchFromGitHub {
     owner = "1connect";
     repo = "nginx-config-formatter";
-    rev = "fe5c77d2a503644bebee2caaa8b222c201c0603d";
-    sha256 = "0akpkbq5136k1i1z1ls6yksis35hbr70k8vd10laqwvr1jj41bga";
+    rev = "4ea6bbc1bdeb1d28419548aeca90f323e64e0e05";
+    sha256 = "0h6pj9i0wim9pzkafi92l1nhlnl2a530vnm7qqi3n2ra8iwfyw4f";
   };
 
   buildInputs = [ python3 ];
diff --git a/pkgs/tools/misc/tlp/default.nix b/pkgs/tools/misc/tlp/default.nix
index 39d3ea1c2086..2cdb8aff472e 100644
--- a/pkgs/tools/misc/tlp/default.nix
+++ b/pkgs/tools/misc/tlp/default.nix
@@ -1,6 +1,7 @@
 { stdenv, lib, fetchFromGitHub, perl, makeWrapper, file, systemd, iw, rfkill
 , hdparm, ethtool, inetutils , kmod, pciutils, smartmontools
 , x86_energy_perf_policy, gawk, gnugrep, coreutils, utillinux
+, checkbashisms, shellcheck
 , enableRDW ? false, networkmanager
 }:
 
@@ -14,28 +15,31 @@ let
 
 in stdenv.mkDerivation rec {
   name = "tlp-${version}";
-  version = "1.1";
+  version = "1.2.1";
 
   src = fetchFromGitHub {
-        owner = "linrunner";
-        repo = "TLP";
-        rev = "${version}";
-        sha256 = "01bhb9hdsck1g2s5jvafr3ywml9k2qz7x2cf42a3z8g5d23pdfpy";
-      };
+    owner = "linrunner";
+    repo = "TLP";
+    rev = version;
+    sha256 = "1msldl6y8fpvxa9p87lv3hvgxwk2vpiahqmapq485ihdjkshc558";
+  };
+
+  outRef = placeholder "out";
 
-  makeFlags = [ "DESTDIR=$(out)"
-                "TLP_SBIN=$(out)/bin"
-                "TLP_BIN=$(out)/bin"
-                "TLP_TLIB=$(out)/share/tlp-pm"
-                "TLP_PLIB=$(out)/lib/pm-utils"
-                "TLP_ULIB=$(out)/lib/udev"
-                "TLP_NMDSP=$(out)/etc/NetworkManager/dispatcher.d"
-                "TLP_SHCPL=$(out)/share/bash-completion/completions"
-                "TLP_MAN=$(out)/share/man"
+  makeFlags = [
+    "DESTDIR=${outRef}"
+    "TLP_SBIN=${outRef}/bin"
+    "TLP_BIN=${outRef}/bin"
+    "TLP_TLIB=${outRef}/share/tlp"
+    "TLP_FLIB=${outRef}/share/tlp/func.d"
+    "TLP_ULIB=${outRef}/lib/udev"
+    "TLP_NMDSP=${outRef}/etc/NetworkManager/dispatcher.d"
+    "TLP_SHCPL=${outRef}/share/bash-completion/completions"
+    "TLP_MAN=${outRef}/share/man"
+    "TLP_META=${outRef}/share/metainfo"
 
-                "TLP_NO_INIT=1"
-                "TLP_NO_PMUTILS=1"
-              ];
+    "TLP_NO_INIT=1"
+  ];
 
   nativeBuildInputs = [ makeWrapper file ];
 
@@ -43,6 +47,14 @@ in stdenv.mkDerivation rec {
 
   installTargets = [ "install-tlp" "install-man" ] ++ stdenv.lib.optional enableRDW "install-rdw";
 
+  checkInputs = [
+    checkbashisms
+    shellcheck
+  ];
+
+  doCheck = true;
+  checkTarget = [ "checkall" ];
+
   postInstall = ''
     cp -r $out/$out/* $out
     rm -rf $out/$(echo "$NIX_STORE" | cut -d "/" -f2)
diff --git a/pkgs/tools/misc/vdirsyncer/default.nix b/pkgs/tools/misc/vdirsyncer/default.nix
index af8d0862d1bb..603492718d0e 100644
--- a/pkgs/tools/misc/vdirsyncer/default.nix
+++ b/pkgs/tools/misc/vdirsyncer/default.nix
@@ -1,4 +1,4 @@
-{ stdenv, python3Packages, fetchFromGitHub, fetchpatch, glibcLocales, rustPlatform, pkgconfig, openssl, Security }:
+{ stdenv, python3Packages, fetchFromGitHub, fetchpatch, rustPlatform, pkgconfig, openssl, Security }:
 
 # Packaging documentation at:
 # https://github.com/untitaker/vdirsyncer/blob/master/docs/packaging.rst
@@ -32,9 +32,9 @@ python3Packages.buildPythonApplication rec {
     shippai
   ];
 
-  buildInputs = with python3Packages; [ setuptools_scm ];
+  nativeBuildInputs = with python3Packages; [ setuptools_scm ];
 
-  checkInputs = with python3Packages; [ hypothesis pytest pytest-localserver pytest-subtesthack ] ++ [ glibcLocales ];
+  checkInputs = with python3Packages; [ hypothesis pytest pytest-localserver pytest-subtesthack ];
 
   patches = [
     # Fixes for hypothesis: https://github.com/pimutils/vdirsyncer/pull/779
@@ -66,11 +66,8 @@ python3Packages.buildPythonApplication rec {
     ln -s ${native}/lib/libvdirsyncer_rustext* rust/target/release/
   '';
 
-  LC_ALL = "en_US.utf8";
-
   checkPhase = ''
     rm -rf vdirsyncer
-    export PYTHONPATH=$out/${python3Packages.python.sitePackages}:$PYTHONPATH
     make DETERMINISTIC_TESTS=true test
   '';
 
@@ -78,7 +75,6 @@ python3Packages.buildPythonApplication rec {
     homepage = https://github.com/pimutils/vdirsyncer;
     description = "Synchronize calendars and contacts";
     maintainers = with maintainers; [ matthiasbeyer ];
-    platforms = platforms.all;
     license = licenses.mit;
   };
 }
diff --git a/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix b/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix
index a7b564be868e..7cedd0f23b41 100644
--- a/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix
+++ b/pkgs/tools/networking/dnscrypt-proxy/2.x/default.nix
@@ -2,15 +2,15 @@
 
 buildGoPackage rec {
   name = "dnscrypt-proxy2-${version}";
-  version = "2.0.21";
+  version = "2.0.22";
 
   goPackagePath = "github.com/jedisct1/dnscrypt-proxy";
 
   src = fetchFromGitHub {
     owner = "jedisct1";
     repo = "dnscrypt-proxy";
-    rev = "${version}";
-    sha256 = "00sz5gn4l56rp4xcvxfpq6c64inpgzbwpqy1yc5sima6ijrayi9g";
+    rev = version;
+    sha256 = "0rmiyqxbbc3gjnfvyggf2lckckliiijq528993gv0n875r7ahkix";
   };
 
   meta = with stdenv.lib; {
diff --git a/pkgs/tools/networking/i2p/default.nix b/pkgs/tools/networking/i2p/default.nix
index ceadc231143f..2745c8c1d84d 100644
--- a/pkgs/tools/networking/i2p/default.nix
+++ b/pkgs/tools/networking/i2p/default.nix
@@ -27,10 +27,10 @@ let wrapper = stdenv.mkDerivation rec {
 in
 
 stdenv.mkDerivation rec {
-  name = "i2p-0.9.38";
+  name = "i2p-0.9.39";
   src = fetchurl {
     url = "https://github.com/i2p/i2p.i2p/archive/${name}.tar.gz";
-    sha256 = "0fxn8q6ccpjxr41s97nmjxg7hx12dzwrm5a7gyxgr44r7l77qlv6";
+    sha256 = "0d6g0ffv2b0ghjjp3ndal8n9maw5y0n36vqrylhh5zr1hffvxx9i";
   };
   buildInputs = [ jdk ant gettext which ];
   patches = [ ./i2p.patch ];
diff --git a/pkgs/tools/system/rsyslog/default.nix b/pkgs/tools/system/rsyslog/default.nix
index 0ce6cb12a638..a907225914c4 100644
--- a/pkgs/tools/system/rsyslog/default.nix
+++ b/pkgs/tools/system/rsyslog/default.nix
@@ -11,11 +11,11 @@ let
   mkFlag = cond: name: if cond then "--enable-${name}" else "--disable-${name}";
 in
 stdenv.mkDerivation rec {
-  name = "rsyslog-8.39.0";
+  name = "rsyslog-8.1903.0";
 
   src = fetchurl {
     url = "https://www.rsyslog.com/files/download/rsyslog/${name}.tar.gz";
-    sha256 = "1d3ac448b8gj58vg7n99ffv2rvpnhhin1ni5vyby73aksvz9c7y7";
+    sha256 = "0vq50k9n3dlb02431zy2c0vhzvb4x27bp887d1xlrinf7m4kmlnh";
   };
 
   #patches = [ ./fix-gnutls-detection.patch ];
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 028352a0d1d1..640c3803b050 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -1180,6 +1180,8 @@ in
 
   cfdyndns = callPackage ../applications/networking/dyndns/cfdyndns { };
 
+  charliecloud = callPackage ../applications/virtualization/charliecloud { };
+
   chelf = callPackage ../tools/misc/chelf { };
 
   cht-sh = callPackage ../tools/misc/cht.sh { };
@@ -16610,6 +16612,7 @@ in
   calligra = libsForQt5.callPackage ../applications/office/calligra {
     inherit (kdeApplications) akonadi-calendar akonadi-contacts;
     openjpeg = openjpeg_1;
+    poppler = poppler_0_61;
   };
 
   perkeep = callPackage ../applications/misc/perkeep { };
@@ -17732,7 +17735,7 @@ in
 
   graphicsmagick-imagemagick-compat = callPackage ../applications/graphics/graphicsmagick/compat.nix { };
 
-  grisbi = callPackage ../applications/office/grisbi { gtk = gtk2; };
+  grisbi = callPackage ../applications/office/grisbi { gtk = gtk3; };
 
   gtkpod = callPackage ../applications/audio/gtkpod { };
 
diff --git a/pkgs/top-level/dotnet-packages.nix b/pkgs/top-level/dotnet-packages.nix
index bcfef9bdad88..b8aa2cb9bb99 100644
--- a/pkgs/top-level/dotnet-packages.nix
+++ b/pkgs/top-level/dotnet-packages.nix
@@ -108,6 +108,13 @@ let self = dotnetPackages // overrides; dotnetPackages = with self; {
     outputFiles = [ "*" ];
   };
 
+  FsLexYaccRuntime = fetchNuGet {
+    baseName = "FsLexYacc.Runtime";
+    version = "6.1.0";
+    sha256 = "18vrx4lxsn4hkfishg4abv0d4q21dsph0bm4mdq5z8afaypp5cr7";
+    outputFiles = [ "lib/net40/*" ];
+  };
+
   FsPickler = fetchNuGet {
     baseName = "FsPickler";
     version = "1.2.9";
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index aad6a3976f40..1cabba8ea42f 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -4738,6 +4738,8 @@ in {
 
   zfec = callPackage ../development/python-modules/zfec { };
 
+  zipp = callPackage ../development/python-modules/zipp { };
+
   zope_broken = callPackage ../development/python-modules/zope_broken { };
 
   zope_component = callPackage ../development/python-modules/zope_component { };