qutebrowser: Add proxying support for websites
Added automatic proxying to floss alternative frontends for proprietary websites like reddit (teddit), youtube (invidious), twitter (nitter), and instagram (bibliogram). Often does not work on calling cached websites, meaning when it does not load the correct page a full reload (shift-R) should call up the correct frontend on first use of a previously visited page. Squashed commit of the following: commit ccf5a9f9a001c466e4fe00763f561d09a598bd70 Author: Marty Oehme <marty.oehme@gmail.com> Date: Wed Jul 28 10:05:37 2021 +0200 qutebrowser: Add LocalLeader key concept Added differentiation between leader mappings and local leader mappings, with a similar idea to vim: leader mappings enact changes within qutebrowser on a more general level (currently e.g. changing tab display, javascript switch, stylesheet setting) while local leader mappings enact changes or interact with the current page context (e.g. start mpv stream, display in readability mode, download pdf version of page, and so on). This will be hard for my muscle memory, but I think such a switch benefits logical action separation in the long run, especially in case I add more action shortcuts over time. An interesting thing this separation also allows is a more buffer-specific action repertoire (for example through recognition of current page context with interceptors) so specific pages contain different actions. commit afbe573d527b70fa57d643ede78cd5e71f3ca4c1 Author: Marty Oehme <marty.oehme@gmail.com> Date: Tue Jul 27 16:00:37 2021 +0200 qutebrowser: Rename key mapping file Renamed from `keys.py` to `maps.py` to keep some coherence with nvim naming scheme. commit cc78cbb67953bba7ab4d5a6dd48dfa50fbcfe2fc Author: Marty Oehme <marty.oehme@gmail.com> Date: Tue Jul 27 10:19:34 2021 +0200 qutebrowser: Add reddit redirection Added redirection to old.reddit whenever a link on reddit is opened. Added redirection of youtube links to yewtu.be invidious instance.
This commit is contained in:
parent
496522605f
commit
62f680ecd3
6 changed files with 67 additions and 30 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -24,6 +24,8 @@ sponsorblock.txt
|
||||||
/qutebrowser/.config/qutebrowser/qsettings
|
/qutebrowser/.config/qutebrowser/qsettings
|
||||||
/qutebrowser/.config/qutebrowser/bookmarks
|
/qutebrowser/.config/qutebrowser/bookmarks
|
||||||
/qutebrowser/.config/qutebrowser/stylesheets
|
/qutebrowser/.config/qutebrowser/stylesheets
|
||||||
|
# ignore the generated readability file for webpages
|
||||||
|
readability.html
|
||||||
|
|
||||||
# ignore vifm & ueberzug utility files
|
# ignore vifm & ueberzug utility files
|
||||||
vifm-help.txt
|
vifm-help.txt
|
||||||
|
|
|
@ -101,3 +101,4 @@ indices
|
||||||
Anthropocene
|
Anthropocene
|
||||||
ecotourism
|
ecotourism
|
||||||
legitimation
|
legitimation
|
||||||
|
wellbeing
|
||||||
|
|
|
@ -41,7 +41,7 @@ c.downloads.location.directory = os.getenv("XDG_DOWNLOAD_DIR", "~/downloads")
|
||||||
c.downloads.location.prompt = False
|
c.downloads.location.prompt = False
|
||||||
|
|
||||||
config.source("alias.py")
|
config.source("alias.py")
|
||||||
config.source("keys.py")
|
config.source("maps.py")
|
||||||
config.source("content.py")
|
config.source("content.py")
|
||||||
config.source("url.py")
|
config.source("url.py")
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ c.content.blocking.hosts.lists = [
|
||||||
]
|
]
|
||||||
c.content.blocking.whitelist = ["piwik.org"]
|
c.content.blocking.whitelist = ["piwik.org"]
|
||||||
c.content.autoplay = False
|
c.content.autoplay = False
|
||||||
|
c.content.prefers_reduced_motion = True
|
||||||
c.content.pdfjs = False
|
c.content.pdfjs = False
|
||||||
c.content.javascript.enabled = False
|
c.content.javascript.enabled = False
|
||||||
js_whitelist = [
|
js_whitelist = [
|
||||||
|
@ -19,7 +20,6 @@ js_whitelist = [
|
||||||
"*://127.0.0.1/*",
|
"*://127.0.0.1/*",
|
||||||
"*://asciinema.org/*",
|
"*://asciinema.org/*",
|
||||||
"*://calendar.google.com/*",
|
"*://calendar.google.com/*",
|
||||||
"*://clockify.me/tracker*",
|
|
||||||
"*://darksky.net/*",
|
"*://darksky.net/*",
|
||||||
"*://deepl.com/*",
|
"*://deepl.com/*",
|
||||||
"*://duckduckgo.com/*",
|
"*://duckduckgo.com/*",
|
||||||
|
@ -32,8 +32,6 @@ js_whitelist = [
|
||||||
"*://*.martyoeh.me/*",
|
"*://*.martyoeh.me/*",
|
||||||
"*://news.ycombinator.com/*",
|
"*://news.ycombinator.com/*",
|
||||||
"*://old.reddit.com/*",
|
"*://old.reddit.com/*",
|
||||||
"*://todoist.com/*",
|
|
||||||
"*://toggl.com/*",
|
|
||||||
"*://translate.google.com/*",
|
"*://translate.google.com/*",
|
||||||
"chrome://*/*",
|
"chrome://*/*",
|
||||||
"file://*",
|
"file://*",
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
# Key mappings
|
# Key mappings
|
||||||
# 'Leader' key binding
|
# 'Leader' key binding -- for general personal maps
|
||||||
leader = "<Space>"
|
leader = "<Space>"
|
||||||
|
# 'LocalLeader' key binding -- intended for 'in-page' personal maps
|
||||||
|
lleader = ","
|
||||||
|
|
||||||
## CHANGED DEFAULTS
|
## CHANGED DEFAULTS
|
||||||
|
|
||||||
|
@ -24,18 +26,19 @@ config.bind(leader + "tV", "set tabs.position left")
|
||||||
|
|
||||||
# [M]edia shortcuts - watch, queue, download media
|
# [M]edia shortcuts - watch, queue, download media
|
||||||
# bind mpv to play the current page/links, using a single instance which queues the next link passed
|
# bind mpv to play the current page/links, using a single instance which queues the next link passed
|
||||||
config.bind(leader + "M", "spawn umpv {url}")
|
config.bind(lleader + "M", "spawn umpv {url}")
|
||||||
config.bind(leader + "m", "hint links spawn umpv {hint-url}")
|
config.bind(lleader + "m", "hint links spawn umpv {hint-url}")
|
||||||
|
|
||||||
# bind youtube-dl to download the current page/links
|
# bind youtube-dl to download the current page/links
|
||||||
config.bind(leader + "dM", "spawn vidl {url}")
|
config.bind(lleader + "dM", "spawn vidl {url}")
|
||||||
config.bind(
|
config.bind(
|
||||||
leader + "dm",
|
lleader + "dm",
|
||||||
"hint --rapid links spawn vidl {hint-url}",
|
"hint --rapid links spawn vidl {hint-url}",
|
||||||
)
|
)
|
||||||
|
|
||||||
# Download shortcuts
|
# Download shortcuts
|
||||||
config.bind(leader + "dd", "download", mode="normal")
|
config.bind(lleader + "dd", "download", mode="normal")
|
||||||
config.bind(leader + "dp", "save_to_pdf", mode="normal")
|
config.bind(lleader + "dp", "save_to_pdf", mode="normal")
|
||||||
|
|
||||||
# open last download
|
# open last download
|
||||||
config.bind("gD", "spawn --userscript open_download")
|
config.bind("gD", "spawn --userscript open_download")
|
||||||
|
|
||||||
|
@ -45,12 +48,12 @@ config.bind('"s', "add-shaarli", mode="normal")
|
||||||
config.bind('"a', "send-to-archive", mode="normal")
|
config.bind('"a', "send-to-archive", mode="normal")
|
||||||
config.bind('"o', "send-to-outline", mode="normal")
|
config.bind('"o', "send-to-outline", mode="normal")
|
||||||
|
|
||||||
config.bind('"g', "translate-page-google", mode="normal")
|
config.bind('"t', "translate-page-google", mode="normal")
|
||||||
config.bind('"G', "translate-selection-google", mode="normal")
|
config.bind('"T', "translate-selection-google", mode="normal")
|
||||||
|
|
||||||
config.bind('"q', "show-qr")
|
config.bind('"q', "show-qr")
|
||||||
|
|
||||||
config.bind(leader + "r", "spawn --userscript readability")
|
config.bind(lleader + "r", "spawn --userscript readability")
|
||||||
|
|
||||||
# set stylesheets for the browser to use
|
# set stylesheets for the browser to use
|
||||||
config.bind(
|
config.bind(
|
|
@ -1,26 +1,59 @@
|
||||||
|
from qutebrowser.api import interceptor, message
|
||||||
|
|
||||||
c.url.searchengines = {
|
c.url.searchengines = {
|
||||||
|
"#sci": "https://sci-hub.do/{}",
|
||||||
"DEFAULT": "https://search.martyoeh.me/?q={}",
|
"DEFAULT": "https://search.martyoeh.me/?q={}",
|
||||||
"l": "https://links.martyoeh.me/?searchterm={}&searchtags=",
|
"al": "https://wiki.archlinux.org/index.php/{}",
|
||||||
"ddg": "https://duckduckgo.com/?q={}",
|
"alt": "https://alternativeto.net/software/{}/?license=opensource",
|
||||||
|
"aur": "https://aur.archlinux.org/packages/?K={}",
|
||||||
"d": "https://www.dict.cc/?s={}",
|
"d": "https://www.dict.cc/?s={}",
|
||||||
"t": "https://www.thesaurus.com/browse/{}",
|
"ddg": "https://duckduckgo.com/?q={}",
|
||||||
"gt": "https://translate.google.com/#auto/de/{}",
|
|
||||||
"dt": "https://www.deepl.com/translator#en/de/{}",
|
"dt": "https://www.deepl.com/translator#en/de/{}",
|
||||||
"g": "https://www.google.com/search?q={}",
|
"g": "https://www.google.com/search?q={}",
|
||||||
"r": "https://old.reddit.com/r/{}",
|
|
||||||
"w": "https://en.wikipedia.org/w/index.php?search={}",
|
|
||||||
"gh": "https://github.com/search?q={}",
|
"gh": "https://github.com/search?q={}",
|
||||||
"al": "https://wiki.archlinux.org/index.php/{}",
|
|
||||||
"aur": "https://aur.archlinux.org/packages/?K={}",
|
|
||||||
"yt": "https://www.youtube.com/results?search_query={}",
|
|
||||||
"maps": "https://www.google.fr/maps?q={}",
|
|
||||||
"gol": "https://golang.org/pkg/{}/",
|
"gol": "https://golang.org/pkg/{}/",
|
||||||
"man": "https://manned.org/browse/search?q={}",
|
"gt": "https://translate.google.com/#auto/de/{}",
|
||||||
"lib": "http://libgen.fun/search.php?req={}",
|
|
||||||
"#sci": "https://sci-hub.do/{}",
|
|
||||||
"alt": "https://alternativeto.net/software/{}/?license=opensource",
|
|
||||||
"hn": "https://hn.algolia.com/?q={}",
|
"hn": "https://hn.algolia.com/?q={}",
|
||||||
"kb": "https://soeg.kb.dk/discovery/search?query=any,contains,{}&tab=Everything&search_scope=MyInst_and_CI&vid=45KBDK_KGL:KGL&offset=0&lang=en",
|
"kb": "https://soeg.kb.dk/discovery/search?query=any,contains,{}&lang=en",
|
||||||
|
"l": "https://links.martyoeh.me/?searchterm={}&searchtags=",
|
||||||
|
"lib": "http://libgen.fun/search.php?req={}",
|
||||||
|
"man": "https://manned.org/browse/search?q={}",
|
||||||
|
"maps": "https://www.google.fr/maps?q={}",
|
||||||
|
"r": "https://www.reddit.com/r/{}",
|
||||||
|
"t": "https://www.thesaurus.com/browse/{}",
|
||||||
|
"w": "https://en.wikipedia.org/w/index.php?search={}",
|
||||||
|
"yt": "https://www.youtube.com/results?search_query={}",
|
||||||
}
|
}
|
||||||
c.url.default_page = "https://start.duckduckgo.com"
|
c.url.default_page = "https://start.duckduckgo.com"
|
||||||
c.url.start_pages = ["https://start.duckduckgo.com"]
|
c.url.start_pages = ["https://start.duckduckgo.com"]
|
||||||
|
|
||||||
|
redirects = {
|
||||||
|
"reddit.com": "teddit.net",
|
||||||
|
"www.reddit.com": "teddit.net",
|
||||||
|
"youtube.com": "yewtu.be",
|
||||||
|
"www.youtube.com": "www.yewtu.be",
|
||||||
|
"twitter.com": "nitter.net",
|
||||||
|
"www.twitter.com": "nitter.net",
|
||||||
|
"instagram.com": "bibliogram.art",
|
||||||
|
"www.instagram.com": "bibliogram.art",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def rewrite(request: interceptor.Request):
|
||||||
|
if (
|
||||||
|
request.resource_type != interceptor.ResourceType.main_frame
|
||||||
|
or request.request_url.scheme() in {"data", "blob"}
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
|
url = request.request_url
|
||||||
|
|
||||||
|
redir = redirects.get(url.host())
|
||||||
|
if redir is not None and url.setHost(redir) is not False:
|
||||||
|
try:
|
||||||
|
request.redirect(url)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
interceptor.register(rewrite)
|
||||||
|
|
Loading…
Reference in a new issue