# Based on the redirect scripts from here: # - https://github.com/Phantop/dotfiles/blob/9f6256820dbb99cdf5afd373b74d93fe8b8972d7/qutebrowser/include/redirects.py # - https://gitlab.com/jgkamat/dotfiles/-/blob/0e5f05d347079a9839cb2c7878fd81d9850928ce/qutebrowser/.config/qutebrowser/pyconfig/redirectors.py from qutebrowser.api import interceptor, message import operator import typing from PyQt6.QtCore import QUrl def get_host(url: QUrl, base: bool = False) -> str: host = url.host() if base: # www.someSite.com -> someSite.com return ".".join(host.split(".")[-2:]) else: return host def partial(func, *part_args): def wrapper(*extra_args): return func(*part_args, *extra_args) return wrapper def farside_redir(target: str, url: QUrl) -> bool: url.setHost("farside.link") url.setPath("/" + target + url.path()) return True # Any return value other than a literal 'False' means we redirect REDIRECT_MAP: typing.Dict[str, typing.Callable[..., typing.Optional[bool]]] = { "reddit.com": operator.methodcaller("setHost", "redlib.vhack.eu"), # Source: https://libredirect.github.io/ "medium.com": partial(farside_redir, "scribe"), "stackoverflow.com": partial(farside_redir, "anonymousoverflow"), "goodreads.com": partial(farside_redir, "biblioreads"), } def rewrite(info: interceptor.Request): if ( info.resource_type != interceptor.ResourceType.main_frame or info.request_url.scheme() in {"data", "blob"} ): return url = info.request_url redir = REDIRECT_MAP.get(get_host(url, base=False)) if redir is None: # Try again, but now only with the base host. redir = REDIRECT_MAP.get(get_host(url, base=True)) if redir is not None and redir(url) is not False: message.info("Redirecting to " + url.toString()) info.redirect(url) interceptor.register(rewrite)