diff --git a/configurations/nos/modules/docker/freshrss/images/rss-bridge.nix b/configurations/nos/modules/docker/freshrss/images/rss-bridge.nix
index 9e84b5fb..b210cde3 100644
--- a/configurations/nos/modules/docker/freshrss/images/rss-bridge.nix
+++ b/configurations/nos/modules/docker/freshrss/images/rss-bridge.nix
@@ -1,8 +1,8 @@
 pkgs:
 pkgs.dockerTools.pullImage rec {
   imageName = "rssbridge/rss-bridge";
-  imageDigest = "sha256:2f94bc58b926a9ae2efb62c2bd08723b22adceb47d5590be00b56dc05ba2a0e3";
-  hash = "sha256-h1vq77Z+zH1eYb8HfEaOFP/DmzlNgZfnEkoKjITug4Y=";
+  imageDigest = "sha256:f2ffb2127499e4c86f001ba5adaa86f80f5167ae4bcea6bdd11401eb0f769224";
+  hash = "sha256-b1RneJXa1393nZxPSsB+nyTPoJOu5mFhWnKhQ+xEpn8=";
   finalImageName = imageName;
   finalImageTag = "latest";
 }
diff --git a/configurations/nos/modules/docker/media/radarr/images/radarr.nix b/configurations/nos/modules/docker/media/radarr/images/radarr.nix
index b8133584..16513771 100644
--- a/configurations/nos/modules/docker/media/radarr/images/radarr.nix
+++ b/configurations/nos/modules/docker/media/radarr/images/radarr.nix
@@ -1,8 +1,8 @@
 pkgs:
 pkgs.dockerTools.pullImage rec {
   imageName = "ghcr.io/linuxserver/radarr";
-  imageDigest = "sha256:e633fc93b9e2cea959853d27c6acc1d0b2d1ed7db4a800f6f46fe5b217f13102";
-  hash = "sha256-CcUwDtI9gKPA5krZK7X6CEA86yspDndSwGRrS/NIfV4=";
+  imageDigest = "sha256:dce7e81d08da67cf44437c7213d19faeef1323aa839712fbb53d1253ef94f93f";
+  hash = "sha256-ofd2SBBeWZ1n9igIq0wp3G4L1tt8UMIVvhtt35pVl3I=";
   finalImageName = imageName;
   finalImageTag = "latest";
 }
diff --git a/flake.lock b/flake.lock
index a86c9497..9ce8bf6a 100644
--- a/flake.lock
+++ b/flake.lock
@@ -26,11 +26,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736090999,
-        "narHash": "sha256-B5CJuHqfJrzPa7tObK0H9669/EClSHpa/P7B9EuvElU=",
+        "lastModified": 1736677288,
+        "narHash": "sha256-Vj3WOLy6o6Zf44Rwg9eLqNRQPlVoDrQ89tsef3l3990=",
         "owner": "Aylur",
         "repo": "ags",
-        "rev": "5527c3c07d92c11e04e7fd99d58429493dba7e3c",
+        "rev": "90db9b9fecc0f4228440d83107c6c745a35e7d77",
         "type": "github"
       },
       "original": {
@@ -79,11 +79,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736497508,
-        "narHash": "sha256-murrCQMYKtZ8rkZ5O726ZCsCDee1l3ZdmV8yC9gRaIc=",
+        "lastModified": 1736687389,
+        "narHash": "sha256-IjLW96gjrCAjx/QZOvYyNpoeb53bkOJ6dDQt8ubaMMY=",
         "owner": "Aylur",
         "repo": "astal",
-        "rev": "ef4f95608481414053ecdbe4de29bd86fb452813",
+        "rev": "6fd7ae514af36ff9baf1209a2eeebd3a26cf94ce",
         "type": "github"
       },
       "original": {
@@ -163,11 +163,11 @@
     "custom-sidebar-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1736080839,
-        "narHash": "sha256-knyl9mjwnM6LMz4cvQb3Qntb5xlhC+TAfdYcIyQb804=",
+        "lastModified": 1736692257,
+        "narHash": "sha256-audDQz6nDC25j28GPgdB18vKfTpk1ayyG2zHTRmx9Zo=",
         "owner": "elchininet",
         "repo": "custom-sidebar",
-        "rev": "f5a9a86adcbe68aeefea45e12294368d54fe8156",
+        "rev": "dd69b17b383e6135a8198248292786b7839aef85",
         "type": "github"
       },
       "original": {
@@ -627,17 +627,16 @@
         ]
       },
       "locked": {
-        "lastModified": 1735782927,
-        "narHash": "sha256-78/J6ACmSgHwKUzDPCT9XZdh7rS2gtesUphxXh4y8I0=",
+        "lastModified": 1736458338,
+        "narHash": "sha256-zfwuLQU9e9E4gRIWiL94kDI0hcFJuFjLrZqsqO/WcPE=",
         "owner": "horriblename",
         "repo": "hyprgrass",
-        "rev": "bdfa960b97ac98ad9d05c908ee20e053e2942928",
+        "rev": "dcf43737772490f9dc755983f5c8ddda5f83ec5b",
         "type": "github"
       },
       "original": {
         "owner": "horriblename",
         "repo": "hyprgrass",
-        "rev": "bdfa960b97ac98ad9d05c908ee20e053e2942928",
         "type": "github"
       }
     },
@@ -663,17 +662,16 @@
         "xdph": "xdph"
       },
       "locked": {
-        "lastModified": 1736191857,
-        "narHash": "sha256-LTSTvLUacrn5MPfWrAFDlCg+e9UE8O12Isn747YOeug=",
+        "lastModified": 1736701836,
+        "narHash": "sha256-K6bxd1ZbIQKcF1USNuupv+bsEk5GyidGS/zcTUTgWt8=",
         "owner": "hyprwm",
         "repo": "Hyprland",
-        "rev": "b9f110ef8726fcba2b4ee69856027731e73003a5",
+        "rev": "a6b263713a2b862ed41362082e2147e081934077",
         "type": "github"
       },
       "original": {
         "owner": "hyprwm",
         "repo": "Hyprland",
-        "rev": "b9f110ef8726fcba2b4ee69856027731e73003a5",
         "type": "github"
       }
     },
@@ -692,17 +690,16 @@
         ]
       },
       "locked": {
-        "lastModified": 1736115213,
-        "narHash": "sha256-x15KPKaSDBe07tQqkBnN1CV3kthMe0RTu9QomIr2YHg=",
+        "lastModified": 1736372092,
+        "narHash": "sha256-+uxeBRTrDZsH6HtVtlMuJLLPJw3usPpG2/pm/L30c3E=",
         "owner": "hyprwm",
         "repo": "hyprland-plugins",
-        "rev": "b6b31113ce84419c69ed575c22194e4023d2952a",
+        "rev": "b4c0fa3ebc6ccd1589dcd17904652223088efede",
         "type": "github"
       },
       "original": {
         "owner": "hyprwm",
         "repo": "hyprland-plugins",
-        "rev": "b6b31113ce84419c69ed575c22194e4023d2952a",
         "type": "github"
       }
     },
@@ -901,11 +898,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736580596,
-        "narHash": "sha256-t+BygGMcg1yyyTBXCAJWx4ZnH1StDzbd8CfzQonAJp8=",
+        "lastModified": 1736701554,
+        "narHash": "sha256-WDubsVUrqJybNpYkor6ra5bt41WCWvUCiG5nFVd8VT0=",
         "owner": "Jovian-Experiments",
         "repo": "Jovian-NixOS",
-        "rev": "1ddf0b3bfe076fa50b84244e42a55b9234f96083",
+        "rev": "54d7806eb668a28ab1dbdd25ee0caab6f8c62433",
         "type": "github"
       },
       "original": {
@@ -970,11 +967,11 @@
         "nixpkgs-lib": "nixpkgs-lib"
       },
       "locked": {
-        "lastModified": 1736079376,
-        "narHash": "sha256-DE/PZoasUoex2Y/y2MnHklCXzGoVlHyMLXB56DHl7fY=",
+        "lastModified": 1736684024,
+        "narHash": "sha256-FYJ4iFD/2L1CFN/aHjI8HxxSxuPNy4OvW+VCBh41Lzk=",
         "owner": "nix-community",
         "repo": "lib-aggregate",
-        "rev": "ef3ee8050d86486c0f380ddd479370ad33cf83fb",
+        "rev": "917882a0186d7731a61ede986c701e272f744750",
         "type": "github"
       },
       "original": {
@@ -1002,11 +999,11 @@
     "material-rounded-theme-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1736360790,
-        "narHash": "sha256-3VEQxVlC5ajoK8FuT/P365D4r7TB05DnhrG+XRg33Hk=",
+        "lastModified": 1736629697,
+        "narHash": "sha256-+OO4PTyY9yiCL54DpUpDNk1/+wjdPiIcXam7wh4Q0UA=",
         "owner": "Nerwyn",
         "repo": "material-rounded-theme",
-        "rev": "64b43de45e1e5bcfab8aa84f7b9dccd9764e027f",
+        "rev": "6d3b79a79b72f70c4a015dd7dbbf1c41a2b33a35",
         "type": "github"
       },
       "original": {
@@ -1258,11 +1255,11 @@
         "umu": "umu"
       },
       "locked": {
-        "lastModified": 1736559635,
-        "narHash": "sha256-21vn8iCl/7XglyR1xLQZv7fvcC2izPyNZOLxP5ndw0M=",
+        "lastModified": 1736689695,
+        "narHash": "sha256-Sx7Z3ow07ei4FBHuC9p5zkM0kPsHVnne6RK9sKMAZ0I=",
         "owner": "fufexan",
         "repo": "nix-gaming",
-        "rev": "0e562d23a2df60788af3aeda21590032b416be7c",
+        "rev": "f0bba32370e38a6ed18d7c5c741d23fe53e2d265",
         "type": "github"
       },
       "original": {
@@ -1321,11 +1318,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736440205,
-        "narHash": "sha256-QJgTI//KEGuEJC6FDxuI9Dq8PewIpnxD2NVx2/OHbfc=",
+        "lastModified": 1736652904,
+        "narHash": "sha256-8uolHABgroXqzs03QdulHp8H9e5kWQZnnhcda1MKbBM=",
         "owner": "Mic92",
         "repo": "nix-index-database",
-        "rev": "a2200b499efa01ca8646173e94cdfcc93188f2b8",
+        "rev": "271e5bd7c57e1f001693799518b10a02d1123b12",
         "type": "github"
       },
       "original": {
@@ -1390,11 +1387,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1736344531,
-        "narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=",
+        "lastModified": 1736523798,
+        "narHash": "sha256-Xb8mke6UCYjge9kPR9o4P1nVrhk7QBbKv3xQ9cj7h2s=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912",
+        "rev": "130595eba61081acde9001f43de3248d8888ac4a",
         "type": "github"
       },
       "original": {
@@ -1438,11 +1435,11 @@
     },
     "nixpkgs-lib": {
       "locked": {
-        "lastModified": 1736039079,
-        "narHash": "sha256-ONaTdkME8AJMoQjkydnlUNrzQrIWIdeprkRKW0V1UIE=",
+        "lastModified": 1736643958,
+        "narHash": "sha256-tmpqTSWVRJVhpvfSN9KXBvKEXplrwKnSZNAoNPf/S/s=",
         "owner": "nix-community",
         "repo": "nixpkgs.lib",
-        "rev": "e506b7786d099e0dec40e1204c555e3562ee9bf8",
+        "rev": "1418bc28a52126761c02dd3d89b2d8ca0f521181",
         "type": "github"
       },
       "original": {
@@ -1465,11 +1462,11 @@
         ]
       },
       "locked": {
-        "lastModified": 1736620662,
-        "narHash": "sha256-ThOj/JQqePWsn7PIN5+uZgEh3lVsUO7HI02km1b0uEs=",
+        "lastModified": 1736685270,
+        "narHash": "sha256-Zp2n4OoCsvjxS18u8Qsu3PF8R+IhhOEfrokgZmxOwrY=",
         "owner": "nix-community",
         "repo": "nixpkgs-wayland",
-        "rev": "37553f5a9728a5ced261f0aa9c050056e7f61bde",
+        "rev": "2cb439411d17eb145a99536196f5ab11685268b8",
         "type": "github"
       },
       "original": {
@@ -1952,11 +1949,11 @@
     "tuya-local-src": {
       "flake": false,
       "locked": {
-        "lastModified": 1736610263,
-        "narHash": "sha256-QoQrwsybGszWItnB+ZzUDjh0Vz/jgFtBdGQUZKIIbXU=",
+        "lastModified": 1736691370,
+        "narHash": "sha256-RdM5XPnILswSum76e9bD4oJJcYIX+GW+kjT6OIcD06w=",
         "owner": "make-all",
         "repo": "tuya-local",
-        "rev": "29def3abf990d04f311a0d4324d54aedc4b841c8",
+        "rev": "627e07e5627da27ccc474bfe9cdb61f3126e0adb",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 13e7dd06..e88f3fb4 100644
--- a/flake.nix
+++ b/flake.nix
@@ -141,7 +141,6 @@
       inputs.hyprland.follows = "hyprland";
       owner = "horriblename";
       repo = "hyprgrass";
-      rev = "bdfa960b97ac98ad9d05c908ee20e053e2942928";
       type = "github";
     };
     hyprland = {
@@ -152,7 +151,6 @@
       };
       owner = "hyprwm";
       repo = "Hyprland";
-      rev = "b9f110ef8726fcba2b4ee69856027731e73003a5";
       type = "github";
     };
     hyprland-plugins = {
@@ -162,7 +160,6 @@
       };
       owner = "hyprwm";
       repo = "hyprland-plugins";
-      rev = "b6b31113ce84419c69ed575c22194e4023d2952a";
       type = "github";
     };
     hyprpaper = {
diff --git a/inputs/default.nix b/inputs/default.nix
index 31165859..9135ba35 100644
--- a/inputs/default.nix
+++ b/inputs/default.nix
@@ -115,26 +115,17 @@ let
         owner = "hyprwm";
         repo = "Hyprland";
 
-        # FIXME: hypr stuff not really working
-        rev = "b9f110ef8726fcba2b4ee69856027731e73003a5";
-
         inputs.hyprutils.follows = "hyprutils";
       };
 
       hyprland-plugins = mkHyprDep {
         owner = "hyprwm";
         repo = "hyprland-plugins";
-
-        # FIXME: hypr stuff not really working
-        rev = "b6b31113ce84419c69ed575c22194e4023d2952a";
       };
 
       hyprgrass = mkHyprDep {
         owner = "horriblename";
         repo = "hyprgrass";
-
-        # FIXME: hypr stuff not really working
-        rev = "bdfa960b97ac98ad9d05c908ee20e053e2942928";
       };
 
       hyprpaper = mkDep {
diff --git a/lib/pkgs/mk-types/default.nix b/lib/pkgs/mk-types/default.nix
index 1f805c94..784fd73f 100644
--- a/lib/pkgs/mk-types/default.nix
+++ b/lib/pkgs/mk-types/default.nix
@@ -21,7 +21,7 @@ in
     pname = "${pname}-types";
     version = "0.0.0";
 
-    npmDepsHash = "sha256-P59Y6QRGcPIIvTN36NLwxlLM+Gxw2rx8t7Tyc+vKqr4=";
+    npmDepsHash = "sha256-Ory8Ia4BYgHzmftcSQm6k4P14IRgqYDYGmckxTiuGLs=";
 
     src = ./.;
     dontNpmBuild = true;
diff --git a/lib/pkgs/mk-types/package-lock.json b/lib/pkgs/mk-types/package-lock.json
index a9e8fdab..b95aac1b 100644
--- a/lib/pkgs/mk-types/package-lock.json
+++ b/lib/pkgs/mk-types/package-lock.json
@@ -44,12 +44,12 @@
             }
         },
         "node_modules/@inquirer/checkbox": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.4.tgz",
-            "integrity": "sha512-fYAKCAcGNMdfjL6hZTRUwkIByQ8EIZCXKrIQZH7XjADnN/xvRUhj8UdBbpC4zoUzvChhkSC/zRKaP/tDs3dZpg==",
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.0.5.tgz",
+            "integrity": "sha512-H//QP3E8Vy0oYX5lw6WSFnOTiRUNm4+LYRby1/1r6y3doRurnqekAj4pJoUbdL5ESEgLqJFJ5HhNDWTp5Qyz5A==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/figures": "^1.0.9",
                 "@inquirer/type": "^3.0.2",
                 "ansi-escapes": "^4.3.2",
@@ -63,12 +63,12 @@
             }
         },
         "node_modules/@inquirer/confirm": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.1.tgz",
-            "integrity": "sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==",
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.2.tgz",
+            "integrity": "sha512-VKgaKxw2I3cu2smedeMFyxuYyI+HABlFY1Px4j8NueA7xDskKAo9hxEQemTpp1Fu4OiTtOCgU4eK91BVuBKH3g==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2"
             },
             "engines": {
@@ -79,9 +79,9 @@
             }
         },
         "node_modules/@inquirer/core": {
-            "version": "10.1.2",
-            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.2.tgz",
-            "integrity": "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==",
+            "version": "10.1.3",
+            "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.3.tgz",
+            "integrity": "sha512-+7/dCYwDku2xfcWJWX6Urxb8aRz6d0K+4lRgIBM08ktE84dm++RPROgnVfWq4hLK5FVu/O4rbO9HnJtaz3pt2w==",
             "license": "MIT",
             "dependencies": {
                 "@inquirer/figures": "^1.0.9",
@@ -99,12 +99,12 @@
             }
         },
         "node_modules/@inquirer/editor": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.1.tgz",
-            "integrity": "sha512-xn9aDaiP6nFa432i68JCaL302FyL6y/6EG97nAtfIPnWZ+mWPgCMLGc4XZ2QQMsZtu9q3Jd5AzBPjXh10aX9kA==",
+            "version": "4.2.2",
+            "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.2.tgz",
+            "integrity": "sha512-BPLJsWxLO6r47wU2qtGG+akQuoSCotDlOu8GTIkJVxJpNNVYnA60xKHkSGbEAALO+D3DFeRXE0JFvFJ53sVbjA==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2",
                 "external-editor": "^3.1.0"
             },
@@ -116,12 +116,12 @@
             }
         },
         "node_modules/@inquirer/expand": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.4.tgz",
-            "integrity": "sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg==",
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.5.tgz",
+            "integrity": "sha512-Ff3CqHmc8MuUu9A0LKgftzIdp+D5k/kTYHGmjY7iouO37OuP6Np4UqL0clkjQ2UHph7ORwvi0RMfSNnH3PF0PQ==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2",
                 "yoctocolors-cjs": "^2.1.2"
             },
@@ -142,12 +142,12 @@
             }
         },
         "node_modules/@inquirer/input": {
-            "version": "4.1.1",
-            "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.1.tgz",
-            "integrity": "sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg==",
+            "version": "4.1.2",
+            "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.2.tgz",
+            "integrity": "sha512-YnnskI/AX92KVU6gjNxdeLNqdJPBEOkL3I6EzZjfByKskjZtJuAX1CBev8AAHJsLaB3X9JCQoB/ag2dyzRPdSg==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2"
             },
             "engines": {
@@ -158,12 +158,12 @@
             }
         },
         "node_modules/@inquirer/number": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.4.tgz",
-            "integrity": "sha512-DX7a6IXRPU0j8kr2ovf+QaaDiIf+zEKaZVzCWdLOTk7XigqSXvoh4cul7x68xp54WTQrgSnW7P1WBJDbyY3GhA==",
+            "version": "3.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.5.tgz",
+            "integrity": "sha512-O/gcUwhS0TzBdBszYues3B4PTwyOLo51RctvXPRGtDfwIftuTTdPnm3K7oiK2OC2CDc7eG4UNa+QtdLlaJxIOA==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2"
             },
             "engines": {
@@ -174,12 +174,12 @@
             }
         },
         "node_modules/@inquirer/password": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.4.tgz",
-            "integrity": "sha512-wiliQOWdjM8FnBmdIHtQV2Ca3S1+tMBUerhyjkRCv1g+4jSvEweGu9GCcvVEgKDhTBT15nrxvk5/bVrGUqSs1w==",
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.5.tgz",
+            "integrity": "sha512-/Undb8fTDSo6LX79OtAsdaaW08x6Xx9zr4z9Xd1VV/N4kDnJ9fWyUHJ287V0XTqMYgH/5SnZBU2e8VzgpGWO8g==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2",
                 "ansi-escapes": "^4.3.2"
             },
@@ -191,21 +191,21 @@
             }
         },
         "node_modules/@inquirer/prompts": {
-            "version": "7.2.1",
-            "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.2.1.tgz",
-            "integrity": "sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==",
+            "version": "7.2.2",
+            "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.2.2.tgz",
+            "integrity": "sha512-kUd4L1S8huk+2FbIl0UbBqZ6g8mYFtag9Pb8IqzeefIYgRXyS4Oc29ikuSlhfSkEYjG+gBAA5Ip0JvuvSqtfWA==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/checkbox": "^4.0.4",
-                "@inquirer/confirm": "^5.1.1",
-                "@inquirer/editor": "^4.2.1",
-                "@inquirer/expand": "^4.0.4",
-                "@inquirer/input": "^4.1.1",
-                "@inquirer/number": "^3.0.4",
-                "@inquirer/password": "^4.0.4",
-                "@inquirer/rawlist": "^4.0.4",
-                "@inquirer/search": "^3.0.4",
-                "@inquirer/select": "^4.0.4"
+                "@inquirer/checkbox": "^4.0.5",
+                "@inquirer/confirm": "^5.1.2",
+                "@inquirer/editor": "^4.2.2",
+                "@inquirer/expand": "^4.0.5",
+                "@inquirer/input": "^4.1.2",
+                "@inquirer/number": "^3.0.5",
+                "@inquirer/password": "^4.0.5",
+                "@inquirer/rawlist": "^4.0.5",
+                "@inquirer/search": "^3.0.5",
+                "@inquirer/select": "^4.0.5"
             },
             "engines": {
                 "node": ">=18"
@@ -215,12 +215,12 @@
             }
         },
         "node_modules/@inquirer/rawlist": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.4.tgz",
-            "integrity": "sha512-IsVN2EZdNHsmFdKWx9HaXb8T/s3FlR/U1QPt9dwbSyPtjFbMTlW9CRFvnn0bm/QIsrMRD2oMZqrQpSWPQVbXXg==",
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.5.tgz",
+            "integrity": "sha512-38g3v5/cX3NUv+jcr4sU6phKAthQKv36NYRgahsZIGNIVy8ewtSnolCJ1N64nGwi/sTUz5AE6PV1ZF+NaIThxg==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/type": "^3.0.2",
                 "yoctocolors-cjs": "^2.1.2"
             },
@@ -232,12 +232,12 @@
             }
         },
         "node_modules/@inquirer/search": {
-            "version": "3.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.4.tgz",
-            "integrity": "sha512-tSkJk2SDmC2MEdTIjknXWmCnmPr5owTs9/xjfa14ol1Oh95n6xW7SYn5fiPk4/vrJPys0ggSWiISdPze4LTa7A==",
+            "version": "3.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.5.tgz",
+            "integrity": "sha512-INqlGeK85gOmlVY8aosAdOMWgOmpcA7+eDlq5WBdbh8aZbAXX0HItf1GIdDj8zQnh+8Pv0DXU7OvdaLVcV4bWA==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/figures": "^1.0.9",
                 "@inquirer/type": "^3.0.2",
                 "yoctocolors-cjs": "^2.1.2"
@@ -250,12 +250,12 @@
             }
         },
         "node_modules/@inquirer/select": {
-            "version": "4.0.4",
-            "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.4.tgz",
-            "integrity": "sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w==",
+            "version": "4.0.5",
+            "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.0.5.tgz",
+            "integrity": "sha512-5UAnpWqs0G316MwJdSdgaRcWPIuUPllHa8pdHVi/w9KE/Ff/GzWhPwUn9ETtq/n8GEiWDUrP/LdJN8FJxf7JbA==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
+                "@inquirer/core": "^10.1.3",
                 "@inquirer/figures": "^1.0.9",
                 "@inquirer/type": "^3.0.2",
                 "ansi-escapes": "^4.3.2",
@@ -869,13 +869,13 @@
             }
         },
         "node_modules/inquirer": {
-            "version": "12.3.0",
-            "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.3.0.tgz",
-            "integrity": "sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==",
+            "version": "12.3.1",
+            "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.3.1.tgz",
+            "integrity": "sha512-EEJuhXDogMeu3opiLncf4fvkf25vGxl0cBYv1WIdqV3bvdZraDn0B31zoNqFHe7WndBMctZuYkZ/H/IO1yw8yw==",
             "license": "MIT",
             "dependencies": {
-                "@inquirer/core": "^10.1.2",
-                "@inquirer/prompts": "^7.2.1",
+                "@inquirer/core": "^10.1.3",
+                "@inquirer/prompts": "^7.2.2",
                 "@inquirer/type": "^3.0.2",
                 "ansi-escapes": "^4.3.2",
                 "mute-stream": "^2.0.0",
diff --git a/modules/ags/config/default.nix b/modules/ags/config/default.nix
index 422df170..ca67fa53 100644
--- a/modules/ags/config/default.nix
+++ b/modules/ags/config/default.nix
@@ -1,3 +1,3 @@
 {
-  npmDepsHash = "sha256-AYc9Rl2PIO1f3JRTO8jHKUsuufrg2cZ02NMHvwl4FY4=";
+  npmDepsHash = "sha256-Kv9I+qf1b40FhV1orDFUIhURw1rvA8ggU+eXcZS+KXU=";
 }
diff --git a/modules/ags/config/package-lock.json b/modules/ags/config/package-lock.json
index 71d3fbbb..e5eda6b2 100644
--- a/modules/ags/config/package-lock.json
+++ b/modules/ags/config/package-lock.json
@@ -575,7 +575,7 @@
         },
         "node_modules/astal": {
             "resolved": "https://gitpkg.vercel.app/Aylur/astal/lang/gjs/src?main",
-            "integrity": "sha512-LlbdDc0yCiRb4l1i7D0u7h6ZDzPg3J8tQE4EdqaBZk4YmYQQSAJ6NHnNuDSf8xZSIJvb4WYu7J83IAIXeFdO4g==",
+            "integrity": "sha512-G6iWsnHz0lFRrAmU17piwZU0Oas3koFK0o6Nr8R37Qfjql7vMGBKaIPGHmmgv0Nueccovbwf6LaXZ3piHj3mrQ==",
             "license": "LGPL-2.1"
         },
         "node_modules/balanced-match": {
diff --git a/overlays/build-failures/bat-extras.nix b/overlays/build-failures/bat-extras.nix
new file mode 100644
index 00000000..9e7607d6
--- /dev/null
+++ b/overlays/build-failures/bat-extras.nix
@@ -0,0 +1,209 @@
+{
+  lib,
+  stdenv,
+  fetchFromGitHub,
+  fetchpatch,
+  makeWrapper,
+  bat,
+  # batdiff, batgrep, and batwatch
+  coreutils,
+  getconf,
+  less,
+  # tests
+  bash,
+  zsh,
+  fish,
+  # batgrep
+  ripgrep,
+  # prettybat
+  withShFmt ? shfmt != null,
+  shfmt ? null,
+  withPrettier ? nodePackages ? prettier,
+  nodePackages ? null,
+  withClangTools ? clang-tools != null,
+  clang-tools ? null,
+  withRustFmt ? rustfmt != null,
+  rustfmt ? null,
+  # batwatch
+  withEntr ? entr != null,
+  entr ? null,
+  # batdiff
+  gitMinimal,
+  withDelta ? delta != null,
+  delta ? null,
+  # batman
+  util-linux,
+}: let
+  # Core derivation that all the others are based on.
+  # This includes the complete source so the per-script derivations can run the tests.
+  core = stdenv.mkDerivation rec {
+    pname = "bat-extras";
+    version = "2024.07.10";
+
+    src = fetchFromGitHub {
+      owner = "eth-p";
+      repo = "bat-extras";
+      rev = "v${version}";
+      hash = "sha256-6IRAKSy5f/WcQZBcJKVSweTjHLznzdxhsyx074bXnUQ=";
+      fetchSubmodules = true;
+    };
+
+    # bat needs to be in the PATH during building so EXECUTABLE_BAT picks it up
+    nativeBuildInputs = [bat];
+
+    dontConfigure = true;
+
+    patches = [
+      (fetchpatch {
+        url = "https://github.com/petrzjunior/nixpkgs/raw/80d08100fa04fdb0187f3a7a8667e12aa3614b5e/pkgs/tools/misc/bat-extras/disable-theme-tests.patch";
+        hash = "sha256-vBNMaJFwr9zTobvIRc5VljMPG3kVk07E+mNc1SJVyzg=";
+      })
+    ];
+
+    postPatch = ''
+      patchShebangs --build test.sh test/shimexec .test-framework/bin/best.sh
+    '';
+
+    buildPhase = ''
+      runHook preBuild
+      bash ./build.sh --minify=none --no-verify
+      runHook postBuild
+    '';
+
+    # Run the library tests as they don't have external dependencies
+    doCheck = true;
+    nativeCheckInputs =
+      [
+        bash
+        fish
+        zsh
+      ]
+      ++ (lib.optionals stdenv.hostPlatform.isDarwin [getconf]);
+    checkPhase = ''
+      runHook preCheck
+      # test list repeats suites. Unique them
+      declare -A test_suites
+      while read -r action arg _; do
+        [[ "$action" == "test_suite" && "$arg" == lib_* ]] &&
+        test_suites+=(["$arg"]=1)
+      done <<<"$(./test.sh --compiled --list --porcelain)"
+      (( ''${#test_suites[@]} != 0 )) || {
+        echo "Couldn't find any library test suites"
+        exit 1
+      }
+      ./test.sh --compiled $(printf -- "--suite %q\n" "''${!test_suites[@]}")
+      runHook postCheck
+    '';
+
+    installPhase = ''
+      runHook preInstall
+      cp -a . $out
+      runHook postInstall
+    '';
+
+    # A few random files have shebangs. Don't patch them, they don't make it into the final output.
+    # The per-script derivations will go ahead and patch the files they actually install.
+    dontPatchShebangs = true;
+
+    meta = with lib; {
+      description = "Bash scripts that integrate bat with various command line tools";
+      homepage = "https://github.com/eth-p/bat-extras";
+      license = with licenses; [mit];
+      maintainers = with maintainers; [bbigras];
+      platforms = platforms.all;
+    };
+  };
+  script = name:
+  # the name of the script
+  dependencies:
+  # the tools we need to prefix onto PATH
+    stdenv.mkDerivation {
+      pname = name;
+      inherit (core) version;
+
+      src = core;
+
+      nativeBuildInputs = [makeWrapper];
+      # Make the dependencies available to the tests.
+      buildInputs = dependencies;
+
+      # Patch shebangs now because our tests rely on them
+      postPatch = ''
+        patchShebangs --host bin/${name}
+      '';
+
+      dontConfigure = true;
+      dontBuild = true; # we've already built
+
+      doCheck = true;
+      nativeCheckInputs =
+        [
+          bat
+          bash
+          fish
+          zsh
+        ]
+        ++ (lib.optionals stdenv.hostPlatform.isDarwin [getconf]);
+      checkPhase = ''
+        runHook preCheck
+        bash ./test.sh --compiled --suite ${name}
+        runHook postCheck
+      '';
+
+      installPhase =
+        ''
+          runHook preInstall
+          mkdir -p $out/bin
+          cp -p bin/${name} $out/bin/${name}
+        ''
+        + lib.optionalString (dependencies != []) ''
+          wrapProgram $out/bin/${name} \
+            --prefix PATH : ${lib.makeBinPath dependencies}
+        ''
+        + ''
+          runHook postInstall
+        '';
+
+      # We already patched
+      dontPatchShebangs = true;
+
+      meta =
+        core.meta
+        // {
+          mainProgram = name;
+        };
+    };
+  optionalDep = cond: dep:
+    assert cond -> dep != null;
+      lib.optional cond dep;
+in {
+  batdiff = script "batdiff" (
+    [
+      less
+      coreutils
+      gitMinimal
+    ]
+    ++ optionalDep withDelta delta
+  );
+  batgrep = script "batgrep" [
+    less
+    coreutils
+    ripgrep
+  ];
+  batman = script "batman" (lib.optionals stdenv.hostPlatform.isLinux [util-linux]);
+  batpipe = script "batpipe" [less];
+  batwatch = script "batwatch" (
+    [
+      less
+      coreutils
+    ]
+    ++ optionalDep withEntr entr
+  );
+  prettybat = script "prettybat" (
+    []
+    ++ optionalDep withShFmt shfmt
+    ++ optionalDep withPrettier nodePackages.prettier
+    ++ optionalDep withClangTools clang-tools
+    ++ optionalDep withRustFmt rustfmt
+  );
+}
diff --git a/overlays/build-failures/default.nix b/overlays/build-failures/default.nix
index a2fe3df7..4a27131e 100644
--- a/overlays/build-failures/default.nix
+++ b/overlays/build-failures/default.nix
@@ -1,4 +1,11 @@
-final: prev: {
+final: prev: let
+  pkgs = final;
+
+  inherit (pkgs) recurseIntoAttrs callPackages;
+in {
+  # FIXME: https://pr-tracker.nelim.org/?pr=373146
+  bat-extras = recurseIntoAttrs (callPackages ./bat-extras.nix {});
+
   # FIXME: https://pr-tracker.nelim.org/?pr=357699
   nodejs_latest = prev.nodejs_22;
 
diff --git a/scopedPackages/lovelace-components/custom-sidebar/default.nix b/scopedPackages/lovelace-components/custom-sidebar/default.nix
index 55eb6556..829daca2 100644
--- a/scopedPackages/lovelace-components/custom-sidebar/default.nix
+++ b/scopedPackages/lovelace-components/custom-sidebar/default.nix
@@ -30,7 +30,7 @@ in
 
     pnpmDeps = pnpm.fetchDeps {
       inherit (finalAttrs) pname version src;
-      hash = "sha256-H4ayvaFBN2K5poIHE97lA4dxOYoaG8pHoWpMNW85Xy0=";
+      hash = "sha256-7cVWjyRZXd7xUZsgRNRYPfAap3LGH5VbLzvi2ocbkwc=";
     };
 
     passthru.update = concatTextFile {
diff --git a/scopedPackages/lovelace-components/material-rounded-theme/default.nix b/scopedPackages/lovelace-components/material-rounded-theme/default.nix
index 1ae17fa6..bad683e8 100644
--- a/scopedPackages/lovelace-components/material-rounded-theme/default.nix
+++ b/scopedPackages/lovelace-components/material-rounded-theme/default.nix
@@ -15,7 +15,7 @@ in
       substituteInPlace ./webpack.config.js --replace-fail "git branch --show-current" "echo main"
     '';
 
-    npmDepsHash = "sha256-l/g6gXCOyOe4N2ZawXsep1QpmvI31DTFgTQPp+LCDfk=";
+    npmDepsHash = "sha256-BlG/IuyJpigw6twUoaxJ5a970JfwBb75FuwgtH4xrCw=";
 
     installPhase = ''
       mkdir $out