# =============================================================================
# Qutebrowser Configuration
# Author: Kris Yotam <krisyotam@protonmail.com>
# Based on: DistroTube's config.py
# Date: 2026-02-10
# =============================================================================
# Load settings from autoconfig.yml (disabled)
config.load_autoconfig(False)
# Aliases for commands
c.aliases = {'q': 'quit', 'w': 'session-save', 'wq': 'quit --save'}
# YouTube minimal CSS is injected via Greasemonkey script
# See: ~/.local/share/qutebrowser/greasemonkey/youtube-minimal.user.js
# Cookie settings for devtools
config.set('content.cookies.accept', 'all', 'chrome-devtools://*')
config.set('content.cookies.accept', 'all', 'devtools://*')
# User agent overrides for specific sites
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}', 'https://web.whatsapp.com/')
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://accounts.google.com/*')
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99 Safari/537.36', 'https://*.slack.com/*')
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://docs.google.com/*')
config.set('content.headers.user_agent', 'Mozilla/5.0 ({os_info}; rv:71.0) Gecko/20100101 Firefox/71.0', 'https://drive.google.com/*')
# Load images in devtools
config.set('content.images', True, 'chrome-devtools://*')
config.set('content.images', True, 'devtools://*')
# Enable JavaScript for devtools and internal pages
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://*/*')
# Notifications
config.set('content.notifications.enabled', True, 'https://www.reddit.com')
config.set('content.notifications.enabled', True, 'https://www.youtube.com')
# Downloads directory
c.downloads.location.directory = '~/Downloads'
# Tab bar visibility
c.tabs.show = 'always'
# Start page and default page (blank)
c.url.default_page = 'about:blank'
c.url.start_pages = 'about:blank'
# Search engines (Kagi as default)
c.url.searchengines = {
'DEFAULT': 'https://kagi.com/search?q={}',
'k': 'https://kagi.com/search?q={}',
'aa': 'https://annas-archive.org/search?q={}',
'am': 'https://www.amazon.com/s?k={}',
'aw': 'https://wiki.archlinux.org/?search={}',
'ddg': 'https://duckduckgo.com/?q={}',
'goog': 'https://www.google.com/search?q={}',
'gh': 'https://github.com/search?o=desc&q={}&s=stars',
're': 'https://www.reddit.com/r/{}',
'ub': 'https://www.urbandictionary.com/define.php?term={}',
'wiki': 'https://en.wikipedia.org/wiki/{}',
'yt': 'https://www.youtube.com/results?search_query={}'
}
# =============================================================================
# Colors - Light mode with blue accents (no green)
# =============================================================================
# Webpage colors - force light mode
c.colors.webpage.bg = 'white'
c.colors.webpage.darkmode.enabled = False
c.colors.webpage.preferred_color_scheme = 'light'
# Web fonts - Brave/Chrome defaults
c.fonts.web.family.standard = ''
c.fonts.web.family.serif = ''
c.fonts.web.family.sans_serif = ''
c.fonts.web.family.fixed = ''
c.fonts.web.size.default = 16
c.fonts.web.size.default_fixed = 13
c.fonts.web.size.minimum = 0
# Completion widget
c.colors.completion.fg = '#1f2933'
c.colors.completion.odd.bg = '#f5f7f9'
c.colors.completion.even.bg = '#eef2f5'
c.colors.completion.category.fg = '#1f2933'
c.colors.completion.category.bg = '#dae4ee'
c.colors.completion.category.border.top = '#B0C5DA'
c.colors.completion.category.border.bottom = '#B0C5DA'
c.colors.completion.item.selected.fg = '#1f2933'
c.colors.completion.item.selected.bg = '#B0C5DA'
c.colors.completion.item.selected.match.fg = '#1f2933'
c.colors.completion.match.fg = '#90B0D2'
c.colors.completion.scrollbar.fg = '#90B0D2'
# Downloads
c.colors.downloads.bar.bg = '#eef2f5'
c.colors.downloads.error.bg = '#DEC292'
# Hints
c.colors.hints.fg = '#1f2933'
c.colors.hints.bg = '#dae4ee'
c.colors.hints.match.fg = '#90B0D2'
# Messages
c.colors.messages.info.bg = '#eef2f5'
c.colors.messages.info.fg = '#1f2933'
# Statusbar
c.colors.statusbar.normal.bg = '#eef2f5'
c.colors.statusbar.normal.fg = '#1f2933'
c.colors.statusbar.insert.fg = '#1f2933'
c.colors.statusbar.insert.bg = '#B0C5DA'
c.colors.statusbar.passthrough.bg = '#9CC2EC'
c.colors.statusbar.passthrough.fg = '#1f2933'
c.colors.statusbar.command.bg = '#eef2f5'
c.colors.statusbar.command.fg = '#1f2933'
c.colors.statusbar.url.fg = '#1f2933'
c.colors.statusbar.url.success.http.fg = '#90B0D2'
c.colors.statusbar.url.success.https.fg = '#90B0D2'
c.colors.statusbar.url.warn.fg = '#DEC292'
# Tabs
c.colors.tabs.bar.bg = '#eef2f5'
c.colors.tabs.odd.bg = '#f5f7f9'
c.colors.tabs.odd.fg = '#1f2933'
c.colors.tabs.even.bg = '#eef2f5'
c.colors.tabs.even.fg = '#1f2933'
c.colors.tabs.selected.odd.bg = '#B0C5DA'
c.colors.tabs.selected.odd.fg = '#1f2933'
c.colors.tabs.selected.even.bg = '#B0C5DA'
c.colors.tabs.selected.even.fg = '#1f2933'
c.colors.tabs.pinned.odd.bg = '#9CC2EC'
c.colors.tabs.pinned.odd.fg = '#1f2933'
c.colors.tabs.pinned.even.bg = '#AECDEC'
c.colors.tabs.pinned.even.fg = '#1f2933'
c.colors.tabs.pinned.selected.odd.bg = '#B0C5DA'
c.colors.tabs.pinned.selected.odd.fg = '#1f2933'
c.colors.tabs.pinned.selected.even.bg = '#B0C5DA'
c.colors.tabs.pinned.selected.even.fg = '#1f2933'
# =============================================================================
# Keybindings
# =============================================================================
# dmenu integration (commented out for consideration)
# config.bind('o', 'spawn --userscript dmenu-open')
# config.bind('O', 'spawn --userscript dmenu-open --tab')
# Normal mode bindings
config.bind('M', 'hint links spawn mpv {hint-url}')
config.bind('Z', 'hint links spawn st -e youtube-dl {hint-url}')
config.bind('t', 'set-cmd-text -s :open -t')
config.bind('xb', 'config-cycle statusbar.show always never')
config.bind('xt', 'config-cycle tabs.show always never')
config.bind('xx', 'config-cycle statusbar.show always never;; config-cycle tabs.show always never')
# CSS stylesheet cycling (Solarized Everything CSS)
# https://github.com/alphapapa/solarized-everything-css
config.bind(',ap', 'config-cycle content.user_stylesheets ~/.config/qutebrowser/solarized-everything-css/css/apprentice/apprentice-all-sites.css ""')
config.bind(',dr', 'config-cycle content.user_stylesheets ~/.config/qutebrowser/solarized-everything-css/css/darculized/darculized-all-sites.css ""')
config.bind(',gr', 'config-cycle content.user_stylesheets ~/.config/qutebrowser/solarized-everything-css/css/gruvbox/gruvbox-all-sites.css ""')
config.bind(',sd', 'config-cycle content.user_stylesheets ~/.config/qutebrowser/solarized-everything-css/css/solarized-dark/solarized-dark-all-sites.css ""')
config.bind(',sl', 'config-cycle content.user_stylesheets ~/.config/qutebrowser/solarized-everything-css/css/solarized-light/solarized-light-all-sites.css ""')
# Dark mode toggle
config.bind(',dm', 'config-cycle colors.webpage.darkmode.enabled true false')