dotfiles/qutebrowser/redirects.py

85 lines
2.6 KiB
Python

from qutebrowser.api import interceptor
from urllib.parse import urljoin
from PyQt6.QtCore import QUrl
import operator
o = operator.methodcaller
s = 'setHost'
i = interceptor
def farside(url: QUrl, i) -> bool:
url.setHost('farside.link')
p = url.path().strip('/')
url.setPath(urljoin(i, p))
return True
def nitter(url: QUrl) -> bool:
return farside(url, '/nitter/')
def rimgo(url: QUrl) -> bool:
return farside(url, '/rimgo/')
def scribe(url: QUrl) -> bool:
return farside(url, '/scribe/')
def invid(url: QUrl) -> bool:
return farside(url, '/invidious/')
def reddit(url: QUrl) -> bool:
return farside(url, '/libreddit/')
def bibliogram(url: QUrl) -> bool:
return farside(url, '/bibliogram/')
def simplytranslate(url: QUrl) -> bool:
return farside(url, '/simplytranslate/')
def proxitok(url: QUrl) -> bool:
return farside(url, '/proxitok/')
def querte (url: QUrl) -> bool:
return farside(url, '/querte/')
def breezewiki (url: QUrl) -> bool:
return farside(url, '/breezewiki/')
def dumb (url: QUrl) -> bool:
return farside(url, '/dumb/')
def anonymousoverflow (url: QUrl) -> bool:
return farside(url, '/anonymousoverflow/')
map = {
"reddit.com": reddit,
"www.reddit.com": reddit,
"old.reddit.com": reddit,
"youtu.be": invid,
"youtube.com": invid,
"www.youtube.com": invid,
"music.youtube.com": invid,
"twitter.com": nitter,
"mobile.twitter.com": nitter,
"x.com": nitter,
"imgur.com" : rimgo,
"medium.com" : scribe,
"www.instagram.com": bibliogram,
"translate.google.com" : simplytranslate,
"vm.tiktok.com" : proxitok,
"www.tiktok.com" : proxitok,
"www.quora.com": querte,
"fandom.com": breezewiki,
"www.fandom.com": breezewiki,
"genius.com" : dumb,
"stackoverflow.com" : anonymousoverflow,
"www.twitch.tv" : o(s, 'twineo.deno.dev'),
"discord.com" : o(s, 'canary.discord.com'),
"tumblr.com" : o(s, 'tumblash.fly.dev'),
"www.tumblr.com" : o(s, 'tumblash.fly.dev'),
"www.npr.org" : o(s, 'text.npr.org'),
"www.goodreads.com" : o(s, 'bl.vern.cc'),
"zelda.fandom.com" : o(s, 'zeldawiki.wiki'),
"news.ycombinator.com" : o(s, 'news.workers.tools')
}
def f(info: i.Request):
if (info.resource_type != i.ResourceType.main_frame or
info.request_url.scheme() in {"data", "blob"}):
return
url = info.request_url
redir = map.get(url.host())
if redir is not None and redir(url) is not False:
info.redirect(url)
i.register(f)