diff --git a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
index 0f768fbe7a89..8af8f1dd6437 100644
--- a/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
+++ b/nixos/doc/manual/from_md/release-notes/rl-2111.section.xml
@@ -116,6 +116,13 @@
services.kea.
+
+
+ owncast,
+ self-hosted video live streaming solution. Available at
+ services.owncast.
+
+
sourcehut, a
diff --git a/nixos/doc/manual/release-notes/rl-2111.section.md b/nixos/doc/manual/release-notes/rl-2111.section.md
index e169c0a5b8d2..f22a532972be 100644
--- a/nixos/doc/manual/release-notes/rl-2111.section.md
+++ b/nixos/doc/manual/release-notes/rl-2111.section.md
@@ -39,6 +39,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [Kea](https://www.isc.org/kea/), ISCs 2nd generation DHCP and DDNS server suite. Available at [services.kea](options.html#opt-services.kea).
+- [owncast](https://owncast.online/), self-hosted video live streaming solution. Available at [services.owncast](options.html#opt-services.owncast).
+
- [sourcehut](https://sr.ht), a collection of tools useful for software development. Available as [services.sourcehut](options.html#opt-services.sourcehut.enable).
- [ucarp](https://download.pureftpd.org/pub/ucarp/README), an userspace implementation of the Common Address Redundancy Protocol (CARP). Available as [networking.ucarp](options.html#opt-networking.ucarp.enable).
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix
index a7decf889877..a27baa701834 100644
--- a/nixos/modules/module-list.nix
+++ b/nixos/modules/module-list.nix
@@ -560,6 +560,7 @@
./services/misc/octoprint.nix
./services/misc/ombi.nix
./services/misc/osrm.nix
+ ./services/misc/owncast.nix
./services/misc/packagekit.nix
./services/misc/paperless-ng.nix
./services/misc/parsoid.nix
diff --git a/nixos/modules/services/misc/owncast.nix b/nixos/modules/services/misc/owncast.nix
new file mode 100644
index 000000000000..0852335238fd
--- /dev/null
+++ b/nixos/modules/services/misc/owncast.nix
@@ -0,0 +1,98 @@
+{ lib, pkgs, config, ... }:
+with lib;
+let cfg = config.services.owncast;
+in {
+
+ options.services.owncast = {
+
+ enable = mkEnableOption "owncast";
+
+ dataDir = mkOption {
+ type = types.str;
+ default = "/var/lib/owncast";
+ description = ''
+ The directory where owncast stores its data files. If left as the default value this directory will automatically be created before the owncast server starts, otherwise the sysadmin is responsible for ensuring the directory exists with appropriate ownership and permissions.
+ '';
+ };
+
+ openFirewall = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Open the appropriate ports in the firewall for owncast.
+ '';
+ };
+
+ user = mkOption {
+ type = types.str;
+ default = "owncast";
+ description = "User account under which owncast runs.";
+ };
+
+ group = mkOption {
+ type = types.str;
+ default = "owncast";
+ description = "Group under which owncast runs.";
+ };
+
+ listen = mkOption {
+ type = types.str;
+ default = "127.0.0.1";
+ example = "0.0.0.0";
+ description = "The IP address to bind the owncast web server to.";
+ };
+
+ port = mkOption {
+ type = types.port;
+ default = 8080;
+ description = ''
+ TCP port where owncast web-gui listens.
+ '';
+ };
+
+ rtmp-port = mkOption {
+ type = types.port;
+ default = 1935;
+ description = ''
+ TCP port where owncast rtmp service listens.
+ '';
+ };
+
+ };
+
+ config = mkIf cfg.enable {
+
+ systemd.services.owncast = {
+ description = "A self-hosted live video and web chat server";
+ wantedBy = [ "multi-user.target" ];
+
+ serviceConfig = mkMerge [
+ {
+ User = cfg.user;
+ Group = cfg.group;
+ WorkingDirectory = cfg.dataDir;
+ ExecStart = "${pkgs.owncast}/bin/owncast -webserverport ${toString cfg.port} -rtmpport ${toString cfg.rtmp-port} -webserverip ${cfg.listen}";
+ Restart = "on-failure";
+ }
+ (mkIf (cfg.dataDir == "/var/lib/owncast") {
+ StateDirectory = "owncast";
+ })
+ ];
+ };
+
+ users.users = mkIf (cfg.user == "owncast") {
+ owncast = {
+ isSystemUser = true;
+ group = cfg.group;
+ description = "owncast system user";
+ };
+ };
+
+ users.groups = mkIf (cfg.group == "owncast") { owncast = { }; };
+
+ networking.firewall =
+ mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.rtmp-port ] ++ optional (cfg.listen != "127.0.0.1") cfg.port; };
+
+ };
+ meta = { maintainers = with lib.maintainers; [ MayNiklas ]; };
+}
diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix
index 66b0f4f258d3..3f19aa397a78 100644
--- a/nixos/tests/all-tests.nix
+++ b/nixos/tests/all-tests.nix
@@ -327,6 +327,7 @@ in
openstack-image-metadata = (handleTestOn ["x86_64-linux"] ./openstack-image.nix {}).metadata or {};
openstack-image-userdata = (handleTestOn ["x86_64-linux"] ./openstack-image.nix {}).userdata or {};
opentabletdriver = handleTest ./opentabletdriver.nix {};
+ owncast = handleTest ./owncast.nix {};
image-contents = handleTest ./image-contents.nix {};
orangefs = handleTest ./orangefs.nix {};
os-prober = handleTestOn ["x86_64-linux"] ./os-prober.nix {};
diff --git a/nixos/tests/owncast.nix b/nixos/tests/owncast.nix
new file mode 100644
index 000000000000..e54d2cc5dd48
--- /dev/null
+++ b/nixos/tests/owncast.nix
@@ -0,0 +1,21 @@
+{ system ? builtins.currentSystem, config ? { }
+, pkgs ? import ../.. { inherit system config; } }:
+
+with import (nixpkgs + "/nixos/lib/testing-python.nix") { inherit system; };
+makeTest {
+ name = "owncast";
+ meta = with pkgs.stdenv.lib.maintainers; { maintainers = [ MayNiklas ]; };
+
+ nodes = {
+ client = { ... }: {
+ environment.systemPackages = [ curl ];
+ services.owncast = { enable = true; };
+ };
+ };
+
+ testScript = ''
+ start_all()
+ client.wait_for_unit("owncast.service")
+ client.succeed("curl localhost:8080/api/status")
+ '';
+}
diff --git a/pkgs/applications/misc/joshuto/default.nix b/pkgs/applications/misc/joshuto/default.nix
index 89e5aea943a5..5497d37ef0e1 100644
--- a/pkgs/applications/misc/joshuto/default.nix
+++ b/pkgs/applications/misc/joshuto/default.nix
@@ -2,23 +2,19 @@
rustPlatform.buildRustPackage rec {
pname = "joshuto";
- version = "0.9.0";
+ version = "0.9.1";
src = fetchFromGitHub {
owner = "kamiyaa";
repo = pname;
rev = version;
- sha256 = "08d6h7xwcgycw5bdzwwc6aaikcrw3yc7inkiydgml9q261kql7zl";
- # upstream includes an outdated Cargo.lock that stops cargo from compiling
- postFetch = ''
- mkdir -p $out
- tar xf $downloadedFile --strip=1 -C $out
- substituteInPlace $out/Cargo.lock \
- --replace 0.8.6 ${version}
- '';
+ sha256 = "sha256-+qKOvFoEF/gZL4ijL8lIRWE9ZWJM2eBlk29Lk46jAfQ=";
};
- cargoSha256 = "1scrqm7fs8y7anfiigimj7y5rjxcc2qvrxiq8ai7k5cwfc4v1ghm";
+ # upstream includes an outdated Cargo.lock that stops cargo from compiling
+ cargoPatches = [ ./fix-cargo-lock.patch ];
+
+ cargoSha256 = "sha256-JlekxU9pMkHNsIcH3+7b2I6MYUlxRqNX+0wwyVrQMAE=";
buildInputs = lib.optional stdenv.isDarwin SystemConfiguration;
diff --git a/pkgs/applications/misc/joshuto/fix-cargo-lock.patch b/pkgs/applications/misc/joshuto/fix-cargo-lock.patch
new file mode 100644
index 000000000000..023c824add10
--- /dev/null
+++ b/pkgs/applications/misc/joshuto/fix-cargo-lock.patch
@@ -0,0 +1,11 @@
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -512,7 +512,7 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
+
+ [[package]]
+ name = "joshuto"
+-version = "0.9.0"
++version = "0.9.1"
+ dependencies = [
+ "alphanumeric-sort",
+ "chrono",
diff --git a/pkgs/applications/networking/cluster/nomad/1.0.nix b/pkgs/applications/networking/cluster/nomad/1.0.nix
index 62034a39bbc0..092a620b98f4 100644
--- a/pkgs/applications/networking/cluster/nomad/1.0.nix
+++ b/pkgs/applications/networking/cluster/nomad/1.0.nix
@@ -6,6 +6,6 @@
callPackage ./generic.nix {
inherit buildGoPackage nvidia_x11 nvidiaGpuSupport;
- version = "1.0.10";
- sha256 = "1yd4j35dmxzg9qapqyq3g3hnhxi5c4f57q43xbim8255bjyn94f0";
+ version = "1.0.11";
+ sha256 = "15h7w020p576zl91s5mr4npcmngrqqfj9xzlx6bk9i1cp6h4w0jy";
}
diff --git a/pkgs/applications/networking/cluster/nomad/1.1.nix b/pkgs/applications/networking/cluster/nomad/1.1.nix
index 3d34331b57d1..6363852068e5 100644
--- a/pkgs/applications/networking/cluster/nomad/1.1.nix
+++ b/pkgs/applications/networking/cluster/nomad/1.1.nix
@@ -6,7 +6,7 @@
callPackage ./genericModule.nix {
inherit buildGoModule nvidia_x11 nvidiaGpuSupport;
- version = "1.1.4";
- sha256 = "182f3sxw751s8qg16vbssplhl92i9gshgzvflwwvnxraz2795y7l";
- vendorSha256 = "1nddknnsvb05sapbj1c52cv2fmibvdg48f88malxqblzw33wfziq";
+ version = "1.1.5";
+ sha256 = "03gxh12bd5mj1l4q3xilil806dsqaqmz93ff7ysf441frgkx3iy3";
+ vendorSha256 = "0rfd22rf76mwj489zhswah4g3dhhz6davm336xgm9dbnyaz9d8r0";
}
diff --git a/pkgs/applications/networking/instant-messengers/chatterino2/default.nix b/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
index 075fd5b3a20a..99e3a90b60b6 100644
--- a/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
+++ b/pkgs/applications/networking/instant-messengers/chatterino2/default.nix
@@ -2,12 +2,12 @@
mkDerivation rec {
pname = "chatterino2";
- version = "2.3.0";
+ version = "2.3.4";
src = fetchFromGitHub {
owner = "Chatterino";
repo = pname;
rev = "v${version}";
- sha256 = "0x12zcrbkxn2nn0hqkj1amrxv4q032id282cajzsx7by970r1shd";
+ sha256 = "sha256-ZmUM56+YNH98J3XE/mWOOIfb0qBld2n4iuHpImbrU4o=";
fetchSubmodules = true;
};
nativeBuildInputs = [ qmake pkg-config wrapQtAppsHook ];
diff --git a/pkgs/applications/science/math/caffe/default.nix b/pkgs/applications/science/math/caffe/default.nix
index 08bf84be7c89..462a05d300ce 100644
--- a/pkgs/applications/science/math/caffe/default.nix
+++ b/pkgs/applications/science/math/caffe/default.nix
@@ -91,7 +91,11 @@ stdenv.mkDerivation rec {
inherit (python.sourceVersion) major minor; # Should be changed in case of PyPy
});
- postPatch = lib.optionalString (cudaSupport && lib.versionAtLeast cudatoolkit.version "9.0") ''
+ postPatch = ''
+ substituteInPlace src/caffe/util/io.cpp --replace \
+ 'SetTotalBytesLimit(kProtoReadBytesLimit, 536870912)' \
+ 'SetTotalBytesLimit(kProtoReadBytesLimit)'
+ '' + lib.optionalString (cudaSupport && lib.versionAtLeast cudatoolkit.version "9.0") ''
# CUDA 9.0 doesn't support sm_20
sed -i 's,20 21(20) ,,' cmake/Cuda.cmake
'';
diff --git a/pkgs/applications/science/math/cntk/default.nix b/pkgs/applications/science/math/cntk/default.nix
index c007490c94d0..ba2225b903fa 100644
--- a/pkgs/applications/science/math/cntk/default.nix
+++ b/pkgs/applications/science/math/cntk/default.nix
@@ -1,4 +1,5 @@
{ lib, stdenv, fetchgit, fetchFromGitHub, cmake
+, fetchpatch
, openblas, blas, lapack, opencv3, libzip, boost, protobuf, mpi
, onebitSGDSupport ? false
, cudaSupport ? false, addOpenGLRunpath, cudatoolkit, nvidia_x11
@@ -28,6 +29,26 @@ in stdenv.mkDerivation rec {
sha256 = "18l9k7s966a26ywcf7flqyhm61788pcb9fj3wk61jrmgkhy2pcns";
};
+ patches = [
+ # Fix build with protobuf 3.18+
+ # Remove with onnx submodule bump to 1.9+
+ (fetchpatch {
+ url = "https://github.com/onnx/onnx/commit/d3bc82770474761571f950347560d62a35d519d7.patch";
+ extraPrefix = "Source/CNTKv2LibraryDll/proto/onnx/onnx_repo/";
+ stripLen = 1;
+ sha256 = "00raqj8wx30b06ky6cdp5vvc1mrzs7hglyi6h58hchw5lhrwkzxp";
+ })
+ ];
+
+ postPatch = ''
+ # Fix build with protobuf 3.18+
+ substituteInPlace Source/CNTKv2LibraryDll/Serialization.cpp \
+ --replace 'SetTotalBytesLimit(INT_MAX, INT_MAX)' \
+ 'SetTotalBytesLimit(INT_MAX)' \
+ --replace 'SetTotalBytesLimit(limit, limit)' \
+ 'SetTotalBytesLimit(limit)'
+ '';
+
nativeBuildInputs = [ cmake ] ++ lib.optional cudaSupport addOpenGLRunpath;
# Force OpenMPI to use g++ in PATH.
diff --git a/pkgs/development/compilers/ocaml/4.13.nix b/pkgs/development/compilers/ocaml/4.13.nix
index 6b0d379193e2..256242e9cbb5 100644
--- a/pkgs/development/compilers/ocaml/4.13.nix
+++ b/pkgs/development/compilers/ocaml/4.13.nix
@@ -1,9 +1,6 @@
import ./generic.nix {
major_version = "4";
minor_version = "13";
- patch_version = "0-rc2";
- src = fetchTarball {
- url = "https://caml.inria.fr/pub/distrib/ocaml-4.13/ocaml-4.13.0~rc2.tar.xz";
- sha256 = "1w4sdrs5s1bhbisgz44ysi2j1n13qd3slgs34ppglpwmqqw6ply2";
- };
+ patch_version = "0";
+ sha256 = "sha256:1f7gnndzs6qcyy2gnzalnhm808pifxhvxg2qp5dnsziz6li7x303";
}
diff --git a/pkgs/development/interpreters/racket/default.nix b/pkgs/development/interpreters/racket/default.nix
index 5737241bb7e5..c49c6b5b7c70 100644
--- a/pkgs/development/interpreters/racket/default.nix
+++ b/pkgs/development/interpreters/racket/default.nix
@@ -8,6 +8,7 @@
, libGL
, libGLU
, libjpeg
+, xorg
, ncurses
, libpng, libtool, mpfr, openssl, pango, poppler
, readline, sqlite
@@ -96,6 +97,9 @@ stdenv.mkDerivation rec {
enableParallelBuilding = false;
+ postFixup = lib.optionalString stdenv.isDarwin ''
+ wrapProgram $out/bin/drracket --prefix DYLD_LIBRARY_PATH : ${xorg.libX11}/lib
+ '';
meta = with lib; {
description = "A programmable programming language";
@@ -112,6 +116,5 @@ stdenv.mkDerivation rec {
license = with licenses; [ asl20 /* or */ mit ];
maintainers = with maintainers; [ kkallio henrytill vrthra ];
platforms = [ "x86_64-darwin" "x86_64-linux" "aarch64-linux" ];
- broken = stdenv.isDarwin; # No support yet for setting FFI lookup path
};
}
diff --git a/pkgs/development/libraries/openvino/default.nix b/pkgs/development/libraries/openvino/default.nix
index b4e487887999..86bc3b0d009c 100644
--- a/pkgs/development/libraries/openvino/default.nix
+++ b/pkgs/development/libraries/openvino/default.nix
@@ -3,6 +3,7 @@
, autoPatchelfHook
, stdenv
, fetchFromGitHub
+, fetchpatch
, cmake
, git
, protobuf
@@ -10,17 +11,29 @@
, opencv
, unzip
, shellcheck
+, srcOnly
, python
, enablePython ? false
}:
let
- onnx_src = fetchFromGitHub {
- owner = "onnx";
- repo = "onnx";
- rev = "v1.8.1";
- sha256 = "+1zNnZ4lAyVYRptfk0PV7koIX9FqcfD1Ah33qj/G2rA=";
+ onnx_src = srcOnly {
+ name = "onnx-patched";
+ src = fetchFromGitHub {
+ owner = "onnx";
+ repo = "onnx";
+ rev = "v1.8.1";
+ sha256 = "+1zNnZ4lAyVYRptfk0PV7koIX9FqcfD1Ah33qj/G2rA=";
+ };
+ patches = [
+ # Fix build with protobuf 3.18+
+ # Remove with onnx 1.9 release
+ (fetchpatch {
+ url = "https://github.com/onnx/onnx/commit/d3bc82770474761571f950347560d62a35d519d7.patch";
+ sha256 = "0vdsrklkzhdjaj8wdsl4icn93q3961g8dx35zvff0nhpr08wjb7y";
+ })
+ ];
};
in
diff --git a/pkgs/development/libraries/valhalla/default.nix b/pkgs/development/libraries/valhalla/default.nix
index 6eac19bcb2cd..b3d61e6efd72 100644
--- a/pkgs/development/libraries/valhalla/default.nix
+++ b/pkgs/development/libraries/valhalla/default.nix
@@ -14,6 +14,15 @@ stdenv.mkDerivation rec {
fetchSubmodules = true;
};
+ # https://github.com/valhalla/valhalla/issues/2119
+ postPatch = ''
+ for f in valhalla/mjolnir/transitpbf.h \
+ src/mjolnir/valhalla_query_transit.cc; do
+ substituteInPlace $f --replace 'SetTotalBytesLimit(limit, limit)' \
+ 'SetTotalBytesLimit(limit)'
+ done
+ '';
+
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [
zlib curl protobuf prime-server boost sqlite libspatialite
diff --git a/pkgs/development/python-modules/aiopvapi/default.nix b/pkgs/development/python-modules/aiopvapi/default.nix
new file mode 100644
index 000000000000..b8614d0c97d2
--- /dev/null
+++ b/pkgs/development/python-modules/aiopvapi/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, aiohttp
+, async-timeout
+, buildPythonPackage
+, fetchPypi
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+ pname = "aiopvapi";
+ version = "1.6.14";
+ format = "setuptools";
+
+ disabled = pythonOlder "3.5";
+
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "02bl7q166j6rb8av9n1jz11xlwhrzmbkjq70mwr86qaj63pcxrak";
+ };
+
+ propagatedBuildInputs = [
+ aiohttp
+ async-timeout
+ ];
+
+ checkInputs = [
+ pytestCheckHook
+ ];
+
+ pythonImportsCheck = [ "aiopvapi" ];
+
+ meta = with lib; {
+ description = "Python API for the PowerView API";
+ homepage = "https://github.com/sander76/aio-powerview-api";
+ license = with licenses; [ bsd3 ];
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/aiowatttime/default.nix b/pkgs/development/python-modules/aiowatttime/default.nix
new file mode 100644
index 000000000000..39aa7974313c
--- /dev/null
+++ b/pkgs/development/python-modules/aiowatttime/default.nix
@@ -0,0 +1,53 @@
+{ lib
+, aiohttp
+, aresponses
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pytest-aiohttp
+, pytest-asyncio
+, pytestCheckHook
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+ pname = "aiowatttime";
+ version = "0.1.1";
+ format = "pyproject";
+
+ disabled = pythonOlder "3.8";
+
+ src = fetchFromGitHub {
+ owner = "bachya";
+ repo = pname;
+ rev = version;
+ sha256 = "1614p5ca7x9ipz7dgwhiz83dfwn6hyliawa8pr2j9y2kn8cg2sdm";
+ };
+
+ nativeBuildInputs = [
+ poetry-core
+ ];
+
+ propagatedBuildInputs = [
+ aiohttp
+ ];
+
+ checkInputs = [
+ aresponses
+ pytest-aiohttp
+ pytest-asyncio
+ pytestCheckHook
+ ];
+
+ # Ignore the examples directory as the files are prefixed with test_
+ disabledTestPaths = [ "examples/" ];
+
+ pythonImportsCheck = [ "aiowatttime" ];
+
+ meta = with lib; {
+ description = "Python library for interacting with WattTime";
+ homepage = "https://github.com/bachya/aiowatttime";
+ license = with licenses; [ mit ];
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/eternalegypt/default.nix b/pkgs/development/python-modules/eternalegypt/default.nix
new file mode 100644
index 000000000000..c5c7d8a646cf
--- /dev/null
+++ b/pkgs/development/python-modules/eternalegypt/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, aiohttp
+, attrs
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+ pname = "eternalegypt";
+ version = "0.0.13";
+ format = "setuptools";
+
+ disabled = pythonOlder "3.8";
+
+ src = fetchFromGitHub {
+ owner = "amelchio";
+ repo = pname;
+ rev = "v${version}";
+ sha256 = "0wi2cqd81irqm873npkqg3mvdrb57idqdsp8qw8h0s7lk0kil1wi";
+ };
+
+ propagatedBuildInputs = [
+ aiohttp
+ attrs
+ ];
+
+ # Project has no tests
+ doCheck = false;
+
+ pythonImportsCheck = [ "eternalegypt" ];
+
+ meta = with lib; {
+ description = "Python API for Netgear LTE modems";
+ homepage = "https://github.com/amelchio/eternalegypt";
+ license = with licenses; [ mit ];
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/iotawattpy/default.nix b/pkgs/development/python-modules/iotawattpy/default.nix
new file mode 100644
index 000000000000..7eca486eea0b
--- /dev/null
+++ b/pkgs/development/python-modules/iotawattpy/default.nix
@@ -0,0 +1,36 @@
+{ lib
+, buildPythonPackage
+, fetchPypi
+, httpx
+, pythonOlder
+}:
+
+buildPythonPackage rec {
+ pname = "iotawattpy";
+ version = "0.1.0";
+ format = "setuptools";
+
+ disabled = pythonOlder "3.8";
+
+ src = fetchPypi {
+ inherit pname version;
+ sha256 = "1pyxm87lvd6zy0rx7r9jivk2li267r3xr0b9p6vf0v0vp9fmgsw3";
+ };
+
+ propagatedBuildInputs = [
+ httpx
+ ];
+
+ # Project doesn't tag releases or ship the tests with PyPI
+ # https://github.com/gtdiehl/iotawattpy/issues/14
+ doCheck = false;
+
+ pythonImportsCheck = [ "iotawattpy" ];
+
+ meta = with lib; {
+ description = "Python interface for the IoTaWatt device";
+ homepage = "https://github.com/gtdiehl/iotawattpy";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/marshmallow-dataclass/default.nix b/pkgs/development/python-modules/marshmallow-dataclass/default.nix
new file mode 100644
index 000000000000..145005fd5e39
--- /dev/null
+++ b/pkgs/development/python-modules/marshmallow-dataclass/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, marshmallow
+, marshmallow-enum
+, pytestCheckHook
+, pythonOlder
+, typeguard
+, typing-inspect
+}:
+
+buildPythonPackage rec {
+ pname = "marshmallow-dataclass";
+ version = "8.5.3";
+ format = "setuptools";
+
+ disabled = pythonOlder "3.6";
+
+ src = fetchFromGitHub {
+ owner = "lovasoa";
+ repo = "marshmallow_dataclass";
+ rev = "v${version}";
+ sha256 = "0mngkjfs2nxxr0y77n429hb22rmjxbnn95j4vwqr9y6q16bqxs0w";
+ };
+
+ propagatedBuildInputs = [
+ marshmallow
+ typing-inspect
+ ];
+
+ checkInputs = [
+ marshmallow-enum
+ pytestCheckHook
+ typeguard
+ ];
+
+ pythonImportsCheck = [ "marshmallow_dataclass" ];
+
+ meta = with lib; {
+ description = "Automatic generation of marshmallow schemas from dataclasses";
+ homepage = "https://github.com/lovasoa/marshmallow_dataclass";
+ license = with licenses; [ mit ];
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/p1monitor/default.nix b/pkgs/development/python-modules/p1monitor/default.nix
new file mode 100644
index 000000000000..4a7ce2aec3f2
--- /dev/null
+++ b/pkgs/development/python-modules/p1monitor/default.nix
@@ -0,0 +1,45 @@
+{ lib
+, aiohttp
+, aresponses
+, buildPythonPackage
+, fetchFromGitHub
+, poetry-core
+, pythonOlder
+, yarl
+}:
+
+buildPythonPackage rec {
+ pname = "p1monitor";
+ version = "1.0.0";
+ format = "pyproject";
+
+ disabled = pythonOlder "3.8";
+
+ src = fetchFromGitHub {
+ owner = "klaasnicolaas";
+ repo = "python-p1monitor";
+ rev = "v${version}";
+ sha256 = "1xfr097hmjppp6cfdvfjypxmr1sb9dasq1s3np2vd5d93w0p5123";
+ };
+
+ nativeBuildInputs = [
+ poetry-core
+ ];
+
+ propagatedBuildInputs = [
+ aiohttp
+ yarl
+ ];
+
+ # Project has no tests
+ doCheck = false;
+
+ pythonImportsCheck = [ "p1monitor" ];
+
+ meta = with lib; {
+ description = "Python client for the P1 Monitor";
+ homepage = "https://github.com/klaasnicolaas/python-p1monitor";
+ license = with licenses; [ mit ];
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/pyupgrade/default.nix b/pkgs/development/python-modules/pyupgrade/default.nix
index 3eca1bbaa1bf..2b7b56a340d1 100644
--- a/pkgs/development/python-modules/pyupgrade/default.nix
+++ b/pkgs/development/python-modules/pyupgrade/default.nix
@@ -8,14 +8,14 @@
buildPythonPackage rec {
pname = "pyupgrade";
- version = "2.26.0";
+ version = "2.27.0";
disabled = pythonOlder "3.6";
src = fetchFromGitHub {
owner = "asottile";
repo = pname;
rev = "v${version}";
- sha256 = "sha256-fXDBozMZbvMkdqafvPQrCI26OjQ/2Rx6OMQs9X2Q55s=";
+ sha256 = "1j14m4mdvpq740bxz3mhs5k02jfp425xig4yb13drx37p4yyl9zn";
};
checkInputs = [ pytestCheckHook ];
diff --git a/pkgs/development/python-modules/renault-api/default.nix b/pkgs/development/python-modules/renault-api/default.nix
new file mode 100644
index 000000000000..9508a86e33b6
--- /dev/null
+++ b/pkgs/development/python-modules/renault-api/default.nix
@@ -0,0 +1,68 @@
+{ lib
+, aiohttp
+, aioresponses
+, buildPythonPackage
+, click
+, dateparser
+, fetchFromGitHub
+, fetchpatch
+, marshmallow-dataclass
+, poetry-core
+, pyjwt
+, pythonOlder
+, pytest-asyncio
+, pytestCheckHook
+, tabulate
+}:
+
+buildPythonPackage rec {
+ pname = "renault-api";
+ version = "0.1.4";
+ format = "pyproject";
+
+ disabled = pythonOlder "3.7";
+
+ src = fetchFromGitHub {
+ owner = "hacf-fr";
+ repo = pname;
+ rev = "v${version}";
+ sha256 = "049kh63yk0r0falqbl5akcwgzqjrkqqhf9y537rrlzc85ihf28b8";
+ };
+
+ nativeBuildInputs = [
+ poetry-core
+ ];
+
+ propagatedBuildInputs = [
+ aiohttp
+ click
+ dateparser
+ marshmallow-dataclass
+ pyjwt
+ tabulate
+ ];
+
+ checkInputs = [
+ aioresponses
+ pytest-asyncio
+ pytestCheckHook
+ ];
+
+ patches = [
+ # Switch to poetry-core, https://github.com/hacf-fr/renault-api/pull/371
+ (fetchpatch {
+ name = "switch-to-poetry-core.patch";
+ url = "https://github.com/hacf-fr/renault-api/commit/5457a612b9ff9f323e8449cbe9dbce465bd65a79.patch";
+ sha256 = "0ds9m4j2qpv0nyg9p8dk9klnarl8wckwclddgnii6h47qci362yy";
+ })
+ ];
+
+ pythonImportsCheck = [ "renault_api" ];
+
+ meta = with lib; {
+ description = "Python library to interact with the Renault API";
+ homepage = "https://github.com/hacf-fr/renault-api";
+ license = licenses.mit;
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/streamlabswater/default.nix b/pkgs/development/python-modules/streamlabswater/default.nix
new file mode 100644
index 000000000000..fc90ea222c77
--- /dev/null
+++ b/pkgs/development/python-modules/streamlabswater/default.nix
@@ -0,0 +1,37 @@
+{ lib
+, buildPythonPackage
+, fetchFromGitHub
+, pythonOlder
+, requests
+}:
+
+buildPythonPackage rec {
+ pname = "streamlabswater";
+ version = "0.3.2";
+ format = "setuptools";
+
+ disabled = pythonOlder "3.6";
+
+ src = fetchFromGitHub {
+ owner = pname;
+ repo = "stream-python";
+ rev = "v${version}";
+ sha256 = "1lh1i1ksic9yhxnwc7mqm5qla98x85dfwj846kwldwam0vcrqlk7";
+ };
+
+ propagatedBuildInputs = [
+ requests
+ ];
+
+ # Project has no tests
+ doCheck = false;
+
+ pythonImportsCheck = [ "streamlabswater" ];
+
+ meta = with lib; {
+ description = "Python library for the StreamLabs API";
+ homepage = "https://github.com/streamlabswater/stream-python";
+ license = with licenses; [ mit ];
+ maintainers = with maintainers; [ fab ];
+ };
+}
diff --git a/pkgs/development/python-modules/xml2rfc/default.nix b/pkgs/development/python-modules/xml2rfc/default.nix
index b623fc37c224..de17aa849227 100644
--- a/pkgs/development/python-modules/xml2rfc/default.nix
+++ b/pkgs/development/python-modules/xml2rfc/default.nix
@@ -1,15 +1,34 @@
-{ lib, fetchPypi, buildPythonPackage, pythonAtLeast, intervaltree, pyflakes, requests, lxml, google-i18n-address
-, pycountry, html5lib, six, kitchen, pypdf2, dict2xml, weasyprint, pyyaml, jinja2, configargparse, appdirs
+{ lib
+, fetchPypi
+, buildPythonPackage
+, pythonOlder
+, intervaltree
+, pyflakes
+, requests
+, lxml
+, google-i18n-address
+, pycountry
+, html5lib
+, six
+, kitchen
+, pypdf2
+, dict2xml
+, weasyprint
+, pyyaml
+, jinja2
+, configargparse
+, appdirs
}:
buildPythonPackage rec {
pname = "xml2rfc";
- version = "3.9.1";
- disabled = pythonAtLeast "3.9";
+ version = "3.10.0";
+
+ disabled = pythonOlder "3.6";
src = fetchPypi {
inherit pname version;
- sha256 = "76cee167e81fc3cc0e0cc696fe58cadd039e19a774c8f4d2e5c0fea724c7aaca";
+ sha256 = "sha256-DJjGQAYFhXjAiJhWzxpQ0jRUSrnsNCcNz1KfPEjBoKE=";
};
propagatedBuildInputs = [
@@ -31,12 +50,18 @@ buildPythonPackage rec {
appdirs
];
+ postPatch = ''
+ substituteInPlace requirements.txt \
+ --replace "jinja2>=2.11,<3.0" "jinja2>=2.11"
+ '';
+
preCheck = ''
export HOME=$(mktemp -d)
'';
# lxml tries to fetch from the internet
doCheck = false;
+
pythonImportsCheck = [ "xml2rfc" ];
meta = with lib; {
diff --git a/pkgs/development/python-modules/ytmusicapi/default.nix b/pkgs/development/python-modules/ytmusicapi/default.nix
index ea832db8a648..8bf781ef3a42 100644
--- a/pkgs/development/python-modules/ytmusicapi/default.nix
+++ b/pkgs/development/python-modules/ytmusicapi/default.nix
@@ -7,13 +7,13 @@
buildPythonPackage rec {
pname = "ytmusicapi";
- version = "0.19.2";
+ version = "0.19.3";
disabled = isPy27;
src = fetchPypi {
inherit pname version;
- sha256 = "sha256-Vmf3eZpeRPDYWy6fc8VRYsQZJrwwX3KTs0njfPy6HRE=";
+ sha256 = "dfd0271f7177173cea9c255730151a10a2fe4a32f9accd2fe31e7645936c90c5";
};
propagatedBuildInputs = [
diff --git a/pkgs/development/tools/analysis/rizin/cutter.nix b/pkgs/development/tools/analysis/rizin/cutter.nix
index c1d8ab99063c..3082d9d4f829 100644
--- a/pkgs/development/tools/analysis/rizin/cutter.nix
+++ b/pkgs/development/tools/analysis/rizin/cutter.nix
@@ -11,13 +11,13 @@
mkDerivation rec {
pname = "cutter";
- version = "2.0.2";
+ version = "2.0.3";
src = fetchFromGitHub {
owner = "rizinorg";
repo = "cutter";
rev = "v${version}";
- sha256 = "sha256-CVVUXx6wt9vH3B7NrrlRGnOIrhXQPjV7GmX3O+KtMSM=";
+ sha256 = "sha256-OC04d3j8Dfsob1dUjNBc1pSQFxJlexzWJ4v0V3QNkno=";
fetchSubmodules = true;
};
diff --git a/pkgs/development/tools/analysis/rizin/default.nix b/pkgs/development/tools/analysis/rizin/default.nix
index ff7717312f87..d76c63044ccd 100644
--- a/pkgs/development/tools/analysis/rizin/default.nix
+++ b/pkgs/development/tools/analysis/rizin/default.nix
@@ -23,11 +23,11 @@
stdenv.mkDerivation rec {
pname = "rizin";
- version = "0.2.1";
+ version = "0.3.0";
src = fetchurl {
url = "https://github.com/rizinorg/rizin/releases/download/v${version}/rizin-src-v${version}.tar.xz";
- sha256 = "sha256-lxVsPI+qLenZ0pelvxtHlQ6fhWdQeqoEEHrUGZ5Rdmg=";
+ sha256 = "sha256-+XW12VIaRfRkLc3Li6ItF4VQfWLNRvxZW2VGtxVYJxY=";
};
mesonFlags = [
diff --git a/pkgs/servers/amqp/rabbitmq-server/default.nix b/pkgs/servers/amqp/rabbitmq-server/default.nix
index 33541da86b28..357fbe36b207 100644
--- a/pkgs/servers/amqp/rabbitmq-server/default.nix
+++ b/pkgs/servers/amqp/rabbitmq-server/default.nix
@@ -27,12 +27,12 @@
stdenv.mkDerivation rec {
pname = "rabbitmq-server";
- version = "3.9.4";
+ version = "3.9.6";
# when updating, consider bumping elixir version in all-packages.nix
src = fetchurl {
url = "https://github.com/rabbitmq/rabbitmq-server/releases/download/v${version}/${pname}-${version}.tar.xz";
- sha256 = "sha256-L2ftgdk7QmWl3iQR52G4SwZyI4NURybVMQ1WtcHPvHE=";
+ sha256 = "sha256-YCVOMVsbOMczpZi02Ywd6M+AXrd5AMweCYn1WcyRHSw=";
};
nativeBuildInputs = [ unzip xmlto docbook_xml_dtd_45 docbook_xsl zip rsync ];
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix
index b1363880f9f8..8573056c99a1 100644
--- a/pkgs/servers/home-assistant/component-packages.nix
+++ b/pkgs/servers/home-assistant/component-packages.nix
@@ -380,7 +380,7 @@
"hue" = ps: with ps; [ aiohue ];
"huisbaasje" = ps: with ps; [ huisbaasje-client ];
"humidifier" = ps: with ps; [ ];
- "hunterdouglas_powerview" = ps: with ps; [ ]; # missing inputs: aiopvapi
+ "hunterdouglas_powerview" = ps: with ps; [ aiopvapi ];
"hvv_departures" = ps: with ps; [ pygti ];
"hydrawise" = ps: with ps; [ hydrawiser ];
"hyperion" = ps: with ps; [ hyperion-py ];
@@ -411,7 +411,7 @@
"intesishome" = ps: with ps; [ pyintesishome ];
"ios" = ps: with ps; [ aiohttp-cors ifaddr zeroconf ];
"iota" = ps: with ps; [ ]; # missing inputs: pyota
- "iotawatt" = ps: with ps; [ ]; # missing inputs: iotawattpy
+ "iotawatt" = ps: with ps; [ iotawattpy ];
"iperf3" = ps: with ps; [ ]; # missing inputs: iperf3
"ipma" = ps: with ps; [ pyipma ];
"ipp" = ps: with ps; [ pyipp ];
@@ -564,7 +564,7 @@
"netatmo" = ps: with ps; [ pyturbojpeg aiohttp-cors hass-nabucasa pyatmo ];
"netdata" = ps: with ps; [ netdata ];
"netgear" = ps: with ps; [ ]; # missing inputs: pynetgear
- "netgear_lte" = ps: with ps; [ ]; # missing inputs: eternalegypt
+ "netgear_lte" = ps: with ps; [ eternalegypt ];
"netio" = ps: with ps; [ aiohttp-cors ]; # missing inputs: pynetio
"network" = ps: with ps; [ aiohttp-cors ifaddr ];
"neurio_energy" = ps: with ps; [ ]; # missing inputs: neurio
@@ -630,7 +630,7 @@
"ovo_energy" = ps: with ps; [ ovoenergy ];
"owntracks" = ps: with ps; [ pynacl pyturbojpeg aiohttp-cors hass-nabucasa paho-mqtt ];
"ozw" = ps: with ps; [ aiohttp-cors paho-mqtt python-openzwave-mqtt ];
- "p1_monitor" = ps: with ps; [ ]; # missing inputs: p1monitor
+ "p1_monitor" = ps: with ps; [ p1monitor ];
"panasonic_bluray" = ps: with ps; [ ]; # missing inputs: panacotta
"panasonic_viera" = ps: with ps; [ ]; # missing inputs: panasonic_viera
"pandora" = ps: with ps; [ pexpect ];
@@ -703,7 +703,7 @@
"remember_the_milk" = ps: with ps; [ httplib2 ]; # missing inputs: RtmAPI
"remote" = ps: with ps; [ ];
"remote_rpi_gpio" = ps: with ps; [ ]; # missing inputs: gpiozero
- "renault" = ps: with ps; [ ]; # missing inputs: renault-api
+ "renault" = ps: with ps; [ renault-api ];
"repetier" = ps: with ps; [ ]; # missing inputs: pyrepetier
"rest" = ps: with ps; [ jsonpath xmltodict ];
"rest_command" = ps: with ps; [ ];
@@ -824,7 +824,7 @@
"stiebel_eltron" = ps: with ps; [ pymodbus ]; # missing inputs: pystiebeleltron
"stookalert" = ps: with ps; [ ]; # missing inputs: stookalert
"stream" = ps: with ps; [ aiohttp-cors av ];
- "streamlabswater" = ps: with ps; [ ]; # missing inputs: streamlabswater
+ "streamlabswater" = ps: with ps; [ streamlabswater ];
"stt" = ps: with ps; [ aiohttp-cors ];
"subaru" = ps: with ps; [ subarulink ];
"suez_water" = ps: with ps; [ ]; # missing inputs: pysuez
diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix
index 27c34e10e382..6bee53266ef4 100644
--- a/pkgs/servers/home-assistant/default.nix
+++ b/pkgs/servers/home-assistant/default.nix
@@ -430,6 +430,7 @@ in with py.pkgs; buildPythonApplication rec {
"hue"
"huisbaasje"
"humidifier"
+ "hunterdouglas_powerview"
"hvv_departures"
"hyperion"
"ialarm"
@@ -545,6 +546,7 @@ in with py.pkgs; buildPythonApplication rec {
"ovo_energy"
"owntracks"
"ozw"
+ "p1_monitor"
"panel_custom"
"panel_iframe"
"persistent_notification"
@@ -575,6 +577,7 @@ in with py.pkgs; buildPythonApplication rec {
"recorder"
"reddit"
"remote"
+ "renault"
"rest"
"rest_command"
"rflink"
diff --git a/pkgs/servers/owncast/default.nix b/pkgs/servers/owncast/default.nix
new file mode 100644
index 000000000000..7359b8c2bae4
--- /dev/null
+++ b/pkgs/servers/owncast/default.nix
@@ -0,0 +1,59 @@
+{ lib, buildGoModule, fetchFromGitHub, nixosTests, bash, which, ffmpeg, makeWrapper, coreutils, ... }:
+
+buildGoModule rec {
+
+ pname = "owncast";
+ version = "0.0.8";
+
+ src = fetchFromGitHub {
+ owner = "owncast";
+ repo = "owncast";
+ rev = "v${version}";
+ sha256 = "0md4iafa767yxkwh6z8zpcjv9zd79ql2wapx9vzyd973ksvrdaw2";
+ };
+
+ vendorSha256 = "sha256-bH2CWIgpOS974/P98n0R9ebGTJ0YoqPlH8UmxSYNHeM=";
+
+ propagatedBuildInputs = [ ffmpeg ];
+
+ buildInputs = [ makeWrapper ];
+
+ preInstall = ''
+ mkdir -p $out
+ cp -r $src/{static,webroot} $out
+ '';
+
+ postInstall = let
+
+ setupScript = ''
+ [ ! -d "$PWD/webroot" ] && (
+ ${coreutils}/bin/cp --no-preserve=mode -r "${placeholder "out"}/webroot" "$PWD"
+ )
+
+ [ ! -d "$PWD/static" ] && (
+ ${coreutils}/bin/ln -s "${placeholder "out"}/static" "$PWD"
+ )
+ '';
+ in ''
+ wrapProgram $out/bin/owncast \
+ --run '${setupScript}' \
+ --prefix PATH : ${lib.makeBinPath [ bash which ffmpeg ]}
+ '';
+
+ installCheckPhase = ''
+ runHook preCheck
+ $out/bin/owncast --help
+ runHook postCheck
+ '';
+
+ passthru.tests.owncast = nixosTests.testOwncast;
+
+ meta = with lib; {
+ description = "self-hosted video live streaming solution";
+ homepage = "https://owncast.online";
+ license = licenses.mit;
+ platforms = platforms.unix;
+ maintainers = with maintainers; [ MayNiklas ];
+ };
+
+}
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 9933bfc4af47..ffec1ea5c52f 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -7966,6 +7966,8 @@ with pkgs;
operator-sdk = callPackage ../development/tools/operator-sdk { };
+ owncast = callPackage ../servers/owncast { };
+
update-dotdee = with python3Packages; toPythonApplication update-dotdee;
update-nix-fetchgit = haskell.lib.justStaticExecutables haskellPackages.update-nix-fetchgit;
diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix
index f2f9c912ffcd..058a1166d667 100644
--- a/pkgs/top-level/ocaml-packages.nix
+++ b/pkgs/top-level/ocaml-packages.nix
@@ -1601,7 +1601,7 @@ in let inherit (pkgs) callPackage; in rec
ocamlPackages_4_13 = mkOcamlPackages (callPackage ../development/compilers/ocaml/4.13.nix { });
- ocamlPackages_latest = ocamlPackages_4_12;
+ ocamlPackages_latest = ocamlPackages_4_13;
ocamlPackages = ocamlPackages_4_12;
}
diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix
index 1d95c5ff5414..416e8b1009cc 100644
--- a/pkgs/top-level/python-packages.nix
+++ b/pkgs/top-level/python-packages.nix
@@ -351,6 +351,8 @@ in {
aiopulse = callPackage ../development/python-modules/aiopulse { };
+ aiopvapi = callPackage ../development/python-modules/aiopvapi { };
+
aiopvpc = callPackage ../development/python-modules/aiopvpc { };
aiopylgtv = callPackage ../development/python-modules/aiopylgtv { };
@@ -387,6 +389,8 @@ in {
aiounittest = callPackage ../development/python-modules/aiounittest { };
+ aiowatttime = callPackage ../development/python-modules/aiowatttime { };
+
aiowinreg = callPackage ../development/python-modules/aiowinreg { };
aioymaps = callPackage ../development/python-modules/aioymaps { };
@@ -2412,6 +2416,8 @@ in {
etebase-server = callPackage ../servers/etebase { };
+ eternalegypt = callPackage ../development/python-modules/eternalegypt { };
+
etesync = callPackage ../development/python-modules/etesync { };
eth-hash = callPackage ../development/python-modules/eth-hash { };
@@ -3678,6 +3684,8 @@ in {
iocapture = callPackage ../development/python-modules/iocapture { };
+ iotawattpy = callPackage ../development/python-modules/iotawattpy { };
+
iowait = callPackage ../development/python-modules/iowait { };
ipaddress = callPackage ../development/python-modules/ipaddress { };
@@ -4466,6 +4474,8 @@ in {
marshmallow = callPackage ../development/python-modules/marshmallow { };
+ marshmallow-dataclass = callPackage ../development/python-modules/marshmallow-dataclass { };
+
marshmallow-enum = callPackage ../development/python-modules/marshmallow-enum { };
marshmallow-oneofschema = callPackage ../development/python-modules/marshmallow-oneofschema { };
@@ -5239,6 +5249,8 @@ in {
oyaml = callPackage ../development/python-modules/oyaml { };
+ p1monitor = callPackage ../development/python-modules/p1monitor { };
+
packageurl-python = callPackage ../development/python-modules/packageurl-python { };
packaging = callPackage ../development/python-modules/packaging { };
@@ -7801,6 +7813,8 @@ in {
remarshal = callPackage ../development/python-modules/remarshal { };
+ renault-api = callPackage ../development/python-modules/renault-api { };
+
rencode = callPackage ../development/python-modules/rencode { };
reparser = callPackage ../development/python-modules/reparser { };
@@ -8669,6 +8683,8 @@ in {
streaming-form-data = callPackage ../development/python-modules/streaming-form-data { };
+ streamlabswater = callPackage ../development/python-modules/streamlabswater { };
+
streamz = callPackage ../development/python-modules/streamz { };
strict-rfc3339 = callPackage ../development/python-modules/strict-rfc3339 { };