diff --git a/apps/update/default.nix b/apps/update/default.nix
index 75610c37..33b0871f 100644
--- a/apps/update/default.nix
+++ b/apps/update/default.nix
@@ -7,16 +7,15 @@
   ...
 }: let
   inherit (lib) concatMapStringsSep getBin;
-  inherit (builtins) readFile fromJSON;
 
-  packageJSON = fromJSON (readFile ./package.json);
+  packageJSON = builtins.fromJSON (builtins.readFile ./package.json);
 in
   buildNpmPackage rec {
     pname = packageJSON.name;
     inherit (packageJSON) version;
 
     src = ./.;
-    npmDepsHash = "sha256-cg+U7MSeeSDrzSWfXAd69FBLN3R8n4+aCSggrdThZHw=";
+    npmDepsHash = "sha256-hNXuZi3kgst0wBzoOwNAthEXW5MrafDD6D3Zwzp0S78=";
 
     runtimeInputs = [
       (callPackage ../../nixosModules/docker/updateImage.nix {})
@@ -25,7 +24,7 @@ in
 
     postInstall = ''
       wrapProgram $out/bin/${pname} \
-        --prefix PATH : ${concatMapStringsSep ":" (p: getBin p) runtimeInputs}
+          --prefix PATH : ${concatMapStringsSep ":" (p: getBin p) runtimeInputs}
     '';
 
     nodejs = nodejs_latest;
diff --git a/apps/update/package-lock.json b/apps/update/package-lock.json
index 258b88f4..8f3487ea 100644
--- a/apps/update/package-lock.json
+++ b/apps/update/package-lock.json
@@ -8,25 +8,25 @@
             "name": "update-flake",
             "version": "0.0.0",
             "dependencies": {
-                "@eslint/js": "9.12.0",
+                "@eslint/js": "9.13.0",
                 "@stylistic/eslint-plugin": "2.9.0",
                 "@types/eslint__js": "8.42.3",
-                "@types/node": "22.7.5",
+                "@types/node": "22.7.7",
                 "esbuild": "0.24.0",
-                "eslint": "9.12.0",
-                "eslint-plugin-jsdoc": "50.3.2",
+                "eslint": "9.13.0",
+                "eslint-plugin-jsdoc": "50.4.3",
                 "jiti": "2.3.3",
                 "typescript": "5.6.3",
-                "typescript-eslint": "8.8.1"
+                "typescript-eslint": "8.10.0"
             },
             "bin": {
                 "update-flake": "out/bin/app.cjs"
             }
         },
         "node_modules/@es-joy/jsdoccomment": {
-            "version": "0.48.0",
-            "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz",
-            "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==",
+            "version": "0.49.0",
+            "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz",
+            "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==",
             "license": "MIT",
             "dependencies": {
                 "comment-parser": "1.4.1",
@@ -494,9 +494,9 @@
             }
         },
         "node_modules/@eslint/core": {
-            "version": "0.6.0",
-            "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz",
-            "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==",
+            "version": "0.7.0",
+            "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz",
+            "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==",
             "license": "Apache-2.0",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -548,9 +548,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "9.12.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.12.0.tgz",
-            "integrity": "sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==",
+            "version": "9.13.0",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz",
+            "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==",
             "license": "MIT",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -723,25 +723,25 @@
             "license": "MIT"
         },
         "node_modules/@types/node": {
-            "version": "22.7.5",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz",
-            "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==",
+            "version": "22.7.7",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz",
+            "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
             }
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.8.1.tgz",
-            "integrity": "sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.10.0.tgz",
+            "integrity": "sha512-phuB3hoP7FFKbRXxjl+DRlQDuJqhpOnm5MmtROXyWi3uS/Xg2ZXqiQfcG2BJHiN4QKyzdOJi3NEn/qTnjUlkmQ==",
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/regexpp": "^4.10.0",
-                "@typescript-eslint/scope-manager": "8.8.1",
-                "@typescript-eslint/type-utils": "8.8.1",
-                "@typescript-eslint/utils": "8.8.1",
-                "@typescript-eslint/visitor-keys": "8.8.1",
+                "@typescript-eslint/scope-manager": "8.10.0",
+                "@typescript-eslint/type-utils": "8.10.0",
+                "@typescript-eslint/utils": "8.10.0",
+                "@typescript-eslint/visitor-keys": "8.10.0",
                 "graphemer": "^1.4.0",
                 "ignore": "^5.3.1",
                 "natural-compare": "^1.4.0",
@@ -765,15 +765,15 @@
             }
         },
         "node_modules/@typescript-eslint/parser": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.8.1.tgz",
-            "integrity": "sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.10.0.tgz",
+            "integrity": "sha512-E24l90SxuJhytWJ0pTQydFT46Nk0Z+bsLKo/L8rtQSL93rQ6byd1V/QbDpHUTdLPOMsBCcYXZweADNCfOCmOAg==",
             "license": "BSD-2-Clause",
             "dependencies": {
-                "@typescript-eslint/scope-manager": "8.8.1",
-                "@typescript-eslint/types": "8.8.1",
-                "@typescript-eslint/typescript-estree": "8.8.1",
-                "@typescript-eslint/visitor-keys": "8.8.1",
+                "@typescript-eslint/scope-manager": "8.10.0",
+                "@typescript-eslint/types": "8.10.0",
+                "@typescript-eslint/typescript-estree": "8.10.0",
+                "@typescript-eslint/visitor-keys": "8.10.0",
                 "debug": "^4.3.4"
             },
             "engines": {
@@ -793,13 +793,13 @@
             }
         },
         "node_modules/@typescript-eslint/scope-manager": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.8.1.tgz",
-            "integrity": "sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.10.0.tgz",
+            "integrity": "sha512-AgCaEjhfql9MDKjMUxWvH7HjLeBqMCBfIaBbzzIcBbQPZE7CPh1m6FF+L75NUMJFMLYhCywJXIDEMa3//1A0dw==",
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/types": "8.8.1",
-                "@typescript-eslint/visitor-keys": "8.8.1"
+                "@typescript-eslint/types": "8.10.0",
+                "@typescript-eslint/visitor-keys": "8.10.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -810,13 +810,13 @@
             }
         },
         "node_modules/@typescript-eslint/type-utils": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.8.1.tgz",
-            "integrity": "sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.10.0.tgz",
+            "integrity": "sha512-PCpUOpyQSpxBn230yIcK+LeCQaXuxrgCm2Zk1S+PTIRJsEfU6nJ0TtwyH8pIwPK/vJoA+7TZtzyAJSGBz+s/dg==",
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/typescript-estree": "8.8.1",
-                "@typescript-eslint/utils": "8.8.1",
+                "@typescript-eslint/typescript-estree": "8.10.0",
+                "@typescript-eslint/utils": "8.10.0",
                 "debug": "^4.3.4",
                 "ts-api-utils": "^1.3.0"
             },
@@ -834,9 +834,9 @@
             }
         },
         "node_modules/@typescript-eslint/types": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.8.1.tgz",
-            "integrity": "sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.10.0.tgz",
+            "integrity": "sha512-k/E48uzsfJCRRbGLapdZgrX52csmWJ2rcowwPvOZ8lwPUv3xW6CcFeJAXgx4uJm+Ge4+a4tFOkdYvSpxhRhg1w==",
             "license": "MIT",
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -847,13 +847,13 @@
             }
         },
         "node_modules/@typescript-eslint/typescript-estree": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.8.1.tgz",
-            "integrity": "sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.10.0.tgz",
+            "integrity": "sha512-3OE0nlcOHaMvQ8Xu5gAfME3/tWVDpb/HxtpUZ1WeOAksZ/h/gwrBzCklaGzwZT97/lBbbxJ16dMA98JMEngW4w==",
             "license": "BSD-2-Clause",
             "dependencies": {
-                "@typescript-eslint/types": "8.8.1",
-                "@typescript-eslint/visitor-keys": "8.8.1",
+                "@typescript-eslint/types": "8.10.0",
+                "@typescript-eslint/visitor-keys": "8.10.0",
                 "debug": "^4.3.4",
                 "fast-glob": "^3.3.2",
                 "is-glob": "^4.0.3",
@@ -875,15 +875,15 @@
             }
         },
         "node_modules/@typescript-eslint/utils": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.8.1.tgz",
-            "integrity": "sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.10.0.tgz",
+            "integrity": "sha512-Oq4uZ7JFr9d1ZunE/QKy5egcDRXT/FrS2z/nlxzPua2VHFtmMvFNDvpq1m/hq0ra+T52aUezfcjGRIB7vNJF9w==",
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
-                "@typescript-eslint/scope-manager": "8.8.1",
-                "@typescript-eslint/types": "8.8.1",
-                "@typescript-eslint/typescript-estree": "8.8.1"
+                "@typescript-eslint/scope-manager": "8.10.0",
+                "@typescript-eslint/types": "8.10.0",
+                "@typescript-eslint/typescript-estree": "8.10.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -897,12 +897,12 @@
             }
         },
         "node_modules/@typescript-eslint/visitor-keys": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.8.1.tgz",
-            "integrity": "sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.10.0.tgz",
+            "integrity": "sha512-k8nekgqwr7FadWk548Lfph6V3r9OVqjzAIVskE7orMZR23cGJjAOVazsZSJW+ElyjfTM4wx/1g88Mi70DDtG9A==",
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/types": "8.8.1",
+                "@typescript-eslint/types": "8.10.0",
                 "eslint-visitor-keys": "^3.4.3"
             },
             "engines": {
@@ -1172,17 +1172,17 @@
             }
         },
         "node_modules/eslint": {
-            "version": "9.12.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.12.0.tgz",
-            "integrity": "sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==",
+            "version": "9.13.0",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz",
+            "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==",
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
                 "@eslint-community/regexpp": "^4.11.0",
                 "@eslint/config-array": "^0.18.0",
-                "@eslint/core": "^0.6.0",
+                "@eslint/core": "^0.7.0",
                 "@eslint/eslintrc": "^3.1.0",
-                "@eslint/js": "9.12.0",
+                "@eslint/js": "9.13.0",
                 "@eslint/plugin-kit": "^0.2.0",
                 "@humanfs/node": "^0.16.5",
                 "@humanwhocodes/module-importer": "^1.0.1",
@@ -1232,12 +1232,12 @@
             }
         },
         "node_modules/eslint-plugin-jsdoc": {
-            "version": "50.3.2",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.3.2.tgz",
-            "integrity": "sha512-TjgZocG53N3a84PdCFGqVMWLWwDitOUuKjlJftwTu/iTiD7N/Q2Q3eEy/Q4GfJqpM4rTJCkzUYWQfol6RZNDcA==",
+            "version": "50.4.3",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.4.3.tgz",
+            "integrity": "sha512-uWtwFxGRv6B8sU63HZM5dAGDhgsatb+LONwmILZJhdRALLOkCX2HFZhdL/Kw2ls8SQMAVEfK+LmnEfxInRN8HA==",
             "license": "BSD-3-Clause",
             "dependencies": {
-                "@es-joy/jsdoccomment": "~0.48.0",
+                "@es-joy/jsdoccomment": "~0.49.0",
                 "are-docs-informative": "^0.0.2",
                 "comment-parser": "1.4.1",
                 "debug": "^4.3.6",
@@ -2085,14 +2085,14 @@
             }
         },
         "node_modules/typescript-eslint": {
-            "version": "8.8.1",
-            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.8.1.tgz",
-            "integrity": "sha512-R0dsXFt6t4SAFjUSKFjMh4pXDtq04SsFKCVGDP3ZOzNP7itF0jBcZYU4fMsZr4y7O7V7Nc751dDeESbe4PbQMQ==",
+            "version": "8.10.0",
+            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.10.0.tgz",
+            "integrity": "sha512-YIu230PeN7z9zpu/EtqCIuRVHPs4iSlqW6TEvjbyDAE3MZsSl2RXBo+5ag+lbABCG8sFM1WVKEXhlQ8Ml8A3Fw==",
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/eslint-plugin": "8.8.1",
-                "@typescript-eslint/parser": "8.8.1",
-                "@typescript-eslint/utils": "8.8.1"
+                "@typescript-eslint/eslint-plugin": "8.10.0",
+                "@typescript-eslint/parser": "8.10.0",
+                "@typescript-eslint/utils": "8.10.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
diff --git a/apps/update/package.json b/apps/update/package.json
index 7243bedd..2484ddd0 100644
--- a/apps/update/package.json
+++ b/apps/update/package.json
@@ -7,15 +7,15 @@
         "build": "node_ver=$(node -v); esbuild src/app.ts --bundle --platform=node --target=\"node${node_ver:1:2}\" --outfile=out/bin/app.cjs"
     },
     "dependencies": {
-        "@eslint/js": "9.12.0",
+        "@eslint/js": "9.13.0",
         "@stylistic/eslint-plugin": "2.9.0",
         "@types/eslint__js": "8.42.3",
-        "@types/node": "22.7.5",
+        "@types/node": "22.7.7",
         "esbuild": "0.24.0",
-        "eslint": "9.12.0",
-        "eslint-plugin-jsdoc": "50.3.2",
+        "eslint": "9.13.0",
+        "eslint-plugin-jsdoc": "50.4.3",
         "jiti": "2.3.3",
         "typescript": "5.6.3",
-        "typescript-eslint": "8.8.1"
+        "typescript-eslint": "8.10.0"
     }
 }
diff --git a/apps/update/src/app.ts b/apps/update/src/app.ts
index 9e258c6c..6d421832 100644
--- a/apps/update/src/app.ts
+++ b/apps/update/src/app.ts
@@ -3,7 +3,13 @@ import { writeFileSync } from 'node:fs';
 
 import { parseArgs } from './lib.ts';
 import { updateFirefoxAddons } from '././firefox.ts';
-import { updateDocker, updateFlakeInputs, updateVuetorrent } from './misc.ts';
+
+import {
+    updateCustomSidebarDeps,
+    updateDocker,
+    updateFlakeInputs,
+    updateVuetorrent,
+} from './misc.ts';
 
 
 /* Constants */
@@ -32,6 +38,10 @@ if (args['v'] || args['vuetorrent']) {
     console.log(updateVuetorrent());
 }
 
+if (args['c'] || args['custom-sidebar']) {
+    console.log(updateCustomSidebarDeps());
+}
+
 if (args['a'] || args['all']) {
     // Update this first because of nix run cmd
     const firefoxOutput = updateFirefoxAddons();
@@ -53,6 +63,9 @@ if (args['a'] || args['all']) {
 
     console.log(vuetorrentOutput);
 
+    // This doesn't need to be added to commit msgs
+    console.log(updateCustomSidebarDeps());
+
 
     spawnSync('nix-fast-build', ['-f', `${FLAKE}#nixFastChecks`], {
         shell: true,
diff --git a/apps/update/src/misc.ts b/apps/update/src/misc.ts
index 91ec0973..5489c70b 100644
--- a/apps/update/src/misc.ts
+++ b/apps/update/src/misc.ts
@@ -10,7 +10,7 @@ const FLAKE = process.env.FLAKE;
 export const updateFlakeInputs = () => {
     const output = spawnSync(
         `git restore flake.lock &> /dev/null; nix flake update --flake ${FLAKE}` +
-        ' |& grep -v "warning: updating lock file"',
+        ' |& grep -v "warning: updating lock file" |& grep -v "unpacking"',
         [],
         { shell: true },
     ).stdout
@@ -56,8 +56,11 @@ export const updateDocker = () => {
     return updates;
 };
 
-const genVueText = (version: string, hash: string, url: string) =>
-    `# This file was autogenerated. DO NOT EDIT!
+const genVueText = (
+    version: string,
+    hash: string,
+    url: string,
+) => `# This file was autogenerated. DO NOT EDIT!
 {
   version = "${version}";
   url = "${url}";
@@ -85,3 +88,9 @@ export const updateVuetorrent = () => {
 
     return OLD_VERSION !== VERSION ? `Vuetorrent: ${OLD_VERSION} -> ${VERSION}` : '';
 };
+
+export const updateCustomSidebarDeps = () => spawnSync(
+    `nix run ${FLAKE}#legacyPackages.x86_64-linux.lovelace-components.custom-sidebar.update`,
+    [],
+    { shell: true },
+).stderr.toString();
diff --git a/devices/nos/modules/docker/freshrss/images/rss-bridge.nix b/devices/nos/modules/docker/freshrss/images/rss-bridge.nix
index 8a7bee65..1d51a228 100644
--- a/devices/nos/modules/docker/freshrss/images/rss-bridge.nix
+++ b/devices/nos/modules/docker/freshrss/images/rss-bridge.nix
@@ -1,8 +1,8 @@
 pkgs:
 pkgs.dockerTools.pullImage rec {
   imageName = "rssbridge/rss-bridge";
-  imageDigest = "sha256:da785b43f43e4f718c525d71453d6b7011db98c68434f02315cb7ee1ecc88889";
-  sha256 = "0zd27m1gwiw2n2dslv1mxvi54p5gbgfilib99i7f8vh3sf0z7dcd";
+  imageDigest = "sha256:42b4d1d1e3fb2c361a3a2fe2921a847bbdcd0d6d14a4d411482665fc4560a58d";
+  sha256 = "0f0d0710k99gq4dvayjl4n0aby8gly04jp9bn6qab0j3zy0wdb0y";
   finalImageName = imageName;
   finalImageTag = "latest";
 }
diff --git a/flake.lock b/flake.lock
index 12e16c81..b66a09cc 100644
--- a/flake.lock
+++ b/flake.lock
@@ -49,11 +49,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1729114510,
-        "narHash": "sha256-BOp0dpsrDLpaFmMWo57/BzeGd4PPnhCjr4l5/U2Lkwk=",
+        "lastModified": 1729343797,
+        "narHash": "sha256-IRDsh/eq6lzrXpqVn2/sl1HnKDl4duuHvxP6EQ38Fek=",
         "owner": "Aylur",
         "repo": "ags",
-        "rev": "a93f0acd34d5d96e2a5c6a1a2c57420d1cacf601",
+        "rev": "b7f3896e6ce13409262664b5aa4c7a0e45ef0e02",
         "type": "github"
       },
       "original": {
@@ -103,11 +103,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1729274326,
-        "narHash": "sha256-6mTbdVPPC6ABq/m//VPlntCHET15Pdc2fymCieNtd08=",
+        "lastModified": 1729464584,
+        "narHash": "sha256-DohT3roX+5yuMRGb3vp80WLSB4IeWI6Bn+VgSQU4I/Q=",
         "owner": "Aylur",
         "repo": "astal",
-        "rev": "f763c442f7dd146c6f20376c5f50e6ca94b5e0d6",
+        "rev": "bfb7e27c1f9d099fcc457379f0317b1cea43fc37",
         "type": "github"
       },
       "original": {
@@ -207,11 +207,11 @@
     "custom-sidebar-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1729030143,
-        "narHash": "sha256-dSNgEMgfXm2z5WFYeoZsak9XCI0YEwUmMPA96hJ8O1k=",
+        "lastModified": 1729471296,
+        "narHash": "sha256-x2SuqgV+7P13zItx47wDSDhVTSohLFu4ffDkaRMoerY=",
         "owner": "elchininet",
         "repo": "custom-sidebar",
-        "rev": "fcada915b5bbece5f9b75924a806ff0e3f3544e8",
+        "rev": "80942f52bae5f0d8043db566bb418296d5b0009f",
         "type": "github"
       },
       "original": {
@@ -586,11 +586,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1729260213,
-        "narHash": "sha256-jAvHoU/1y/yCuXzr2fNF+q6uKmr8Jj2xgAisK4QB9to=",
+        "lastModified": 1729459288,
+        "narHash": "sha256-gBOVJv+q6Mx8jGvwX7cE6J8+sZmi1uxpRVsO7WxvVuQ=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "09a0c0c02953318bf94425738c7061ffdc4cba75",
+        "rev": "1e27f213d77fc842603628bcf2df6681d7d08f7e",
         "type": "github"
       },
       "original": {
@@ -666,16 +666,17 @@
         "xdph": "xdph"
       },
       "locked": {
-        "lastModified": 1729195555,
-        "narHash": "sha256-PaGZcRjXXVodyG5syHT8Wate6ERLB3HqFAwIUe+3A+M=",
+        "lastModified": 1729351307,
+        "narHash": "sha256-rzZI9HUVUztOg8u2d4mhRioiJTXGSnFmmrqLxL3V1+o=",
         "owner": "hyprwm",
         "repo": "Hyprland",
-        "rev": "0e630e9e74ad34683194a07cfe6afe55a2c0685f",
+        "rev": "62ee5cc2739d70570dbe143c9bd75d00a51db942",
         "type": "github"
       },
       "original": {
         "owner": "hyprwm",
         "repo": "Hyprland",
+        "rev": "62ee5cc2739d70570dbe143c9bd75d00a51db942",
         "type": "github"
       }
     },
@@ -915,11 +916,11 @@
         "nixpkgs-lib": "nixpkgs-lib"
       },
       "locked": {
-        "lastModified": 1728821524,
-        "narHash": "sha256-Tc4g0n0WxGLLUJYJwrhSE3/l05xUcREEx9y+R4Gi4RA=",
+        "lastModified": 1729426412,
+        "narHash": "sha256-VGbpECf35W4LtWLfx2+ue8zZEPwKQnadJadlT8E1Ceo=",
         "owner": "nix-community",
         "repo": "lib-aggregate",
-        "rev": "8921856c37862428741a29cfd4c98c4893ca407d",
+        "rev": "736c43de3c953104e1610183d56e90b419c6344e",
         "type": "github"
       },
       "original": {
@@ -1181,11 +1182,11 @@
         "umu": "umu"
       },
       "locked": {
-        "lastModified": 1729215603,
-        "narHash": "sha256-v4fB1nH+pDATpt6Jq/nk+lU2I6Zn3LRF1s4gNPAvZko=",
+        "lastModified": 1729388819,
+        "narHash": "sha256-Csa4LUgQWdUBQKj1bv8kKu3qFCOmnDWHAawWateCmls=",
         "owner": "fufexan",
         "repo": "nix-gaming",
-        "rev": "79f0e311a18bfda913093b4388b24ab380d632d6",
+        "rev": "177e270423839dedb9721b43c757a5f849b1e9f8",
         "type": "github"
       },
       "original": {
@@ -1245,11 +1246,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1728790083,
-        "narHash": "sha256-grMdAd4KSU6uPqsfLzA1B/3pb9GtGI9o8qb0qFzEU/Y=",
+        "lastModified": 1729394935,
+        "narHash": "sha256-2ntUG+NJKdfhlrh/tF+jOU0fOesO7lm5ZZVSYitsvH8=",
         "owner": "Mic92",
         "repo": "nix-index-database",
-        "rev": "5c54c33aa04df5dd4b0984b7eb861d1981009b22",
+        "rev": "04f8a11f247ba00263b060fbcdc95484fd046104",
         "type": "github"
       },
       "original": {
@@ -1299,11 +1300,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1727793617,
-        "narHash": "sha256-vZ+t0jvKZczYBB9ZAj7CQ1sBv9PE66G9/LkB6a+Iogg=",
+        "lastModified": 1729400108,
+        "narHash": "sha256-aKCdN1LjqHMIyVX44ETMkWCH1olh1Rd+AaKLFUDHMuA=",
         "owner": "nix-community",
         "repo": "nixd",
-        "rev": "c38702b17580a31e84c958b5feed3d8c7407f975",
+        "rev": "d3c7e560bb8034926628099a04deb26afd575e1f",
         "type": "github"
       },
       "original": {
@@ -1314,11 +1315,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1729070438,
-        "narHash": "sha256-KOTTUfPkugH52avUvXGxvWy8ibKKj4genodIYUED+Kc=",
+        "lastModified": 1729256560,
+        "narHash": "sha256-/uilDXvCIEs3C9l73JTACm4quuHUsIHcns1c+cHUJwA=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "5785b6bb5eaae44e627d541023034e1601455827",
+        "rev": "4c2fcb090b1f3e5b47eaa7bd33913b574a11e0a0",
         "type": "github"
       },
       "original": {
@@ -1362,11 +1363,11 @@
     },
     "nixpkgs-lib": {
       "locked": {
-        "lastModified": 1728781282,
+        "lastModified": 1729386149,
         "narHash": "sha256-hUP9oxmnOmNnKcDOf5Y55HQ+NnoT0+bLWHLQWLLw9Ks=",
         "owner": "nix-community",
         "repo": "nixpkgs.lib",
-        "rev": "16340f605f4e8e5cf07fd74dcbe692eee2d4f51b",
+        "rev": "cce4521b6df014e79a7b7afc58c703ed683c916e",
         "type": "github"
       },
       "original": {
@@ -1393,11 +1394,11 @@
     },
     "nixpkgs-stable_2": {
       "locked": {
-        "lastModified": 1728156290,
-        "narHash": "sha256-uogSvuAp+1BYtdu6UWuObjHqSbBohpyARXDWqgI12Ss=",
+        "lastModified": 1729357638,
+        "narHash": "sha256-66RHecx+zohbZwJVEPF7uuwHeqf8rykZTMCTqIrOew4=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "17ae88b569bb15590549ff478bab6494dde4a907",
+        "rev": "bb8c2cf7ea0dd2e18a52746b2c3a5b0c73b93c22",
         "type": "github"
       },
       "original": {
@@ -1419,11 +1420,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1729280453,
-        "narHash": "sha256-zPaNAvtXKxBbowFof5v6yQLbZWSkUBchHeh4VdO+8MQ=",
+        "lastModified": 1729455588,
+        "narHash": "sha256-HH4xctBNq2xD3eKYchS99SlDrcka86Zln7LH6NTtPrk=",
         "owner": "nix-community",
         "repo": "nixpkgs-wayland",
-        "rev": "2535bdde0505a065b46a68218fc1a1e7ef075c93",
+        "rev": "7c64c3cdb7b2ca2d91ae2a3ce90e7c53146d9e85",
         "type": "github"
       },
       "original": {
@@ -1574,11 +1575,11 @@
     "pokemon-colorscripts-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1666991310,
-        "narHash": "sha256-rj0qKYHCu9SyNsj1PZn1g7arjcHuIDGHwubZg/yJt7A=",
+        "lastModified": 1729309951,
+        "narHash": "sha256-gKVmpHKt7S2XhSxLDzbIHTjJMoiIk69Fch202FZffqU=",
         "owner": "phoneybadger",
         "repo": "pokemon-colorscripts",
-        "rev": "0483c85b93362637bdd0632056ff986c07f30868",
+        "rev": "5802ff67520be2ff6117a0abc78a08501f6252ad",
         "type": "gitlab"
       },
       "original": {
@@ -1801,11 +1802,11 @@
         "nixpkgs-stable": "nixpkgs-stable_2"
       },
       "locked": {
-        "lastModified": 1728345710,
-        "narHash": "sha256-lpunY1+bf90ts+sA2/FgxVNIegPDKCpEoWwOPu4ITTQ=",
+        "lastModified": 1729394972,
+        "narHash": "sha256-fADlzOzcSaGsrO+THUZ8SgckMMc7bMQftztKFCLVcFI=",
         "owner": "Mic92",
         "repo": "sops-nix",
-        "rev": "06535d0e3d0201e6a8080dd32dbfde339b94f01b",
+        "rev": "c504fd7ac946d7a1b17944d73b261ca0a0b226a5",
         "type": "github"
       },
       "original": {
@@ -1850,11 +1851,11 @@
     "spotifywebapi-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1728920524,
-        "narHash": "sha256-KLU9rckd/MKJOapjVf3FG1AX73bJvjZn31MXJGZL3Aw=",
+        "lastModified": 1729368766,
+        "narHash": "sha256-rVwrxMJ4SaHHjEWUOtc2VPTHlulrEK5D/GRKcDJLmWk=",
         "owner": "thlucas1",
         "repo": "SpotifyWebApiPython",
-        "rev": "4bb065875d70a2dfe572d5e8848770fb5b505b36",
+        "rev": "8c6aff1cf162eeef6cb4cab2b2175e7a93867bd0",
         "type": "github"
       },
       "original": {
@@ -1978,11 +1979,11 @@
     "tuya-local-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1729256210,
-        "narHash": "sha256-R9Mhfu4IXQpB+EPvJfjKO3qKCHECXVMA42y078uwnFA=",
+        "lastModified": 1729470343,
+        "narHash": "sha256-g2z4LnTpp0SGIM0OhhyUtlrq5KmlLBjxDRpYPazy5c4=",
         "owner": "make-all",
         "repo": "tuya-local",
-        "rev": "587d622a0fe4e942f57a037f33e0a3c607c24d6c",
+        "rev": "38744c037aef5084945c191a4780208d4cb3ac9c",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 7cf04b91..68ad27e3 100644
--- a/flake.nix
+++ b/flake.nix
@@ -166,6 +166,7 @@
       };
       owner = "hyprwm";
       repo = "Hyprland";
+      rev = "62ee5cc2739d70570dbe143c9bd75d00a51db942";
       type = "github";
     };
     hyprland-plugins = {
diff --git a/inputs.nix b/inputs.nix
index 52892bed..e57447bc 100644
--- a/inputs.nix
+++ b/inputs.nix
@@ -113,6 +113,9 @@ let
       hyprland = mkDep {
         owner = "hyprwm";
         repo = "Hyprland";
+
+        # FIXME: wait for hyprgrass and hyprland-plugins to chase hyprland
+        rev = "62ee5cc2739d70570dbe143c9bd75d00a51db942";
       };
 
       hyprland-plugins = mkHyprDep {
diff --git a/legacyPackages/lovelace-components/custom-sidebar/default.nix b/legacyPackages/lovelace-components/custom-sidebar/default.nix
index 9aa1d631..78454e12 100644
--- a/legacyPackages/lovelace-components/custom-sidebar/default.nix
+++ b/legacyPackages/lovelace-components/custom-sidebar/default.nix
@@ -1,4 +1,5 @@
 {
+  concatTextFile,
   custom-sidebar-src,
   nodejs,
   pnpm,
@@ -29,6 +30,13 @@ in
 
     pnpmDeps = pnpm.fetchDeps {
       inherit (finalAttrs) pname version src;
-      hash = "sha256-oERAaN/0uyImDRlxJIdKutFh3jYFJQh2KAeM1LXBpjU=";
+      hash = "sha256-Lk2zRcF4ysAeo0fYKDfCoORyOrViKaK1TLUo0atZdr4=";
+    };
+
+    passthru.update = concatTextFile {
+      name = "update";
+      files = [./update.sh];
+      executable = true;
+      destination = "/bin/update";
     };
   })
diff --git a/legacyPackages/lovelace-components/custom-sidebar/update.sh b/legacyPackages/lovelace-components/custom-sidebar/update.sh
new file mode 100644
index 00000000..e7105f2e
--- /dev/null
+++ b/legacyPackages/lovelace-components/custom-sidebar/update.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+
+file="$FLAKE/legacyPackages/lovelace-components/custom-sidebar/default.nix"
+old_hash="$(sed -n 's/.*hash = "\(.*\)";/\1/p' "$file")"
+
+sed -i "s/hash = .*/hash = \"\";/" "$file"
+npm_hash="$(nix build "$FLAKE#legacyPackages.x86_64-linux.lovelace-components.custom-sidebar" |& sed -n 's/.*got: *//p')"
+
+if [[ "$npm_hash" != "$old_hash" ]]; then
+    sed -i "s/hash = .*/hash = \"$npm_hash\";/" "$FLAKE/legacyPackages/lovelace-components/custom-sidebar/default.nix"
+else
+    sed -i "s/hash = .*/hash = \"$old_hash\";/" "$FLAKE/legacyPackages/lovelace-components/custom-sidebar/default.nix"
+fi
diff --git a/outputs.nix b/outputs.nix
index 0c011e72..cb59b001 100644
--- a/outputs.nix
+++ b/outputs.nix
@@ -174,7 +174,7 @@
           })
           ++ [
             (pkgs.writeShellApplication {
-              name = "updateNpmDeps";
+              name = "bumpNpmDeps";
               runtimeInputs = builtins.attrValues {
                 inherit
                   (pkgs)