about summary refs log tree commit diff stats
path: root/src/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/background/background.js9
-rw-r--r--src/pages/options/general/general.pug183
-rw-r--r--src/pages/options/imgur/imgur.pug40
-rw-r--r--src/pages/options/instagram/instagram.pug33
-rw-r--r--src/pages/options/lbry/lbry.pug33
-rw-r--r--src/pages/options/maps/maps.pug30
-rw-r--r--src/pages/options/medium/medium.pug33
-rw-r--r--src/pages/options/peertube/peertube.pug33
-rw-r--r--src/pages/options/reddit/reddit.html94
-rw-r--r--src/pages/options/reddit/reddit.js68
-rw-r--r--src/pages/options/reddit/reddit.pug65
-rw-r--r--src/pages/options/search/search.pug408
-rw-r--r--src/pages/options/sendTargets/sendTargets.pug33
-rw-r--r--src/pages/options/tiktok/tiktok.pug54
-rw-r--r--src/pages/options/translate/translate.pug70
-rw-r--r--src/pages/options/twitter/twitter.pug118
-rw-r--r--src/pages/options/wikipedia/wikipedia.pug38
-rw-r--r--src/pages/options/youtube/youtube.pug730
-rw-r--r--src/pages/options/youtubeMusic/youtubeMusic.pug24
-rw-r--r--src/pages/popup/popup.js37
-rw-r--r--src/pages/stylesheets/styles.css11
-rw-r--r--src/pages/widgets/captions_options.pug130
-rw-r--r--src/pages/widgets/from-to.pug108
-rw-r--r--src/pages/widgets/head.pug5
-rw-r--r--src/pages/widgets/instances.pug15
-rw-r--r--src/pages/widgets/latency.pug13
-rw-r--r--src/pages/widgets/links.pug76
27 files changed, 2317 insertions, 174 deletions
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 31412117..7bf960c9 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -173,23 +173,14 @@ async function redirectOfflineInstance(url, tabId) {
 
   newUrl = youtubeHelper.switchInstance(url);
   if (!newUrl) newUrl = twitterHelper.switchInstance(url);
-
   if (!newUrl) newUrl = instagramHelper.switchInstance(url);
-
   if (!newUrl) newUrl = redditHelper.switchInstance(url);
-
   if (!newUrl) newUrl = searchHelper.switchInstance(url);
-
   if (!newUrl) newUrl = translateHelper.switchInstance(url);
-
   if (!newUrl) newUrl = mediumHelper.switchInstance(url);
-
   if (!newUrl) newUrl = imgurHelper.switchInstance(url);
-
   if (!newUrl) newUrl = wikipediaHelper.switchInstance(url);
-
   if (!newUrl) newUrl = peertubeHelper.switchInstance(url);
-
   if (!newUrl) newUrl = lbryHelper.switchInstance(url);
 
   if (newUrl) {
diff --git a/src/pages/options/general/general.pug b/src/pages/options/general/general.pug
new file mode 100644
index 00000000..b5b46d5f
--- /dev/null
+++ b/src/pages/options/general/general.pug
@@ -0,0 +1,183 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('general')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_theme__") Theme
+            select#theme
+                option(value="DEFAULT" data-localise="__MSG_system__") System
+                option(value="light" data-localise="__MSG_light__") Light
+                option(value="dark" data-localise="__MSG_dark__") Dark
+
+        .some-block.option-block
+            h4(data-localise="__MSG_applyTheme__") Apply Theme to sites
+            input#apply-theme-to-sites(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_alwaysPref__") Always use Preferred Instances
+            input#always-use-preferred(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_autoRedirect__") Auto Redirect of offline instances
+            input#auto-redirect(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_exceptions__") Exceptions
+
+        form#custom-exceptions-instance-form
+            .some-block.option-block
+                .some-block(style="padding:0;")
+                    input#exceptions-custom-instance(placeholder="https://www.google.com" type="url")
+                    | 
+                    select#exceptions-custom-instance-type
+                        option(value="url") URL
+                        option(value="regex") Regex
+                    | 
+                button#exceptions-add-instance.add(type="submit")
+                    svg(xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor")
+                        path(d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z")
+
+        #exceptions-custom-checklist.checklist
+
+        .buttons.buttons-inline
+            a#update-instances.button.button-inline
+                svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                    path(d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z")
+                x(data-localise="__MSG_updateInstances__") Update Instances
+
+            |   
+
+            label.button.button-inline(for="import-settings") 
+                svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                    path(d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z")
+                | 
+                x(data-localise="__MSG_importSettings__") Import Settings
+            input#import-settings.button.button-inline(type="file" style="display:none;")
+
+            |   
+
+            a#export-settings.button.button-inline
+                svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                    path(d="M10.09 15.59L11.5 17l5-5-5-5-1.41 1.41L12.67 11H3v2h9.67l-2.58 2.59zM19 3H5c-1.11 0-2 .9-2 2v4h2V5h14v14H5v-4H3v4c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z")
+                | 
+                x(data-localise="__MSG_exportSettings__") Export Settings
+
+            |   
+
+            a#reset-settings.button.button-inline
+                svg(xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                    path(d="M12,5V2L8,6l4,4V7c3.31,0,6,2.69,6,6c0,2.97-2.17,5.43-5,5.91v2.02c3.95-0.49,7-3.85,7-7.93C20,8.58,16.42,5,12,5z")
+                    path(d="M6,13c0-1.65,0.67-3.15,1.76-4.24L6.34,7.34C4.9,8.79,4,10.79,4,13c0,4.08,3.05,7.44,7,7.93v-2.02 C8.17,18.43,6,15.97,6,13z")
+                x(data-localise="__MSG_resetSettings__") Reset Settings
+        hr
+
+        .some-block.option-block
+            h4(data-localise="__MSG_customPopup__") Customize Popup
+
+        #popup-frontends-checklist.checklist-popup
+            div
+                div
+                    img(src="../../../assets/images/youtube-icon.png")
+                    |YouTube
+                input#youtube(type="checkbox")
+            div
+                div
+                    img(src="../../../assets/images/youtube-music-icon.png")
+                    |YoutubeMusic
+                input#youtubeMusic(type="checkbox")
+            div
+                div
+                    img(src="../../../assets/images/twitter-icon.png")
+                    |Twitter
+                input#twitter(type="checkbox")
+
+            div
+                div 
+                    img(src="../../../assets/images/instagram-icon.png")
+                    |Instagram
+                input#instagram(type="checkbox")
+
+            div 
+                div 
+                    img(src="../../../assets/images/tiktok-icon.png")
+                    |TikTok
+                input#tikTok(type="checkbox")
+
+            div 
+                div 
+                    img(src="../../../assets/images/imgur-icon.png")
+                    |Imgur
+                input#imgur(type="checkbox")
+
+            div 
+                div 
+                    img(src="../../../assets/images/reddit-icon.png")
+                    |Reddit
+                input#reddit(type="checkbox")
+
+            div 
+                div 
+                    svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor")
+                        path(d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z")
+                    |Search
+                input#search(type="checkbox")
+
+            div 
+                div 
+                    svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor")
+                        path(d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z")
+                    |Translate
+                input#translate(type="checkbox")
+
+            div 
+                div 
+                    svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor")
+                        path(d="M20.5 3l-.16.03L15 5.1 9 3 3.36 4.9c-.21.07-.36.25-.36.48V20.5c0 .28.22.5.5.5l.16-.03L9 18.9l6 2.1 5.64-1.9c.21-.07.36-.25.36-.48V3.5c0-.28-.22-.5-.5-.5zM10 5.47l4 1.4v11.66l-4-1.4V5.47zm-5 .99l3-1.01v11.7l-3 1.16V6.46zm14 11.08l-3 1.01V6.86l3-1.16v11.84z")
+                    |Maps
+                input#maps(type="checkbox")
+
+            div 
+                div 
+                    img(src="../../../assets/images/wikipedia-icon.svg")
+                    |Wikipedia
+                input#wikipedia(type="checkbox")
+
+            div 
+                div 
+                    svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1770 1000" fill="currentColor")
+                        circle(cx="500" cy="500" r="500")
+                        ellipse(ry="475" rx="250" cy="501" cx="1296")
+                        ellipse(cx="1682" cy="502" rx="88" ry="424")
+                    |Medium
+                input#medium(type="checkbox")
+
+            div 
+                div 
+                    img(src="../../../assets/images/peertube-icon.svg")
+                    |Peertube
+                input#peertube(type="checkbox")
+
+            div 
+                div 
+                    img(src="../../../assets/images/lbry-icon.png")
+                    |LBRY/Odysee
+                input#lbry(type="checkbox")
+
+            div 
+                div 
+                    svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                        path(d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z")
+                    |Send Files
+                input#sendTargets(type="checkbox")
+
+            hr
+
+
+        script(type="module" src="../init.js")
+        script(type="module" src="./general.js")
+        script(type="module" src="../../../assets/javascripts/localise.js")
\ No newline at end of file
diff --git a/src/pages/options/imgur/imgur.pug b/src/pages/options/imgur/imgur.pug
new file mode 100644
index 00000000..f195ca66
--- /dev/null
+++ b/src/pages/options/imgur/imgur.pug
@@ -0,0 +1,40 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('imgur')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-imgur(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+                option(value="i2p" data-localise="__MSG_i2p__") I2P
+
+        #rimgo
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://rimgo.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://rimgo.onion')
+
+            .i2p
+                include ../../widgets/instances.pug
+                +instances('https://rimgo.onion')
+
+
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./imgur.js")
\ No newline at end of file
diff --git a/src/pages/options/instagram/instagram.pug b/src/pages/options/instagram/instagram.pug
new file mode 100644
index 00000000..6e1ef19a
--- /dev/null
+++ b/src/pages/options/instagram/instagram.pug
@@ -0,0 +1,33 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('instagram')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-bibliogram(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        #bibliogram
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://bibliogram.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://bibliogram.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./instagram.js")
\ No newline at end of file
diff --git a/src/pages/options/lbry/lbry.pug b/src/pages/options/lbry/lbry.pug
new file mode 100644
index 00000000..aca0d489
--- /dev/null
+++ b/src/pages/options/lbry/lbry.pug
@@ -0,0 +1,33 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('lbry')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-lbry(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        #librarian
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://librarian.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://librarian.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./lbry.js")
\ No newline at end of file
diff --git a/src/pages/options/maps/maps.pug b/src/pages/options/maps/maps.pug
new file mode 100644
index 00000000..2da94a43
--- /dev/null
+++ b/src/pages/options/maps/maps.pug
@@ -0,0 +1,30 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('maps')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-osm(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_frontend__") Frontend
+            select#maps-frontend
+                option(value="osm") OpenStreetMap
+                option(value="facil") Facil Map
+
+        #facil
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://facilmap.com')
+                include ../../widgets/latency.pug
+                +latency()
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./maps.js")
\ No newline at end of file
diff --git a/src/pages/options/medium/medium.pug b/src/pages/options/medium/medium.pug
new file mode 100644
index 00000000..f5b698d2
--- /dev/null
+++ b/src/pages/options/medium/medium.pug
@@ -0,0 +1,33 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('medium')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-medium(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        #scribe
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://scribe.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://scribe.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./medium.js")
\ No newline at end of file
diff --git a/src/pages/options/peertube/peertube.pug b/src/pages/options/peertube/peertube.pug
new file mode 100644
index 00000000..d9b25bbc
--- /dev/null
+++ b/src/pages/options/peertube/peertube.pug
@@ -0,0 +1,33 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('peertube')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-peertube(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        #simpleertube
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://simpleertube.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://simpleertube.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./peertube.js")
\ No newline at end of file
diff --git a/src/pages/options/reddit/reddit.html b/src/pages/options/reddit/reddit.html
index 6fa9090d..e3fc40d9 100644
--- a/src/pages/options/reddit/reddit.html
+++ b/src/pages/options/reddit/reddit.html
@@ -78,92 +78,22 @@
       <input id="bypass-watch-on-reddit" type="checkbox">
     </div>
     <div id="libreddit">
+      <hr>
       <div class="some-block option-block">
-        <h4 data-localise="__MSG_enableCustomSettings__">Enable Custom Settings (will use cookies)</h4>
-        <input id="enable-libreddit-custom-settings" type="checkbox">
+        <h4>Unify cookies across selected instances</h4>
       </div>
-      <hr>
-      <div class="custom-settings"> 
-        <div class="some-block option-block">
-          <h2>Appearance</h2>
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_theme__">Theme</h4>
-          <select class="theme">
-            <option value="system">System</option>
-            <option value="light">Light</option>
-            <option value="dark">Dark</option>
-            <option value="black">Black</option>
-            <option value="dracula">Dracula</option>
-            <option value="nord">Nord</option>
-            <option value="laserwave">Laserwave</option>
-            <option value="violet">Violet</option>
-            <option value="gold">Gold</option>
-          </select>
-        </div>
-        <div class="some-block option-block">
-          <h2>Interface</h2>
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_frontPage__">Front page</h4>
-          <select class="front_page">
-            <option value="default">Default</option>
-            <option value="popular">Popular</option>
-            <option value="all">All</option>
-          </select>
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_frontLayout__">Front Layout</h4>
-          <select class="layout">
-            <option value="card">Card</option>
-            <option value="clean">Clean</option>
-            <option value="compact">Compact</option>
-          </select>
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_wideUI__">Wide UI</h4>
-          <input class="wide" type="checkbox">
-        </div>
+      <form>
         <div class="some-block option-block">
-          <h2>Content</h2>
+          <input type="url" placeholder="https://libreddit.com">
+          <button class="add" type="submit">
+            <svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
+              <rect fill="none" height="24" width="24"></rect>
+              <path d="M18,2H9C7.9,2,7,2.9,7,4v12c0,1.1,0.9,2,2,2h9c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2z M18,16H9V4h9V16z M3,15v-2h2v2H3z M3,9.5h2v2H3V9.5z M10,20h2v2h-2V20z M3,18.5v-2h2v2H3z M5,22c-1.1,0-2-0.9-2-2h2V22z M8.5,22h-2v-2h2V22z M13.5,22L13.5,22l0-2h2 v0C15.5,21.1,14.6,22,13.5,22z M5,6L5,6l0,2H3v0C3,6.9,3.9,6,5,6z"></path>
+            </svg>
+          </button>
         </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_defaultSubredditPostSort__">Default subreddit post sort</h4>
-          <select class="post_sort">
-            <option value="hot">Hot</option>
-            <option value="new">New</option>
-            <option value="top">Top</option>
-            <option value="rising">Rising</option>
-            <option value="controversial">Controversial</option>
-          </select>
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_defaultCommentSort__">Default comment sort</h4>
-          <select class="comment_sort">
-            <option value="confidence">Confidence</option>
-            <option value="top">Top</option>
-            <option value="new">New</option>
-            <option value="controversial">Controversial</option>
-            <option value="old">Old</option>
-          </select>
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_showNsfwPosts__">Show NSFW posts</h4>
-          <input class="show_nsfw" type="checkbox">
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_autoplayVideos__">Autoplay videos</h4>
-          <input class="autoplay_videos" type="checkbox">
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_useHlsForVideos__">Use HLS for videos</h4>
-          <input class="use_hls" type="checkbox">
-        </div>
-        <div class="some-block option-block">
-          <h4 data-localise="__MSG_hideNotificationAboutPossibleHlsUsage__">Hide notification about possible HLS usage</h4>
-          <input class="hide_hls_notification" type="checkbox">
-        </div>
-      </div>
+      </form>
+      <hr>
       <div class="normal">
                 <div class="some-block option-block">
                   <h4 data-localise="__MSG_defaultInstances__">Default Instances</h4>
diff --git a/src/pages/options/reddit/reddit.js b/src/pages/options/reddit/reddit.js
index 475f8b61..65ad284c 100644
--- a/src/pages/options/reddit/reddit.js
+++ b/src/pages/options/reddit/reddit.js
@@ -3,49 +3,31 @@ import commonHelper from "../../../assets/javascripts/helpers/common.js";
 
 let libredditDivElement = document.getElementById("libreddit")
 let tedditDivElement = document.getElementById("teddit")
-let enableLibredditSettingsElement = document.getElementById("enable-libreddit-custom-settings");
-let customSettingsDivElement = document.getElementsByClassName("custom-settings");
 
 let disableRedditElement = document.getElementById("disable-reddit");
 let redditFrontendElement = document.getElementById("reddit-frontend");
 let protocolElement = document.getElementById("protocol")
 let bypassWatchOnRedditElement = document.getElementById("bypass-watch-on-reddit")
 
-let theme = document.getElementById('libreddit').getElementsByClassName('theme')[0];
-let front_page = document.getElementById('libreddit').getElementsByClassName('front_page')[0];
-let layout = document.getElementById('libreddit').getElementsByClassName('layout')[0];
-let wide = document.getElementById('libreddit').getElementsByClassName('wide')[0];
-let post_sort = document.getElementById('libreddit').getElementsByClassName('post_sort')[0];
-let comment_sort = document.getElementById('libreddit').getElementsByClassName('comment_sort')[0];
-let show_nsfw = document.getElementById('libreddit').getElementsByClassName('show_nsfw')[0];
-let autoplay_videos = document.getElementById('libreddit').getElementsByClassName('autoplay_videos')[0];
-let use_hls = document.getElementById('libreddit').getElementsByClassName('use_hls')[0];
-let hide_hls_notification = document.getElementById('libreddit').getElementsByClassName('hide_hls_notification')[0];
-
 document.addEventListener("change", async () => {
     await browser.storage.local.set({
         disableReddit: !disableRedditElement.checked,
         bypassWatchOnReddit: bypassWatchOnRedditElement.checked,
         redditProtocol: protocolElement.value,
         redditFrontend: redditFrontendElement.value,
-
-        enableLibredditCustomSettings: enableLibredditSettingsElement.checked,
-
-        redditTheme: theme.value,
-        redditFrontPage: front_page.value,
-        redditLayout: layout.value,
-        redditWide: wide.checked,
-        redditPostSort: post_sort.value,
-        redditCommentSort: comment_sort.value,
-        redditShowNsfw: show_nsfw.checked,
-        redditAutoplayVideos: autoplay_videos.checked,
-        redditUseHls: use_hls.checked,
-        redditHideHlsNotification: hide_hls_notification.checked,
     });
     changeFrontendsSettings(redditFrontendElement.value);
     changeProtocolSettings(protocolElement.value);
 })
 
+const libredditForm = libredditDivElement.getElementsByTagName('form')[0];
+const libredditCookies = libredditForm.getElementsByTagName('input')[0];
+libredditForm.addEventListener('submit', async event => {
+    event.preventDefault();
+    const url = new URL(libredditCookies.value);
+    redditHelper.initLibredditCookies(url);
+})
+
 function changeProtocolSettings(protocol) {
     let normalLibredditDiv = libredditDivElement.getElementsByClassName("normal")[0];
     let torLibredditDiv = libredditDivElement.getElementsByClassName("tor")[0];
@@ -64,10 +46,6 @@ function changeProtocolSettings(protocol) {
         torTedditDiv.style.display = 'block';
         torLibredditDiv.style.display = 'block';
     }
-    if (enableLibredditSettingsElement.checked)
-        for (const item of customSettingsDivElement) item.style.display = 'block';
-    else
-        for (const item of customSettingsDivElement) item.style.display = 'none';
 }
 function changeFrontendsSettings(frontend) {
     let frontendElement = document.getElementById("frontend");
@@ -96,37 +74,14 @@ browser.storage.local.get(
         "redditFrontend",
 
         "enableLibredditCustomSettings",
-
-        "redditTheme",
-        "redditFrontPage",
-        "redditLayout",
-        "redditWide",
-        "redditPostSort",
-        "redditCommentSort",
-        "redditShowNsfw",
-        "redditAutoplayVideos",
-        "redditUseHls",
-        "redditHideHlsNotification",
     ],
     r => {
         disableRedditElement.checked = !r.disableReddit
         bypassWatchOnRedditElement.checked = r.bypassWatchOnReddit
         protocolElement.value = r.redditProtocol
         redditFrontendElement.value = r.redditFrontend
-        enableLibredditSettingsElement.checked = r.enableLibredditCustomSettings
         changeFrontendsSettings(r.redditFrontend);
         changeProtocolSettings(r.redditProtocol);
-
-        theme.value = r.redditTheme;
-        front_page.value = r.redditFrontPage;
-        layout.value = r.redditLayout;
-        wide.checked = r.redditWide;
-        post_sort.value = r.redditPostSort;
-        comment_sort.value = r.redditCommentSort;
-        show_nsfw.checked = r.redditShowNsfw;
-        autoplay_videos.checked = r.redditAutoplayVideos;
-        use_hls.checked = r.redditUseHls;
-        hide_hls_notification.checked = r.redditHideHlsNotification;
     }
 )
 
@@ -172,9 +127,4 @@ latencyTedditElement.addEventListener("click",
             latencyTedditElement.removeEventListener("click", reloadWindow);
         });
     }
-);
-
-window.onblur = () => {
-    redditHelper.initLibredditCookies();
-    redditHelper.initTedditCookies();
-}
\ No newline at end of file
+);
\ No newline at end of file
diff --git a/src/pages/options/reddit/reddit.pug b/src/pages/options/reddit/reddit.pug
new file mode 100644
index 00000000..7262a7f4
--- /dev/null
+++ b/src/pages/options/reddit/reddit.pug
@@ -0,0 +1,65 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('reddit')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-reddit(type="checkbox")
+
+        .some-block.option-block
+            h4#frontend(data-localise="__MSG_frontend__") Frontend
+            select#reddit-frontend
+                option(value="libreddit") Libreddit
+                option(value="teddit") Teddit
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        .some-block.option-block
+            h4(data-localise="__MSG_bypassReddit__") Bypass "Open in Reddit"
+            input#bypass-watch-on-reddit(type="checkbox")
+
+        #libreddit
+            hr
+            .some-block.option-block
+                h4 Unify cookies across selected instances
+            form
+                .some-block.option-block
+                    input(type="url" placeholder="https://libreddit.com")
+                    button.add(type="submit")
+                        svg(xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                            rect(fill="none" height="24" width="24")
+                            path(d="M18,2H9C7.9,2,7,2.9,7,4v12c0,1.1,0.9,2,2,2h9c1.1,0,2-0.9,2-2V4C20,2.9,19.1,2,18,2z M18,16H9V4h9V16z M3,15v-2h2v2H3z M3,9.5h2v2H3V9.5z M10,20h2v2h-2V20z M3,18.5v-2h2v2H3z M5,22c-1.1,0-2-0.9-2-2h2V22z M8.5,22h-2v-2h2V22z M13.5,22L13.5,22l0-2h2 v0C15.5,21.1,14.6,22,13.5,22z M5,6L5,6l0,2H3v0C3,6.9,3.9,6,5,6z")
+
+            hr
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://libreddit.com')
+                include ../../widgets/latency.pug
+                +latency('libreddit')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://libreddit.onion')
+
+        #teddit
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://teddit.com')
+                +latency('teddit')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://teddit.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./reddit.js")
\ No newline at end of file
diff --git a/src/pages/options/search/search.pug b/src/pages/options/search/search.pug
new file mode 100644
index 00000000..78825611
--- /dev/null
+++ b/src/pages/options/search/search.pug
@@ -0,0 +1,408 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('search')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-search(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_frontend__") Frontend
+            select#search-frontend
+                option(value="searxng") SearXNG
+                option(value="searx") SearX
+                option(value="whoogle") Whoogle
+
+
+        #searx-whoogle
+            .some-block.option-block
+                h4(data-localise="__MSG_protocol__") Protocol
+                select#protocol
+                    option(value="normal" data-localise="__MSG_normal__") Normal
+                    option(value="tor" data-localise="__MSG_tor__") Tor
+                    option(value="i2p" data-localise="__MSG_i2p__") I2P
+
+        .some-block
+            h4(data-localise="__MSG_searchNote__") Note: To use Search to its full potential, make LibRedirect as the Default Search Engine
+
+        #searx
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://searx.com')
+                include ../../widgets/latency.pug
+                +latency('searx')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://searx.onion')
+            .i2p
+                include ../../widgets/instances.pug
+                +instances('https://searx.i2p')
+
+        #searxng
+            .some-block.option-block
+                h4(data-localise="__MSG_enableCustomSettings__") Enable Custom Settings (will use cookies)
+                input#enable-searxng-custom-settings(type="checkbox")
+            hr
+            .custom-settings
+                .some-block.option-block
+                    h2 General
+
+                .some-block.option-block
+                    h4(data-localise="") Default categories
+
+                .checklist-popup
+                    div 
+                        div
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M221.09 64a157.09 157.09 0 10157.09 157.09A157.1 157.1 0 00221.09 64z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32")
+                                path(fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32" d="M338.29 338.29L448 448")
+                            |General
+                        input.category_general(type="checkbox")
+
+                    div 
+                        div
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                rect(x="48" y="80" width="416" height="352" rx="48" ry="48" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32")
+                                circle(cx="336" cy="176" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32")
+                                path(d="M304 335.79l-90.66-90.49a32 32 0 00-43.87-1.3L48 352M224 432l123.34-123.34a32 32 0 0143.11-2L464 368" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                            |Images
+
+                        input.category_images(type="checkbox")
+
+                    div 
+                        div
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M112 111v290c0 17.44 17 28.52 31 20.16l247.9-148.37c12.12-7.25 12.12-26.33 0-33.58L143 90.84c-14-8.36-31 2.72-31 20.16z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32")
+                            |Videos
+                        input.category_videos(type="checkbox")
+
+                    div 
+                        div 
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M368 415.86V72a24.07 24.07 0 00-24-24H72a24.07 24.07 0 00-24 24v352a40.12 40.12 0 0040 40h328" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32")
+                                path(d="M416 464h0a48 48 0 01-48-48V128h72a24 24 0 0124 24v264a48 48 0 01-48 48z" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32")
+                                path(fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M240 128h64M240 192h64M112 256h192M112 320h192M112 384h192")
+                                path(d="M176 208h-64a16 16 0 01-16-16v-64a16 16 0 0116-16h64a16 16 0 0116 16v64a16 16 0 01-16 16z")
+                            |News
+                        input.category_news(type="checkbox")
+
+                    div 
+                        div 
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M256 48c-79.5 0-144 61.39-144 137 0 87 96 224.87 131.25 272.49a15.77 15.77 0 0025.5 0C304 409.89 400 272.07 400 185c0-75.61-64.5-137-144-137z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                                circle(cx="256" cy="192" r="48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                            |Maps
+                        input.category_map(type="checkbox")
+
+                    div 
+                        div 
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M192 218v-6c0-14.84 10-27 24.24-30.59l174.59-46.68A20 20 0 01416 154v22" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                                path(d="M416 295.94v80c0 13.91-8.93 25.59-22 30l-22 8c-25.9 8.72-52-10.42-52-38h0a33.37 33.37 0 0123-32l51-18.15c13.07-4.4 22-15.94 22-29.85V58a10 10 0 00-12.6-9.61L204 102a16.48 16.48 0 00-12 16v226c0 13.91-8.93 25.6-22 30l-52 18c-13.88 4.68-22 17.22-22 32h0c0 27.58 26.52 46.55 52 38l22-8c13.07-4.4 22-16.08 22-30v-80" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                            |Music
+                        input.category_music(type="checkbox")
+
+                    div 
+                        div 
+                            svg(class="ion-icon-big" viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M434.8 137.65l-149.36-68.1c-16.19-7.4-42.69-7.4-58.88 0L77.3 137.65c-17.6 8-17.6 21.09 0 29.09l148 67.5c16.89 7.7 44.69 7.7 61.58 0l148-67.5c17.52-8 17.52-21.1-.08-29.09zM160 308.52l-82.7 37.11c-17.6 8-17.6 21.1 0 29.1l148 67.5c16.89 7.69 44.69 7.69 61.58 0l148-67.5c17.6-8 17.6-21.1 0-29.1l-79.94-38.47" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                                path(d="M160 204.48l-82.8 37.16c-17.6 8-17.6 21.1 0 29.1l148 67.49c16.89 7.7 44.69 7.7 61.58 0l148-67.49c17.7-8 17.7-21.1.1-29.1L352 204.48" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                            |It
+                        input.category_it(type="checkbox")
+
+                    div 
+                        div 
+                            svg(class="ion-icon-big" viewBox="0 0 512 512" aria-hidden="true")
+                                path(fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M32 192L256 64l224 128-224 128L32 192z")
+                                path(fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M112 240v128l144 80 144-80V240M480 368V192M256 320v128")
+                            |Science
+                        input.category_science(type="checkbox")
+
+                    div 
+                        div
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M384 80H128c-26 0-43 14-48 40L48 272v112a48.14 48.14 0 0048 48h320a48.14 48.14 0 0048-48V272l-32-152c-5-27-23-40-48-40z" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32")
+                                path(fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" d="M48 272h144M320 272h144M192 272a64 64 0 00128 0M144 144h224M128 208h256")
+                            |Files
+                        input.category_files(type="checkbox")
+
+                    div 
+                        div 
+                            svg(viewBox="0 0 512 512" aria-hidden="true")
+                                path(d="M402 168c-2.93 40.67-33.1 72-66 72s-63.12-31.32-66-72c-3-42.31 26.37-72 66-72s69 30.46 66 72z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                                path(d="M336 304c-65.17 0-127.84 32.37-143.54 95.41-2.08 8.34 3.15 16.59 11.72 16.59h263.65c8.57 0 13.77-8.25 11.72-16.59C463.85 335.36 401.18 304 336 304z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32")
+                                path(d="M200 185.94c-2.34 32.48-26.72 58.06-53 58.06s-50.7-25.57-53-58.06C91.61 152.15 115.34 128 147 128s55.39 24.77 53 57.94z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32")
+                                path(d="M206 306c-18.05-8.27-37.93-11.45-59-11.45-52 0-102.1 25.85-114.65 76.2-1.65 6.66 2.53 13.25 9.37 13.25H154" fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32")
+                            |Social Media
+                        input.category_social_media(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="") Search language
+                    select.language
+                        option(value="all") Default language
+                        option(value="af-ZA") 🇿🇦 Afrikaans (Suid-Afrika) 
+                        option(value="ca-ES") 🇪🇸 Català (Espanya) 
+                        option(value="da-DK") 🇩🇰 Dansk (Danmark) 
+                        option(value="de") 🌐 Deutsch 
+                        option(value="de-AT") 🇦🇹 Deutsch (Österreich) 
+                        option(value="de-CH") 🇨🇭 Deutsch (Schweiz) 
+                        option(value="de-DE") 🇩🇪 Deutsch (Deutschland) 
+                        option(value="et-EE") 🇪🇪 Eesti (Eesti) 
+                        option(value="en") 🌐 English 
+                        option(value="en-AU") 🇦🇺 English (Australia) 
+                        option(value="en-CA") 🇨🇦 English (Canada) 
+                        option(value="en-GB") 🇬🇧 English (United Kingdom) 
+                        option(value="en-IE") 🇮🇪 English (Ireland) 
+                        option(value="en-MY") 🇲🇾 English (Malaysia) 
+                        option(value="en-NZ") 🇳🇿 English (New Zealand) 
+                        option(value="en-US") 🇺🇸 English (United States) 
+                        option(value="es") 🌐 Español 
+                        option(value="es-AR") 🇦🇷 Español (Argentina) 
+                        option(value="es-CL") 🇨🇱 Español (Chile) 
+                        option(value="es-ES") 🇪🇸 Español (España) 
+                        option(value="es-MX") 🇲🇽 Español (México) 
+                        option(value="fil-PH") 🇵🇭 Filipino (Pilipinas) 
+                        option(value="fr") 🌐 Français 
+                        option(value="fr-BE") 🇧🇪 Français (Belgique) 
+                        option(value="fr-CA") 🇨🇦 Français (Canada) 
+                        option(value="fr-CH") 🇨🇭 Français (Suisse) 
+                        option(value="fr-FR") 🇫🇷 Français (France) 
+                        option(value="hr-HR") 🇭🇷 Hrvatski (Hrvatska) 
+                        option(value="id-ID") 🇮🇩 Indonesia (Indonesia) 
+                        option(value="it-IT") 🇮🇹 Italiano (Italia) 
+                        option(value="sw-TZ") 🇹🇿 Kiswahili (Tanzania) 
+                        option(value="lv-LV") 🇱🇻 Latviešu (Latvija) 
+                        option(value="lt-LT") 🇱🇹 Lietuvių (Lietuva) 
+                        option(value="hu-HU") 🇭🇺 Magyar (Magyarország) 
+                        option(value="nl") 🌐 Nederlands 
+                        option(value="nl-BE") 🇧🇪 Nederlands (België) 
+                        option(value="nl-NL") 🇳🇱 Nederlands (Nederland) 
+                        option(value="no-NO") 🇳🇴 Norsk 
+                        option(value="pl-PL") 🇵🇱 Polski (Polska) 
+                        option(value="pt") 🌐 Português 
+                        option(value="pt-BR") 🇧🇷 Português (Brasil) 
+                        option(value="pt-PT") 🇵🇹 Português (Portugal) 
+                        option(value="ro-RO") 🇷🇴 Română (România) 
+                        option(value="sk-SK") 🇸🇰 Slovenčina (Slovensko) 
+                        option(value="sl-SI") 🇸🇮 Slovenščina (Slovenija) 
+                        option(value="fi-FI") 🇫🇮 Suomi (Suomi) 
+                        option(value="sv-SE") 🇸🇪 Svenska (Sverige) 
+                        option(value="vi-VN") 🇻🇳 Tiếng Việt (Việt Nam) 
+                        option(value="tr-TR") 🇹🇷 Türkçe (Türkiye) 
+                        option(value="is-IS") 🇮🇸 Íslenska (Ísland) 
+                        option(value="cs-CZ") 🇨🇿 Čeština (Česko) 
+                        option(value="el-GR") 🇬🇷 Ελληνικά (Ελλάδα) 
+                        option(value="be-BY") 🇧🇾 Беларуская (Беларусь) 
+                        option(value="bg-BG") 🇧🇬 Български (България) 
+                        option(value="ru-RU") 🇷🇺 Русский (Россия) 
+                        option(value="sr-RS") 🇷🇸 Српски (Србија) 
+                        option(value="uk-UA") 🇺🇦 Українська (Україна) 
+                        option(value="he-IL") 🇮🇱 עברית (ישראל) 
+                        option(value="ar-EG") 🇪🇬 العربية (مصر) 
+                        option(value="fa-IR") 🇮🇷 فارسی (ایران) 
+                        option(value="hi-IN") 🇮🇳 हिन्दी (भारत) 
+                        option(value="th-TH") 🇹🇭 ไทย (ไทย) 
+                        option(value="zh") 🌐 中文 
+                        option(value="zh-CN") 🇨🇳 中文 (中国) 
+                        option(value="zh-HK") 🇭🇰 中文 (中國香港) 
+                        option(value="zh-TW") 🇹🇼 中文 (台灣) 
+                        option(value="ja-JP") 🇯🇵 日本語 (日本) 
+                        option(value="ko-KR") 🇰🇷 한국어 (대한민국) 
+
+                .some-block.option-block
+                    h4(data-localise="") Autocomplete
+                    select.autocomplete
+                        option(value="")  - 
+                        option(value="dbpedia") dbpedia
+                        option(value="duckduckgo") duckduckgo
+                        option(value="google") google
+                        option(value="seznam") seznam
+                        option(value="startpage") startpage
+                        option(value="swisscows") swisscows
+                        option(value="qwant") qwant
+                        option(value="wikipedia") wikipedia
+                        option(value="brave") brave
+
+                .some-block.option-block
+                    h4(data-localise="") SafeSearch
+                    select.safesearch
+                        option(value="2") Strict
+                        option(value="1") Moderate
+                        option(value="0") None
+
+                .some-block.option-block
+                    h4(data-localise="") Hostname replace
+                    input.hostname_replace(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="") Open Access DOI rewrite
+                    input.oa_doi_rewrite(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="") Open Access DOI resolver
+                    select.doi_resolver
+                        option(value="oadoi.org") oadoi.org - https://oadoi.org/
+                        option(value="doi.org") doi.org - https://doi.org/
+                        option(value="doai.io") doai.io - https://dissem.in/
+                        option(value="sci-hub.se") sci-hub.se - https://sci-hub.se/
+                        option(value="sci-hub.do") sci-hub.do - https://sci-hub.do/
+                        option(value="scihubtw.tw") scihubtw.tw - https://scihubtw.tw/
+                        option(value="sci-hub.st") sci-hub.st - https://sci-hub.st/
+                        option(value="sci-hub.bar") sci-hub.bar - https://sci-hub.bar/
+                        option(value="sci-hub.it.nf") sci-hub.it.nf - https://sci-hub.it.nf/
+
+                .some-block.option-block
+                    h4(data-localise="") Engine tokens
+                    input.tokens(type="text")
+
+                hr
+
+                .some-block.option-block
+                    h2 User Interface
+
+                .some-block.option-block
+                    h4(data-localise="") Interface language
+                    select.locale
+                        option(value="ar") العربية (Arabic)
+                        option(value="bg") Български (Bulgarian)
+                        option(value="bo") བོད་སྐད་ (Tibetan)
+                        option(value="ca") Català (Catalan)
+                        option(value="cs") Čeština (Czech)
+                        option(value="cy") Cymraeg (Welsh)
+                        option(value="da") Dansk (Danish)
+                        option(value="de") Deutsch (German)
+                        option(value="el-GR") Ελληνικά, Ελλάδα (Greek, Greece)
+                        option(value="en" selected="selected") English
+                        option(value="eo") Esperanto
+                        option(value="es") Español (Spanish)
+                        option(value="et") Eesti (Estonian)
+                        option(value="eu") Euskara (Basque)
+                        option(value="fa-IR") فارسی, ایران (Persian, Iran)
+                        option(value="fi") Suomi (Finnish)
+                        option(value="fil") Filipino
+                        option(value="fr") Français (French)
+                        option(value="gl") Galego (Galician)
+                        option(value="he") עברית (Hebrew)
+                        option(value="hr") Hrvatski (Croatian)
+                        option(value="hu") Magyar (Hungarian)
+                        option(value="ia") Interlingua
+                        option(value="id") Indonesia (Indonesian)
+                        option(value="it") Italiano (Italian)
+                        option(value="ja") 日本語 (Japanese)
+                        option(value="ko") 한국어 (Korean)
+                        option(value="lt") Lietuvių (Lithuanian)
+                        option(value="nb-NO") Norsk bokmål, Norge (Norwegian bokmål, Norway)
+                        option(value="nl") Nederlands (Dutch)
+                        option(value="nl-BE") Vlaams (Dutch, Belgium)
+                        option(value="oc") Occitan
+                        option(value="pl") Polski (Polish)
+                        option(value="pt") Português (Portuguese)
+                        option(value="pt-BR") Português, Brasil (Portuguese, Brazil)
+                        option(value="ro") Română (Romanian)
+                        option(value="ru") Русский (Russian)
+                        option(value="sk") Slovenčina (Slovak)
+                        option(value="sl") Slovenščina (Slovenian)
+                        option(value="sr") Српски (Serbian)
+                        option(value="sv") Svenska (Swedish)
+                        option(value="ta") தமிழ் (Tamil)
+                        option(value="te") తెలుగు (Telugu)
+                        option(value="tr") Türkçe (Turkish)
+                        option(value="uk") Українська (Ukrainian)
+                        option(value="vi") Tiếng việt (Vietnamese)
+                        option(value="zh-Hans-CN") 中文, 中国 (Chinese, China)
+                        option(value="zh-Hant-TW") 中文, 台灣 (Chinese, Taiwan)
+
+                .some-block.option-block
+                    h4(data-localise="") Theme
+                    select.theme
+                        option(value="simple") simple
+
+                .some-block.option-block
+                    h4(data-localise="") Theme style
+                    select.simple_style
+                        option(value="auto") auto
+                        option(value="light") light
+                        option(value="dark") dark
+
+                .some-block.option-block
+                    h4(data-localise="") Results on new tabs
+                    select.results_on_new_tab
+                        option(value="1") On
+                        option(value="0") Off
+
+                .some-block.option-block
+                    h4(data-localise="") Infinite scroll
+                    select.infinite_scroll
+                        option(value="1") On
+                        option(value="0") Off
+
+                .some-block.option-block
+                    h4(data-localise="") Search on category select
+                    input.search_on_category_select(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="") Vim-like hotkeys
+                    input.vim_hotkeys(type="checkbox")
+
+                hr
+
+                .some-block.option-block
+                    h2 Privacy 
+
+                .some-block.option-block
+                    h4(data-localise="") HTTP Method
+                    select.method
+                        option(value="POST") POST
+                        option(value="GET") GET
+
+                .some-block.option-block
+                    h4(data-localise="") Image proxy
+                    select.image_proxy
+                        option(value="1") Enabled
+                        option(value="0") Disabled
+
+                .some-block.option-block
+                    h4(data-localise="") Query in the page's title
+                    select.query_in_title
+                        option(value="1") Enabled
+                        option(value="") Disabled
+
+                .some-block.option-block
+                    h4(data-localise="") Tracker URL remover
+                    input.tracker_url_remover(type="checkbox")
+
+                hr
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://searxng.com')
+                +latency('searxng')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://searxng.onion')
+            .i2p
+                include ../../widgets/instances.pug
+                +instances('https://searxng.i2p')
+
+        #whoogle
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://whoogle.com')
+                +latency('whoogle')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://whoogle.onion')
+            .i2p
+                include ../../widgets/instances.pug
+                +instances('https://whoogle.i2p')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./search.js")
\ No newline at end of file
diff --git a/src/pages/options/sendTargets/sendTargets.pug b/src/pages/options/sendTargets/sendTargets.pug
new file mode 100644
index 00000000..3017fa87
--- /dev/null
+++ b/src/pages/options/sendTargets/sendTargets.pug
@@ -0,0 +1,33 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('sendTargets')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-sendTargets(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        #send
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://send.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://send.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./sendTargets.js")
\ No newline at end of file
diff --git a/src/pages/options/tiktok/tiktok.pug b/src/pages/options/tiktok/tiktok.pug
new file mode 100644
index 00000000..31ae18df
--- /dev/null
+++ b/src/pages/options/tiktok/tiktok.pug
@@ -0,0 +1,54 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('tiktok')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-tiktok(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        .some-block.option-block
+                h4(data-localise="__MSG_enableCustomSettings__") Enable Custom Settings (will use cookies)
+                input#enable-custom-settings(type="checkbox")
+        
+        #proxiTok
+            hr
+            .custom-settings
+                .some-block.option-block
+                    h2 General
+                .some-block.option-block
+                    h4(data-localise="__MSG_theme__") Theme
+                    select.theme
+                        option(value="default") Default
+                        option(value="card") Card
+
+                .some-block.option-block
+                    h2 Api
+                .some-block.option-block
+                    h4(data-localise="__MSG_legacyMode__") Legacy mode
+                    select.api-legacy
+                        option(value="on") On
+                        option(value="off") Off
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://proxitok.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://proxitok.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./tiktok.js")
diff --git a/src/pages/options/translate/translate.pug b/src/pages/options/translate/translate.pug
new file mode 100644
index 00000000..f6a192c4
--- /dev/null
+++ b/src/pages/options/translate/translate.pug
@@ -0,0 +1,70 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('translate')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-simplyTranslate(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_frontend__") Frontend
+            select#translate-frontend
+                option(value="simplyTranslate") SimplyTranslate
+                option(value="lingva") Lingva
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+
+        hr
+
+        #simplyTranslate
+            .some-block.option-block
+                h4(data-localise="__MSG_from__") From
+                select.from
+                    option(value="auto") Auto
+                    include ../../widgets/from-to.pug
+
+            .some-block.option-block
+                h4(data-localise="__MSG_to__") To
+                select.to
+                    include ../../widgets/from-to.pug
+
+            .some-block.option-block
+                h4(data-localise="__MSG_engine__") Engine
+                select.engine
+                    option(value="google") Google
+                    option(value="libre") Libre
+                    option(value="deepl") Deepl
+                    option(value="iciba") ICIBA
+                    option(value="reverso") Reverso
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://simplytranslate.org')
+                include ../../widgets/latency.pug
+                +latency('simplyTranslate')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('http://hxecvvetgrznmprg.onion')
+
+        #lingva 
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://lingvatranslate.com')
+                +latency('lingva')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('http://tyzxppdeoojdnaux.onion')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./translate.js")
diff --git a/src/pages/options/twitter/twitter.pug b/src/pages/options/twitter/twitter.pug
new file mode 100644
index 00000000..230aefd1
--- /dev/null
+++ b/src/pages/options/twitter/twitter.pug
@@ -0,0 +1,118 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title General
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('twitter')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-nitter(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+                option(value="i2p" data-localise="__MSG_i2p__") I2P
+
+        .some-block.option-block
+            h4(data-localise="__MSG_bypassTwitter__") Bypass "Open in Twitter"
+            input#bypass-watch-on-twitter(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_enableCustomNitter__") Enable Custom Settings (will use cookies)
+            input#enable-twitter-custom-settings(type="checkbox")
+
+        #nitter 
+            .custom-settings
+                .some-block.option-block
+                    h2 Display 
+                
+                .some-block.option-block
+                    h4(data-localise="__MSG_theme__") Theme
+                    select.theme
+                        option(value="Auto") Auto
+                        option(value="Auto (Twitter)") Auto (Twitter)
+                        option(value="Black") Black
+                        option(value="Mastodon") Mastodon
+                        option(value="Nitter") Nitter
+                        option(value="Pleroma") Pleroma
+                        option(value="Twitter") Twitter
+                        option(value="Twitter Dark") Twitter Dark
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_infiniteScroll__") Infinite scrolling (experimental, requires JavaScript)
+                    input.infiniteScroll(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_stickyProfile__") Make profile sidebar stick to top
+                    input.stickyProfile(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_bidiSupport__") Support bidirectional text (makes clicking on tweets harder)
+                    input.bidiSupport(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_hideTweetStats__") Hide tweet stats (replies, retweets, likes)
+                    input.hideTweetStats(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_hideBanner__") Hide profile banner
+                    input.hideBanner(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_hidePins__") Hide pinned tweets
+                    input.hidePins(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_hideReplies__") Hide tweet replies
+                    input.hideReplies(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_squareAvatars__") Square profile pictures
+                    input.squareAvatars(type="checkbox")
+
+                hr
+
+                .some-block.option-block
+                    h2 Media
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_mp4Playback__") Enable mp4 video playback (only for gifs)
+                    input.mp4Playback(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_hlsPlayback__") Enable hls video streaming (requires JavaScript)
+                    input.hlsPlayback(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_proxyVideos__") Proxy video streaming through the server (might be slow)
+                    input.proxyVideos(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_muteVideos__") Mute videos by default
+                    input.muteVideos(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_autoplayGifs__") Autoplay gifs
+                    input.autoplayGifs(type="checkbox")
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://nitter.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://nitter.onion')
+            .i2p
+                include ../../widgets/instances.pug
+                +instances('https://nitter.i2p')
+            
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./twitter.js")
diff --git a/src/pages/options/wikipedia/wikipedia.pug b/src/pages/options/wikipedia/wikipedia.pug
new file mode 100644
index 00000000..54ca8730
--- /dev/null
+++ b/src/pages/options/wikipedia/wikipedia.pug
@@ -0,0 +1,38 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title Wikipedia
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('wikipedia')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-wikipedia(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_protocol__") Protocol
+            select#protocol
+                option(value="normal" data-localise="__MSG_normal__") Normal
+                option(value="tor" data-localise="__MSG_tor__") Tor
+                option(value="i2p" data-localise="__MSG_i2p__") I2P
+
+        #wikiless
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://wikiless.com')
+                include ../../widgets/latency.pug
+                +latency()
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://wikiless.onion')
+
+            .i2p
+                include ../../widgets/instances.pug
+                +instances('https://wikiless.i2p')
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./wikipedia.js")
diff --git a/src/pages/options/youtube/youtube.pug b/src/pages/options/youtube/youtube.pug
new file mode 100644
index 00000000..be88aac8
--- /dev/null
+++ b/src/pages/options/youtube/youtube.pug
@@ -0,0 +1,730 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title Document
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('youtube')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-invidious(type="checkbox")
+
+        .some-block.option-block
+            h4(data-localise="__MSG_frontend__") Frontend
+            select#youtube-frontend
+                option(value="invidious") Invidious
+                option(value="piped") Piped
+                option(value="pipedMaterial") Piped-Material
+                option(value="freetube") FreeTube
+                option(value="yatte") Yattee
+
+        hr
+
+        #freetube-yatte
+            .some-block.option-block
+                h4(data-localise="__MSG_embeddedVids__") Embedded Videos Frontend
+                select#youtube-embed-frontend
+                    option(value="invidious") Invidious
+                    option(value="piped") Piped
+                    option(value="pipedMaterial") Piped-Material
+                    option(value="youtube") Youtube
+            hr
+
+        #invidious-piped-pipedMaterial
+            .some-block.option-block
+                h4(data-localise="__MSG_protocol__") Protocol
+                select#protocol
+                    option(value="normal" data-localise="__MSG_normal__") Normal
+                    option(value="tor" data-localise="__MSG_tor__") Tor
+
+            .some-block.option-block
+                h4(data-localise="__MSG_redirectType") Redirect Type
+                select#only-embed
+                    option(value="both" data-localise="__MSG_both__") both
+                    option(value="onlyEmbedded" data-localise="__MSG_onlyEmbedded__") Only Embedded
+                    option(value="onlyNotEmbedded" data-localise="__MSG_onlyNotEmbedded__") Only Not Embedded
+
+            .some-block.option-block
+                h4(data-localise="__MSG_bypassYoutube__") Bypass "Watch On YouTube"
+                input#bypass-watch-on-youtube(type="checkbox")
+
+            .some-block.option-block
+                h4(data-localise="__MSG_enableCustom__") Enable Custom Settings (will use cookies and localStorage)
+                input#enable-youtube-custom-settings(type="checkbox")
+
+        #invidious
+            .custom-settings
+                hr
+                .some-block.option-block
+                    h4(data-localise="__MSG_alwaysLoop__") Always loop
+                    input.video_loop(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_autoplayVid__") Autoplay Video
+                    input.youtubeAutoplay(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_playNext__") Play next by default
+                    input.continue(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_autoplayNext__") Autoplay next video
+                    input.continue_autoplay(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_alwaysProxy__") Always proxy videos
+                    input.local(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_listenByDefault__") Listen by default
+                    input.listen(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_defaultSpeed__") Default speed
+                    select.speed
+                        option 2.0
+                        option 1.75
+                        option 1.5
+                        option 1.25
+                        option 1.0
+                        option 0.75
+                        option 0.5
+                        option 0.25
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_prefQuality__") Preferred video quality
+                    select.quality
+                        option(value="hd720") 720p
+                        option(value="medium") 480p
+                        option(value="dash" data-localise="__MSG_dash__") DASH (adaptive quality)
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_prefDashQuality__") Preferred DASH video quality
+                    select.quality_dash
+                        option(value="auto" data-localise="__MSG_auto__") Auto
+                        option(value="best" data-localise="__MSG_best__") Best
+                        option(value="4320p") 4320p
+                        option(value="2160p") 2160p
+                        option(value="1440p") 1440p
+                        option(value="1080p") 1080p
+                        option(value="720p") 720p
+                        option(value="480p") 480p
+                        option(value="360p") 360p
+                        option(value="240p") 240p
+                        option(value="144p") 144p
+                        option(value="worst" data-localise="__MSG_worst__") Worst
+
+                .some-block.option-block
+                    h4
+                        x(data-localise="__MSG_volume__") Volume:
+                        span.volume-value --%
+                    input.volume(type="range" min="0" max="100" step="1")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_defaultComments__") Default comments
+                    select(class="comments[0]")
+                        option(value="" data-localise="__MSG_none__") none
+                        option(value="youtube") YouTube
+                        option(value="reddit") Reddit
+                .some-block.option-block
+                    h4 
+                    select(class="comments[1]")
+                        option(value="" data-localise="__MSG_none__") none
+                        option(value="youtube") YouTube
+                        option(value="reddit") Reddit
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_defaultCaptions__") Default captions
+                    select(class="captions[0]")
+                        include ../../widgets/captions_options.pug
+
+                .some-block.option-block
+                    h4
+                    select(class="captions[1]")
+                        include ../../widgets/captions_options.pug
+
+                .some-block.option-block
+                    h4
+                    select(class="captions[2]")
+                        include ../../widgets/captions_options.pug
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_showRelated__") Show related videos
+                    input.related_videos(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_showAnnotations__") Show annotations by default
+                    input.annotations(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_autoExtendDesc__") Automatically extend video description
+                    input.extend_desc(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_interactive360__") Interactive 360 degree videos (requires WebGL)
+                    input.vr_mode(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_savePlaybackPos__") Save playback position
+                    input.save_player_pos(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_region__") Select country
+                    select.region
+                        option(value="AE") AE
+                        option(value="AR") AR
+                        option(value="AT") AT
+                        option(value="AU") AU
+                        option(value="AZ") AZ
+                        option(value="BA") BA
+                        option(value="BD") BD
+                        option(value="BE") BE
+                        option(value="BG") BG
+                        option(value="BH") BH
+                        option(value="BO") BO
+                        option(value="BR") BR
+                        option(value="BY") BY
+                        option(value="CA") CA
+                        option(value="CH") CH
+                        option(value="CL") CL
+                        option(value="CO") CO
+                        option(value="CR") CR
+                        option(value="CY") CY
+                        option(value="CZ") CZ
+                        option(value="DE") DE
+                        option(value="DK") DK
+                        option(value="DO") DO
+                        option(value="DZ") DZ
+                        option(value="EC") EC
+                        option(value="EE") EE
+                        option(value="EG") EG
+                        option(value="ES") ES
+                        option(value="FI") FI
+                        option(value="FR") FR
+                        option(value="GB") GB
+                        option(value="GE") GE
+                        option(value="GH") GH
+                        option(value="GR") GR
+                        option(value="GT") GT
+                        option(value="HK") HK
+                        option(value="HN") HN
+                        option(value="HR") HR
+                        option(value="HU") HU
+                        option(value="ID") ID
+                        option(value="IE") IE
+                        option(value="IL") IL
+                        option(value="IN") IN
+                        option(value="IQ") IQ
+                        option(value="IS") IS
+                        option(value="IT") IT
+                        option(value="JM") JM
+                        option(value="JO") JO
+                        option(value="JP") JP
+                        option(value="KE") KE
+                        option(value="KR") KR
+                        option(value="KW") KW
+                        option(value="KZ") KZ
+                        option(value="LB") LB
+                        option(value="LI") LI
+                        option(value="LK") LK
+                        option(value="LT") LT
+                        option(value="LU") LU
+                        option(value="LV") LV
+                        option(value="LY") LY
+                        option(value="MA") MA
+                        option(value="ME") ME
+                        option(value="MK") MK
+                        option(value="MT") MT
+                        option(value="MX") MX
+                        option(value="MY") MY
+                        option(value="NG") NG
+                        option(value="NI") NI
+                        option(value="NL") NL
+                        option(value="NO") NO
+                        option(value="NP") NP
+                        option(value="NZ") NZ
+                        option(value="OM") OM
+                        option(value="PA") PA
+                        option(value="PE") PE
+                        option(value="PG") PG
+                        option(value="PH") PH
+                        option(value="PK") PK
+                        option(value="PL") PL
+                        option(value="PR") PR
+                        option(value="PT") PT
+                        option(value="PY") PY
+                        option(value="QA") QA
+                        option(value="RO") RO
+                        option(value="RS") RS
+                        option(value="RU") RU
+                        option(value="SA") SA
+                        option(value="SE") SE
+                        option(value="SG") SG
+                        option(value="SI") SI
+                        option(value="SK") SK
+                        option(value="SN") SN
+                        option(value="SV") SV
+                        option(value="TH") TH
+                        option(value="TN") TN
+                        option(value="TR") TR
+                        option(value="TW") TW
+                        option(value="TZ") TZ
+                        option(value="UA") UA
+                        option(value="UG") UG
+                        option(value="US") US
+                        option(value="UY") UY
+                        option(value="VE") VE
+                        option(value="VN") VN
+                        option(value="YE") YE
+                        option(value="ZA") ZA
+                        option(value="ZW") ZW
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_playerStyle__") Player Style
+                    select.player_style
+                        option(value="invidious" data-localise="__MSG_invidious__") Invidious
+                        option(value="youtube" data-localise="__MSG_youtube__") YouTube
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_theme__") Theme
+                    select.dark_mode
+                        option(value="") auto
+                        option(value="light") light
+                        option(value="dark") dark
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_thin_mode__") Thin mode
+                    input.thin_mode(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_default_home__") Default homepage
+                    select.default_home
+                        option(value="") Search
+                        option(value="Popular") Popular
+                        option(value="Trending") Trending
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_feedMenu__") Feed menu
+                    select(class="feed_menu[0]")
+                        option(value="") Search
+                        option(value="Popular") Popular
+                        option(value="Trending") Trending
+
+                    |&nbsp;
+
+                    select(class="feed_menu[1]")
+                        option(value="") Search
+                        option(value="Popular") Popular
+                        option(value="Trending") Trending
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://invidious.com')
+                include ../../widgets/latency.pug
+                +latency('invidious')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://invidious.onion')
+
+        #piped
+            hr
+            .custom-settings 
+                hr
+                .some-block.option-block
+                    h4
+                        x(data-localise="__MSG_volume__") Volume:
+                        span.volume-value --%
+                    input.volume(type="range" min="0" max="100" step="1")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_enableSponsorBlock__") Enable Sponsorblock
+                    input.sponsorblock(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipSponsors__") Skip Sponsors
+                    input.selectedSkip-sponsor(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipIntermission__") Skip Intermission/Intro Animation
+                    input.selectedSkip-intro(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skripEndcars__") Skip Endcards/Credits
+                    input.selectedSkip-outro(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skripPreview__") Skip Preview/Recap
+                    input.selectedSkip-preview(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipReminder__") Skip Interaction Reminder (Subscribe)
+                    input.selectedSkip-interaction(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipUnpaidPromo__") Skip Unpaid/Self Promotion(Subscribe)
+                    input.selectedSkip-selfpromo(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipMusic__") Skip Music: Non-Music Section(Subscribe)
+                    input.selectedSkip-music_offtopic(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipHighlight__") Skip Highlight(Subscribe)
+                    input.selectedSkip-poi_highlight(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipFiller__") Skip Filler Tangent
+                    input.selectedSkip-filler(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_theme__") Theme
+                    select.ddlTheme
+                        option(value="auto") Auto
+                        option(value="dark") Dark
+                        option(value="light") Light
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_autoplayVid__") Autoplay Video
+                    input.youtubeAutoplay(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_audioOnly__") Audio Only
+                    input.listen(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_defaultQuality__") Default Quality
+                    select.quality
+                        option(value="0") Auto
+                        option(value="144") 144p
+                        option(value="240") 240p
+                        option(value="360") 360p
+                        option(value="480") 480p
+                        option(value="720") 720p
+                        option(value="1080") 1080p
+                        option(value="1440") 1440p
+                        option(value="2160") 2160p
+                        option(value="4320") 4320p
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_bufferingGoal__") Buffering Goal (in seconds)
+                    input.bufferGoal(type="number" min="10")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_countrySelection__") Country Selection
+                    select.region
+                        option(value="AF") Afghanistan
+                        option(value="AL") Albania
+                        option(value="DZ") Algeria
+                        option(value="AD") Andorra
+                        option(value="AO") Angola
+                        option(value="AG") Antigua and Barbuda
+                        option(value="AR") Argentina
+                        option(value="AM") Armenia
+                        option(value="AU") Australia
+                        option(value="AT") Austria
+                        option(value="AZ") Azerbaijan
+                        option(value="BS") Bahamas
+                        option(value="BH") Bahrain
+                        option(value="BD") Bangladesh
+                        option(value="BB") Barbados
+                        option(value="BY") Belarus
+                        option(value="BE") Belgium
+                        option(value="BZ") Belize
+                        option(value="BJ") Benin
+                        option(value="BT") Bhutan
+                        option(value="BO") Bolivia (Plurinational State of)
+                        option(value="BA") Bosnia and Herzegovina
+                        option(value="BW") Botswana
+                        option(value="BR") Brazil
+                        option(value="BN") Brunei Darussalam
+                        option(value="BG") Bulgaria
+                        option(value="BF") Burkina Faso
+                        option(value="BI") Burundi
+                        option(value="CV") Cabo Verde
+                        option(value="KH") Cambodia
+                        option(value="CM") Cameroon
+                        option(value="CA") Canada
+                        option(value="CF") Central African Republic
+                        option(value="TD") Chad
+                        option(value="CL") Chile
+                        option(value="CN") China
+                        option(value="CO") Colombia
+                        option(value="KM") Comoros
+                        option(value="CG") Congo
+                        option(value="CD") Congo, Democratic Republic of the
+                        option(value="CR") Costa Rica
+                        option(value="CI") Côte d'Ivoire
+                        option(value="HR") Croatia
+                        option(value="CU") Cuba
+                        option(value="CY") Cyprus
+                        option(value="CZ") Czechia
+                        option(value="DK") Denmark
+                        option(value="DJ") Djibouti
+                        option(value="DM") Dominica
+                        option(value="DO") Dominican Republic
+                        option(value="EC") Ecuador
+                        option(value="EG") Egypt
+                        option(value="SV") El Salvador
+                        option(value="GQ") Equatorial Guinea
+                        option(value="ER") Eritrea
+                        option(value="EE") Estonia
+                        option(value="SZ") Eswatini
+                        option(value="ET") Ethiopia
+                        option(value="FJ") Fiji
+                        option(value="FI") Finland
+                        option(value="FR") France
+                        option(value="GA") Gabon
+                        option(value="GM") Gambia
+                        option(value="GE") Georgia
+                        option(value="DE") Germany
+                        option(value="GH") Ghana
+                        option(value="GR") Greece
+                        option(value="GD") Grenada
+                        option(value="GT") Guatemala
+                        option(value="GN") Guinea
+                        option(value="GW") Guinea-Bissau
+                        option(value="GY") Guyana
+                        option(value="HT") Haiti
+                        option(value="HN") Honduras
+                        option(value="HU") Hungary
+                        option(value="IS") Iceland
+                        option(value="IN") India
+                        option(value="ID") Indonesia
+                        option(value="IR") Iran (Islamic Republic of)
+                        option(value="IQ") Iraq
+                        option(value="IE") Ireland
+                        option(value="IL") Israel
+                        option(value="IT") Italy
+                        option(value="JM") Jamaica
+                        option(value="JP") Japan
+                        option(value="JO") Jordan
+                        option(value="KZ") Kazakhstan
+                        option(value="KE") Kenya
+                        option(value="KI") Kiribati
+                        option(value="KP") Korea (Democratic People's Republic of)
+                        option(value="KR") Korea, Republic of
+                        option(value="KW") Kuwait
+                        option(value="KG") Kyrgyzstan
+                        option(value="LA") Lao People's Democratic Republic
+                        option(value="LV") Latvia
+                        option(value="LB") Lebanon
+                        option(value="LS") Lesotho
+                        option(value="LR") Liberia
+                        option(value="LY") Libya
+                        option(value="LI") Liechtenstein
+                        option(value="LT") Lithuania
+                        option(value="LU") Luxembourg
+                        option(value="MG") Madagascar
+                        option(value="MW") Malawi
+                        option(value="MY") Malaysia
+                        option(value="MV") Maldives
+                        option(value="ML") Mali
+                        option(value="MT") Malta
+                        option(value="MH") Marshall Islands
+                        option(value="MR") Mauritania
+                        option(value="MU") Mauritius
+                        option(value="MX") Mexico
+                        option(value="FM") Micronesia (Federated States of)
+                        option(value="MD") Moldova, Republic of
+                        option(value="MC") Monaco
+                        option(value="MN") Mongolia
+                        option(value="ME") Montenegro
+                        option(value="MA") Morocco
+                        option(value="MZ") Mozambique
+                        option(value="MM") Myanmar
+                        option(value="NA") Namibia
+                        option(value="NR") Nauru
+                        option(value="NP") Nepal
+                        option(value="NL") Netherlands
+                        option(value="NZ") New Zealand
+                        option(value="NI") Nicaragua
+                        option(value="NE") Niger
+                        option(value="NG") Nigeria
+                        option(value="MK") North Macedonia
+                        option(value="NO") Norway
+                        option(value="OM") Oman
+                        option(value="PK") Pakistan
+                        option(value="PW") Palau
+                        option(value="PA") Panama
+                        option(value="PG") Papua New Guinea
+                        option(value="PY") Paraguay
+                        option(value="PE") Peru
+                        option(value="PH") Philippines
+                        option(value="PL") Poland
+                        option(value="PT") Portugal
+                        option(value="QA") Qatar
+                        option(value="RO") Romania
+                        option(value="RU") Russian Federation
+                        option(value="RW") Rwanda
+                        option(value="KN") Saint Kitts and Nevis
+                        option(value="LC") Saint Lucia
+                        option(value="VC") Saint Vincent and the Grenadines
+                        option(value="WS") Samoa
+                        option(value="SM") San Marino
+                        option(value="ST") Sao Tome and Principe
+                        option(value="SA") Saudi Arabia
+                        option(value="SN") Senegal
+                        option(value="RS") Serbia
+                        option(value="SC") Seychelles
+                        option(value="SL") Sierra Leone
+                        option(value="SG") Singapore
+                        option(value="SK") Slovakia
+                        option(value="SI") Slovenia
+                        option(value="SB") Solomon Islands
+                        option(value="SO") Somalia
+                        option(value="ZA") South Africa
+                        option(value="SS") South Sudan
+                        option(value="ES") Spain
+                        option(value="LK") Sri Lanka
+                        option(value="SD") Sudan
+                        option(value="SR") Suriname
+                        option(value="SE") Sweden
+                        option(value="CH") Switzerland
+                        option(value="SY") Syrian Arab Republic
+                        option(value="TJ") Tajikistan
+                        option(value="TZ") Tanzania, United Republic of
+                        option(value="TH") Thailand
+                        option(value="TL") Timor-Leste
+                        option(value="TG") Togo
+                        option(value="TO") Tonga
+                        option(value="TT") Trinidad and Tobago
+                        option(value="TN") Tunisia
+                        option(value="TR") Turkey
+                        option(value="TM") Turkmenistan
+                        option(value="TV") Tuvalu
+                        option(value="UG") Uganda
+                        option(value="UA") Ukraine
+                        option(value="AE") United Arab Emirates
+                        option(value="GB") United Kingdom of Great Britain and Northern Ireland
+                        option(value="US") United States of America
+                        option(value="UY") Uruguay
+                        option(value="UZ") Uzbekistan
+                        option(value="VU") Vanuatu
+                        option(value="VE") Venezuela (Bolivarian Republic of)
+                        option(value="VN") Viet Nam
+                        option(value="YE") Yemen
+                        option(value="ZM") Zambia
+                        option(value="ZW") Zimbabwe
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_defaultHomepage__") Default Homepage
+                    select.homepage
+                        option(value="trending" data-localise="__MSG_trending__") Trending
+                        option(value="feed" data-localise="__MSG_feed__") Feed
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_showComments__") Show Comments
+                    input.comments(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_minimizeDesc__") Minimize Description by default
+                    input.minimizeDescription(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_storeHistory__") Store Watch History
+                    input.watchHistory(type="checkbox")
+
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_enabledCodecs__") Enabled Codecs (Multiple)
+                    select.enabledCodecs
+                        option(value="av1") AV1
+                        option(value="vp9") VP9
+                        option(value="avc") AVC (h.264)
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_disableLBRY__") Disable LBRY for Streaming
+                    input.disableLBRY(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_enableProxyLBRY__") Enable Proxy for LBRY
+                    input.proxyLBRY(type="checkbox")
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://piped.com')
+                +latency('piped')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://piped.onion')
+
+        #pipedMaterial
+            hr
+            .custom-settings
+                .some-block.option-block
+                    h4(data-localise="__MSG_autoplayVid__") Autoplay Video
+                    input.youtubeAutoplay(type="checkbox")
+
+                .some-block.option-block
+                    h4
+                        x(data-localise="__MSG_volume__") Volume:
+                        span.volume-value --%
+                    input.volume(type="range" min="0" max="100" step="1")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_audioOnly__") Audio Only
+                    input.listen(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_disableLBRY__") Disable LBRY
+                    input.disableLBRY(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_proxyLBRY__") Proxy LBRY videos
+                    input.proxyLBRY(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_enableSponsorBlock__") Enable Sponsorblock
+                    input.sponsorblock(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipNote__") Skip to the last watched point when encountering a video already seen
+                    input.skipToLastPoint(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipSponsors__") Skip Sponsors
+                    input.selectedSkip-sponsor(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipIntermission__") Skip Intermission/Intro Animation
+                    input.selectedSkip-intro(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skripEndcars__") Skip Endcards/Credits
+                    input.selectedSkip-outro(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skripPreview__") Skip Preview/Recap
+                    input.selectedSkip-preview(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipReminder__") Skip Interaction Reminder (Subscribe)
+                    input.selectedSkip-interaction(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipUnpaidPromo__") Skip Unpaid/Self Promotion
+                    input.selectedSkip-selfpromo(type="checkbox")
+
+                .some-block.option-block
+                    h4(data-localise="__MSG_skipMusic__") Skip Music: Non-Music Section
+                    input.selectedSkip-music_offtopic(type="checkbox")
+
+                hr
+
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://piped-material.com')
+                +latency('pipedMaterial')
+            .tor
+                include ../../widgets/instances.pug
+                +instances('https://piped-material.onion')
+
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./youtube.js")
+    script(type="module" src="./invidious.js")
+    script(type="module" src="./piped.js")
+    script(type="module" src="./pipedMaterial.js")
diff --git a/src/pages/options/youtubeMusic/youtubeMusic.pug b/src/pages/options/youtubeMusic/youtubeMusic.pug
new file mode 100644
index 00000000..10d2deef
--- /dev/null
+++ b/src/pages/options/youtubeMusic/youtubeMusic.pug
@@ -0,0 +1,24 @@
+doctype html
+html(lang="en")
+    include ../../widgets/head.pug
+        title Document
+script(type="module" src="../../../assets/javascripts/localise.js")
+body.option(dir="auto")
+    include ../../widgets/links.pug
+    +links('youtubeMusic')
+
+    section.option-block
+        .some-block.option-block
+            h4(data-localise="__MSG_enable__") Enable
+            input#disable-beatbump(type="checkbox")
+
+        #beatbump
+            hr
+            .normal
+                include ../../widgets/instances.pug
+                +instances('https://beatbump.wewe')
+                include ../../widgets/latency.pug
+                +latency()
+
+    script(type="module" src="../init.js")
+    script(type="module" src="./youtubeMusic.js")
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index f6dab091..e3f52baf 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -104,7 +104,7 @@ document.getElementById("more-options").addEventListener("click",
 );
 
 function switchInstance() {
-  browser.tabs.query({ active: true, currentWindow: true }, function (tabs) {
+  browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
     let currTab = tabs[0];
     if (currTab) {
       let url = currTab.url;
@@ -113,29 +113,18 @@ function switchInstance() {
       catch (_) { return false; }
       let newUrl;
 
-      newUrl = youtubeHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = twitterHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = instagramHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = redditHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = searchHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = translateHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = mediumHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = sendTargetsHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = peertubeHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = lbryHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = imgurHelper.switchInstance(tabUrl);
-
-      if (!newUrl) newUrl = wikipediaHelper.switchInstance(tabUrl);
+      // newUrl = youtubeHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = twitterHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = instagramHelper.switchInstance(tabUrl);
+      if (!newUrl) newUrl = await redditHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = searchHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = translateHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = mediumHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = sendTargetsHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = peertubeHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = lbryHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = imgurHelper.switchInstance(tabUrl);
+      // if (!newUrl) newUrl = wikipediaHelper.switchInstance(tabUrl);
 
       if (newUrl) {
         browser.tabs.update({ url: newUrl });
diff --git a/src/pages/stylesheets/styles.css b/src/pages/stylesheets/styles.css
index 8b2718cd..c1c2a53f 100644
--- a/src/pages/stylesheets/styles.css
+++ b/src/pages/stylesheets/styles.css
@@ -444,4 +444,15 @@ section.general div {
 
 #customize-popup {
   width: 250px;
+}
+
+button {
+  background-color:transparent;
+  color: var(--text);
+  border: none;
+  padding: 10px 5px;
+  text-decoration: none;
+  display: inline-block;
+  cursor: pointer;
+  border-radius: 5px;
 }
\ No newline at end of file
diff --git a/src/pages/widgets/captions_options.pug b/src/pages/widgets/captions_options.pug
new file mode 100644
index 00000000..51d18d62
--- /dev/null
+++ b/src/pages/widgets/captions_options.pug
@@ -0,0 +1,130 @@
+option(value="" data-localise="__MSG_none__") none
+option(value="English") English
+option(value="English (auto-generated)") English (auto-generated)
+option(value="English (United Kingdom)") English (United Kingdom)
+option(value="English (United States)") English (United States)
+option(value="Afrikaans") Afrikaans
+option(value="Albanian") Albanian
+option(value="Amharic") Amharic
+option(value="Arabic") Arabic
+option(value="Armenian") Armenian
+option(value="Azerbaijani") Azerbaijani
+option(value="Bangla") Bangla
+option(value="Basque") Basque
+option(value="Belarusian") Belarusian
+option(value="Bosnian") Bosnian
+option(value="Bulgarian") Bulgarian
+option(value="Burmese") Burmese
+option(value="Cantonese (Hong Kong)") Cantonese (Hong Kong)
+option(value="Catalan") Catalan
+option(value="Cebuano") Cebuano
+option(value="Chinese") Chinese
+option(value="Chinese (China)") Chinese (China)
+option(value="Chinese (Hong Kong)") Chinese (Hong Kong)
+option(value="Chinese (Simplified)") Chinese (Simplified)
+option(value="Chinese (Taiwan)") Chinese (Taiwan)
+option(value="Chinese (Traditional)") Chinese (Traditional)
+option(value="Corsican") Corsican
+option(value="Croatian") Croatian
+option(value="Czech") Czech
+option(value="Danish") Danish
+option(value="Dutch") Dutch
+option(value="Dutch (auto-generated)") Dutch (auto-generated)
+option(value="Esperanto") Esperanto
+option(value="Estonian") Estonian
+option(value="Filipino") Filipino
+option(value="Finnish") Finnish
+option(value="French") French
+option(value="French (auto-generated)") French (auto-generated)
+option(value="Galician") Galician
+option(value="Georgian") Georgian
+option(value="German") German
+option(value="German (auto-generated)") German (auto-generated)
+option(value="Greek") Greek
+option(value="Gujarati") Gujarati
+option(value="Haitian Creole") Haitian Creole
+option(value="Hausa") Hausa
+option(value="Hawaiian") Hawaiian
+option(value="Hebrew") Hebrew
+option(value="Hindi") Hindi
+option(value="Hmong") Hmong
+option(value="Hungarian") Hungarian
+option(value="Icelandic") Icelandic
+option(value="Igbo") Igbo
+option(value="Indonesian") Indonesian
+option(value="Indonesian (auto-generated)") Indonesian (auto-generated)
+option(value="Interlingue") Interlingue
+option(value="Irish") Irish
+option(value="Italian") Italian
+option(value="Italian (auto-generated)") Italian (auto-generated)
+option(value="Japanese") Japanese
+option(value="Japanese (auto-generated)") Japanese (auto-generated)
+option(value="Javanese") Javanese
+option(value="Kannada") Kannada
+option(value="Kazakh") Kazakh
+option(value="Khmer") Khmer
+option(value="Korean") Korean
+option(value="Korean (auto-generated)") Korean (auto-generated)
+option(value="Kurdish") Kurdish
+option(value="Kyrgyz") Kyrgyz
+option(value="Lao") Lao
+option(value="Latin") Latin
+option(value="Latvian") Latvian
+option(value="Lithuanian") Lithuanian
+option(value="Luxembourgish") Luxembourgish
+option(value="Macedonian") Macedonian
+option(value="Malagasy") Malagasy
+option(value="Malay") Malay
+option(value="Malayalam") Malayalam
+option(value="Maltese") Maltese
+option(value="Maori") Maori
+option(value="Marathi") Marathi
+option(value="Mongolian") Mongolian
+option(value="Nepali") Nepali
+option(value="Norwegian Bokmål") Norwegian Bokmål
+option(value="Nyanja") Nyanja
+option(value="Pashto") Pashto
+option(value="Persian") Persian
+option(value="Polish") Polish
+option(value="Portuguese") Portuguese
+option(value="Portuguese (auto-generated)") Portuguese (auto-generated)
+option(value="Portuguese (Brazil)") Portuguese (Brazil)
+option(value="Punjabi") Punjabi
+option(value="Romanian") Romanian
+option(value="Russian") Russian
+option(value="Russian (auto-generated)") Russian (auto-generated)
+option(value="Samoan") Samoan
+option(value="Scottish Gaelic") Scottish Gaelic
+option(value="Serbian") Serbian
+option(value="Shona") Shona
+option(value="Sindhi") Sindhi
+option(value="Sinhala") Sinhala
+option(value="Slovak") Slovak
+option(value="Slovenian") Slovenian
+option(value="Somali") Somali
+option(value="Southern Sotho") Southern Sotho
+option(value="Spanish") Spanish
+option(value="Spanish (auto-generated)") Spanish (auto-generated)
+option(value="Spanish (Latin America)") Spanish (Latin America)
+option(value="Spanish (Mexico)") Spanish (Mexico)
+option(value="Spanish (Spain)") Spanish (Spain)
+option(value="Sundanese") Sundanese
+option(value="Swahili") Swahili
+option(value="Swedish") Swedish
+option(value="Tajik") Tajik
+option(value="Tamil") Tamil
+option(value="Telugu") Telugu
+option(value="Thai") Thai
+option(value="Turkish") Turkish
+option(value="Turkish (auto-generated)") Turkish (auto-generated)
+option(value="Ukrainian") Ukrainian
+option(value="Urdu") Urdu
+option(value="Uzbek") Uzbek
+option(value="Vietnamese") Vietnamese
+option(value="Vietnamese (auto-generated)") Vietnamese (auto-generated)
+option(value="Welsh") Welsh
+option(value="Western Frisian") Western Frisian
+option(value="Xhosa") Xhosa
+option(value="Yiddish") Yiddish
+option(value="Yoruba") Yoruba
+option(value="Zulu") Zulu
\ No newline at end of file
diff --git a/src/pages/widgets/from-to.pug b/src/pages/widgets/from-to.pug
new file mode 100644
index 00000000..9140e094
--- /dev/null
+++ b/src/pages/widgets/from-to.pug
@@ -0,0 +1,108 @@
+option(value="af") Afrikaans
+option(value="sq") Albanian
+option(value="am") Amharic
+option(value="ar") Arabic
+option(value="hy") Armenian
+option(value="az") Azerbaijani
+option(value="eu") Basque
+option(value="be") Belarusian
+option(value="bn") Bengali
+option(value="bs") Bosnian
+option(value="bg") Bulgarian
+option(value="ca") Catalan
+option(value="ceb") Cebuano
+option(value="ny") Chichewa
+option(value="zh-CN") Chinese
+option(value="co") Corsican
+option(value="hr") Croatian
+option(value="cs") Czech
+option(value="da") Danish
+option(value="nl") Dutch
+option(value="en") English
+option(value="eo") Esperanto
+option(value="et") Estonian
+option(value="tl") Filipino
+option(value="fi") Finnish
+option(value="fr") French
+option(value="fy") Frisian
+option(value="gl") Galician
+option(value="ka") Georgian
+option(value="de") German
+option(value="el") Greek
+option(value="gu") Gujarati
+option(value="ht") Haitian Creole
+option(value="ha") Hausa
+option(value="haw") Hawaiian
+option(value="iw") Hebrew
+option(value="hi") Hindi
+option(value="hmn") Hmong
+option(value="hu") Hungarian
+option(value="is") Icelandic
+option(value="ig") Igbo
+option(value="id") Indonesian
+option(value="ga") Irish
+option(value="it") Italian
+option(value="ja") Japanese
+option(value="jw") Javanese
+option(value="kn") Kannada
+option(value="kk") Kazakh
+option(value="km") Khmer
+option(value="rw") Kinyarwanda
+option(value="ko") Korean
+option(value="ku") Kurdish (Kurmanji)
+option(value="ky") Kyrgyz
+option(value="lo") Lao
+option(value="la") Latin
+option(value="lv") Latvian
+option(value="lt") Lithuanian
+option(value="lb") Luxembourgish
+option(value="mk") Macedonian
+option(value="mg") Malagasy
+option(value="ms") Malay
+option(value="ml") Malayalam
+option(value="mt") Maltese
+option(value="mi") Maori
+option(value="mr") Marathi
+option(value="mn") Mongolian
+option(value="my") Myanmar (Burmese)
+option(value="ne") Nepali
+option(value="no") Norwegian
+option(value="or") Odia (Oriya)
+option(value="ps") Pashto
+option(value="fa") Persian
+option(value="pl") Polish
+option(value="pt") Portuguese
+option(value="pa") Punjabi
+option(value="ro") Romanian
+option(value="ru") Russian
+option(value="sm") Samoan
+option(value="gd") Scots Gaelic
+option(value="sr") Serbian
+option(value="st") Sesotho
+option(value="sn") Shona
+option(value="sd") Sindhi
+option(value="si") Sinhala
+option(value="sk") Slovak
+option(value="sl") Slovenian
+option(value="so") Somali
+option(value="es") Spanish
+option(value="su") Sundanese
+option(value="sw") Swahili
+option(value="sv") Swedish
+option(value="tg") Tajik
+option(value="ta") Tamil
+option(value="tt") Tatar
+option(value="te") Telugu
+option(value="th") Thai
+option(value="tr") Turkish
+option(value="tk") Turkmen
+option(value="uk") Ukrainian
+option(value="ur") Urdu
+option(value="ug") Uyghur
+option(value="uz") Uzbek
+option(value="vi") Vietnamese
+option(value="cy") Welsh
+option(value="xh") Xhosa
+option(value="yi") Yiddish
+option(value="yo") Yoruba
+option(value="zu") Zulu
\ No newline at end of file
diff --git a/src/pages/widgets/head.pug b/src/pages/widgets/head.pug
new file mode 100644
index 00000000..53de42d3
--- /dev/null
+++ b/src/pages/widgets/head.pug
@@ -0,0 +1,5 @@
+head
+    meta(charset='utf-8')
+    meta(name="viewport" content="width=device-width, initial-scale=1")
+    link(rel="icon" type="image/x-icon" href="../../../assets/images/libredirect.svg")
+    link(href="../../stylesheets/styles.css" rel="stylesheet")
\ No newline at end of file
diff --git a/src/pages/widgets/instances.pug b/src/pages/widgets/instances.pug
new file mode 100644
index 00000000..950bd46b
--- /dev/null
+++ b/src/pages/widgets/instances.pug
@@ -0,0 +1,15 @@
+mixin instances(myPlaceholder)
+    .some-block.option-block
+        h4(data-localise="__MSG_defaultInstances__") Default Instances
+
+    .checklist
+    hr
+    .some-block.option-block
+        h4(data-localise="__MSG_customInstances__") Custom Instances
+    form.custom-instance-form
+        .some-block.option-block
+            input.custom-instance(placeholder=myPlaceholder type="url")
+            button.add.add-instance(type="submit")
+                svg(xmlns="https://www.w3.org/2000/svg" height="20px" viewBox="0 0 24 24" width="20px" fill="currentColor")
+                    path(d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z")
+    .checklist.custom-checklist
\ No newline at end of file
diff --git a/src/pages/widgets/latency.pug b/src/pages/widgets/latency.pug
new file mode 100644
index 00000000..0069ca74
--- /dev/null
+++ b/src/pages/widgets/latency.pug
@@ -0,0 +1,13 @@
+mixin latency(service)
+    - var latencyVal
+    if (service)
+        - latencyVal = `latency-${service}`
+    else
+        - latencyVal = `latency`
+
+    label.button.button-inline(id=`${latencyVal}-label` for=latencyVal) 
+        svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+            path(d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z")
+        |&nbsp;
+        x(data-localise="__MSG_testInstancesLatency__") Test Instances Latency
+    input.button.button-inline(id=latencyVal style="display:none;")
\ No newline at end of file
diff --git a/src/pages/widgets/links.pug b/src/pages/widgets/links.pug
new file mode 100644
index 00000000..8daf48ba
--- /dev/null
+++ b/src/pages/widgets/links.pug
@@ -0,0 +1,76 @@
+mixin links(service)
+    section.links
+        .title
+            svg(xmlns="http://www.w3.org/2000/svg"
+                enable-background="new 0 0 24 24"
+                height="26px" viewBox="0 0 24 24"
+                width="26px" fill="currentColor")
+                path(d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z")
+            a(href="../general/general.html" data-localise="__MSG_general__" class=service == "general" ? "selected" : "") General
+
+        .title 
+            img(src="../../../assets/images/youtube-icon.png")
+            a(href="../youtube/youtube.html" data-localise="__MSG_youtube__" class=service == "youtube" ? "selected" : "") YouTube 
+
+        .title 
+            img(src="../../../assets/images/youtube-music-icon.png")
+            a(href="../youtubeMusic/youtubeMusic.html" data-localise="__MSG_ytmusic__" class=service == "youtubeMusic" ? "selected" : "") YT Music
+
+        .title 
+            img(src="../../../assets/images/twitter-icon.png")
+            a(href="../twitter/twitter.html" class=service == "twitter" ? "selected" : "" data-localise="__MSG_twitter__") Twitter
+
+        .title 
+            img(src="../../../assets/images/instagram-icon.png")
+            a(href="../instagram/instagram.html" data-localise="__MSG_instagram__" class=service == "instagram" ? "selected" : "") Instagram
+
+        .title 
+            img(src="../../../assets/images/tiktok-icon.png")
+            a(href="../tiktok/tiktok.html" data-localise="__MSG_tiktok__" class=service == "tiktok" ? "selected" : "") TikTok
+
+        .title 
+            img(src="../../../assets/images/reddit-icon.png")
+            a(href="../reddit/reddit.html" data-localise="__MSG_reddit__" class=service == "reddit" ? "selected" : "") Reddit
+
+        .title 
+            img(src="../../../assets/images/imgur-icon.png")
+            a(href="../imgur/imgur.html" data-localise="__MSG_imgur__" class=service == "imgur" ? "selected" : "") Imgur
+
+        .title 
+            img(src="../../../assets/images/wikipedia-icon.svg")
+            a(href="../wikipedia/wikipedia.html" data-localise="__MSG_wikipedia__" class=service == "wikipedia" ? "selected" : "") Wikipedia
+
+        .title 
+            svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1770 1000" fill="currentColor")
+                circle(cx="500" cy="500" r="500")
+                ellipse(ry="475" rx="250" cy="501" cx="1296")
+                ellipse(cx="1682" cy="502" rx="88" ry="424")
+            a(href="../medium/medium.html" data-localise="__MSG_medium__" class=service == "medium" ? "selected" : "") Medium
+
+        .title 
+            img(src="../../../assets/images/peertube-icon.svg")
+            a(href="../peertube/peertube.html" data-localise="__MSG_peertube__" class=service == "peertube" ? "selected" : "") Peertube
+
+        .title 
+            img(src="../../../assets/images/lbry-icon.png")
+            a(href="../lbry/lbry.html" data-localise="__MSG_lbry__" class=service == "lbry" ? "selected" : "") LBRY/Odysee
+
+        .title 
+            svg(xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor")
+                path(d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z")
+            a(href="../search/search.html" data-localise="__MSG_search__" class=service == "search" ? "selected" : "") Search
+
+        .title 
+            svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                path(d="M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z")
+            a(href="../translate/translate.html" data-localise="__MSG_translate__" class=service == "translate" ? "selected" : "") Translate
+
+        .title 
+            svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                path(d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z")
+            a(href="../maps/maps.html" data-localise="__MSG_maps__" class=service == "maps" ? "selected" : "") Maps
+
+        .title 
+            svg(xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor")
+                path(d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z")
+            a(href="../sendTargets/sendTargets.html" data-localise="__MSG_sendFiles__" class=service == "sendTargets" ? "selected" : "") Send Files
\ No newline at end of file