summary refs log tree commit diff stats
path: root/modules/by-name/in/invidious-router
diff options
context:
space:
mode:
Diffstat (limited to 'modules/by-name/in/invidious-router')
-rw-r--r--modules/by-name/in/invidious-router/module.nix70
1 files changed, 70 insertions, 0 deletions
diff --git a/modules/by-name/in/invidious-router/module.nix b/modules/by-name/in/invidious-router/module.nix
new file mode 100644
index 0000000..f85a06c
--- /dev/null
+++ b/modules/by-name/in/invidious-router/module.nix
@@ -0,0 +1,70 @@
+{
+  config,
+  lib,
+  pkgsUnstable,
+  ...
+}: let
+  cfg = config.vhack.invidious-router;
+in {
+  options.vhack.invidious-router = {
+    enable = lib.mkEnableOption "invidious-router";
+    domain = lib.mkOption {
+      type = lib.types.str;
+      description = "The domain invidious-router should be served on";
+    };
+    extraDomains = lib.mkOption {
+      type = lib.types.listOf lib.types.str;
+      default = [];
+      description = "Addtional domains invidious-router should be served on";
+    };
+  };
+  config = lib.mkIf cfg.enable {
+    services.invidious-router = {
+      enable = true;
+      package = pkgsUnstable.invidious-router;
+      settings = {
+        app = {
+          listen = "127.0.0.1:8050";
+          enable_youtube_fallback = false;
+          reload_instance_list_interval = "60s";
+          not_available_message = ''
+            No available invidious instance found!
+            [link]View this video on YouTube[/link], a proprietary
+            platform that collects and uses your data without respecting
+            your privacy.
+          '';
+        };
+        api = {
+          enabled = true;
+          url = "https://api.invidious.io/instances.json";
+          filter_regions = false;
+          allowed_regions = [
+            "AT"
+            "DE"
+            "CH"
+          ];
+        };
+        healthcheck = {
+          path = "/watch?v=uSvJaYxRoB4";
+          allowed_status_codes = [
+            200
+          ];
+          timeout = "1s";
+          interval = "10s";
+          filter_by_response_time = {
+            enabled = true;
+            qty_of_top_results = 4;
+          };
+          minimum_ratio = 0.2;
+          remove_no_ratio = false;
+          text_not_present = "YouTube is currently trying to block Invidious instances";
+        };
+      };
+      nginx = {
+        enable = true;
+        inherit (cfg) domain extraDomains;
+      };
+    };
+    vhack.nginx.enable = true;
+  };
+}