# ~/.config/qutebrowser/config.py # rgoncalves.se import html import logging import os import re import socket from PyQt6.QtCore import QUrl from qutebrowser.api import cmdutils from qutebrowser.browser.urlmarks import AlreadyExistsError as UrlAlreadyExistsError from qutebrowser.browser.urlmarks import UrlMarkManager from qutebrowser.config.config import ConfigContainer from qutebrowser.config.configfiles import ConfigAPI from qutebrowser.utils import message, objreg from qutebrowser.utils.usertypes import PromptMode from userscripts.urlmarks import urlmarkmanager_save config: ConfigAPI = config # noqa: F821 pylint: disable=E0602,C0103 c: ConfigContainer = c # noqa: F821 pylint: disable=E0602,C0103 logging.basicConfig(level=logging.DEBUG) UrlMarkManager.save = lambda manager: urlmarkmanager_save(manager, config.configdir) def is_musl_system() -> bool: return bool(re.search("musl", os.popen("ldd /bin/ls").read())) def get_qt_arguments() -> list: """ Select best arguments for launching qutebrowser. Empty by default, it picks lag free options for musl systems. """ filters = {"disable-seccomp-filter-sandbox": is_musl_system()} return list(filter(lambda x: x, map(lambda x: x[1], list(filters.items())))) try: @cmdutils.register() def bookmark_save(url: QUrl): """Save the current page as a bookmark.""" manager = objreg.get("bookmark-manager") tags = message.ask( title="Add bookmark:", mode=PromptMode.text, url=url.toString( QUrl.UrlFormattingOption.RemovePassword | QUrl.ComponentFormattingOption.FullyEncoded ), text=( "Please enter bookmark tags for
" f"{html.escape(url.toDisplayString())}" ), ) if not tags: return try: manager.add(url, tags) except UrlAlreadyExistsError: message.warning("Bookmark already exists.") except ValueError: pass config.load_autoconfig(False) config.set("auto_save.session", True) config.set("scrolling.smooth", False) config.set("scrolling.bar", "always") config.set("qt.highdpi", False) config.set("qt.force_software_rendering", "none") config.set("qt.args", get_qt_arguments()) config.set("messages.timeout", 2500) config.set("content.images", True, "chrome-devtools://*") config.set("content.images", True, "devtools://*") config.set("content.javascript.enabled", True, "chrome-devtools://*") config.set("content.javascript.enabled", True, "devtools://*") config.set("content.javascript.enabled", True, "chrome://*/*") config.set("content.javascript.enabled", True, "qute://*/*") config.set("content.notifications.enabled", False) config.set("content.notifications.enabled", True, "*://*.zoho.eu/*") config.set("content.notifications.enabled", True, "*://*.viperdev.io/*") config.set("content.notifications.enabled", True, "*://*.rgoncalves.se/*") config.set("content.notifications.enabled", True, "*://app.slack.com/*") config.set("content.notifications.enabled", True, "*://mail.google.com/*") config.set("content.register_protocol_handler", False) config.set("content.geolocation", False) # config.set('content.media.audio_video_capture', True, '*://*.zoho.eu/*') # config.set('content.media.audio_capture', True, '*://*.zoho.eu/*') # config.set('content.media.video_capture', True, '*://*.zoho.eu/*') config.set("content.media.audio_video_capture", True, "https://meet.google.com/*") config.set("content.media.audio_capture", True, "https://meet.google.com/*") config.set("content.media.video_capture", True, "https://meet.google.com/*") config.set("completion.web_history.max_items", 0) config.set("tabs.background", True) config.set("tabs.indicator.width", 3) config.set("tabs.indicator.padding", {"bottom": 0, "left": 1, "right": 4, "top": 0}) config.set("fonts.default_family", "Terminus") config.set("fonts.default_size", "12pt") config.set("colors.tabs.bar.bg", "#000000") config.set("colors.tabs.even.bg", "#000000") config.set("colors.tabs.even.fg", "#ffffff") config.set("colors.tabs.odd.bg", "#000000") config.set("colors.tabs.odd.fg", "#ffffff") config.set("colors.tabs.indicator.system", "none") config.set("colors.tabs.selected.even.bg", "#ffffff") config.set("colors.tabs.selected.even.fg", "#000000") config.set("colors.tabs.selected.odd.bg", "#ffffff") config.set("colors.tabs.selected.odd.fg", "#000000") config.set("colors.tabs.pinned.selected.even.bg", "#ffffff") config.set("colors.tabs.pinned.selected.odd.bg", "#ffffff") config.set("colors.tabs.pinned.selected.even.fg", "#000000") config.set("colors.tabs.pinned.selected.odd.fg", "#000000") config.set("colors.tabs.indicator.error", "#ff0000") config.set("tabs.padding", {"bottom": 0, "left": 4, "right": 4, "top": 0}) config.set("content.prefers_reduced_motion", True) config.set("content.headers.referer", "same-domain") # config.set('url.default_page', 'https://lite.duckduckgo.com/lite/') # config.set('url.start_pages', 'https://lite.duckduckgo.com/lite/') config.set("url.default_page", "qute://start") config.set("url.start_pages", "qute://start") config.set("url.searchengines", {"DEFAULT": "https://lite.duckduckgo.com/lite/?q={}"}) config.set("downloads.location.directory", f'{os.environ["HOME"]}/downloads') config.set("downloads.prevent_mixed_content", False) config.set("content.autoplay", False) config.set("content.cookies.accept", "no-3rdparty") config.set("content.javascript.alert", False) config.set("content.headers.do_not_track", False, "*://*.thetrainline.com/*") config.set("content.blocking.enabled", False, "*://*.thetrainline.com/*") config.set("content.cookies.accept", "all", "*://*.thetrainline.com/*") config.set( "content.blocking.adblock.lists", [ "https://easylist.to/easylist/easylist.txt", "https://easylist.to/easylist/easyprivacy.txt", "https://easylist-downloads.adblockplus.org/easylistdutch.txt", "https://easylist-downloads.adblockplus.org/abp-filters-anti-cv.txt", "https://www.i-dont-care-about-cookies.eu/abp/", "https://secure.fanboy.co.nz/fanboy-cookiemonster.txt", ], ) config.set("editor.command", ["st", "nvim", "+normal {line}G{column0}l", "{file}"]) config.bind(",m", "spawn mpv --force-window=immediate {url}") config.bind("M", "bookmark-save {url}") if socket.gethostname() == "ws-work01": config.set("fonts.default_size", "14pt")