aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qutebrowser/config.py13
-rw-r--r--qutebrowser/dracula/INSTALL.md31
-rw-r--r--qutebrowser/dracula/__init__.py0
-rw-r--r--qutebrowser/dracula/__pycache__/__init__.cpython-39.pycbin0 -> 142 bytes
-rw-r--r--qutebrowser/dracula/__pycache__/draw.cpython-39.pycbin0 -> 2709 bytes
-rw-r--r--qutebrowser/dracula/draw.py291
-rw-r--r--qutebrowser/redirects.py180
7 files changed, 515 insertions, 0 deletions
diff --git a/qutebrowser/config.py b/qutebrowser/config.py
new file mode 100644
index 0000000..c940ce2
--- /dev/null
+++ b/qutebrowser/config.py
@@ -0,0 +1,13 @@
+import dracula.draw
+
+# Load existing settings made via :set
+config.load_autoconfig()
+config.source("redirects.py")
+
+
+dracula.draw.blood(c, {
+ 'spacing': {
+ 'vertical': 6,
+ 'horizontal': 8
+ }
+})
diff --git a/qutebrowser/dracula/INSTALL.md b/qutebrowser/dracula/INSTALL.md
new file mode 100644
index 0000000..7c61e78
--- /dev/null
+++ b/qutebrowser/dracula/INSTALL.md
@@ -0,0 +1,31 @@
+### [qutebrowser](https://www.qutebrowser.org/)
+
+#### Install using Git
+
+If you are a git user, you can install the theme and keep up to date by cloning the repo:
+
+ $ git clone https://github.com/dracula/qutebrowser-dracula-theme.git dracula
+
+#### Install manually
+
+Download using the [GitHub .zip download](https://github.com/dracula/qutebrowser.git) option and unzip.
+
+#### Activating theme
+
+- Find your *[qutebrowser configuration directory](https://www.qutebrowser.org/doc/help/configuring.html#configpy)* (see e.g. `:version` in qutebrowser). This folder should be located at the "config" location listed on qute://version, which is typically ~/.config/qutebrowser/ on Linux, ~/.qutebrowser/ on macOS, and %APPDATA%/qutebrowser/config/ on Windows.
+- Move the repository folder to `dracula` inside the configuration directory.
+- In your [qutebrowser config.py file](https://www.qutebrowser.org/doc/help/configuring.html#configpy), include the following:
+
+```python
+import dracula.draw
+
+# Load existing settings made via :set
+config.load_autoconfig()
+
+dracula.draw.blood(c, {
+ 'spacing': {
+ 'vertical': 6,
+ 'horizontal': 8
+ }
+})
+```
diff --git a/qutebrowser/dracula/__init__.py b/qutebrowser/dracula/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/qutebrowser/dracula/__init__.py
diff --git a/qutebrowser/dracula/__pycache__/__init__.cpython-39.pyc b/qutebrowser/dracula/__pycache__/__init__.cpython-39.pyc
new file mode 100644
index 0000000..8c626a4
--- /dev/null
+++ b/qutebrowser/dracula/__pycache__/__init__.cpython-39.pyc
Binary files differ
diff --git a/qutebrowser/dracula/__pycache__/draw.cpython-39.pyc b/qutebrowser/dracula/__pycache__/draw.cpython-39.pyc
new file mode 100644
index 0000000..1267675
--- /dev/null
+++ b/qutebrowser/dracula/__pycache__/draw.cpython-39.pyc
Binary files differ
diff --git a/qutebrowser/dracula/draw.py b/qutebrowser/dracula/draw.py
new file mode 100644
index 0000000..a1079a0
--- /dev/null
+++ b/qutebrowser/dracula/draw.py
@@ -0,0 +1,291 @@
+def blood(c, options = {}):
+ palette = {
+ 'background': '#282a36',
+ 'background-alt': '#282a36',
+ 'background-attention': '#181920',
+ 'border': '#282a36',
+ 'current-line': '#44475a',
+ 'selection': '#44475a',
+ 'foreground': '#f8f8f2',
+ 'foreground-alt': '#e0e0e0',
+ 'foreground-attention': '#ffffff',
+ 'comment': '#6272a4',
+ 'cyan': '#8be9fd',
+ 'green': '#50fa7b',
+ 'orange': '#ffb86c',
+ 'pink': '#ff79c6',
+ 'purple': '#bd93f9',
+ 'red': '#ff5555',
+ 'yellow': '#f1fa8c'
+ }
+
+ spacing = options.get('spacing', {
+ 'vertical': 5,
+ 'horizontal': 5
+ })
+
+ padding = options.get('padding', {
+ 'top': spacing['vertical'],
+ 'right': spacing['horizontal'],
+ 'bottom': spacing['vertical'],
+ 'left': spacing['horizontal']
+ })
+
+ ## Background color of the completion widget category headers.
+ c.colors.completion.category.bg = palette['background']
+
+ ## Bottom border color of the completion widget category headers.
+ c.colors.completion.category.border.bottom = palette['border']
+
+ ## Top border color of the completion widget category headers.
+ c.colors.completion.category.border.top = palette['border']
+
+ ## Foreground color of completion widget category headers.
+ c.colors.completion.category.fg = palette['foreground']
+
+ ## Background color of the completion widget for even rows.
+ c.colors.completion.even.bg = palette['background']
+
+ ## Background color of the completion widget for odd rows.
+ c.colors.completion.odd.bg = palette['background-alt']
+
+ ## Text color of the completion widget.
+ c.colors.completion.fg = palette['foreground']
+
+ ## Background color of the selected completion item.
+ c.colors.completion.item.selected.bg = palette['selection']
+
+ ## Bottom border color of the selected completion item.
+ c.colors.completion.item.selected.border.bottom = palette['selection']
+
+ ## Top border color of the completion widget category headers.
+ c.colors.completion.item.selected.border.top = palette['selection']
+
+ ## Foreground color of the selected completion item.
+ c.colors.completion.item.selected.fg = palette['foreground']
+
+ ## Foreground color of the matched text in the completion.
+ c.colors.completion.match.fg = palette['orange']
+
+ ## Color of the scrollbar in completion view
+ c.colors.completion.scrollbar.bg = palette['background']
+
+ ## Color of the scrollbar handle in completion view.
+ c.colors.completion.scrollbar.fg = palette['foreground']
+
+ ## Background color for the download bar.
+ c.colors.downloads.bar.bg = palette['background']
+
+ ## Background color for downloads with errors.
+ c.colors.downloads.error.bg = palette['background']
+
+ ## Foreground color for downloads with errors.
+ c.colors.downloads.error.fg = palette['red']
+
+ ## Color gradient stop for download backgrounds.
+ c.colors.downloads.stop.bg = palette['background']
+
+ ## Color gradient interpolation system for download backgrounds.
+ ## Type: ColorSystem
+ ## Valid values:
+ ## - rgb: Interpolate in the RGB color system.
+ ## - hsv: Interpolate in the HSV color system.
+ ## - hsl: Interpolate in the HSL color system.
+ ## - none: Don't show a gradient.
+ c.colors.downloads.system.bg = 'none'
+
+ ## Background color for hints. Note that you can use a `rgba(...)` value
+ ## for transparency.
+ c.colors.hints.bg = palette['background']
+
+ ## Font color for hints.
+ c.colors.hints.fg = palette['purple']
+
+ ## Hints
+ c.hints.border = '1px solid ' + palette['background-alt']
+
+ ## Font color for the matched part of hints.
+ c.colors.hints.match.fg = palette['foreground-alt']
+
+ ## Background color of the keyhint widget.
+ c.colors.keyhint.bg = palette['background']
+
+ ## Text color for the keyhint widget.
+ c.colors.keyhint.fg = palette['purple']
+
+ ## Highlight color for keys to complete the current keychain.
+ c.colors.keyhint.suffix.fg = palette['selection']
+
+ ## Background color of an error message.
+ c.colors.messages.error.bg = palette['background']
+
+ ## Border color of an error message.
+ c.colors.messages.error.border = palette['background-alt']
+
+ ## Foreground color of an error message.
+ c.colors.messages.error.fg = palette['red']
+
+ ## Background color of an info message.
+ c.colors.messages.info.bg = palette['background']
+
+ ## Border color of an info message.
+ c.colors.messages.info.border = palette['background-alt']
+
+ ## Foreground color an info message.
+ c.colors.messages.info.fg = palette['comment']
+
+ ## Background color of a warning message.
+ c.colors.messages.warning.bg = palette['background']
+
+ ## Border color of a warning message.
+ c.colors.messages.warning.border = palette['background-alt']
+
+ ## Foreground color a warning message.
+ c.colors.messages.warning.fg = palette['red']
+
+ ## Background color for prompts.
+ c.colors.prompts.bg = palette['background']
+
+ # ## Border used around UI elements in prompts.
+ c.colors.prompts.border = '1px solid ' + palette['background-alt']
+
+ ## Foreground color for prompts.
+ c.colors.prompts.fg = palette['cyan']
+
+ ## Background color for the selected item in filename prompts.
+ c.colors.prompts.selected.bg = palette['selection']
+
+ ## Background color of the statusbar in caret mode.
+ c.colors.statusbar.caret.bg = palette['background']
+
+ ## Foreground color of the statusbar in caret mode.
+ c.colors.statusbar.caret.fg = palette['orange']
+
+ ## Background color of the statusbar in caret mode with a selection.
+ c.colors.statusbar.caret.selection.bg = palette['background']
+
+ ## Foreground color of the statusbar in caret mode with a selection.
+ c.colors.statusbar.caret.selection.fg = palette['orange']
+
+ ## Background color of the statusbar in command mode.
+ c.colors.statusbar.command.bg = palette['background']
+
+ ## Foreground color of the statusbar in command mode.
+ c.colors.statusbar.command.fg = palette['pink']
+
+ ## Background color of the statusbar in private browsing + command mode.
+ c.colors.statusbar.command.private.bg = palette['background']
+
+ ## Foreground color of the statusbar in private browsing + command mode.
+ c.colors.statusbar.command.private.fg = palette['foreground-alt']
+
+ ## Background color of the statusbar in insert mode.
+ c.colors.statusbar.insert.bg = palette['background-attention']
+
+ ## Foreground color of the statusbar in insert mode.
+ c.colors.statusbar.insert.fg = palette['foreground-attention']
+
+ ## Background color of the statusbar.
+ c.colors.statusbar.normal.bg = palette['background']
+
+ ## Foreground color of the statusbar.
+ c.colors.statusbar.normal.fg = palette['foreground']
+
+ ## Background color of the statusbar in passthrough mode.
+ c.colors.statusbar.passthrough.bg = palette['background']
+
+ ## Foreground color of the statusbar in passthrough mode.
+ c.colors.statusbar.passthrough.fg = palette['orange']
+
+ ## Background color of the statusbar in private browsing mode.
+ c.colors.statusbar.private.bg = palette['background-alt']
+
+ ## Foreground color of the statusbar in private browsing mode.
+ c.colors.statusbar.private.fg = palette['foreground-alt']
+
+ ## Background color of the progress bar.
+ c.colors.statusbar.progress.bg = palette['background']
+
+ ## Foreground color of the URL in the statusbar on error.
+ c.colors.statusbar.url.error.fg = palette['red']
+
+ ## Default foreground color of the URL in the statusbar.
+ c.colors.statusbar.url.fg = palette['foreground']
+
+ ## Foreground color of the URL in the statusbar for hovered links.
+ c.colors.statusbar.url.hover.fg = palette['cyan']
+
+ ## Foreground color of the URL in the statusbar on successful load
+ c.colors.statusbar.url.success.http.fg = palette['green']
+
+ ## Foreground color of the URL in the statusbar on successful load
+ c.colors.statusbar.url.success.https.fg = palette['green']
+
+ ## Foreground color of the URL in the statusbar when there's a warning.
+ c.colors.statusbar.url.warn.fg = palette['yellow']
+
+ ## Status bar padding
+ c.statusbar.padding = padding
+
+ ## Background color of the tab bar.
+ ## Type: QtColor
+ c.colors.tabs.bar.bg = palette['selection']
+
+ ## Background color of unselected even tabs.
+ ## Type: QtColor
+ c.colors.tabs.even.bg = palette['selection']
+
+ ## Foreground color of unselected even tabs.
+ ## Type: QtColor
+ c.colors.tabs.even.fg = palette['foreground']
+
+ ## Color for the tab indicator on errors.
+ ## Type: QtColor
+ c.colors.tabs.indicator.error = palette['red']
+
+ ## Color gradient start for the tab indicator.
+ ## Type: QtColor
+ c.colors.tabs.indicator.start = palette['orange']
+
+ ## Color gradient end for the tab indicator.
+ ## Type: QtColor
+ c.colors.tabs.indicator.stop = palette['green']
+
+ ## Color gradient interpolation system for the tab indicator.
+ ## Type: ColorSystem
+ ## Valid values:
+ ## - rgb: Interpolate in the RGB color system.
+ ## - hsv: Interpolate in the HSV color system.
+ ## - hsl: Interpolate in the HSL color system.
+ ## - none: Don't show a gradient.
+ c.colors.tabs.indicator.system = 'none'
+
+ ## Background color of unselected odd tabs.
+ ## Type: QtColor
+ c.colors.tabs.odd.bg = palette['selection']
+
+ ## Foreground color of unselected odd tabs.
+ ## Type: QtColor
+ c.colors.tabs.odd.fg = palette['foreground']
+
+ # ## Background color of selected even tabs.
+ # ## Type: QtColor
+ c.colors.tabs.selected.even.bg = palette['background']
+
+ # ## Foreground color of selected even tabs.
+ # ## Type: QtColor
+ c.colors.tabs.selected.even.fg = palette['foreground']
+
+ # ## Background color of selected odd tabs.
+ # ## Type: QtColor
+ c.colors.tabs.selected.odd.bg = palette['background']
+
+ # ## Foreground color of selected odd tabs.
+ # ## Type: QtColor
+ c.colors.tabs.selected.odd.fg = palette['foreground']
+
+ ## Tab padding
+ c.tabs.padding = padding
+ c.tabs.indicator.width = 1
+ c.tabs.favicons.scale = 1
+
diff --git a/qutebrowser/redirects.py b/qutebrowser/redirects.py
new file mode 100644
index 0000000..ba9aa32
--- /dev/null
+++ b/qutebrowser/redirects.py
@@ -0,0 +1,180 @@
+import random
+import re
+from qutebrowser.api import interceptor
+from qutebrowser.extensions.interceptors import RedirectException
+from qutebrowser.utils import message
+
+def fixScribePath(url):
+ """ Fix external medium blog to scribe translation.
+ Some paths from medium will go through a 'global identity'
+ path which messes up the actual url path we want to go
+ to and puts it in queries. This puts it back on the path.
+ """
+ new_path = f"{url.path()}{url.query()}"
+ url.setQuery("")
+ url.setPath(re.sub(r"m/global-identity-2redirectUrl=", "", new_path))
+
+redirects = {
+ "youtube": {
+ "source": ["youtube.com"],
+ "target": [
+ "piped.thedroth.rocks",
+ ],
+ },
+ "lbry": {
+ "source": ["odysee.com"],
+ "target": [
+ "lbry.bcow.xyz",
+ "odysee.076.ne.jp",
+ "librarian.pussthecat.org",
+ "lbry.mutahar.rocks",
+ "lbry.vern.cc",
+ ],
+ },
+ "reddit": {
+ "source": ["reddit.com"],
+ "target": [
+ "td.vern.cc",
+ "teddit.adminforge.de",
+ "teddit.artemislena.eu",
+ "teddit.bus-hit.me",
+ "teddit.hostux.net",
+ "teddit.namazso.eu",
+ "teddit.net",
+ "teddit.pussthecat.org",
+ "teddit.sethforprivacy.com",
+ "teddit.totaldarkness.net",
+ "teddit.zaggy.nl",
+ ],
+ },
+ "twitter": {
+ "source": ["twitter.com"],
+ "target": [
+ "nitter.net",
+ "nitter.42l.fr",
+ "nitter.fdn.fr",
+ "nitter.1d4.us",
+ "nitter.kavin.rocks",
+ "nitter.unixfox.eu",
+ "nitter.namazso.eu",
+ "nitter.moomoo.me",
+ "bird.trom.tf",
+ "nitter.it",
+ "twitter.censors.us",
+ "nitter.grimneko.de",
+ "twitter.076.ne.jp",
+ "n.l5.ca",
+ "unofficialbird.com",
+ "nitter.ungovernable.men",
+ ],
+ },
+ "imdb": {
+ "source": ["imdb.com"],
+ "target": [
+ "libremdb.iket.me",
+ "libremdb.pussthecat.org",
+ "ld.vern.cc",
+ "binge.whatever.social",
+ "libremdb.lunar.icu",
+ ],
+ },
+ "tiktok": {
+ "source": ["tiktok.com"],
+ "target": [
+ "proxitok.pabloferreiro.es",
+ "proxitok.pussthecat.org",
+ "tok.habedieeh.re",
+ "proxitok.privacydev.net",
+ "proxitok.odyssey346.dev",
+ "tok.artemislena.eu",
+ "tok.adminforge.de",
+ "proxitok.manasiwibi.com",
+ "tik.hostux.net",
+ "tt.vern.cc",
+ "proxitok.mha.fi",
+ "proxitok.pufe.org",
+ "proxitok.marcopisco.com",
+ "cringe.whatever.social",
+ "proxitok.lunar.icu",
+ ],
+ },
+ "imgur": {
+ "source": ["imgur.com"],
+ "target": [
+ "imgur.artemislena.eu",
+ "ri.zzls.xyz",
+ "rimgo.bus-hit.me",
+ "rimgo.fascinated.cc",
+ "rimgo.hostux.net",
+ "rimgo.kling.gg",
+ "rimgo.lunar.icu",
+ "rimgo.marcopisco.com",
+ "rimgo.privacytools.io",
+ "rimgo.projectsegfau.lt",
+ "rimgo.pussthecat.org",
+ "rimgo.totaldarkness.net",
+ "rimgo.whateveritworks.org",
+ ],
+ },
+ "medium": {
+ "source": ["medium.com"],
+ "target": [
+ "scribe.rip",
+ "scribe.nixnet.services",
+ "scribe.citizen4.eu",
+ "scribe.bus-hit.me",
+ "scribe.froth.zone",
+ "scribe.privacydev.net",
+ "sc.vern.cc",
+ ],
+ "postprocess": fixScribePath
+ },
+ "google": {
+ "source": ["google.com"],
+ "target": [
+ "whoogle.dcs0.hu",
+ ],
+ },
+ "wiki-en": {
+ "source": ["en.wikipedia.org"],
+ "target": [
+ "wiki.thedroth.rocks",
+ ],
+ },
+ "wiki-ru": {
+ "source": ["ru.wikipedia.org"],
+ "target": [
+ "wiki.thedroth.rocks",
+ ],
+ },
+}
+
+
+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
+
+ for service in redirects.values():
+ matched = False
+ for source in service["source"]:
+ if re.search(source, url.host()):
+ matched = True
+
+ if matched:
+ target = service["target"][random.randint(0, len(service["target"]) - 1)]
+ if target is not None and url.setHost(target) is not False:
+ if "postprocess" in service:
+ service["postprocess"](url)
+ try:
+ request.redirect(url)
+ except RedirectException as e:
+ message.error(str(e))
+ break
+
+
+interceptor.register(rewrite)