diff --git a/general/.config/qutebrowser/config.py b/general/.config/qutebrowser/config.py new file mode 100644 index 0000000..b8b69cf --- /dev/null +++ b/general/.config/qutebrowser/config.py @@ -0,0 +1,1524 @@ +# Documentation: +# qute://help/configuring.html +# qute://help/settings.html + +# Load GUI Settings +config.load_autoconfig() + +# bindings.commands and bindings.default will not be overwitten by aliases and key_mappings + +c.aliases = { + 'w': 'session-save', + 'q': 'close', + 'qa': 'quit', + 'wq': 'quit --save', + 'wqa': 'quit --save', + 'lp': 'spawn --userscript qute-lastpass', + 'o': 'open' +} + +c.auto_save.interval = 15000 +c.auto_save.session = False +c.backend = 'webengine' + +c.bindings.key_mappings = { + '': '', + '': '', + '': '', + '': '', + '': '', + '': '', + '': '', + '': '', + '': '', + + # Vim keybinds + '': '', + '': '', + '': '', + '': '' +} + +# ░█▀▀░█▀█░█░░░█▀█░█▀▄░█▀▀ +# ░█░░░█░█░█░░░█░█░█▀▄░▀▀█ +# ░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀ +# colors + +# TODO: Draw directly from Xresources +myColors = { + 'foreground': '#f8f8f2', + 'background': '#272822', + 'black': ['#272822', '#75715e'], + 'red': '#f92672', + 'green': '#a6e22e', + 'yellow': '#f4bf75', + 'blue': '#66d9ef', + 'magenta': '#ae81ff', + 'cyan': '#a1efe4', + 'white': '#f8f8f2' +} + + +# Default color settings +# If set to null, the Qt default is used. +# Type: QssColor + +c.colors.completion.category.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)' +c.colors.completion.category.border.bottom = myColors['background'] +c.colors.completion.category.border.top = myColors['background'] +c.colors.completion.category.fg = myColors['foreground'] +c.colors.completion.even.bg = '#333333' +c.colors.completion.fg = ['white', 'white', 'white'] +c.colors.completion.item.selected.bg = '#e8c000' +c.colors.completion.item.selected.border.bottom = '#bbbb00' +c.colors.completion.item.selected.border.top = '#bbbb00' +c.colors.completion.item.selected.fg = 'black' +c.colors.completion.item.selected.match.fg = myColors['red'] +c.colors.completion.match.fg = myColors['red'] +c.colors.completion.odd.bg = myColors['black'][0] +c.colors.completion.scrollbar.bg = myColors['black'][0] +c.colors.completion.scrollbar.fg = myColors['white'] + +c.colors.contextmenu.disabled.bg = None +c.colors.contextmenu.disabled.fg = None +c.colors.contextmenu.menu.bg = None +c.colors.contextmenu.menu.fg = None +c.colors.contextmenu.selected.bg = None +c.colors.contextmenu.selected.fg = None + +c.colors.downloads.bar.bg = 'black' +c.colors.downloads.error.bg = 'red' +c.colors.downloads.error.fg = 'white' +c.colors.downloads.start.bg = '#0000aa' +c.colors.downloads.start.fg = 'white' +c.colors.downloads.stop.bg = '#00aa00' +c.colors.downloads.stop.fg = 'white' + +# 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 = 'rgb' + +# Color gradient interpolation system for download text. +# 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.fg = 'rgb' + +def hex_to_RGBA(hex): + return 'rgba({}, {}, {}, {})'.format( + *[int(hex[a:a+2], 16) for a in (1,3,5,7)]) + +stop0 = f'stop:0 {hex_to_RGBA("#00ff0044")}' +stop1 = f'stop:1 {hex_to_RGBA("#00660044")}' + +c.colors.hints.bg = f'qlineargradient(x1:0, y1:0, x2:0, y2:1, {stop0}, {stop1})' +c.colors.hints.fg = 'black' +c.colors.hints.match.fg = 'green' +c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)' + +c.colors.keyhint.fg = '#FFFFFF' +c.colors.keyhint.suffix.fg = '#FFFF00' + +c.colors.messages.error.bg = 'red' +c.colors.messages.error.border = '#bb0000' +c.colors.messages.error.fg = 'white' +c.colors.messages.info.bg = 'black' +c.colors.messages.info.border = '#333333' +c.colors.messages.info.fg = 'white' +c.colors.messages.warning.bg = 'darkorange' +c.colors.messages.warning.border = '#d47300' +c.colors.messages.warning.fg = 'white' + +c.colors.prompts.bg = '#444444' +c.colors.prompts.border = '3px solid gray' # Border used around UI elements in prompts. +c.colors.prompts.fg = 'white' +c.colors.prompts.selected.bg = 'grey' + +c.colors.statusbar.caret.bg = 'purple' +c.colors.statusbar.caret.fg = 'white' +c.colors.statusbar.caret.selection.bg = '#a12dff' +c.colors.statusbar.caret.selection.fg = 'white' +c.colors.statusbar.command.bg = myColors['background'] +c.colors.statusbar.command.fg = 'white' +c.colors.statusbar.command.private.bg = 'darkslategray' +c.colors.statusbar.command.private.fg = 'white' +c.colors.statusbar.insert.bg = 'darkgreen' +c.colors.statusbar.insert.fg = 'white' +c.colors.statusbar.normal.bg = myColors['background'] +c.colors.statusbar.normal.fg = myColors['foreground'] +c.colors.statusbar.passthrough.bg = 'darkblue' +c.colors.statusbar.passthrough.fg = 'white' +c.colors.statusbar.private.bg = '#666666' +c.colors.statusbar.private.fg = 'white' +c.colors.statusbar.progress.bg = 'white' +c.colors.statusbar.url.error.fg = 'orange' +c.colors.statusbar.url.fg = 'white' +c.colors.statusbar.url.hover.fg = 'aqua' +c.colors.statusbar.url.success.http.fg = 'white' +c.colors.statusbar.url.success.https.fg = 'lime' +c.colors.statusbar.url.warn.fg = 'yellow' + +c.colors.tabs.bar.bg = '#555555' +c.colors.tabs.even.bg = myColors['background'] +c.colors.tabs.even.fg = myColors['foreground'] +c.colors.tabs.indicator.error = '#ff0000' +c.colors.tabs.indicator.start = '#0000aa' +c.colors.tabs.indicator.stop = '#00aa00' +# 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 = 'rgb' + +# From here on only QtColors +c.colors.tabs.odd.bg = myColors['background'] +c.colors.tabs.odd.fg = myColors['foreground'] +c.colors.tabs.pinned.even.bg = myColors['background'] +c.colors.tabs.pinned.even.fg = myColors['red'] +c.colors.tabs.pinned.odd.bg = myColors['background'] +c.colors.tabs.pinned.odd.fg = myColors['red'] +c.colors.tabs.pinned.selected.even.bg = myColors['background'] +c.colors.tabs.pinned.selected.even.fg = myColors['green'] +c.colors.tabs.pinned.selected.odd.bg = myColors['background'] +c.colors.tabs.pinned.selected.odd.fg = myColors['green'] +c.colors.tabs.selected.even.bg = myColors['background'] +c.colors.tabs.selected.even.fg = myColors['green'] +c.colors.tabs.selected.odd.bg = myColors['background'] +c.colors.tabs.selected.odd.fg = myColors['green'] + +# ░█▀▄░█▀▀░█▀▀░█▀█░█░░░█▀█░█▀▄░▀█▀░█▀█░█▀▀ +# ░█▀▄░█▀▀░█░░░█░█░█░░░█░█░█▀▄░░█░░█░█░█░█ +# ░▀░▀░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀░▀░▀▀▀ +# recoloring + +c.colors.webpage.bg = 'white' +# Which algorithm to use for modifying how colors are rendered with +# darkmode. +# Type: String +# Valid values: +# - lightness-cielab: Modify colors by converting them to CIELAB color space and inverting the L value. +# - lightness-hsl: Modify colors by converting them to the HSL color space and inverting the lightness (i.e. the "L" in HSL). +# - brightness-rgb: Modify colors by subtracting each of r, g, and b from their maximum value. +c.colors.webpage.darkmode.algorithm = 'lightness-cielab' + +# Contrast for dark mode. This only has an effect when +# `colors.webpage.darkmode.algorithm` is set to `lightness-hsl` or +# `brightness-rgb`. +# Type: Float +c.colors.webpage.darkmode.contrast = 0.0 + +# Render all web contents using a dark theme. Example configurations +# from Chromium's `chrome://flags`: - "With simple HSL/CIELAB/RGB-based +# inversion": Set `colors.webpage.darkmode.algorithm` accordingly. - +# "With selective image inversion": Set +# `colors.webpage.darkmode.policy.images` to `smart`. - "With selective +# inversion of non-image elements": Set +# `colors.webpage.darkmode.threshold.text` to 150 and +# `colors.webpage.darkmode.threshold.background` to 205. - "With +# selective inversion of everything": Combines the two variants above. +# Type: Bool +c.colors.webpage.darkmode.enabled = False + +# Render all colors as grayscale. This only has an effect when +# `colors.webpage.darkmode.algorithm` is set to `lightness-hsl` or +# `brightness-rgb`. +# Type: Bool +c.colors.webpage.darkmode.grayscale.all = False + +# Desaturation factor for images in dark mode. If set to 0, images are +# left as-is. If set to 1, images are completely grayscale. Values +# between 0 and 1 desaturate the colors accordingly. +# Type: Float +c.colors.webpage.darkmode.grayscale.images = 0.0 + +# Which images to apply dark mode to. WARNING: With QtWebengine 5.15.0, +# this setting can cause frequent renderer process crashes due to a +# https://codereview.qt-project.org/c/qt/qtwebengine- +# chromium/+/304211[bug in Qt]. Thus, the 'smart' setting is ignored and +# treated like 'never' in that case. +# Type: String +# Valid values: +# - always: Apply dark mode filter to all images. +# - never: Never apply dark mode filter to any images. +# - smart: Apply dark mode based on image content. +c.colors.webpage.darkmode.policy.images = 'smart' + +# Which pages to apply dark mode to. +# Type: String +# Valid values: +# - always: Apply dark mode filter to all frames, regardless of content. +# - smart: Apply dark mode filter to frames based on background color. +c.colors.webpage.darkmode.policy.page = 'smart' + +# Threshold for inverting background elements with dark mode. Background +# elements with brightness above this threshold will be inverted, and +# below it will be left as in the original, non-dark-mode page. Set to +# 256 to never invert the color or to 0 to always invert it. Note: This +# behavior is the opposite of `colors.webpage.darkmode.threshold.text`! +# Type: Int +c.colors.webpage.darkmode.threshold.background = 0 + +# Threshold for inverting text with dark mode. Text colors with +# brightness below this threshold will be inverted, and above it will be +# left as in the original, non-dark-mode page. Set to 256 to always +# invert text color or to 0 to never invert text color. +# Type: Int +c.colors.webpage.darkmode.threshold.text = 256 +c.colors.webpage.prefers_color_scheme_dark = True + + +# ░█░█░█▀▀░█░█░█▀▀ +# ░█▀▄░█▀▀░░█░░▀▀█ +# ░▀░▀░▀▀▀░░▀░░▀▀▀ +# keys + +# Bindings for normal mode +config.bind("'", 'enter-mode jump_mark') +config.bind('+', 'zoom-in') +config.bind('-', 'zoom-out') +config.bind('.', 'repeat-command') +config.bind('/', 'set-cmd-text /') +config.bind(':', 'set-cmd-text :') +config.bind(';I', 'hint images tab') +config.bind(';O', 'hint links fill :open -t -r {hint-url}') +config.bind(';R', 'hint --rapid links window') +config.bind(';Y', 'hint links yank-primary') +config.bind(';b', 'hint all tab-bg') +config.bind(';d', 'hint links download') +config.bind(';f', 'hint all tab-fg') +config.bind(';h', 'hint all hover') +config.bind(';i', 'hint images') +config.bind(';o', 'hint links fill :open {hint-url}') +config.bind(';r', 'hint --rapid links tab-bg') +config.bind(';t', 'hint inputs') +config.bind(';y', 'hint links yank') +config.bind('', 'tab-focus 1') +config.bind('', 'tab-focus 2') +config.bind('', 'tab-focus 3') +config.bind('', 'tab-focus 4') +config.bind('', 'tab-focus 5') +config.bind('', 'tab-focus 6') +config.bind('', 'tab-focus 7') +config.bind('', 'tab-focus 8') +config.bind('', 'tab-focus -1') +config.bind('', 'tab-mute') +config.bind('', 'navigate increment') +config.bind('', 'print') +config.bind('', 'scroll-page 0 -1') +config.bind('', 'scroll-page 0 0.5') +config.bind('', 'reload -f') +config.bind('', 'scroll-page 0 1') +config.bind('', 'open -w') +config.bind('', 'tab-next') +config.bind('', 'tab-prev') +config.bind('', 'quit') +config.bind('', 'follow-selected -t') +config.bind('', 'open -p') +config.bind('', 'undo') +config.bind('', 'nop') +config.bind('', 'close') +config.bind('', 'open -t') +config.bind('', 'tab-focus last') +config.bind('', 'scroll-page 0 -0.5') +config.bind('', 'enter-mode passthrough') +config.bind('', 'tab-close') +config.bind('', 'navigate decrement') +config.bind('', 'tab-focus last') +config.bind('', 'home') +config.bind('', 'tab-pin') +config.bind('', 'stop') +config.bind('', 'clear-keychain ;; search ;; fullscreen --leave') +config.bind('', 'fullscreen') +config.bind('', 'reload') +config.bind('', 'follow-selected') +config.bind('', 'back') +config.bind('', 'forward') +config.bind('=', 'zoom') +config.bind('?', 'set-cmd-text ?') +config.bind('@', 'run-macro') +config.bind('B', 'set-cmd-text -s :quickmark-load -t') +config.bind('D', 'tab-close -o') +config.bind('F', 'hint all tab') +config.bind('G', 'scroll-to-perc') +config.bind('H', 'back') +config.bind('J', 'tab-next') +config.bind('K', 'tab-prev') +config.bind('L', 'forward') +config.bind('M', 'bookmark-add') +config.bind('N', 'search-prev') +config.bind('O', 'set-cmd-text -s :open -t') +config.bind('PP', 'open -t -- {primary}') +config.bind('Pp', 'open -t -- {clipboard}') +config.bind('R', 'reload -f') +config.bind('Sb', 'open qute://bookmarks#bookmarks') +config.bind('Sh', 'open qute://history') +config.bind('Sq', 'open qute://bookmarks') +config.bind('Ss', 'open qute://settings') +config.bind('T', 'tab-focus') +config.bind('U', 'undo -w') +config.bind('V', 'enter-mode caret ;; toggle-selection --line') +config.bind('ZQ', 'quit') +config.bind('ZZ', 'quit --save') +config.bind('[[', 'navigate prev') +config.bind(']]', 'navigate next') +config.bind('`', 'enter-mode set_mark') +config.bind('ad', 'download-cancel') +config.bind('b', 'set-cmd-text -s :quickmark-load') +config.bind('cd', 'download-clear') +config.bind('co', 'tab-only') +config.bind('d', 'tab-close') +config.bind('f', 'hint') +config.bind('g$', 'tab-focus -1') +config.bind('g0', 'tab-focus 1') +config.bind('gB', 'set-cmd-text -s :bookmark-load -t') +config.bind('gC', 'tab-clone') +config.bind('gD', 'tab-give') +config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}') +config.bind('gU', 'navigate up -t') +config.bind('g^', 'tab-focus 1') +config.bind('ga', 'open -t') +config.bind('gb', 'set-cmd-text -s :bookmark-load') +config.bind('gd', 'download') +config.bind('gf', 'view-source') +config.bind('gg', 'scroll-to-perc 0') +config.bind('gi', 'hint inputs --first') +config.bind('gl', 'tab-move -') +config.bind('gm', 'tab-move') +config.bind('go', 'set-cmd-text :open {url:pretty}') +config.bind('gr', 'tab-move +') +config.bind('gt', 'set-cmd-text -s :buffer') +config.bind('gu', 'navigate up') +config.bind('h', 'scroll left') +config.bind('i', 'enter-mode insert') +config.bind('j', 'scroll down') +config.bind('k', 'scroll up') +config.bind('l', 'scroll right') +config.bind('m', 'quickmark-save') +config.bind('n', 'search-next') +config.bind('o', 'set-cmd-text -s :open') +config.bind('pP', 'open -- {primary}') +config.bind('pp', 'open -- {clipboard}') +config.bind('q', 'record-macro') +config.bind('r', 'reload') +config.bind('sf', 'save') +config.bind('sk', 'set-cmd-text -s :bind') +config.bind('sl', 'set-cmd-text -s :set -t') +config.bind('ss', 'set-cmd-text -s :set') +config.bind('tCH', 'config-cycle -p -u *://*.{url:host}/* content.cookies.accept all no-3rdparty never ;; reload') +config.bind('tCh', 'config-cycle -p -u *://{url:host}/* content.cookies.accept all no-3rdparty never ;; reload') +config.bind('tCu', 'config-cycle -p -u {url} content.cookies.accept all no-3rdparty never ;; reload') +config.bind('tIH', 'config-cycle -p -u *://*.{url:host}/* content.images ;; reload') +config.bind('tIh', 'config-cycle -p -u *://{url:host}/* content.images ;; reload') +config.bind('tIu', 'config-cycle -p -u {url} content.images ;; reload') +config.bind('tPH', 'config-cycle -p -u *://*.{url:host}/* content.plugins ;; reload') +config.bind('tPh', 'config-cycle -p -u *://{url:host}/* content.plugins ;; reload') +config.bind('tPu', 'config-cycle -p -u {url} content.plugins ;; reload') +config.bind('tSH', 'config-cycle -p -u *://*.{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSh', 'config-cycle -p -u *://{url:host}/* content.javascript.enabled ;; reload') +config.bind('tSu', 'config-cycle -p -u {url} content.javascript.enabled ;; reload') +config.bind('tcH', 'config-cycle -p -t -u *://*.{url:host}/* content.cookies.accept all no-3rdparty never ;; reload') +config.bind('tch', 'config-cycle -p -t -u *://{url:host}/* content.cookies.accept all no-3rdparty never ;; reload') +config.bind('tcu', 'config-cycle -p -t -u {url} content.cookies.accept all no-3rdparty never ;; reload') +config.bind('th', 'back -t') +config.bind('tiH', 'config-cycle -p -t -u *://*.{url:host}/* content.images ;; reload') +config.bind('tih', 'config-cycle -p -t -u *://{url:host}/* content.images ;; reload') +config.bind('tiu', 'config-cycle -p -t -u {url} content.images ;; reload') +config.bind('tl', 'forward -t') +config.bind('tpH', 'config-cycle -p -t -u *://*.{url:host}/* content.plugins ;; reload') +config.bind('tph', 'config-cycle -p -t -u *://{url:host}/* content.plugins ;; reload') +config.bind('tpu', 'config-cycle -p -t -u {url} content.plugins ;; reload') +config.bind('tsH', 'config-cycle -p -t -u *://*.{url:host}/* content.javascript.enabled ;; reload') +config.bind('tsh', 'config-cycle -p -t -u *://{url:host}/* content.javascript.enabled ;; reload') +config.bind('tsu', 'config-cycle -p -t -u {url} content.javascript.enabled ;; reload') +config.bind('u', 'undo') +config.bind('v', 'enter-mode caret') +config.bind('wB', 'set-cmd-text -s :bookmark-load -w') +config.bind('wIf', 'devtools-focus') +config.bind('wIh', 'devtools left') +config.bind('wIj', 'devtools bottom') +config.bind('wIk', 'devtools top') +config.bind('wIl', 'devtools right') +config.bind('wIw', 'devtools window') +config.bind('wO', 'set-cmd-text :open -w {url:pretty}') +config.bind('wP', 'open -w -- {primary}') +config.bind('wb', 'set-cmd-text -s :quickmark-load -w') +config.bind('wf', 'hint all window') +config.bind('wh', 'back -w') +config.bind('wi', 'devtools') +config.bind('wl', 'forward -w') +config.bind('wo', 'set-cmd-text -s :open -w') +config.bind('wp', 'open -w -- {clipboard}') +config.bind('xO', 'set-cmd-text :open -b -r {url:pretty}') +config.bind('xo', 'set-cmd-text -s :open -b') +config.bind('yD', 'yank domain -s') +config.bind('yM', 'yank inline [{title}]({url}) -s') +config.bind('yP', 'yank pretty-url -s') +config.bind('yT', 'yank title -s') +config.bind('yY', 'yank -s') +config.bind('yd', 'yank domain') +config.bind('ym', 'yank inline [{title}]({url})') +config.bind('yp', 'yank pretty-url') +config.bind('yt', 'yank title') +config.bind('yy', 'yank') +config.bind('{{', 'navigate prev -t') +config.bind('}}', 'navigate next -t') + +# Bindings for caret mode +config.bind('$', 'move-to-end-of-line', mode='caret') +config.bind('0', 'move-to-start-of-line', mode='caret') +config.bind('', 'drop-selection', mode='caret') +config.bind('', 'leave-mode', mode='caret') +config.bind('', 'yank selection', mode='caret') +config.bind('', 'toggle-selection', mode='caret') +config.bind('G', 'move-to-end-of-document', mode='caret') +config.bind('H', 'scroll left', mode='caret') +config.bind('J', 'scroll down', mode='caret') +config.bind('K', 'scroll up', mode='caret') +config.bind('L', 'scroll right', mode='caret') +config.bind('V', 'toggle-selection --line', mode='caret') +config.bind('Y', 'yank selection -s', mode='caret') +config.bind('[', 'move-to-start-of-prev-block', mode='caret') +config.bind(']', 'move-to-start-of-next-block', mode='caret') +config.bind('b', 'move-to-prev-word', mode='caret') +config.bind('c', 'enter-mode normal', mode='caret') +config.bind('e', 'move-to-end-of-word', mode='caret') +config.bind('gg', 'move-to-start-of-document', mode='caret') +config.bind('h', 'move-to-prev-char', mode='caret') +config.bind('j', 'move-to-next-line', mode='caret') +config.bind('k', 'move-to-prev-line', mode='caret') +config.bind('l', 'move-to-next-char', mode='caret') +config.bind('o', 'reverse-selection', mode='caret') +config.bind('v', 'toggle-selection', mode='caret') +config.bind('w', 'move-to-next-word', mode='caret') +config.bind('y', 'yank selection', mode='caret') +config.bind('{', 'move-to-end-of-prev-block', mode='caret') +config.bind('}', 'move-to-end-of-next-block', mode='caret') + +# Bindings for command mode +config.bind('', 'rl-backward-word', mode='command') +config.bind('', 'rl-backward-kill-word', mode='command') +config.bind('', 'rl-kill-word', mode='command') +config.bind('', 'rl-forward-word', mode='command') +config.bind('', 'rl-delete-char', mode='command') +config.bind('', 'rl-beginning-of-line', mode='command') +config.bind('', 'rl-backward-char', mode='command') +config.bind('', 'completion-item-yank', mode='command') +config.bind('', 'completion-item-del', mode='command') +config.bind('', 'rl-end-of-line', mode='command') +config.bind('', 'rl-forward-char', mode='command') +config.bind('', 'rl-backward-delete-char', mode='command') +config.bind('', 'rl-kill-line', mode='command') +config.bind('', 'command-history-next', mode='command') +config.bind('', 'command-history-prev', mode='command') +config.bind('', 'command-accept --rapid', mode='command') +config.bind('', 'completion-item-yank --sel', mode='command') +config.bind('', 'completion-item-focus prev-category', mode='command') +config.bind('', 'completion-item-focus next-category', mode='command') +config.bind('', 'rl-unix-line-discard', mode='command') +config.bind('', 'rl-unix-word-rubout', mode='command') +config.bind('', 'rl-yank', mode='command') +config.bind('', 'completion-item-focus --history next', mode='command') +config.bind('', 'leave-mode', mode='command') +config.bind('', 'completion-item-focus next-page', mode='command') +config.bind('', 'completion-item-focus prev-page', mode='command') +config.bind('', 'command-accept', mode='command') +config.bind('', 'completion-item-del', mode='command') +config.bind('', 'completion-item-focus prev', mode='command') +config.bind('', 'completion-item-focus next', mode='command') +config.bind('', 'completion-item-focus --history prev', mode='command') + +# Bindings for hint mode +config.bind('', 'hint all tab-bg', mode='hint') +config.bind('', 'hint links', mode='hint') +config.bind('', 'hint --rapid links tab-bg', mode='hint') +config.bind('', 'leave-mode', mode='hint') +config.bind('', 'follow-hint', mode='hint') + +# Bindings for insert mode +config.bind('', 'open-editor', mode='insert') +config.bind('', 'leave-mode', mode='insert') +config.bind('', 'insert-text -- {primary}', mode='insert') + +# Bindings for passthrough mode +config.bind('', 'leave-mode', mode='passthrough') + +# Bindings for prompt mode +config.bind('', 'rl-backward-word', mode='prompt') +config.bind('', 'rl-backward-kill-word', mode='prompt') +config.bind('', 'rl-kill-word', mode='prompt') +config.bind('', 'rl-forward-word', mode='prompt') +config.bind('', 'prompt-yank --sel', mode='prompt') +config.bind('', 'prompt-yank', mode='prompt') +config.bind('', 'rl-delete-char', mode='prompt') +config.bind('', 'rl-beginning-of-line', mode='prompt') +config.bind('', 'rl-backward-char', mode='prompt') +config.bind('', 'rl-end-of-line', mode='prompt') +config.bind('', 'rl-forward-char', mode='prompt') +config.bind('', 'rl-backward-delete-char', mode='prompt') +config.bind('', 'rl-kill-line', mode='prompt') +config.bind('', 'prompt-open-download --pdfjs', mode='prompt') +config.bind('', 'rl-unix-line-discard', mode='prompt') +config.bind('', 'rl-unix-word-rubout', mode='prompt') +config.bind('', 'prompt-open-download', mode='prompt') +config.bind('', 'rl-yank', mode='prompt') +config.bind('', 'prompt-item-focus next', mode='prompt') +config.bind('', 'leave-mode', mode='prompt') +config.bind('', 'prompt-accept', mode='prompt') +config.bind('', 'prompt-item-focus prev', mode='prompt') +config.bind('', 'prompt-item-focus next', mode='prompt') +config.bind('', 'prompt-item-focus prev', mode='prompt') + +# Bindings for register mode +config.bind('', 'leave-mode', mode='register') + +# Bindings for yesno mode +config.bind('', 'prompt-yank --sel', mode='yesno') +config.bind('', 'prompt-yank', mode='yesno') +config.bind('', 'leave-mode', mode='yesno') +config.bind('', 'prompt-accept', mode='yesno') +config.bind('N', 'prompt-accept --save no', mode='yesno') +config.bind('Y', 'prompt-accept --save yes', mode='yesno') +config.bind('n', 'prompt-accept no', mode='yesno') +config.bind('y', 'prompt-accept yes', mode='yesno') + + +# ░█▄█░▀█▀░█▀▀░█▀▀ +# ░█░█░░█░░▀▀█░█░░ +# ░▀░▀░▀▀▀░▀▀▀░▀▀▀ + +c.completion.cmd_history_max_items = 100 +c.completion.delay = 0 +c.completion.height = '50%' +c.completion.min_chars = 1 +c.completion.open_categories = ['searchengines', 'quickmarks', 'bookmarks', 'history'] + +# Move on to the next part when there's only one possible completion +# left. +# Type: Bool +c.completion.quick = True +c.completion.scrollbar.padding = 2 +c.completion.scrollbar.width = 12 + +# When to show the autocompletion window. +# Type: String +# Valid values: +# - always: Whenever a completion is available. +# - auto: Whenever a completion is requested. +# - never: Never. +c.completion.show = 'always' + +# Shrink the completion to be smaller than the configured size if there +# are no scrollbars. +# Type: Bool +c.completion.shrink = False + +# Format of timestamps (e.g. for the history completion). See +# https://sqlite.org/lang_datefunc.html and +# https://docs.python.org/3/library/datetime.html#strftime-strptime- +# behavior for allowed substitutions, qutebrowser uses both sqlite and +# Python to format its timestamps. +# Type: String +c.completion.timestamp_format = '%Y-%m-%d %H:%M' + +# Execute the best-matching command on a partial match. +# Type: Bool +c.completion.use_best_match = False + +# A list of patterns which should not be shown in the history. This only +# affects the completion. Matching URLs are still saved in the history +# (and visible on the qute://history page), but hidden in the +# completion. Changing this setting will cause the completion history to +# be regenerated on the next start, which will take a short while. +# Type: List of UrlPattern +c.completion.web_history.exclude = [] + +# Number of URLs to show in the web history. 0: no history / -1: +# unlimited +# Type: Int +c.completion.web_history.max_items = -1 + +# Require a confirmation before quitting the application. +# Type: ConfirmQuit +# Valid values: +# - always: Always show a confirmation. +# - multiple-tabs: Show a confirmation if multiple tabs are opened. +# - downloads: Show a confirmation if downloads are running +# - never: Never show a confirmation. +c.confirm_quit = ['never'] + +# Automatically start playing `