This commit is contained in:
DeveloperDurp 2025-05-13 07:23:45 -05:00
parent 87b1df2190
commit 8f6c20f8b2
15 changed files with 862 additions and 1 deletions

View file

@ -0,0 +1,4 @@
[ColorScheme]
active_colors= #ffcdd6f4, #ff45475a, #ff585b70, #ff313244, #ff11111b, #ff181825, #ffcdd6f4, #ffcdd6f4, #ffcdd6f4, #ff1e1e2e, #ff181825, #ff11111b, #ffeba0ac, #ff11111b, #ff89b4fa, #ffb4befe, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086, #ffeba0ac
inactive_colors=#ff7f849c, #ff1e1e2e, #ff45475a, #ff313244, #ff11111b, #ff181825, #ff7f849c, #ffcdd6f4, #ff7f849c, #ff1e1e2e, #ff181825, #ff11111b, #ff313244, #ff7f849c, #ff7f849c, #ff7f849c, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086, #ff313244
disabled_colors=#ff6c7086, #ff313244, #ff45475a, #ff313244, #ff11111b, #ff181825, #ff6c7086, #ffcdd6f4, #ff6c7086, #ff1e1e2e, #ff181825, #ff11111b, #ff181825, #ff6c7086, #ffa9bcdb, #ffc7cceb, #ff181825, #ffffffff, #ff1e1e2e, #ffcdd6f4, #806c7086, #ff181825

View file

View file

@ -0,0 +1,34 @@
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# EditorConfig is awesome: https://EditorConfig.org
root = true
[*]
charset = utf-8
indent_size = 2
indent_style = space
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
# go
[*.go]
indent_style = tab
indent_size = 4
# python
[*.{ini,py,py.tpl,rst}]
indent_size = 4
# rust
[*.rs]
indent_size = 4
# documentation, utils
[*.{md,mdx,diff}]
trim_trailing_whitespace = false
# windows shell scripts
[*.{cmd,bat,ps1}]
end_of_line = crlf

View file

@ -0,0 +1 @@
**/__pycache__/

View file

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 Catppuccin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -0,0 +1,94 @@
<h3 align="center">
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/logos/exports/1544x1544_circle.png" width="100" alt="Logo"/><br/>
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/misc/transparent.png" height="30" width="0px"/>
Catppuccin for <a href="https://github.com/qutebrowser/qutebrowser">qutebrowser</a>
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/misc/transparent.png" height="30" width="0px"/>
</h3>
<p align="center">
<a href="https://github.com/catppuccin/qutebrowser/stargazers"><img src="https://img.shields.io/github/stars/catppuccin/qutebrowser?colorA=363a4f&colorB=b7bdf8&style=for-the-badge"></a>
<a href="https://github.com/catppuccin/qutebrowser/issues"><img src="https://img.shields.io/github/issues/catppuccin/qutebrowser?colorA=363a4f&colorB=f5a97f&style=for-the-badge"></a>
<a href="https://github.com/catppuccin/qutebrowser/contributors"><img src="https://img.shields.io/github/contributors/catppuccin/qutebrowser?colorA=363a4f&colorB=a6da95&style=for-the-badge"></a>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/catppuccin/qutebrowser/main/assets/screenshot.png"/>
</p>
## Usage
There are two ways to install & manage this theme:
### Manual config:
1. Find out where the qutebrowser stores its `config` directory for your OS.<br/>
Run `:version`, and take a look at `Paths: config` to find out.
2. Clone this repo into that `config` directory:
```sh
# Linux
$ git clone https://github.com/catppuccin/qutebrowser.git ~/.config/qutebrowser/catppuccin
# macOS
$ git clone https://github.com/catppuccin/qutebrowser.git ~/.qutebrowser/catppuccin
# windows
$ git clone https://github.com/catppuccin/qutebrowser.git $LOCALAPPDATA/qutebrowser/config/catppuccin
```
3. Make sure your `config.py` contains:
```python
import catppuccin
# load your autoconfig, use this, if the rest of your config is empty!
config.load_autoconfig()
# set the flavor you'd like to use
# valid options are 'mocha', 'macchiato', 'frappe', and 'latte'
# last argument (optional, default is False): enable the plain look for the menu rows
catppuccin.setup(c, 'mocha', True)
```
4. Done!
### Let qutebrowser manage your themes:
1. Insert the following code into your `config.py`:
```python
import os
from urllib.request import urlopen
# load your autoconfig, use this, if the rest of your config is empty!
config.load_autoconfig()
if not os.path.exists(config.configdir / "theme.py"):
theme = "https://raw.githubusercontent.com/catppuccin/qutebrowser/main/setup.py"
with urlopen(theme) as themehtml:
with open(config.configdir / "theme.py", "a") as file:
file.writelines(themehtml.read().decode("utf-8"))
if os.path.exists(config.configdir / "theme.py"):
import theme
theme.setup(c, 'mocha', True)
```
2. Remove your current theme from your `.qutebrowser` directory & reload `config.py`.
## 💝 Thanks to
- [winston](https://github.com/nekowinston)
- [iruzo](https://github.com/iruzo)
&nbsp;
<p align="center">
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/footers/gray0_ctp_on_line.svg?sanitize=true" />
</p>
<p align="center">
Copyright &copy; 2021-present <a href="https://github.com/catppuccin" target="_blank">Catppuccin Org</a>
</p>
<p align="center">
<a href="https://github.com/catppuccin/catppuccin/blob/main/LICENSE"><img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&logoColor=d9e0ee&colorA=363a4f&colorB=b7bdf8"/></a>
</p>

View file

@ -0,0 +1 @@
from .setup import setup

Binary file not shown.

After

Width:  |  Height:  |  Size: 864 KiB

View file

@ -0,0 +1,346 @@
# vim:fileencoding=utf-8:foldmethod=marker
def setup(c, flavour, samecolorrows = False):
palette = {}
# flavours {{{
if flavour == "latte":
palette = {
"rosewater": "#dc8a78",
"flamingo": "#dd7878",
"pink": "#ea76cb",
"mauve": "#8839ef",
"red": "#d20f39",
"maroon": "#e64553",
"peach": "#fe640b",
"yellow": "#df8e1d",
"green": "#40a02b",
"teal": "#179299",
"sky": "#04a5e5",
"sapphire": "#209fb5",
"blue": "#1e66f5",
"lavender": "#7287fd",
"text": "#4c4f69",
"subtext1": "#5c5f77",
"subtext0": "#6c6f85",
"overlay2": "#7c7f93",
"overlay1": "#8c8fa1",
"overlay0": "#9ca0b0",
"surface2": "#acb0be",
"surface1": "#bcc0cc",
"surface0": "#ccd0da",
"base": "#eff1f5",
"mantle": "#e6e9ef",
"crust": "#dce0e8",
}
elif flavour == "frappe":
palette = {
"rosewater": "#f2d5cf",
"flamingo": "#eebebe",
"pink": "#f4b8e4",
"mauve": "#ca9ee6",
"red": "#e78284",
"maroon": "#ea999c",
"peach": "#ef9f76",
"yellow": "#e5c890",
"green": "#a6d189",
"teal": "#81c8be",
"sky": "#99d1db",
"sapphire": "#85c1dc",
"blue": "#8caaee",
"lavender": "#babbf1",
"text": "#c6d0f5",
"subtext1": "#b5bfe2",
"subtext0": "#a5adce",
"overlay2": "#949cbb",
"overlay1": "#838ba7",
"overlay0": "#737994",
"surface2": "#626880",
"surface1": "#51576d",
"surface0": "#414559",
"base": "#303446",
"mantle": "#292c3c",
"crust": "#232634",
}
elif flavour == "macchiato":
palette = {
"rosewater": "#f4dbd6",
"flamingo": "#f0c6c6",
"pink": "#f5bde6",
"mauve": "#c6a0f6",
"red": "#ed8796",
"maroon": "#ee99a0",
"peach": "#f5a97f",
"yellow": "#eed49f",
"green": "#a6da95",
"teal": "#8bd5ca",
"sky": "#91d7e3",
"sapphire": "#7dc4e4",
"blue": "#8aadf4",
"lavender": "#b7bdf8",
"text": "#cad3f5",
"subtext1": "#b8c0e0",
"subtext0": "#a5adcb",
"overlay2": "#939ab7",
"overlay1": "#8087a2",
"overlay0": "#6e738d",
"surface2": "#5b6078",
"surface1": "#494d64",
"surface0": "#363a4f",
"base": "#24273a",
"mantle": "#1e2030",
"crust": "#181926",
}
else:
palette = {
"rosewater": "#f5e0dc",
"flamingo": "#f2cdcd",
"pink": "#f5c2e7",
"mauve": "#cba6f7",
"red": "#f38ba8",
"maroon": "#eba0ac",
"peach": "#fab387",
"yellow": "#f9e2af",
"green": "#a6e3a1",
"teal": "#94e2d5",
"sky": "#89dceb",
"sapphire": "#74c7ec",
"blue": "#89b4fa",
"lavender": "#b4befe",
"text": "#cdd6f4",
"subtext1": "#bac2de",
"subtext0": "#a6adc8",
"overlay2": "#9399b2",
"overlay1": "#7f849c",
"overlay0": "#6c7086",
"surface2": "#585b70",
"surface1": "#45475a",
"surface0": "#313244",
"base": "#1e1e2e",
"mantle": "#181825",
"crust": "#11111b",
}
# }}}
# completion {{{
## Background color of the completion widget category headers.
c.colors.completion.category.bg = palette["base"]
## Bottom border color of the completion widget category headers.
c.colors.completion.category.border.bottom = palette["mantle"]
## Top border color of the completion widget category headers.
c.colors.completion.category.border.top = palette["overlay2"]
## Foreground color of completion widget category headers.
c.colors.completion.category.fg = palette["green"]
## Background color of the completion widget for even and odd rows.
if samecolorrows:
c.colors.completion.even.bg = palette["mantle"]
c.colors.completion.odd.bg = c.colors.completion.even.bg
else:
c.colors.completion.even.bg = palette["mantle"]
c.colors.completion.odd.bg = palette["crust"]
## Text color of the completion widget.
c.colors.completion.fg = palette["subtext0"]
## Background color of the selected completion item.
c.colors.completion.item.selected.bg = palette["surface2"]
## Bottom border color of the selected completion item.
c.colors.completion.item.selected.border.bottom = palette["surface2"]
## Top border color of the completion widget category headers.
c.colors.completion.item.selected.border.top = palette["surface2"]
## Foreground color of the selected completion item.
c.colors.completion.item.selected.fg = palette["text"]
## Foreground color of the selected completion item.
c.colors.completion.item.selected.match.fg = palette["rosewater"]
## Foreground color of the matched text in the completion.
c.colors.completion.match.fg = palette["text"]
## Color of the scrollbar in completion view
c.colors.completion.scrollbar.bg = palette["crust"]
## Color of the scrollbar handle in completion view.
c.colors.completion.scrollbar.fg = palette["surface2"]
# }}}
# downloads {{{
c.colors.downloads.bar.bg = palette["base"]
c.colors.downloads.error.bg = palette["base"]
c.colors.downloads.start.bg = palette["base"]
c.colors.downloads.stop.bg = palette["base"]
c.colors.downloads.error.fg = palette["red"]
c.colors.downloads.start.fg = palette["blue"]
c.colors.downloads.stop.fg = palette["green"]
c.colors.downloads.system.fg = "none"
c.colors.downloads.system.bg = "none"
# }}}
# hints {{{
## Background color for hints. Note that you can use a `rgba(...)` value
## for transparency.
c.colors.hints.bg = palette["peach"]
## Font color for hints.
c.colors.hints.fg = palette["mantle"]
## Hints
c.hints.border = "1px solid " + palette["mantle"]
## Font color for the matched part of hints.
c.colors.hints.match.fg = palette["subtext1"]
# }}}
# keyhints {{{
## Background color of the keyhint widget.
c.colors.keyhint.bg = palette["mantle"]
## Text color for the keyhint widget.
c.colors.keyhint.fg = palette["text"]
## Highlight color for keys to complete the current keychain.
c.colors.keyhint.suffix.fg = palette["subtext1"]
# }}}
# messages {{{
## Background color of an error message.
c.colors.messages.error.bg = palette["overlay0"]
## Background color of an info message.
c.colors.messages.info.bg = palette["overlay0"]
## Background color of a warning message.
c.colors.messages.warning.bg = palette["overlay0"]
## Border color of an error message.
c.colors.messages.error.border = palette["mantle"]
## Border color of an info message.
c.colors.messages.info.border = palette["mantle"]
## Border color of a warning message.
c.colors.messages.warning.border = palette["mantle"]
## Foreground color of an error message.
c.colors.messages.error.fg = palette["red"]
## Foreground color an info message.
c.colors.messages.info.fg = palette["text"]
## Foreground color a warning message.
c.colors.messages.warning.fg = palette["peach"]
# }}}
# prompts {{{
## Background color for prompts.
c.colors.prompts.bg = palette["mantle"]
# ## Border used around UI elements in prompts.
c.colors.prompts.border = "1px solid " + palette["overlay0"]
## Foreground color for prompts.
c.colors.prompts.fg = palette["text"]
## Background color for the selected item in filename prompts.
c.colors.prompts.selected.bg = palette["surface2"]
## Background color for the selected item in filename prompts.
c.colors.prompts.selected.fg = palette["rosewater"]
# }}}
# statusbar {{{
## Background color of the statusbar.
c.colors.statusbar.normal.bg = palette["base"]
## Background color of the statusbar in insert mode.
c.colors.statusbar.insert.bg = palette["crust"]
## Background color of the statusbar in command mode.
c.colors.statusbar.command.bg = palette["base"]
## Background color of the statusbar in caret mode.
c.colors.statusbar.caret.bg = palette["base"]
## Background color of the statusbar in caret mode with a selection.
c.colors.statusbar.caret.selection.bg = palette["base"]
## Background color of the progress bar.
c.colors.statusbar.progress.bg = palette["base"]
## Background color of the statusbar in passthrough mode.
c.colors.statusbar.passthrough.bg = palette["base"]
## Foreground color of the statusbar.
c.colors.statusbar.normal.fg = palette["text"]
## Foreground color of the statusbar in insert mode.
c.colors.statusbar.insert.fg = palette["rosewater"]
## Foreground color of the statusbar in command mode.
c.colors.statusbar.command.fg = palette["text"]
## Foreground color of the statusbar in passthrough mode.
c.colors.statusbar.passthrough.fg = palette["peach"]
## Foreground color of the statusbar in caret mode.
c.colors.statusbar.caret.fg = palette["peach"]
## Foreground color of the statusbar in caret mode with a selection.
c.colors.statusbar.caret.selection.fg = palette["peach"]
## 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["text"]
## Foreground color of the URL in the statusbar for hovered links.
c.colors.statusbar.url.hover.fg = palette["sky"]
## Foreground color of the URL in the statusbar on successful load
c.colors.statusbar.url.success.http.fg = palette["teal"]
## 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"]
## PRIVATE MODE COLORS
## Background color of the statusbar in private browsing mode.
c.colors.statusbar.private.bg = palette["mantle"]
## Foreground color of the statusbar in private browsing mode.
c.colors.statusbar.private.fg = palette["subtext1"]
## Background color of the statusbar in private browsing + command mode.
c.colors.statusbar.command.private.bg = palette["base"]
## Foreground color of the statusbar in private browsing + command mode.
c.colors.statusbar.command.private.fg = palette["subtext1"]
# }}}
# tabs {{{
## Background color of the tab bar.
c.colors.tabs.bar.bg = palette["crust"]
## Background color of unselected even tabs.
c.colors.tabs.even.bg = palette["surface2"]
## Background color of unselected odd tabs.
c.colors.tabs.odd.bg = palette["surface1"]
## Foreground color of unselected even tabs.
c.colors.tabs.even.fg = palette["overlay2"]
## Foreground color of unselected odd tabs.
c.colors.tabs.odd.fg = palette["overlay2"]
## Color for the tab indicator on errors.
c.colors.tabs.indicator.error = palette["red"]
## Color gradient interpolation system for the tab indicator.
## 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 selected even tabs.
c.colors.tabs.selected.even.bg = palette["base"]
# ## Background color of selected odd tabs.
c.colors.tabs.selected.odd.bg = palette["base"]
# ## Foreground color of selected even tabs.
c.colors.tabs.selected.even.fg = palette["text"]
# ## Foreground color of selected odd tabs.
c.colors.tabs.selected.odd.fg = palette["text"]
# }}}
# context menus {{{
c.colors.contextmenu.menu.bg = palette["base"]
c.colors.contextmenu.menu.fg = palette["text"]
c.colors.contextmenu.disabled.bg = palette["mantle"]
c.colors.contextmenu.disabled.fg = palette["overlay0"]
c.colors.contextmenu.selected.bg = palette["overlay0"]
c.colors.contextmenu.selected.fg = palette["rosewater"]
# }}}

View file

@ -0,0 +1,129 @@
import catppuccin
import subprocess
c = c # noqa: F821 pylint: disable=E0602,C0103
config = config # noqa: F821 pylint: disable=E0602,C0103
import subprocess
def read_xresources(prefix):
props = {}
x = subprocess.run(["xrdb", "-query"], capture_output=True, check=True, text=True)
lines = x.stdout.split("\n")
for line in filter(lambda l: l.startswith(prefix), lines):
prop, _, value = line.partition(":\t")
props[prop] = value
return props
c.window.hide_decoration = True
# load your autoconfig, use this, if the rest of your config is empty!
config.load_autoconfig()
# set the flavor you'd like to use
# valid options are 'mocha', 'macchiato', 'frappe', and 'latte'
# last argument (optional, default is False): enable the plain look for the menu rows
catppuccin.setup(c, "mocha", True)
# Dark Mode
c.colors.webpage.darkmode.enabled = True
c.colors.webpage.darkmode.algorithm = "lightness-cielab"
c.colors.webpage.darkmode.policy.images = "never"
config.set("colors.webpage.darkmode.enabled", False, "file://*")
#
c.tabs.title.format = "{audio}{current_title}"
c.fonts.web.size.default = 20
c.url.searchengines = {
# note - if you use duckduckgo, you can make use of its built in bangs, of which there are many! https://duckduckgo.com/bangs
"DEFAULT": "https://duckduckgo.com/?q={}",
"!aw": "https://wiki.archlinux.org/?search={}",
"!apkg": "https://archlinux.org/packages/?sort=&q={}&maintainer=&flagged=",
"!gh": "https://github.com/search?o=desc&q={}&s=stars",
"!yt": "https://invidious.durp.info/results?search_query={}",
}
c.completion.open_categories = [
"searchengines",
"quickmarks",
"bookmarks",
"history",
"filesystem",
]
c.auto_save.session = False # save tabs on quit/restart
# keybinding changes
config.bind("=", "cmd-set-text -s :open")
config.bind("h", "history")
config.bind("cs", "cmd-set-text -s :config-source")
config.bind("tH", "config-cycle tabs.show multiple never")
config.bind("sH", "config-cycle statusbar.show always never")
config.bind("T", "hint links tab")
config.bind("pP", "open -- {primary}")
config.bind("pp", "open -- {clipboard}")
config.bind("pt", "open -t -- {clipboard}")
config.bind("qm", "macro-record")
config.bind("<ctrl-y>", "spawn --userscript ytdl.sh")
config.bind("tT", "config-cycle tabs.position top left")
config.bind("gJ", "tab-move +")
config.bind("gK", "tab-move -")
config.bind("gm", "tab-move")
config.bind("x", "tab-close")
# styles, cosmetics
# c.content.user_stylesheets = ["~/.config/qutebrowser/styles/youtube-tweaks.css"]
c.tabs.padding = {"top": 5, "bottom": 5, "left": 9, "right": 9}
c.tabs.indicator.width = 0 # no tab indicators
# c.window.transparent = True # apparently not needed
c.tabs.width = "7%"
# fonts
c.fonts.default_family = []
c.fonts.default_size = "13pt"
c.fonts.web.family.fixed = "monospace"
c.fonts.web.family.sans_serif = "monospace"
c.fonts.web.family.serif = "monospace"
c.fonts.web.family.standard = "monospace"
# privacy - adjust these settings based on your preference
# config.set("completion.cmd_history_max_items", 0)
# config.set("content.private_browsing", True)
config.set("content.webgl", False, "*")
config.set("content.canvas_reading", False)
config.set("content.geolocation", False)
config.set("content.webrtc_ip_handling_policy", "default-public-interface-only")
config.set("content.cookies.accept", "all")
config.set("content.cookies.store", True)
# config.set("content.javascript.enabled", False) # tsh keybind to toggle
# Adblocking info -->
# For yt ads: place the greasemonkey script yt-ads.js in your greasemonkey folder (~/.config/qutebrowser/greasemonkey).
# The script skips through the entire ad, so all you have to do is click the skip button.
# Yeah it's not ublock origin, but if you want a minimal browser, this is a solution for the tradeoff.
# You can also watch yt vids directly in mpv, see qutebrowser FAQ for how to do that.
# If you want additional blocklists, you can get the python-adblock package, or you can uncomment the ublock lists here.
c.content.blocking.enabled = True
# c.content.blocking.method = 'adblock' # uncomment this if you install python-adblock
# c.content.blocking.adblock.lists = [
# "https://github.com/ewpratten/youtube_ad_blocklist/blob/master/blocklist.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/legacy.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2020.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2021.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2022.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2023.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/filters-2024.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/badware.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/privacy.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/badlists.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/annoyances.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/annoyances-cookies.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/annoyances-others.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/badlists.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/quick-fixes.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/resource-abuse.txt",
# "https://github.com/uBlockOrigin/uAssets/raw/master/filters/unbreak.txt"]

View file

@ -0,0 +1,206 @@
// ==UserScript==
// @name Privacy Redirector
// @description Redirect social media platforms to their privacy respecting frontends
// @namespace https://github.com/dybdeskarphet/privacy-redirector
// @author Ahmet Arda Kavakcı
// @license GPLv3
// @version 1.6.2
// @run-at document-start
// @match *://*.bandcamp.com/*
// @match *://*.fandom.com/*
// @match *://*.genius.com/*
// @match *://*.google.com/*
// @match *://*.imdb.com/*
// @match *://*.imgur.com/*
// @match *://*.imgur.io/*
// @match *://*.instagram.com/*
// @match *://*.medium.com/*
// @match *://*.pinterest.com/*
// @match *://*.quora.com/*
// @match *://*.reddit.com/*
// @match *://*.reuters.com/*
// @match *://*.soundcloud.com/*
// @match *://*.tiktok.com/*
// @match *://*.twitch.tv/*
// @match *://*.deepl.com/*
// @match *://*.deviantart.com/*
// @match *://twitch.tv/*
// @match *://*.twitter.com/*
// @match *://*.x.com/*
// @match *://*.tumblr.com/*
// @match *://x.com/*
// @match *://*.wikipedia.org/*
// @match *://*.youtube-nocookie.com/*
// @match *://*.youtube.com/*
// @match *://f4.bcbits.com/*
// @match *://genius.com/*
// @match *://i.pinimg.com/*
// @match *://imgur.com/*
// @match *://instagram.com/*
// @match *://medium.com/*
// @match *://news.ycombinator.com/*
// @match *://reddit.com/*
// @match *://stackoverflow.com/*
// @match *://t4.bcbits.com/*
// @match *://translate.google.com/*
// @match *://twitter.com/*
// @match *://www.goodreads.com/*
// @match *://www.pixiv.net/*
// @match *://youtube.com/*
// @exclude *://*.youtube.com/redirect*
// @exclude *://youtube.com/redirect*
// @downloadURL https://update.greasyfork.org/scripts/436359/Privacy%20Redirector.user.js
// @updateURL https://update.greasyfork.org/scripts/436359/Privacy%20Redirector.meta.js
// ==/UserScript==
/*
___ _ _ ___ _____ _____
/ _ \| \ | | / _ \| ___| ___|
| | | | \| |_____| | | | |_ | |_
| |_| | |\ |_____| |_| | _| | _|
\___/|_| \_| \___/|_| |_|
CHANGE THE RELEVANT VALUE TO "false" TO
DISABLE THE REDIRECTION/FARSIDE FOR THAT
PARTICULAR PLATFORM */
//original script https://greasyfork.org/scripts/436359-privacy-redirector/code/Privacy%20Redirector.user.js
// REDIRECTON / FARSIDE
let reddit = [true, false];
let youtube = [false, false];
// PREFERRED FRONTEND
let youtubeFrontend = "invidious"; // accepts "invidious", "piped", "tubo", "freetube"
let redditFrontend = "libreddit"; // accepts "libreddit", "teddit"
/*
___ _
|_ _|_ __ ___| |_ __ _ _ __ ___ ___ ___
| || '_ \/ __| __/ _` | '_ \ / __/ _ \/ __|
| || | | \__ \ || (_| | | | | (_| __/\__ \
|___|_| |_|___/\__\__,_|_| |_|\___\___||___/
LIST OF INSTANCES TO USE IF FARSIDE IS NOT ENABLED
*/
const Instances = {
invidious: [
"invidious.durp.info"
],
libreddit: [
"redlib.durp.info",
],
};
const hash = window.location.hash,
scheme = `https://`;
let debug_mode = false;
if (debug_mode) {
alert(
"\n== DEBUG MODE IS ON ==" +
"\nIf you're seeing this" +
"\nset the debug_mode value to" +
"\nfalse for Privacy Redirector." +
"\n======================" +
"\n\nHostname: " +
window.location.hostname +
"\nPath: " +
window.location.pathname +
"\nQuery: " +
window.location.search +
"\nHash: " +
hash,
);
}
let selectedInstance = "",
newURL = "";
const getrandom = async (instances) =>
instances[Math.floor(Math.random() * instances.length)];
async function redirectReddit() {
if (reddit[0] && !window.location.pathname.startsWith("/domain")) {
window.stop();
let pathname = window.location.pathname;
let search = window.location.search;
selectedInstance = reddit[1]
? `${farsideInstance}/${redditFrontend}`
: await getrandom(Instances[redditFrontend]);
if (pathname === "/media" && search) {
const params = new URLSearchParams(search);
const mediaURL = new URL(params.get("url"));
if (["i.redd.it", "preview.redd.it"].includes(mediaURL.hostname)) {
pathname = `/img${mediaURL.pathname}`;
search = mediaURL.search;
}
}
newURL = `${scheme}${selectedInstance}${pathname}${search}${hash}`;
window.location.replace(newURL);
}
}
async function redirectYoutube(frontend) {
if (youtube[0]) {
window.stop();
let searchpath = `${window.location.pathname}${window.location.search}`;
if (window.location.pathname.startsWith("/embed")) {
selectedInstance = youtube[1]
? `${farsideInstance}/invidious`
: await getrandom(Instances["invidious"]);
newURL = `${scheme}${selectedInstance}${window.location.pathname}${window.location.search
}${hash}`;
window.location.replace(newURL);
} else {
if (frontend === "tubo") {
selectedInstance = await getrandom(Instances.tubo);
searchpath = `/stream?url=${window.location.href}`;
if (
window.location.pathname.startsWith("/@") ||
window.location.pathname.startsWith("/channel")
)
searchpath = `/channel?url=${window.location.href}`;
} else if (frontend === "freetube") {
let youtube_link = window.location.href;
window.location.replace(`freetube://${youtube_link}`);
return;
} else {
selectedInstance =
youtube[1] && frontend !== "hyperpipe"
? `${farsideInstance}/${frontend}`
: await getrandom(Instances[frontend]);
}
newURL = `${scheme}${selectedInstance}${searchpath}${hash}`;
window.location.replace(newURL);
}
}
}
const urlHostname = window.location.hostname;
switch (urlHostname) {
case "www.youtube.com":
case "m.youtube.com":
case "www.youtube-nocookie.com":
redirectYoutube(youtubeFrontend);
break;
case urlHostname.includes("reddit.com") ? urlHostname : 0:
redirectReddit();
break;
}
// export module for the test in github action
typeof module !== "undefined"
? (module.exports = { Instances: Instances })
: true;

View file

@ -0,0 +1,19 @@
// ==UserScript==
// @name Auto Skip YouTube Ads
// @version 1.1.0
// @description Speed up and skip YouTube ads automatically
// @author jso8910 and others
// @match *://*.youtube.com/*
// ==/UserScript==
document.addEventListener('load', () => {
const btn = document.querySelector('.videoAdUiSkipButton,.ytp-ad-skip-button-modern')
if (btn) {
btn.click()
}
const ad = [...document.querySelectorAll('.ad-showing')][0];
if (ad) {
document.querySelector('video').currentTime = 9999999999;
}
}, true);

View file

View file

@ -16,7 +16,8 @@ set $up k
set $right l
set $term kitty
set $files nautilus
set $browser flatpak run app.zen_browser.zen
set $browser flatpak run io.gitlab.librewolf-community
set $bitwarden flatpak run com.bitwarden.desktop
set $menu wofi
set $next_or_new swaymsg -r -t get_workspaces | jq -r --arg OUTPUT $(swaymsg -t get_outputs -r | jq -r '.[] | select(.focused == true) | .name') '(. | (max_by(.num) | .num)) as $max | [.[] | select(.output == $OUTPUT)] | (max_by(.num) | .num) as $maxOutput | (.[] | select(.focused == true) | .num) as $current | if $maxOutput > $current then "next_on_output" else $max + 1 end'
@ -82,6 +83,9 @@ bindsym $mod+Shift+i exec /opt/goland/bin/goland.sh
# Browser
bindsym $mod+b exec $browser
# Bitwarden
bindsym $mod+Shift+b exec $bitwarden
# Kill focused window
bindsym $mod+q kill

View file

@ -103,6 +103,7 @@ required_packages_pacman:
- less
- blueman
- qutebrowser
- python-tldextrct
flatpak_remote:
- { name: "flathub", url: "https://dl.flathub.org/repo/flathub.flatpakrepo" }
@ -120,6 +121,7 @@ required_packages_flatpak:
- io.podman_desktop.PodmanDesktop
- sh.loft.devpod
- com.parsecgaming.parsec
- io.gitlab.librewolf-community
systemd_service:
- cronie.service