about summary refs log tree commit diff
path: root/pkgs/servers
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers')
-rw-r--r--pkgs/servers/adguardhome/bins.nix28
-rw-r--r--pkgs/servers/adguardhome/default.nix4
-rw-r--r--pkgs/servers/haste-server/default.nix4
-rw-r--r--pkgs/servers/haste-server/node-deps.nix42
-rw-r--r--pkgs/servers/home-assistant/component-packages.nix2
-rw-r--r--pkgs/servers/home-assistant/default.nix11
-rw-r--r--pkgs/servers/home-assistant/frontend.nix4
-rwxr-xr-xpkgs/servers/home-assistant/parse-requirements.py27
-rw-r--r--pkgs/servers/home-assistant/stubs.nix12
-rwxr-xr-xpkgs/servers/home-assistant/update.py263
-rwxr-xr-xpkgs/servers/home-assistant/update.sh42
-rw-r--r--pkgs/servers/home-automation/evcc/default.nix6
-rw-r--r--pkgs/servers/http/gitlab-pages/default.nix24
-rw-r--r--pkgs/servers/invidious/versions.json6
-rw-r--r--pkgs/servers/jellyseerr/default.nix93
-rw-r--r--pkgs/servers/jellyseerr/package.json246
-rw-r--r--pkgs/servers/jellyseerr/pin.json5
-rwxr-xr-xpkgs/servers/jellyseerr/update.sh39
-rw-r--r--pkgs/servers/komga/default.nix4
-rw-r--r--pkgs/servers/libreddit/default.nix6
-rw-r--r--pkgs/servers/misc/navidrome/default.nix6
-rw-r--r--pkgs/servers/misc/oven-media-engine/default.nix4
-rw-r--r--pkgs/servers/monitoring/prometheus/statsd-exporter.nix6
-rw-r--r--pkgs/servers/onlyoffice-documentserver/default.nix4
-rw-r--r--pkgs/servers/plex/raw.nix6
-rw-r--r--pkgs/servers/pocketbase/default.nix6
-rw-r--r--pkgs/servers/redpanda/default.nix6
-rw-r--r--pkgs/servers/search/qdrant/default.nix6
-rw-r--r--pkgs/servers/sql/postgresql/ext/timescaledb.nix4
-rw-r--r--pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix42
-rw-r--r--pkgs/servers/sql/postgresql/packages.nix2
-rw-r--r--pkgs/servers/syncstorage-rs/default.nix6
32 files changed, 803 insertions, 163 deletions
diff --git a/pkgs/servers/adguardhome/bins.nix b/pkgs/servers/adguardhome/bins.nix
index f72f4dfcbfc2e..8c897bf33c62f 100644
--- a/pkgs/servers/adguardhome/bins.nix
+++ b/pkgs/servers/adguardhome/bins.nix
@@ -1,31 +1,31 @@
 { fetchurl, fetchzip }:
 {
 x86_64-darwin = fetchzip {
-  sha256 = "sha256-mOn0RYWmGzIeHyVwVTGPUvFyVQ8Zu57KW7UkGMWRejA=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_darwin_amd64.zip";
+  sha256 = "sha256-hGa1SrueZWGokeJb+p/6eaYv1AP1a2TUiGo+rcJBw3Y=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_darwin_amd64.zip";
 };
 aarch64-darwin = fetchzip {
-  sha256 = "sha256-urdLtEOMJ2ZeaWezihpv5UU8Li2gnmYk6+gzn9E/3Nw=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_darwin_arm64.zip";
+  sha256 = "sha256-wm8scjBaQuKJQu2OfYWDQqF2TLdPEZQEGSgaLzoGTb0=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_darwin_arm64.zip";
 };
 i686-linux = fetchurl {
-  sha256 = "sha256-yWlo7adaQcPrM4zOPq5BLw6rZPYg2Qr2T1R7H8QZuvA=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_linux_386.tar.gz";
+  sha256 = "sha256-nie5WOeMajq8ucOwLHDXMG1FU7wBS3GTQHKCn0XjBCQ=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_linux_386.tar.gz";
 };
 x86_64-linux = fetchurl {
-  sha256 = "sha256-pD1vs4NHWByZmEozdgpzBXDeSzbEBouyawd41Emf8QE=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_linux_amd64.tar.gz";
+  sha256 = "sha256-Ai6QzmNrALHKxJIX5gx5GQiLlcpKRuT+ALxN0PDJQ9E=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_linux_amd64.tar.gz";
 };
 aarch64-linux = fetchurl {
-  sha256 = "sha256-BpknO9qL4Jo31d/vRXjuU/wJWfCVvLfgh6tZLG/6ipI=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_linux_arm64.tar.gz";
+  sha256 = "sha256-cJ7vvv4Yyo0r01eOuZI6jqc4LFmSDmVl84aJjwxkuR4=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_linux_arm64.tar.gz";
 };
 armv6l-linux = fetchurl {
-  sha256 = "sha256-yUyRz/2hqvN8XkuzfMfG6ibYOb68WjJaqgAIAfoZH0s=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_linux_armv6.tar.gz";
+  sha256 = "sha256-DfeSBIOO/vZQExbrqku28s8a9s22tfuojccIwe37tS4=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_linux_armv6.tar.gz";
 };
 armv7l-linux = fetchurl {
-  sha256 = "sha256-MOvDKvq24+NFmgseZZA3zz0z6Vr/7OvO8sHpsDWvMuo=";
-  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.25/AdGuardHome_linux_armv7.tar.gz";
+  sha256 = "sha256-OHoU8dP5b2jqFTfn4FCxL88HrQntcxZ5enMFr/YN1zI=";
+  url = "https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.107.26/AdGuardHome_linux_armv7.tar.gz";
 };
 }
diff --git a/pkgs/servers/adguardhome/default.nix b/pkgs/servers/adguardhome/default.nix
index 77a5530d30986..b6252ef604135 100644
--- a/pkgs/servers/adguardhome/default.nix
+++ b/pkgs/servers/adguardhome/default.nix
@@ -7,7 +7,7 @@ in
 
 stdenv.mkDerivation rec {
   pname = "adguardhome";
-  version = "0.107.25";
+  version = "0.107.26";
   src = sources.${system} or (throw "Source for ${pname} is not available for ${system}");
 
   installPhase = ''
@@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
 
   passthru = {
     updateScript = ./update.sh;
-    schema_version = 16;
+    schema_version = 17;
     tests.adguardhome = nixosTests.adguardhome;
   };
 
diff --git a/pkgs/servers/haste-server/default.nix b/pkgs/servers/haste-server/default.nix
index cc445312e691d..14ec58afa3504 100644
--- a/pkgs/servers/haste-server/default.nix
+++ b/pkgs/servers/haste-server/default.nix
@@ -9,13 +9,13 @@
 
 stdenv.mkDerivation rec {
   pname = "haste-server";
-  version = "ccc5049b07e9f90ec19fc2a88e5056367c53e202";
+  version = "b52b394bad909ddf151073987671e843540d91d6";
 
   src = fetchFromGitHub {
     owner = "toptal";
     repo = "haste-server";
     rev = version;
-    hash = "sha256-ODFHB2QwfLPxfjFsHrblSeiqLc9nPo7EOPGQ3AoqzSQ=";
+    hash = "sha256-AVoz5MY5gNxQrHtDMPbQ85IjmHii1v6C2OXpEQj9zC8=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/servers/haste-server/node-deps.nix b/pkgs/servers/haste-server/node-deps.nix
index 36a5d6fd39764..2c8e11bb92478 100644
--- a/pkgs/servers/haste-server/node-deps.nix
+++ b/pkgs/servers/haste-server/node-deps.nix
@@ -850,13 +850,13 @@ let
         sha512 = "AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==";
       };
     };
-    "pg-8.8.0" = {
+    "pg-8.10.0" = {
       name = "pg";
       packageName = "pg";
-      version = "8.8.0";
+      version = "8.10.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/pg/-/pg-8.8.0.tgz";
-        sha512 = "UXYN0ziKj+AeNNP7VDMwrehpACThH7LUl/p8TDFpEUuSejCUIwGSfxpHsPvtM6/WXFy6SU4E5RG4IJV/TZAGjw==";
+        url = "https://registry.npmjs.org/pg/-/pg-8.10.0.tgz";
+        sha512 = "ke7o7qSTMb47iwzOSaZMfeR7xToFdkE71ifIipOAAaLIM0DYzfOAXlgFFmYUIE2BcJtvnVlGCID84ZzCegE8CQ==";
       };
     };
     "pg-connection-string-2.5.0" = {
@@ -877,22 +877,22 @@ let
         sha512 = "WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==";
       };
     };
-    "pg-pool-3.5.2" = {
+    "pg-pool-3.6.0" = {
       name = "pg-pool";
       packageName = "pg-pool";
-      version = "3.5.2";
+      version = "3.6.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz";
-        sha512 = "His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==";
+        url = "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.0.tgz";
+        sha512 = "clFRf2ksqd+F497kWFyM21tMjeikn60oGDmqMT8UBrynEwVEX/5R5xd2sdvdo1cZCFlguORNpVuqxIj+aK4cfQ==";
       };
     };
-    "pg-protocol-1.5.0" = {
+    "pg-protocol-1.6.0" = {
       name = "pg-protocol";
       packageName = "pg-protocol";
-      version = "1.5.0";
+      version = "1.6.0";
       src = fetchurl {
-        url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz";
-        sha512 = "muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==";
+        url = "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz";
+        sha512 = "M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==";
       };
     };
     "pg-types-2.2.0" = {
@@ -985,13 +985,13 @@ let
         sha512 = "+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==";
       };
     };
-    "readable-stream-3.6.0" = {
+    "readable-stream-3.6.1" = {
       name = "readable-stream";
       packageName = "readable-stream";
-      version = "3.6.0";
+      version = "3.6.1";
       src = fetchurl {
-        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz";
-        sha512 = "BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==";
+        url = "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz";
+        sha512 = "+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==";
       };
     };
     "readdirp-3.5.0" = {
@@ -1350,7 +1350,7 @@ let
     name = "haste";
     packageName = "haste";
     version = "0.1.0";
-    src = ../../../../../../../../../nix/store/zmi5rwpy1kmyj52ymv3yc8ziiypjgrxd-source;
+    src = ../../../../../../../../../nix/store/v45nw2igqcjw58j7ns9xrqj6f6n3jafd-source;
     dependencies = [
       sources."@ungap/promise-all-settled-1.1.2"
       sources."ansi-colors-4.1.1"
@@ -1365,7 +1365,7 @@ let
       sources."binary-extensions-2.2.0"
       (sources."bl-4.1.0" // {
         dependencies = [
-          sources."readable-stream-3.6.0"
+          sources."readable-stream-3.6.1"
           sources."string_decoder-1.3.0"
         ];
       })
@@ -1466,11 +1466,11 @@ let
       sources."parseurl-1.3.3"
       sources."path-exists-4.0.0"
       sources."path-is-absolute-1.0.1"
-      sources."pg-8.8.0"
+      sources."pg-8.10.0"
       sources."pg-connection-string-2.5.0"
       sources."pg-int8-1.0.1"
-      sources."pg-pool-3.5.2"
-      sources."pg-protocol-1.5.0"
+      sources."pg-pool-3.6.0"
+      sources."pg-protocol-1.6.0"
       sources."pg-types-2.2.0"
       sources."pgpass-1.0.5"
       sources."picomatch-2.3.1"
diff --git a/pkgs/servers/home-assistant/component-packages.nix b/pkgs/servers/home-assistant/component-packages.nix
index 00b8f30fe5035..26c2a1f9c8d37 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 = "2023.3.1";
+  version = "2023.3.3";
   components = {
     "3_day_blinds" = ps: with ps; [
     ];
diff --git a/pkgs/servers/home-assistant/default.nix b/pkgs/servers/home-assistant/default.nix
index 89d6ead490684..51f6b41d03292 100644
--- a/pkgs/servers/home-assistant/default.nix
+++ b/pkgs/servers/home-assistant/default.nix
@@ -181,11 +181,11 @@ let
       });
 
       sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec {
-        version = "2.0.4";
+        version = "2.0.5.post1";
         src = super.fetchPypi {
           pname = "SQLAlchemy";
           inherit version;
-          hash = "sha256-laGOGmryEU29nuTxaK0zBw1jF+Ebr6KNmDzHtYX+kAs=";
+          hash = "sha256-E+sqWILP2fTu2q7BSlYDoJbwEl98PLSGEbO/o8JT8l0=";
         };
         nativeCheckInputs = oldAttrs.nativeCheckInputs ++ (with super; [
           pytest-xdist
@@ -263,7 +263,7 @@ let
   extraBuildInputs = extraPackages python.pkgs;
 
   # Don't forget to run parse-requirements.py after updating
-  hassVersion = "2023.3.1";
+  hassVersion = "2023.3.3";
 
 in python.pkgs.buildPythonApplication rec {
   pname = "homeassistant";
@@ -279,7 +279,7 @@ in python.pkgs.buildPythonApplication rec {
   # Primary source is the pypi sdist, because it contains translations
   src = fetchPypi {
     inherit pname version;
-    hash = "sha256-FvdMNtiLJ6p9I6aEeICukx9mykGGMoONGNdM/I4u/eY=";
+    hash = "sha256-AJJ0w66a8D3kiLHhnoFmnGRWyDJ4OCebwwKTGdprGa0=";
   };
 
   # Secondary source is git for tests
@@ -287,7 +287,7 @@ in python.pkgs.buildPythonApplication rec {
     owner = "home-assistant";
     repo = "core";
     rev = "refs/tags/${version}";
-    hash = "sha256-2usXU1a/QKEIaeg8JFBf/4ID2nzZLoGsfK7KXreKEBE=";
+    hash = "sha256-KTmMA8P0MhYAiwp073Q3s60budFKHrsBnAJSqYC7zis=";
   };
 
   nativeBuildInputs = with python3.pkgs; [
@@ -442,6 +442,7 @@ in python.pkgs.buildPythonApplication rec {
       python
       supportedComponentsWithTests;
     pythonPath = python3.pkgs.makePythonPath (componentBuildInputs ++ extraBuildInputs);
+    frontend = python.pkgs.home-assistant-frontend;
     intents = python.pkgs.home-assistant-intents;
     tests = {
       nixos = nixosTests.home-assistant;
diff --git a/pkgs/servers/home-assistant/frontend.nix b/pkgs/servers/home-assistant/frontend.nix
index 6c7329d20707d..76462fc851bf0 100644
--- a/pkgs/servers/home-assistant/frontend.nix
+++ b/pkgs/servers/home-assistant/frontend.nix
@@ -4,7 +4,7 @@ buildPythonPackage rec {
   # the frontend version corresponding to a specific home-assistant version can be found here
   # https://github.com/home-assistant/home-assistant/blob/master/homeassistant/components/frontend/manifest.json
   pname = "home-assistant-frontend";
-  version = "20230302.0";
+  version = "20230309.0";
   format = "wheel";
 
   src = fetchPypi {
@@ -12,7 +12,7 @@ buildPythonPackage rec {
     pname = "home_assistant_frontend";
     dist = "py3";
     python = "py3";
-    hash = "sha256-G+XexUc5yvADjbXBgg97FB03Al3zR9WTb4cuVBBrSuI=";
+    hash = "sha256-gHc93xKIm0LDQrkTtlMdLv/N2smfYz5lQ6uLV+Cqj+s=";
   };
 
   # there is nothing to strip in this package
diff --git a/pkgs/servers/home-assistant/parse-requirements.py b/pkgs/servers/home-assistant/parse-requirements.py
index 162bb4af04b9f..7f0cb371769f9 100755
--- a/pkgs/servers/home-assistant/parse-requirements.py
+++ b/pkgs/servers/home-assistant/parse-requirements.py
@@ -1,5 +1,5 @@
 #! /usr/bin/env nix-shell
-#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ mypy attrs packaging rich ])
+#! nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ attrs packaging rich ])" -p nodePackages.pyright ruff isort"
 #
 # This script downloads Home Assistant's source tarball.
 # Inside the homeassistant/components directory, each integration has an associated manifest.json,
@@ -25,8 +25,9 @@ import tarfile
 import tempfile
 from functools import reduce
 from io import BytesIO
-from typing import Dict, Optional, Set, Any
+from typing import Any, Dict, List, Optional, Set
 from urllib.request import urlopen
+
 from packaging import version as Version
 from rich.console import Console
 from rich.table import Table
@@ -45,17 +46,21 @@ PKG_PREFERENCES = {
 }
 
 
-def run_mypy() -> None:
-    cmd = ["mypy", "--ignore-missing-imports", __file__]
+
+def run_sync(cmd: List[str]) -> None:
     print(f"$ {' '.join(cmd)}")
-    subprocess.run(cmd, check=True)
+    process = subprocess.run(cmd)
+
+    if process.returncode != 0:
+        sys.exit(1)
 
 
-def get_version():
+def get_version() -> str:
     with open(os.path.dirname(sys.argv[0]) + "/default.nix") as f:
         # A version consists of digits, dots, and possibly a "b" (for beta)
-        m = re.search('hassVersion = "([\\d\\.b]+)";', f.read())
-        return m.group(1)
+        if match := re.search('hassVersion = "([\\d\\.b]+)";', f.read()):
+            return match.group(1)
+        raise RuntimeError("hassVersion not in default.nix")
 
 
 def parse_components(version: str = "master"):
@@ -74,7 +79,7 @@ def parse_components(version: str = "master"):
                 components_with_tests.append(entry.name)
 
         sys.path.append(core_path)
-        from script.hassfest.model import Integration
+        from script.hassfest.model import Integration  # type: ignore
         integrations = Integration.load_dir(
             pathlib.Path(
                 os.path.join(core_path, "homeassistant/components")
@@ -270,5 +275,7 @@ def main() -> None:
 
 
 if __name__ == "__main__":
-    run_mypy()
+    run_sync(["pyright", __file__])
+    run_sync(["ruff", "--ignore=E501", __file__])
+    run_sync(["isort", __file__])
     main()
diff --git a/pkgs/servers/home-assistant/stubs.nix b/pkgs/servers/home-assistant/stubs.nix
index 4e31078381ff5..0576814b68ee2 100644
--- a/pkgs/servers/home-assistant/stubs.nix
+++ b/pkgs/servers/home-assistant/stubs.nix
@@ -8,7 +8,7 @@
 
 buildPythonPackage rec {
   pname = "homeassistant-stubs";
-  version = "2023.3.1";
+  version = "2023.3.2";
   format = "pyproject";
 
   disabled = python.version != home-assistant.python.version;
@@ -17,7 +17,7 @@ buildPythonPackage rec {
     owner = "KapJI";
     repo = "homeassistant-stubs";
     rev = "refs/tags/${version}";
-    hash = "sha256-WMuQgoWwri4nfKkZ8cW5o6S6G3PbHqlUxC9wyJSZhxQ=";
+    hash = "sha256-tgXjACNGD3QTrsgYtcTinW4HflwGSoCR6k6SrawQz6A=";
   };
 
   nativeBuildInputs = [
@@ -25,6 +25,14 @@ buildPythonPackage rec {
     home-assistant
   ];
 
+  postPatch = ''
+    # Relax constraint to year and month
+    substituteInPlace pyproject.toml --replace \
+      'homeassistant = "${version}"' \
+      'homeassistant = "~${lib.versions.majorMinor home-assistant.version}"'
+    cat pyproject.toml
+  '';
+
   pythonImportsCheck = [
     "homeassistant-stubs"
   ];
diff --git a/pkgs/servers/home-assistant/update.py b/pkgs/servers/home-assistant/update.py
new file mode 100755
index 0000000000000..c914979e28bd3
--- /dev/null
+++ b/pkgs/servers/home-assistant/update.py
@@ -0,0 +1,263 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -I nixpkgs=channel:nixpkgs-unstable -i python3 -p "python3.withPackages (ps: with ps; [ aiohttp packaging ])" -p git nurl nodePackages.pyright ruff isort
+
+import asyncio
+import json
+import os
+import re
+import sys
+from subprocess import check_output, run
+from typing import Dict, Final, List, Optional, Union
+
+import aiohttp
+from aiohttp import ClientSession
+from packaging.version import Version
+
+ROOT: Final = check_output([
+    "git",
+    "rev-parse",
+    "--show-toplevel",
+]).decode().strip()
+
+
+def run_sync(cmd: List[str]) -> None:
+    print(f"$ {' '.join(cmd)}")
+    process = run(cmd)
+
+    if process.returncode != 0:
+        sys.exit(1)
+
+
+async def check_async(cmd: List[str]) -> str:
+    print(f"$ {' '.join(cmd)}")
+    process = await asyncio.create_subprocess_exec(
+        *cmd,
+        stdout=asyncio.subprocess.PIPE,
+        stderr=asyncio.subprocess.PIPE
+    )
+    stdout, stderr = await process.communicate()
+
+    if process.returncode != 0:
+        error = stderr.decode()
+        raise RuntimeError(f"{cmd[0]} failed: {error}")
+
+    return stdout.decode().strip()
+
+
+async def run_async(cmd: List[str]):
+    print(f"$ {' '.join(cmd)}")
+
+    process = await asyncio.create_subprocess_exec(
+        *cmd,
+        stdout=asyncio.subprocess.PIPE,
+        stderr=asyncio.subprocess.PIPE,
+    )
+    stdout, stderr = await process.communicate()
+
+    print(stdout.decode())
+
+    if process.returncode != 0:
+        error = stderr.decode()
+        raise RuntimeError(f"{cmd[0]} failed: {error}")
+
+
+class File:
+    def __init__(self, path: str):
+        self.path = os.path.join(ROOT, path)
+
+    def __enter__(self):
+        with open(self.path, "r") as handle:
+            self.text = handle.read()
+        return self
+
+    def get_exact_match(self, attr: str, value: str):
+        matches = re.findall(
+            rf'{re.escape(attr)}\s+=\s+\"?{re.escape(value)}\"?',
+            self.text
+        )
+
+        n = len(matches)
+        if n > 1:
+            raise ValueError(f"multiple occurrences found for {attr}={value}")
+        elif n == 1:
+            return matches.pop()
+        else:
+            raise ValueError(f"no occurrence found for {attr}={value}")
+
+    def substitute(self, attr: str, old_value: str, new_value: str) -> None:
+        old_line = self.get_exact_match(attr, old_value)
+        new_line = old_line.replace(old_value, new_value)
+        self.text = self.text.replace(old_line, new_line)
+        print(f"Substitute `{attr}` value `{old_value}` with `{new_value}`")
+
+    def __exit__(self, exc_type, exc_val, exc_tb):
+        with open(self.path, "w") as handle:
+            handle.write(self.text)
+
+class Nurl:
+    @classmethod
+    async def prefetch(cls, url: str, version: str, *extra_args: str) -> str:
+        cmd = [
+            "nurl",
+            "--hash",
+            url,
+            version,
+        ]
+        cmd.extend(extra_args)
+        return await check_async(cmd)
+
+
+class Nix:
+    base_cmd: Final = [
+        "nix",
+        "--show-trace",
+        "--extra-experimental-features", "nix-command"
+    ]
+
+    @classmethod
+    async def _run(cls, args: List[str]) -> Optional[str]:
+        return await check_async(cls.base_cmd + args)
+
+    @classmethod
+    async def eval(cls, expr: str) -> Union[List, Dict, int, float, str, bool]:
+        response = await cls._run([
+            "eval",
+            "-f", f"{ROOT}/default.nix",
+            "--json",
+            expr
+        ])
+        if response is None:
+            raise RuntimeError("Nix eval expression returned no response")
+        try:
+            return json.loads(response)
+        except (TypeError, ValueError):
+            raise RuntimeError("Nix eval response could not be parsed from JSON")
+
+    @classmethod
+    async def hash_to_sri(cls, algorithm: str, value: str) -> Optional[str]:
+        return await cls._run([
+            "hash",
+            "to-sri",
+            "--type", algorithm,
+            value
+        ])
+
+
+class HomeAssistant:
+    def __init__(self, session: ClientSession):
+        self._session = session
+
+    async def get_latest_core_version(
+        self,
+        owner: str = "home-assistant",
+        repo: str = "core"
+    ) -> str:
+        async with self._session.get(
+            f"https://api.github.com/repos/{owner}/{repo}/releases/latest"
+        ) as response:
+            document = await response.json()
+        try:
+            return str(document.get("name"))
+        except KeyError:
+            raise RuntimeError("No tag name in response document")
+
+
+    async def get_latest_frontend_version(
+        self,
+        core_version: str
+    ) -> str:
+        async with self._session.get(
+            f"https://raw.githubusercontent.com/home-assistant/core/{core_version}/homeassistant/components/frontend/manifest.json"
+        ) as response:
+            document = await response.json(content_type="text/plain")
+
+        requirements = [
+            requirement
+            for requirement in document.get("requirements", [])
+            if requirement.startswith("home-assistant-frontend==")
+        ]
+
+        if len(requirements) > 1:
+            raise RuntimeError(
+                "Found more than one version specifier for the frontend package"
+            )
+        elif len(requirements) == 1:
+            requirement = requirements.pop()
+            _, version = requirement.split("==", maxsplit=1)
+            return str(version)
+        else:
+            raise RuntimeError(
+                "Found no version specifier for frontend package"
+            )
+
+
+    async def update_core(self, old_version: str, new_version: str) -> None:
+        old_sdist_hash = str(await Nix.eval("home-assistant.src.outputHash"))
+        new_sdist_hash = await Nurl.prefetch("https://pypi.org/project/homeassistant/", new_version)
+        print(f"sdist: {old_sdist_hash} -> {new_sdist_hash}")
+
+        old_git_hash = str(await Nix.eval("home-assistant.gitSrc.outputHash"))
+        new_git_hash = await Nurl.prefetch("https://github.com/home-assistant/core/", new_version)
+        print(f"git: {old_git_hash} -> {new_git_hash}")
+
+        with File("pkgs/servers/home-assistant/default.nix") as file:
+            file.substitute("hassVersion", old_version, new_version)
+            file.substitute("hash", old_sdist_hash, new_sdist_hash)
+            file.substitute("hash", old_git_hash, new_git_hash)
+
+    async def update_frontend(self, old_version: str, new_version: str) -> None:
+        old_hash = str(await Nix.eval("home-assistant.frontend.src.outputHash"))
+        new_hash = await Nurl.prefetch(
+            "https://pypi.org/project/home_assistant_frontend/",
+            new_version,
+            "-A", "format", "wheel",
+            "-A", "dist", "py3",
+            "-A", "python", "py3"
+        )
+        print(f"frontend: {old_hash} -> {new_hash}")
+
+        with File("pkgs/servers/home-assistant/frontend.nix") as file:
+            file.substitute("version", old_version, new_version)
+            file.substitute("hash", old_hash, new_hash)
+
+    async def update_components(self):
+        await run_async([
+            f"{ROOT}/pkgs/servers/home-assistant/parse-requirements.py"
+        ])
+
+
+async def main():
+    headers = {}
+    if token := os.environ.get("GITHUB_TOKEN", None):
+        headers.update({"GITHUB_TOKEN": token})
+
+    async with aiohttp.ClientSession(headers=headers) as client:
+        hass = HomeAssistant(client)
+
+        core_current = str(await Nix.eval("home-assistant.version"))
+        core_latest = await hass.get_latest_core_version()
+
+        if Version(core_latest) > Version(core_current):
+            print(f"New Home Assistant version {core_latest} is available")
+            await hass.update_core(str(core_current), str(core_latest))
+
+            frontend_current = str(await Nix.eval("home-assistant.frontend.version"))
+            frontend_latest = await hass.get_latest_frontend_version(str(core_latest))
+
+            if Version(frontend_latest) > Version(frontend_current):
+                await hass.update_frontend(str(frontend_current), str(frontend_latest))
+
+            await hass.update_components()
+
+        else:
+            print(f"Home Assistant {core_current} is still the latest version.")
+
+        # wait for async client sessions to close
+        # https://docs.aiohttp.org/en/stable/client_advanced.html#graceful-shutdown
+        await asyncio.sleep(0)
+
+if __name__ == "__main__":
+    run_sync(["pyright", __file__])
+    run_sync(["ruff", "--ignore=E501", __file__])
+    run_sync(["isort", __file__])
+    asyncio.run(main())
diff --git a/pkgs/servers/home-assistant/update.sh b/pkgs/servers/home-assistant/update.sh
deleted file mode 100755
index 05f2e93dfe464..0000000000000
--- a/pkgs/servers/home-assistant/update.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env nix-shell
-#!nix-shell -p nix -p jq -p curl -p bash -p git -p nix-update -i bash
-
-set -eux
-
-DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-cd "$DIR"
-
-CURRENT_VERSION=$(nix-instantiate ../../.. --eval --strict -A home-assistant.version | tr -d '"')
-TARGET_VERSION=$(curl https://api.github.com/repos/home-assistant/core/releases/latest | jq -r '.name')
-MANIFEST=$(curl https://raw.githubusercontent.com/home-assistant/core/${TARGET_VERSION}/homeassistant/components/frontend/manifest.json)
-FRONTEND_VERSION=$(echo $MANIFEST | jq -r '.requirements[] | select(startswith("home-assistant-frontend")) | sub(".*==(?<vers>.*)"; .vers)')
-
-if [[ "$CURRENT_VERSION" == "$TARGET_VERSION" ]]; then
-    echo "home-assistant is up-to-date: ${CURRENT_VERSION}"
-    exit 0
-fi
-
-
-sed -i -e "s/version =.*/version = \"${TARGET_VERSION}\";/" \
-    component-packages.nix
-
-sed -i -e "s/hassVersion =.*/hassVersion = \"${TARGET_VERSION}\";/" \
-    default.nix
-
-(
-    # update the frontend before running parse-requirements, so it doesn't get shown as outdated
-    cd ../../..
-    nix-update --version "$FRONTEND_VERSION" home-assistant.python.pkgs.home-assistant-frontend
-)
-
-./parse-requirements.py
-
-read
-
-(
-    cd ../../..
-    nix-update --version "$TARGET_VERSION" --build home-assistant
-)
-
-#git add ./component-packages.nix ./default.nix ./frontend.nix
-#git commit -m "home-assistant: ${CURRENT_VERSION} -> ${TARGET_VERSION}"
diff --git a/pkgs/servers/home-automation/evcc/default.nix b/pkgs/servers/home-automation/evcc/default.nix
index faadfff26e56b..04a4251692075 100644
--- a/pkgs/servers/home-automation/evcc/default.nix
+++ b/pkgs/servers/home-automation/evcc/default.nix
@@ -16,16 +16,16 @@
 
 buildGo120Module rec {
   pname = "evcc";
-  version = "0.114.0";
+  version = "0.114.1";
 
   src = fetchFromGitHub {
     owner = "evcc-io";
     repo = pname;
     rev = version;
-    hash = "sha256-YPqt1UfXP2LGSopQuM4PXQJG3MmXg+5VjDpBKpV5axI=";
+    hash = "sha256-c+XHSO6waDyju8oXFWGYeaCCqyaYdU2JLXr+NDXijdU=";
   };
 
-  vendorHash = "sha256-CNBwOVykQW7RUuf6oFTxO2DU6sd5IJVqN+6FPytQh+U=";
+  vendorHash = "sha256-O58Y9mfHmNUWtHmdO3hvZQbFlcqfZs0GmQDcx2RKRUs=";
 
   npmDeps = fetchNpmDeps {
     inherit src;
diff --git a/pkgs/servers/http/gitlab-pages/default.nix b/pkgs/servers/http/gitlab-pages/default.nix
deleted file mode 100644
index bdd8c4c43f6fd..0000000000000
--- a/pkgs/servers/http/gitlab-pages/default.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ buildGoModule, lib, fetchFromGitLab }:
-
-buildGoModule rec {
-  pname = "gitlab-pages";
-  version = "15.7.3";
-
-  src = fetchFromGitLab {
-    owner = "gitlab-org";
-    repo = "gitlab-pages";
-    rev = "v${version}";
-    sha256 = "sha256-Aj6XQVIdulwx6mWivwYafR4yrWiNaDeyje3LFQzZPfU=";
-  };
-
-  vendorHash = "sha256-mGcIN9gDCFfr1MvBdfR26LAbrAE2RNivhXP7fCNMyBQ=";
-  subPackages = [ "." ];
-
-  meta = with lib; {
-    description = "Daemon used to serve static websites for GitLab users";
-    homepage = "https://gitlab.com/gitlab-org/gitlab-pages";
-    changelog = "https://gitlab.com/gitlab-org/gitlab-pages/-/blob/v${version}/CHANGELOG.md";
-    license = licenses.mit;
-    maintainers = with maintainers; [ ajs124 das_j ];
-  };
-}
diff --git a/pkgs/servers/invidious/versions.json b/pkgs/servers/invidious/versions.json
index 9258e5a3f8660..925fcf3eff7e7 100644
--- a/pkgs/servers/invidious/versions.json
+++ b/pkgs/servers/invidious/versions.json
@@ -4,9 +4,9 @@
     "sha256": "sha256-EU6T9yQCdOLx98Io8o01rEsgxDFF/Xoy42LgPopD2/A="
   },
   "invidious": {
-    "rev": "0995e0447c2b54d80b55231830b847d41c19b404",
-    "sha256": "sha256-hXF836jxMriMJ/qcBJIF5cRvQG719PStKqTZQcIRqlw=",
-    "version": "unstable-2023-02-22"
+    "rev": "d79d6f38b20376f27b3472e7f359f286b54760a1",
+    "sha256": "sha256-bek+tUAT99WikwVTKAC9sJxTauD9NoebWujWHO006a8=",
+    "version": "unstable-2023-03-07"
   },
   "lsquic": {
     "sha256": "sha256-hG8cUvhbCNeMOsKkaJlgGpzUrIx47E/WhmPIdI5F3qM=",
diff --git a/pkgs/servers/jellyseerr/default.nix b/pkgs/servers/jellyseerr/default.nix
new file mode 100644
index 0000000000000..80dffed68e343
--- /dev/null
+++ b/pkgs/servers/jellyseerr/default.nix
@@ -0,0 +1,93 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, makeWrapper
+, mkYarnPackage
+, nodejs
+, sqlite
+, fetchYarnDeps
+, python3
+, pkg-config
+, glib
+}:
+
+let
+  pin = lib.importJSON ./pin.json;
+in
+
+mkYarnPackage rec {
+  pname = "jellyseerr";
+  inherit (pin) version;
+
+  src = fetchFromGitHub {
+    owner = "Fallenbagel";
+    repo = "jellyseerr";
+    rev = "v${version}";
+    sha256 = pin.srcSha256;
+  };
+
+  packageJSON = ./package.json;
+
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    sha256 = pin.yarnSha256;
+  };
+
+  doDist = false;
+
+  nativeBuildInputs = [
+    nodejs
+    makeWrapper
+  ];
+
+  # Fixes "SQLite package has not been found installed" at launch
+  pkgConfig.sqlite3 = {
+    nativeBuildInputs = [ nodejs.pkgs.node-pre-gyp python3 ];
+    postInstall = ''
+      export CPPFLAGS="-I${nodejs}/include/node"
+      node-pre-gyp install --prefer-offline --build-from-source --nodedir=${nodejs}/include/node
+      rm -r build-tmp-napi-v6
+    '';
+  };
+
+  pkgConfig.bcrypt = {
+    nativeBuildInputs = [ nodejs.pkgs.node-pre-gyp python3 ];
+    postInstall = ''
+      export CPPFLAGS="-I${nodejs}/include/node"
+      node-pre-gyp install --prefer-offline --build-from-source --nodedir=${nodejs}/include/node
+    '';
+  };
+
+  buildPhase = ''
+    runHook preBuild
+    (
+      shopt -s dotglob
+      cd deps/jellyseerr
+      rm -r config/*
+      yarn build
+      rm -r .next/cache
+    )
+    runHook postBuild
+  '';
+
+  postInstall = ''
+    makeWrapper '${nodejs}/bin/node' "$out/bin/jellyseerr" \
+      --add-flags "$out/libexec/jellyseerr/deps/jellyseerr/dist/index.js" \
+      --set NODE_ENV production
+  '';
+
+  passthru.updateScript = ./update.sh;
+
+  meta = with lib; {
+    description = "Fork of overseerr for jellyfin support";
+    homepage = "https://github.com/Fallenbagel/jellyseerr";
+    longDescription = ''
+      Jellyseerr is a free and open source software application for managing
+      requests for your media library. It is a a fork of Overseerr built to
+      bring support for Jellyfin & Emby media servers!
+    '';
+    license = licenses.mit;
+    maintainers = with maintainers; [ camillemndn ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/pkgs/servers/jellyseerr/package.json b/pkgs/servers/jellyseerr/package.json
new file mode 100644
index 0000000000000..dd5fb6cf187e8
--- /dev/null
+++ b/pkgs/servers/jellyseerr/package.json
@@ -0,0 +1,246 @@
+{
+  "name": "jellyseerr",
+  "version": "1.4.1",
+  "private": true,
+  "scripts": {
+    "dev": "nodemon -e ts --watch server --watch overseerr-api.yml -e .json,.ts,.yml -x ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/index.ts",
+    "build:server": "tsc --project server/tsconfig.json && copyfiles -u 2 server/templates/**/*.{html,pug} dist/templates && tsc-alias -p server/tsconfig.json",
+    "build:next": "next build",
+    "build": "yarn build:next && yarn build:server",
+    "lint": "eslint \"./server/**/*.{ts,tsx}\" \"./src/**/*.{ts,tsx}\" --cache",
+    "start": "NODE_ENV=production node dist/index.js",
+    "i18n:extract": "extract-messages -l=en -o src/i18n/locale -d en --flat true --overwriteDefault true \"./src/**/!(*.test).{ts,tsx}\"",
+    "migration:generate": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:generate -d server/datasource.ts",
+    "migration:create": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:create -d server/datasource.ts",
+    "migration:run": "ts-node -r tsconfig-paths/register --project server/tsconfig.json ./node_modules/typeorm/cli.js migration:run -d server/datasource.ts",
+    "format": "prettier --loglevel warn --write --cache .",
+    "format:check": "prettier --check --cache .",
+    "typecheck": "yarn typecheck:server && yarn typecheck:client",
+    "typecheck:server": "tsc --project server/tsconfig.json --noEmit",
+    "typecheck:client": "tsc --noEmit",
+    "prepare": "husky install",
+    "cypress:open": "cypress open",
+    "cypress:prepare": "ts-node -r tsconfig-paths/register --files --project server/tsconfig.json server/scripts/prepareTestDb.ts",
+    "cypress:build": "yarn build && yarn cypress:prepare"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/fallenbagel/jellyseerr.git"
+  },
+  "license": "MIT",
+  "dependencies": {
+    "@formatjs/intl-displaynames": "6.2.3",
+    "@formatjs/intl-locale": "3.0.11",
+    "@formatjs/intl-pluralrules": "5.1.8",
+    "@formatjs/intl-utils": "3.8.4",
+    "@headlessui/react": "1.7.7",
+    "@heroicons/react": "2.0.13",
+    "@supercharge/request-ip": "1.2.0",
+    "@svgr/webpack": "6.5.1",
+    "@tanem/react-nprogress": "5.0.22",
+    "ace-builds": "1.14.0",
+    "axios": "1.2.2",
+    "axios-rate-limit": "1.3.0",
+    "bcrypt": "5.1.0",
+    "bowser": "2.11.0",
+    "connect-typeorm": "1.1.4",
+    "cookie-parser": "1.4.6",
+    "copy-to-clipboard": "3.3.3",
+    "country-flag-icons": "1.5.5",
+    "cronstrue": "2.21.0",
+    "csurf": "1.11.0",
+    "date-fns": "2.29.3",
+    "dayjs": "1.11.7",
+    "email-templates": "9.0.0",
+    "email-validator": "2.0.4",
+    "express": "4.18.2",
+    "express-openapi-validator": "4.13.8",
+    "express-rate-limit": "6.7.0",
+    "express-session": "1.17.3",
+    "formik": "2.2.9",
+    "gravatar-url": "3.1.0",
+    "intl": "1.2.5",
+    "lodash": "4.17.21",
+    "next": "12.3.4",
+    "node-cache": "5.1.2",
+    "node-gyp": "9.3.1",
+    "node-schedule": "2.1.0",
+    "nodemailer": "6.8.0",
+    "openpgp": "5.5.0",
+    "plex-api": "5.3.2",
+    "pug": "3.0.2",
+    "pulltorefreshjs": "0.1.22",
+    "react": "18.2.0",
+    "react-ace": "10.1.0",
+    "react-animate-height": "2.1.2",
+    "react-aria": "3.22.0",
+    "react-dom": "18.2.0",
+    "react-intersection-observer": "9.4.1",
+    "react-intl": "6.2.5",
+    "react-markdown": "8.0.4",
+    "react-popper-tooltip": "4.4.2",
+    "react-select": "5.7.0",
+    "react-spring": "9.6.1",
+    "react-tailwindcss-datepicker-sct": "1.3.4",
+    "react-toast-notifications": "2.5.1",
+    "react-truncate-markup": "5.1.2",
+    "react-use-clipboard": "1.0.9",
+    "reflect-metadata": "0.1.13",
+    "secure-random-password": "0.2.3",
+    "semver": "7.3.8",
+    "sqlite3": "5.1.4",
+    "swagger-ui-express": "4.6.0",
+    "swr": "2.0.0",
+    "typeorm": "0.3.11",
+    "web-push": "3.5.0",
+    "winston": "3.8.2",
+    "winston-daily-rotate-file": "4.7.1",
+    "xml2js": "0.4.23",
+    "yamljs": "0.3.0",
+    "yup": "0.32.11",
+    "zod": "3.20.2"
+  },
+  "devDependencies": {
+    "@babel/cli": "7.20.7",
+    "@commitlint/cli": "17.4.0",
+    "@commitlint/config-conventional": "17.4.0",
+    "@semantic-release/changelog": "6.0.2",
+    "@semantic-release/commit-analyzer": "9.0.2",
+    "@semantic-release/exec": "6.0.3",
+    "@semantic-release/git": "10.0.1",
+    "@tailwindcss/aspect-ratio": "0.4.2",
+    "@tailwindcss/forms": "0.5.3",
+    "@tailwindcss/typography": "0.5.8",
+    "@types/bcrypt": "5.0.0",
+    "@types/cookie-parser": "1.4.3",
+    "@types/country-flag-icons": "1.2.0",
+    "@types/csurf": "1.11.2",
+    "@types/email-templates": "8.0.4",
+    "@types/express": "4.17.15",
+    "@types/express-session": "1.17.5",
+    "@types/lodash": "4.14.191",
+    "@types/node": "17.0.36",
+    "@types/node-schedule": "2.1.0",
+    "@types/nodemailer": "6.4.7",
+    "@types/pulltorefreshjs": "0.1.5",
+    "@types/react": "18.0.26",
+    "@types/react-dom": "18.0.10",
+    "@types/react-transition-group": "4.4.5",
+    "@types/secure-random-password": "0.2.1",
+    "@types/semver": "7.3.13",
+    "@types/swagger-ui-express": "4.1.3",
+    "@types/web-push": "3.3.2",
+    "@types/xml2js": "0.4.11",
+    "@types/yamljs": "0.2.31",
+    "@types/yup": "0.29.14",
+    "@typescript-eslint/eslint-plugin": "5.48.0",
+    "@typescript-eslint/parser": "5.48.0",
+    "autoprefixer": "10.4.13",
+    "babel-plugin-react-intl": "8.2.25",
+    "babel-plugin-react-intl-auto": "3.3.0",
+    "commitizen": "4.2.6",
+    "copyfiles": "2.4.1",
+    "cy-mobile-commands": "0.3.0",
+    "cypress": "12.3.0",
+    "cz-conventional-changelog": "3.3.0",
+    "eslint": "8.31.0",
+    "eslint-config-next": "12.3.4",
+    "eslint-config-prettier": "8.6.0",
+    "eslint-plugin-formatjs": "4.3.9",
+    "eslint-plugin-jsx-a11y": "6.6.1",
+    "eslint-plugin-no-relative-import-paths": "1.5.2",
+    "eslint-plugin-prettier": "4.2.1",
+    "eslint-plugin-react": "7.31.11",
+    "eslint-plugin-react-hooks": "4.6.0",
+    "extract-react-intl-messages": "4.1.1",
+    "husky": "8.0.3",
+    "lint-staged": "13.1.0",
+    "nodemon": "2.0.20",
+    "postcss": "8.4.20",
+    "prettier": "2.8.1",
+    "prettier-plugin-organize-imports": "3.2.1",
+    "prettier-plugin-tailwindcss": "0.2.1",
+    "semantic-release": "19.0.5",
+    "semantic-release-docker-buildx": "1.0.1",
+    "tailwindcss": "3.2.4",
+    "ts-node": "10.9.1",
+    "tsc-alias": "1.8.2",
+    "tsconfig-paths": "4.1.2",
+    "typescript": "4.9.4"
+  },
+  "resolutions": {
+    "sqlite3/node-gyp": "8.4.1",
+    "@types/react": "18.0.26",
+    "@types/react-dom": "18.0.10"
+  },
+  "config": {
+    "commitizen": {
+      "path": "./node_modules/cz-conventional-changelog"
+    }
+  },
+  "lint-staged": {
+    "**/*.{ts,tsx,js}": [
+      "prettier --write",
+      "eslint"
+    ],
+    "**/*.{json,md,css}": [
+      "prettier --write"
+    ]
+  },
+  "commitlint": {
+    "extends": [
+      "@commitlint/config-conventional"
+    ]
+  },
+  "release": {
+    "plugins": [
+      "@semantic-release/commit-analyzer",
+      "@semantic-release/release-notes-generator",
+      [
+        "@semantic-release/changelog",
+        {
+          "changelogFile": "CHANGELOG.md"
+        }
+      ],
+      "@semantic-release/npm",
+      [
+        "@semantic-release/git",
+        {
+          "assets": [
+            "package.json",
+            "CHANGELOG.md"
+          ],
+          "message": "chore(release): ${nextRelease.version}"
+        }
+      ],
+      "semantic-release-docker-buildx",
+      [
+        "@semantic-release/github",
+        {
+          "addReleases": "bottom"
+        }
+      ]
+    ],
+    "branches": [
+      "main"
+    ],
+    "npmPublish": false,
+    "publish": [
+      {
+        "path": "semantic-release-docker-buildx",
+        "buildArgs": {
+          "COMMIT_TAG": "$GIT_SHA"
+        },
+        "imageNames": [
+          "fallenbagel/jellyseerr"
+        ],
+        "platforms": [
+          "linux/amd64",
+          "linux/arm64",
+          "linux/arm/v7"
+        ]
+      },
+      "@semantic-release/github"
+    ]
+  }
+}
diff --git a/pkgs/servers/jellyseerr/pin.json b/pkgs/servers/jellyseerr/pin.json
new file mode 100644
index 0000000000000..3681e3df6853d
--- /dev/null
+++ b/pkgs/servers/jellyseerr/pin.json
@@ -0,0 +1,5 @@
+{
+  "version": "1.4.1",
+  "srcSha256": "LDqlQfy1bm2xMNn1oulImfanQmJX57P48VaZn0Jxwpk=",
+  "yarnSha256": "162aip7r5vcpfj1sn42qwwdlwnaii32bd2k0gp9py1z0zmw0lwlf"
+}
diff --git a/pkgs/servers/jellyseerr/update.sh b/pkgs/servers/jellyseerr/update.sh
new file mode 100755
index 0000000000000..b1561bae217da
--- /dev/null
+++ b/pkgs/servers/jellyseerr/update.sh
@@ -0,0 +1,39 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p nix curl jq prefetch-yarn-deps nix-prefetch-github
+
+set -euo pipefail
+
+if [[ "$#" -gt 1 || "$1" == -* ]]; then
+  echo "Regenerates packaging data for jellyseerr."
+  echo "Usage: $0 [git release tag]"
+  exit 1
+fi
+
+tag="$1"
+
+if [ -z "$tag" ]; then
+  tag="$(
+    curl "https://api.github.com/repos/Fallenbagel/jellyseerr/releases?per_page=1" |
+    jq -r '.[0].tag_name'
+  )"
+fi
+
+src="https://raw.githubusercontent.com/Fallenbagel/jellyseerr/$tag"
+src_sha256=$(nix-prefetch-github Fallenbagel jellyseerr --rev ${tag} | jq -r .sha256)
+
+tmpdir=$(mktemp -d)
+trap 'rm -rf "$tmpdir"' EXIT
+
+pushd $tmpdir
+curl -O "$src/yarn.lock"
+yarn_sha256=$(prefetch-yarn-deps yarn.lock)
+popd
+
+curl -O "$src/package.json"
+cat > pin.json << EOF
+{
+  "version": "$(echo $tag | grep -P '(\d|\.)+' -o)",
+  "srcSha256": "$src_sha256",
+  "yarnSha256": "$yarn_sha256"
+}
+EOF
diff --git a/pkgs/servers/komga/default.nix b/pkgs/servers/komga/default.nix
index 5af5a44d16853..1f651a5f46e59 100644
--- a/pkgs/servers/komga/default.nix
+++ b/pkgs/servers/komga/default.nix
@@ -8,11 +8,11 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "komga";
-  version = "0.162.0";
+  version = "0.163.0";
 
   src = fetchurl {
     url = "https://github.com/gotson/${pname}/releases/download/v${version}/${pname}-${version}.jar";
-    sha256 = "sha256-RcEAqMfpXH7PudLOROpSZw/5HrEeuBFBkllOjGdXZCU=";
+    sha256 = "sha256-dKbdzfjb+brY++uflVvuF1LaOIaYn1UqIGIjCsyLMv8=";
   };
 
   nativeBuildInputs = [
diff --git a/pkgs/servers/libreddit/default.nix b/pkgs/servers/libreddit/default.nix
index 442d590cf64f8..f7a77c6962c5a 100644
--- a/pkgs/servers/libreddit/default.nix
+++ b/pkgs/servers/libreddit/default.nix
@@ -8,16 +8,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "libreddit";
-  version = "0.29.4";
+  version = "0.30.0";
 
   src = fetchFromGitHub {
     owner = "libreddit";
     repo = pname;
     rev = "refs/tags/v${version}";
-    hash = "sha256-xGjCki0fQWXLXqCvNj6GjQ7qbFBcaJBPuPb8Aj1whLk=";
+    hash = "sha256-jV8U7znBFCYBmtI6fm+/5oKsLJ3/tQG16GUvNnBlp7A=";
   };
 
-  cargoHash = "sha256-+fEHD648za4tNEQiu1AYfFXf3Hbe9f0D3MFYJ0OCfqQ=";
+  cargoHash = "sha256-V7bT1uwSk9IW5rhKHW+6yHv+o+H3w7O/yuRpPDrcFic=";
 
   buildInputs = lib.optionals stdenv.isDarwin [
     Security
diff --git a/pkgs/servers/misc/navidrome/default.nix b/pkgs/servers/misc/navidrome/default.nix
index 770ca8c76e868..7a48fa7daee13 100644
--- a/pkgs/servers/misc/navidrome/default.nix
+++ b/pkgs/servers/misc/navidrome/default.nix
@@ -14,13 +14,13 @@
 
 let
 
-  version = "0.49.1";
+  version = "0.49.3";
 
   src = fetchFromGitHub {
     owner = "navidrome";
     repo = "navidrome";
     rev = "v${version}";
-    hash = "sha256-YaBtzMW2zUHRYJDDF+mMll2rMBAg5os2HSP0uEujoWI=";
+    hash = "sha256-JBvY+0QAouEc0im62aVSJ27GAB7jt0qVnYtc6VN2qTA=";
   };
 
   ui = callPackage ./ui {
@@ -35,7 +35,7 @@ buildGoModule {
 
   inherit src version;
 
-  vendorSha256 = "sha256-9JDP58UxlSadMXD7gUl2oN+uiYN9RlGO4HMuZJhO9mw=";
+  vendorSha256 = "sha256-C8w/qCts8VqNDTQVXtykjmSbo5uDrvS9NOu3SHpAlDE=";
 
   nativeBuildInputs = [ makeWrapper pkg-config ];
 
diff --git a/pkgs/servers/misc/oven-media-engine/default.nix b/pkgs/servers/misc/oven-media-engine/default.nix
index b14efeaabecf0..42d86bedfc54a 100644
--- a/pkgs/servers/misc/oven-media-engine/default.nix
+++ b/pkgs/servers/misc/oven-media-engine/default.nix
@@ -19,13 +19,13 @@
 
 stdenv.mkDerivation rec {
   pname = "oven-media-engine";
-  version = "0.15.1";
+  version = "0.15.3";
 
   src = fetchFromGitHub {
     owner = "AirenSoft";
     repo = "OvenMediaEngine";
     rev = "v${version}";
-    sha256 = "sha256-Ob+0Ak0ELyHrZfeCiACX2IHsp+6jE//iqPoW6je6GfQ=";
+    sha256 = "sha256-HbtKEWDCT6DpJYc25I+WZw6HwZeeYRUz+OzPcf8bCfw=";
   };
 
   sourceRoot = "source/src";
diff --git a/pkgs/servers/monitoring/prometheus/statsd-exporter.nix b/pkgs/servers/monitoring/prometheus/statsd-exporter.nix
index 6930398407c68..309ccfd4dfa59 100644
--- a/pkgs/servers/monitoring/prometheus/statsd-exporter.nix
+++ b/pkgs/servers/monitoring/prometheus/statsd-exporter.nix
@@ -5,16 +5,16 @@
 
 buildGoModule rec {
   pname = "statsd_exporter";
-  version = "0.23.0";
+  version = "0.23.1";
 
   src = fetchFromGitHub {
     owner = "prometheus";
     repo = "statsd_exporter";
     rev = "v${version}";
-    hash = "sha256-7atRLwucO09yN2odu0uNe7xrtKLq9kmy6JyI1y4Sww8=";
+    hash = "sha256-JbRkLRXTQo40wBynfG6BRR4+yPqy7VLJ33vsjus5okg=";
   };
 
-  vendorHash = "sha256-H0f7bDnSddlabpRbMpk9tInlne2tI5J+MQ23mw1N71E=";
+  vendorHash = "sha256-YzcgEQ1S2qn7v2SVSBiodprtc+D4cSZOFBJwpq3jz8Y=";
 
   meta = with lib; {
     description = "Receives StatsD-style metrics and exports them to Prometheus";
diff --git a/pkgs/servers/onlyoffice-documentserver/default.nix b/pkgs/servers/onlyoffice-documentserver/default.nix
index 517d288b8f7b3..c79548a0e9f9f 100644
--- a/pkgs/servers/onlyoffice-documentserver/default.nix
+++ b/pkgs/servers/onlyoffice-documentserver/default.nix
@@ -15,11 +15,11 @@ let
   # var/www/onlyoffice/documentserver/server/DocService/docservice
   onlyoffice-documentserver = stdenv.mkDerivation rec {
     pname = "onlyoffice-documentserver";
-    version = "7.3.0";
+    version = "7.3.2";
 
     src = fetchurl {
       url = "https://github.com/ONLYOFFICE/DocumentServer/releases/download/v${lib.concatStringsSep "." (lib.take 3 (lib.splitVersion version))}/onlyoffice-documentserver_amd64.deb";
-      sha256 = "sha256-PBea6VYJkjBf19AQ702OtLsHJ230Sc3e3K9HAccL0BM=";
+      sha256 = "sha256-BXKf5M10/ICxSDXJDmJB+T3HSsVXzSs5gu1AApUra3I=";
     };
 
     preferLocalBuild = true;
diff --git a/pkgs/servers/plex/raw.nix b/pkgs/servers/plex/raw.nix
index 5a0368d36f7d0..b1afed46ec81c 100644
--- a/pkgs/servers/plex/raw.nix
+++ b/pkgs/servers/plex/raw.nix
@@ -12,16 +12,16 @@
 # server, and the FHS userenv and corresponding NixOS module should
 # automatically pick up the changes.
 stdenv.mkDerivation rec {
-  version = "1.31.1.6733-bc0674160";
+  version = "1.31.1.6782-77dfff442";
   pname = "plexmediaserver";
 
   # Fetch the source
   src = if stdenv.hostPlatform.system == "aarch64-linux" then fetchurl {
     url = "https://downloads.plex.tv/plex-media-server-new/${version}/debian/plexmediaserver_${version}_arm64.deb";
-    sha256 = "0nj9n250lhin58xlqvn2l0pjxdbajj0bla2wrgan8gs2m45nk3q9";
+    sha256 = "1ssnqkyghjpc81jmh67j5bwqqbvjb9aaan9j1yp2rj89fgg9br2c";
   } else fetchurl {
     url = "https://downloads.plex.tv/plex-media-server-new/${version}/debian/plexmediaserver_${version}_amd64.deb";
-    sha256 = "0a5h151gh1ja3frqzaqw3pj1kyh5p0wgnfmmxiz0q3zx1drjs611";
+    sha256 = "0mnqbh5cfpvbhq2s0jg207cy45dm6dkz3d88qgwsi8spwfaj84p7";
   };
 
   outputs = [ "out" "basedb" ];
diff --git a/pkgs/servers/pocketbase/default.nix b/pkgs/servers/pocketbase/default.nix
index c8da1b233c21a..34b2324c81093 100644
--- a/pkgs/servers/pocketbase/default.nix
+++ b/pkgs/servers/pocketbase/default.nix
@@ -5,16 +5,16 @@
 
 buildGoModule rec {
   pname = "pocketbase";
-  version = "0.12.3";
+  version = "0.13.2";
 
   src = fetchFromGitHub {
     owner = "pocketbase";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-/uqUOuNHFyah6nrQI3lRNkB2vpV9vKXJog1ck0zoruo=";
+    sha256 = "sha256-P150wEJHTC294LcRhSHF5/+w08WKBvhUZsJ9ENi1EM8=";
   };
 
-  vendorHash = "sha256-8NBudXcU3cjSbo6qpGZVLtbrLedzwijwrbiTgC+OMcU=";
+  vendorHash = "sha256-hvziOq5zyYwWcvqa23IzHXj/DT27MAcNVegYR38beJ4=";
 
   # This is the released subpackage from upstream repo
   subPackages = [ "examples/base" ];
diff --git a/pkgs/servers/redpanda/default.nix b/pkgs/servers/redpanda/default.nix
index c59aa621cc4d6..fde3454dd310b 100644
--- a/pkgs/servers/redpanda/default.nix
+++ b/pkgs/servers/redpanda/default.nix
@@ -7,12 +7,12 @@
 , stdenv
 }:
 let
-  version = "22.3.13";
+  version = "23.1.1";
   src = fetchFromGitHub {
     owner = "redpanda-data";
     repo = "redpanda";
     rev = "v${version}";
-    sha256 = "sha256-cUQFDXWnQYSLcfKFYg6BLrxF77iX+Yx3hcul4tMxdoc=";
+    sha256 = "sha256-3IRhr+XQLZXCeKhUHOlE8REwUkxLw1jcHYIataG3BaM=";
   };
   server = callPackage ./server.nix { inherit src version; };
 in
@@ -21,7 +21,7 @@ buildGoModule rec {
   inherit doCheck src version;
   modRoot = "./src/go/rpk";
   runVend = false;
-  vendorSha256 = "sha256-JVZuHRh3gavIGArxDkqUQsL5oBjz35EKGsC75Sy+cMo=";
+  vendorHash = "sha256-hG1UPy6Lp0F6y0h9Py28zRPS/s5JvoJ2P3OSOrrjz8U=";
 
   ldflags = [
     ''-X "github.com/redpanda-data/redpanda/src/go/rpk/pkg/cli/cmd/version.version=${version}"''
diff --git a/pkgs/servers/search/qdrant/default.nix b/pkgs/servers/search/qdrant/default.nix
index 47e4f04bac891..87a73a7e850b6 100644
--- a/pkgs/servers/search/qdrant/default.nix
+++ b/pkgs/servers/search/qdrant/default.nix
@@ -10,16 +10,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "qdrant";
-  version = "1.0.2";
+  version = "1.0.3";
 
   src = fetchFromGitHub {
     owner = "qdrant";
     repo = "qdrant";
     rev = "refs/tags/v${version}";
-    sha256 = "sha256-AVglZr3J9fEWgE2g5UHt1j6YQud/viGp0IvuR9XRntE=";
+    sha256 = "sha256-r47mfyuM3z3SKbUi1bz8cz7BS/X8/tsIOAMKavNTgN4=";
   };
 
-  cargoSha256 = "sha256-4hzixh1/nVIMRsBSoldmbtpcpBMmvxik3lV/h4FPOrk=";
+  cargoHash = "sha256-EwB0Vz0NyKCek2rn1QHqk5zpReMjP0o46ajete9KmWk=";
 
   prePatch = lib.optionalString stdenv.isAarch64 ''
     substituteInPlace .cargo/config.toml \
diff --git a/pkgs/servers/sql/postgresql/ext/timescaledb.nix b/pkgs/servers/sql/postgresql/ext/timescaledb.nix
index 045e381edd734..a476d3e21d3ae 100644
--- a/pkgs/servers/sql/postgresql/ext/timescaledb.nix
+++ b/pkgs/servers/sql/postgresql/ext/timescaledb.nix
@@ -13,7 +13,7 @@
 
 stdenv.mkDerivation rec {
   pname = "timescaledb";
-  version = "2.10.0";
+  version = "2.10.1";
 
   nativeBuildInputs = [ cmake ];
   buildInputs = [ postgresql openssl libkrb5 ];
@@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
     owner = "timescale";
     repo = "timescaledb";
     rev = version;
-    sha256 = "sha256-3Pne4L9P8mJv2ja6EpxtpCBCYvlCP6D5CzDtkkvE23c=";
+    sha256 = "sha256-D0jo1Z9hpaJBFJQhypo76cKaahNF498OLDco2YNktA8=";
   };
 
   cmakeFlags = [ "-DSEND_TELEMETRY_DEFAULT=OFF" "-DREGRESS_CHECKS=OFF" "-DTAP_CHECKS=OFF" ]
diff --git a/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix b/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix
new file mode 100644
index 0000000000000..d672928cd3d6b
--- /dev/null
+++ b/pkgs/servers/sql/postgresql/ext/timescaledb_toolkit.nix
@@ -0,0 +1,42 @@
+{ lib
+, fetchFromGitHub
+, buildPgxExtension
+, postgresql
+, stdenv
+, nixosTests
+}:
+
+buildPgxExtension rec {
+  inherit postgresql;
+
+  pname = "timescaledb_toolkit";
+  version = "1.14.0";
+
+  src = fetchFromGitHub {
+    owner = "timescale";
+    repo = "timescaledb-toolkit";
+    rev = version;
+    sha256 = "sha256-ADmYALsCzZGqTX0XSkCif7ndvXwa8nEqddQpty4hbZ0=";
+  };
+
+  cargoSha256 = "sha256-ukjJ11LmfG+k8D20rj68i43gOWUN80nf3hIAjUWXihI=";
+  buildAndTestSubdir = "extension";
+
+  passthru.tests = {
+    timescaledb_toolkit = nixosTests.timescaledb;
+  };
+
+  # tests take really long
+  doCheck = false;
+
+  meta = with lib; {
+    description = "Provide additional tools to ease all things analytic when using TimescaleDB";
+    homepage = "https://github.com/timescale/timescaledb-toolkit";
+    maintainers = with maintainers; [ typetetris ];
+    platforms = postgresql.meta.platforms;
+    license = licenses.asl20;
+
+    # as it needs to be used with timescaledb, simply use the condition from there
+    broken = versionOlder postgresql.version "12";
+  };
+}
diff --git a/pkgs/servers/sql/postgresql/packages.nix b/pkgs/servers/sql/postgresql/packages.nix
index 2bf9db061a918..b6fc6480aecb2 100644
--- a/pkgs/servers/sql/postgresql/packages.nix
+++ b/pkgs/servers/sql/postgresql/packages.nix
@@ -56,6 +56,8 @@ self: super: {
 
     timescaledb = super.callPackage ./ext/timescaledb.nix { };
 
+    timescaledb_toolkit = super.callPackage ./ext/timescaledb_toolkit.nix { };
+
     tsearch_extras = super.callPackage ./ext/tsearch_extras.nix { };
 
     tds_fdw = super.callPackage ./ext/tds_fdw.nix { };
diff --git a/pkgs/servers/syncstorage-rs/default.nix b/pkgs/servers/syncstorage-rs/default.nix
index e71d71dc78c9a..da6bc19d8ba31 100644
--- a/pkgs/servers/syncstorage-rs/default.nix
+++ b/pkgs/servers/syncstorage-rs/default.nix
@@ -21,13 +21,13 @@ in
 
 rustPlatform.buildRustPackage rec {
   pname = "syncstorage-rs";
-  version = "0.13.5";
+  version = "0.13.6";
 
   src = fetchFromGitHub {
     owner = "mozilla-services";
     repo = pname;
     rev = "refs/tags/${version}";
-    hash = "sha256-eFrrZ/+8OsmIfCEoXPAKqVkZlgN8sfXueJQvQN8VCB0=";
+    hash = "sha256-LCMbhFoxi/fYaivW5gNyDhfytW/avhrrd29fXobSxJU=";
   };
 
   nativeBuildInputs = [
@@ -47,7 +47,7 @@ rustPlatform.buildRustPackage rec {
       --prefix PATH : ${lib.makeBinPath [ pyFxADeps ]}
   '';
 
-  cargoHash = "sha256-SgOxXzI6IZcP5Q06Aj5Pv6Rrvb7xVShUcGaViLuESOw=";
+  cargoHash = "sha256-OPPU1SKR+zNmJ1NNAv4B3C9FOF/Ddg53genUkVwNgSs=";
 
   buildFeatures = [ "grpcio/openssl" ];