]> git.rmz.io Git - dotfiles.git/blobdiff - qutebrowser/config.py
qutebrowser: also cycle through accept all cookies
[dotfiles.git] / qutebrowser / config.py
index f659d265b7ea553a34733e6ee117d8a05fbb7381..cbb8310dd8dd089e2109b40ab7649e62fbfed8d4 100644 (file)
@@ -1,11 +1,51 @@
 ## Autogenerated config.py
+##
+## NOTE: config.py is intended for advanced users who are comfortable
+## with manually migrating the config file on qutebrowser upgrades. If
+## you prefer, you can also configure qutebrowser using the
+## :set/:bind/:config-* commands without having to write a config.py
+## file.
+##
 ## Documentation:
 ##   qute://help/configuring.html
 ##   qute://help/settings.html
 
+def in_terminal(cmd: list):
+    """Wraps cmd to be run in the default TERMINAL, as set by environment.
+
+    :cmd: cmd to execute in TERMINAL
+    :returns: A shell command as a list
+    """
+    from os import getenv
+    t = getenv('TERMINAL', 'xterm')
+    return [t, '-e'] + cmd
+
+try:
+    from qutebrowser.api import interceptor, message
+    from PyQt5.QtCore import QUrl
+
+    def intercept(info: interceptor.Request):
+        url = info.request_url
+        if url.host() == "twitter.com":
+            url.setHost("nitter.eu")
+            message.info("Redirecting to " + url.toString())
+            info.redirect(url)
+        if url.host() == "xkcd.com":
+            url.setHost("m.xkcd.com")
+            message.info("Redirecting to " + url.toString())
+            info.redirect(url)
+        if url.host() == "www.bristolpost.co.uk":
+            url.setUrl("https://outline.com/" + url.toString())
+            message.info("Redirecting to " + url.toString())
+            info.redirect(url)
+
+    interceptor.register(intercept)
+except ImportError:
+    pass
+
 ## This is here so configs done via the GUI are still loaded.
 ## Remove it to not load settings done via the GUI.
-# config.load_autoconfig()
+config.load_autoconfig(True)
 
 ## Aliases for commands. The keys of the given dictionary are the
 ## aliases, while the values are the commands they map to.
@@ -24,414 +64,147 @@ c.aliases = {'w':    'session-save',
 ## Type: Int
 # c.auto_save.interval = 15000
 
-## Always restore open sites when qutebrowser is reopened.
+## Always restore open sites when qutebrowser is reopened. Without this
+## option set, `:wq` (`:quit --save`) needs to be used to save open tabs
+## (and restore them), while quitting qutebrowser in any other way will
+## not save/restore the session. By default, this will save to the
+## session which was last loaded. This behavior can be customized via the
+## `session.default_name` setting.
 ## Type: Bool
 c.auto_save.session = True
 
 ## Backend to use to display websites. qutebrowser supports two different
-## web rendering engines / backends, QtWebKit and QtWebEngine. QtWebKit
-## was discontinued by the Qt project with Qt 5.6, but picked up as a
-## well maintained fork: https://github.com/annulen/webkit/wiki -
-## qutebrowser only supports the fork. QtWebEngine is Qt's official
-## successor to QtWebKit. It's slightly more resource hungry than
-## QtWebKit and has a couple of missing features in qutebrowser, but is
-## generally the preferred choice.
+## web rendering engines / backends, QtWebEngine and QtWebKit (not
+## recommended). QtWebEngine is Qt's official successor to QtWebKit, and
+## both the default/recommended backend. It's based on a stripped-down
+## Chromium and regularly updated with security fixes and new features by
+## the Qt project: https://wiki.qt.io/QtWebEngine QtWebKit was
+## qutebrowser's original backend when the project was started. However,
+## support for QtWebKit was discontinued by the Qt project with Qt 5.6 in
+## 2016. The development of QtWebKit was picked up in an official fork:
+## https://github.com/qtwebkit/qtwebkit - however, the project seems to
+## have stalled again. The latest release (5.212.0 Alpha 4) from March
+## 2020 is based on a WebKit version from 2016, with many known security
+## vulnerabilities. Additionally, there is no process isolation and
+## sandboxing. Due to all those issues, while support for QtWebKit is
+## still available in qutebrowser for now, using it is strongly
+## discouraged.
 ## Type: String
 ## Valid values:
-##   - webengine: Use QtWebEngine (based on Chromium).
-##   - webkit: Use QtWebKit (based on WebKit, similar to Safari).
+##   - webengine: Use QtWebEngine (based on Chromium - recommended).
+##   - webkit: Use QtWebKit (based on WebKit, similar to Safari - many known security issues!).
 # c.backend = 'webengine'
 
-## This setting can be used to map keys to other keys. When the key used
-## as dictionary-key is pressed, the binding for the key used as
-## dictionary-value is invoked instead. This is useful for global
-## remappings of keys, for example to map Ctrl-[ to Escape. Note that
-## when a key is bound (via `bindings.default` or `bindings.commands`),
-## the mapping is ignored.
+## Map keys to other keys, so that they are equivalent in all modes. When
+## the key used as dictionary-key is pressed, the binding for the key
+## used as dictionary-value is invoked instead. This is useful for global
+## remappings of keys, for example to map <Ctrl-[> to <Escape>. NOTE:
+## This should only be used if two keys should always be equivalent, i.e.
+## for things like <Enter> (keypad) and <Return> (non-keypad). For normal
+## command bindings, qutebrowser works differently to vim: You always
+## bind keys to commands, usually via `:bind` or `config.bind()`. Instead
+## of using this setting, consider finding the command a key is bound to
+## (e.g. via `:bind gg`) and then binding the same command to the desired
+## key. Note that when a key is bound (via `bindings.default` or
+## `bindings.commands`), the mapping is ignored.
 ## Type: Dict
-# c.bindings.key_mappings = {'<Ctrl-[>': '<Escape>', '<Ctrl-6>': '<Ctrl-^>', '<Ctrl-M>': '<Return>', '<Ctrl-J>': '<Return>', '<Shift-Return>': '<Return>', '<Enter>': '<Return>', '<Shift-Enter>': '<Return>', '<Ctrl-Enter>': '<Ctrl-Return>'}
-
-## Background color of the completion widget category headers.
-## Type: QssColor
-# c.colors.completion.category.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #888888, stop:1 #505050)'
-
-## Bottom border color of the completion widget category headers.
-## Type: QssColor
-# c.colors.completion.category.border.bottom = 'black'
-
-## Top border color of the completion widget category headers.
-## Type: QssColor
-# c.colors.completion.category.border.top = 'black'
-
-## Foreground color of completion widget category headers.
-## Type: QtColor
-# c.colors.completion.category.fg = 'white'
-
-## Background color of the completion widget for even rows.
-## Type: QssColor
-# c.colors.completion.even.bg = '#333333'
-
-## Text color of the completion widget. May be a single color to use for
-## all columns or a list of three colors, one for each column.
-## Type: List of QtColor, or QtColor
-# c.colors.completion.fg = ['white', 'white', 'white']
-
-## Background color of the selected completion item.
-## Type: QssColor
-# c.colors.completion.item.selected.bg = '#e8c000'
-
-## Bottom border color of the selected completion item.
-## Type: QssColor
-# c.colors.completion.item.selected.border.bottom = '#bbbb00'
-
-## Top border color of the selected completion item.
-## Type: QssColor
-# c.colors.completion.item.selected.border.top = '#bbbb00'
-
-## Foreground color of the selected completion item.
-## Type: QtColor
-# c.colors.completion.item.selected.fg = 'black'
-
-## Foreground color of the matched text in the selected completion item.
-## Type: QtColor
-# c.colors.completion.item.selected.match.fg = '#ff4444'
-
-## Foreground color of the matched text in the completion.
-## Type: QtColor
-# c.colors.completion.match.fg = '#ff4444'
-
-## Background color of the completion widget for odd rows.
-## Type: QssColor
-# c.colors.completion.odd.bg = '#444444'
-
-## Color of the scrollbar in the completion view.
-## Type: QssColor
-# c.colors.completion.scrollbar.bg = '#333333'
-
-## Color of the scrollbar handle in the completion view.
-## Type: QssColor
-# c.colors.completion.scrollbar.fg = 'white'
-
-## Background color of the context menu. If set to null, the Qt default
-## is used.
-## Type: QssColor
-# c.colors.contextmenu.bg = None
-
-## Foreground color of the context menu. If set to null, the Qt default
-## is used.
-## Type: QssColor
-# c.colors.contextmenu.fg = None
-
-## Background color for the download bar.
-## Type: QssColor
-# c.colors.downloads.bar.bg = 'black'
-
-## Background color for downloads with errors.
-## Type: QtColor
-# c.colors.downloads.error.bg = 'red'
-
-## Foreground color for downloads with errors.
-## Type: QtColor
-# c.colors.downloads.error.fg = 'white'
-
-## Color gradient start for download backgrounds.
-## Type: QtColor
-# c.colors.downloads.start.bg = '#0000aa'
-
-## Color gradient start for download text.
-## Type: QtColor
-# c.colors.downloads.start.fg = 'white'
-
-## Color gradient stop for download backgrounds.
-## Type: QtColor
-# c.colors.downloads.stop.bg = '#00aa00'
-
-## Color gradient end for download text.
-## Type: QtColor
-# c.colors.downloads.stop.fg = 'white'
+# c.bindings.key_mappings = {'<Ctrl-[>': '<Escape>', '<Ctrl-6>': '<Ctrl-^>', '<Ctrl-M>': '<Return>', '<Ctrl-J>': '<Return>', '<Ctrl-I>': '<Tab>', '<Shift-Return>': '<Return>', '<Enter>': '<Return>', '<Shift-Enter>': '<Return>', '<Ctrl-Enter>': '<Ctrl-Return>'}
 
-## 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
+## When to show a changelog after qutebrowser was upgraded.
+## Type: String
 ## 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'
-
-## Background color for hints. Note that you can use a `rgba(...)` value
-## for transparency.
-## Type: QssColor
-# c.colors.hints.bg = 'qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(255, 247, 133, 0.8), stop:1 rgba(255, 197, 66, 0.8))'
-
-## Font color for hints.
-## Type: QssColor
-# c.colors.hints.fg = 'black'
-
-## Font color for the matched part of hints.
-## Type: QtColor
-# c.colors.hints.match.fg = 'green'
-
-## Background color of the keyhint widget.
-## Type: QssColor
-# c.colors.keyhint.bg = 'rgba(0, 0, 0, 80%)'
-
-## Text color for the keyhint widget.
-## Type: QssColor
-# c.colors.keyhint.fg = '#FFFFFF'
-
-## Highlight color for keys to complete the current keychain.
-## Type: QssColor
-# c.colors.keyhint.suffix.fg = '#FFFF00'
-
-## Background color of an error message.
-## Type: QssColor
-# c.colors.messages.error.bg = 'red'
-
-## Border color of an error message.
-## Type: QssColor
-# c.colors.messages.error.border = '#bb0000'
-
-## Foreground color of an error message.
-## Type: QssColor
-# c.colors.messages.error.fg = 'white'
-
-## Background color of an info message.
-## Type: QssColor
-# c.colors.messages.info.bg = 'black'
-
-## Border color of an info message.
-## Type: QssColor
-# c.colors.messages.info.border = '#333333'
-
-## Foreground color of an info message.
-## Type: QssColor
-# c.colors.messages.info.fg = 'white'
-
-## Background color of a warning message.
-## Type: QssColor
-# c.colors.messages.warning.bg = 'darkorange'
-
-## Border color of a warning message.
-## Type: QssColor
-# c.colors.messages.warning.border = '#d47300'
-
-## Foreground color of a warning message.
-## Type: QssColor
-# c.colors.messages.warning.fg = 'white'
-
-## Background color for prompts.
-## Type: QssColor
-c.colors.prompts.bg = '#333333'
-
-## Border used around UI elements in prompts.
+##   - major: Show changelog for major upgrades (e.g. v2.0.0 -> v3.0.0).
+##   - minor: Show changelog for major and minor upgrades (e.g. v2.0.0 -> v2.1.0).
+##   - patch: Show changelog for major, minor and patch upgrades (e.g. v2.0.0 -> v2.0.1).
+##   - never: Never show changelog after upgrades.
+c.changelog_after_upgrade = 'patch'
+
+## Which algorithm to use for modifying how colors are rendered with
+## darkmode. The `lightness-cielab` value was added with QtWebEngine 5.14
+## and is treated like `lightness-hsl` with older QtWebEngine versions.
 ## Type: String
-# c.colors.prompts.border = '1px solid gray'
-
-## Foreground color for prompts.
-## Type: QssColor
-# c.colors.prompts.fg = 'white'
-
-## Background color for the selected item in filename prompts.
-## Type: QssColor
-# c.colors.prompts.selected.bg = 'grey'
-
-## Background color of the statusbar in caret mode.
-## Type: QssColor
-# c.colors.statusbar.caret.bg = 'purple'
-
-## Foreground color of the statusbar in caret mode.
-## Type: QssColor
-# c.colors.statusbar.caret.fg = 'white'
-
-## Background color of the statusbar in caret mode with a selection.
-## Type: QssColor
-# c.colors.statusbar.caret.selection.bg = '#a12dff'
-
-## Foreground color of the statusbar in caret mode with a selection.
-## Type: QssColor
-# c.colors.statusbar.caret.selection.fg = 'white'
-
-## Background color of the statusbar in command mode.
-## Type: QssColor
-# c.colors.statusbar.command.bg = 'black'
-
-## Foreground color of the statusbar in command mode.
-## Type: QssColor
-# c.colors.statusbar.command.fg = 'white'
-
-## Background color of the statusbar in private browsing + command mode.
-## Type: QssColor
-# c.colors.statusbar.command.private.bg = 'grey'
-
-## Foreground color of the statusbar in private browsing + command mode.
-## Type: QssColor
-# c.colors.statusbar.command.private.fg = 'white'
-
-## Background color of the statusbar in insert mode.
-## Type: QssColor
-# c.colors.statusbar.insert.bg = 'darkgreen'
-
-## Foreground color of the statusbar in insert mode.
-## Type: QssColor
-# c.colors.statusbar.insert.fg = 'white'
-
-## Background color of the statusbar.
-## Type: QssColor
-# c.colors.statusbar.normal.bg = 'black'
-
-## Foreground color of the statusbar.
-## Type: QssColor
-# c.colors.statusbar.normal.fg = 'white'
-
-## Background color of the statusbar in passthrough mode.
-## Type: QssColor
-# c.colors.statusbar.passthrough.bg = 'darkblue'
-
-## Foreground color of the statusbar in passthrough mode.
-## Type: QssColor
-# c.colors.statusbar.passthrough.fg = 'white'
-
-## Background color of the statusbar in private browsing mode.
-## Type: QssColor
-# c.colors.statusbar.private.bg = '#666666'
-
-## Foreground color of the statusbar in private browsing mode.
-## Type: QssColor
-# c.colors.statusbar.private.fg = 'white'
-
-## Background color of the progress bar.
-## Type: QssColor
-# c.colors.statusbar.progress.bg = 'white'
-
-## Foreground color of the URL in the statusbar on error.
-## Type: QssColor
-# c.colors.statusbar.url.error.fg = 'orange'
-
-## Default foreground color of the URL in the statusbar.
-## Type: QssColor
-# c.colors.statusbar.url.fg = 'white'
-
-## Foreground color of the URL in the statusbar for hovered links.
-## Type: QssColor
-# c.colors.statusbar.url.hover.fg = 'aqua'
-
-## Foreground color of the URL in the statusbar on successful load
-## (http).
-## Type: QssColor
-# c.colors.statusbar.url.success.http.fg = 'white'
-
-## Foreground color of the URL in the statusbar on successful load
-## (https).
-## Type: QssColor
-# c.colors.statusbar.url.success.https.fg = 'lime'
-
-## Foreground color of the URL in the statusbar when there's a warning.
-## Type: QssColor
-# c.colors.statusbar.url.warn.fg = 'yellow'
-
-## Background color of the tab bar.
-## Type: QssColor
-# c.colors.tabs.bar.bg = '#555555'
-
-## Background color of unselected even tabs.
-## Type: QtColor
-# c.colors.tabs.even.bg = 'darkgrey'
-
-## Foreground color of unselected even tabs.
-## Type: QtColor
-# c.colors.tabs.even.fg = 'white'
-
-## Color for the tab indicator on errors.
-## Type: QtColor
-# c.colors.tabs.indicator.error = '#ff0000'
-
-## Color gradient start for the tab indicator.
-## Type: QtColor
-# c.colors.tabs.indicator.start = '#0000aa'
-
-## Color gradient end for the tab indicator.
-## Type: QtColor
-# 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'
-
-## Background color of unselected odd tabs.
-## Type: QtColor
-# c.colors.tabs.odd.bg = 'grey'
-
-## Foreground color of unselected odd tabs.
-## Type: QtColor
-# c.colors.tabs.odd.fg = 'white'
-
-## Background color of pinned unselected even tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.even.bg = 'darkseagreen'
-
-## Foreground color of pinned unselected even tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.even.fg = 'white'
-
-## Background color of pinned unselected odd tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.odd.bg = 'seagreen'
-
-## Foreground color of pinned unselected odd tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.odd.fg = 'white'
-
-## Background color of pinned selected even tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.selected.even.bg = 'black'
-
-## Foreground color of pinned selected even tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.selected.even.fg = 'white'
-
-## Background color of pinned selected odd tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.selected.odd.bg = 'black'
+##   - lightness-cielab: Modify colors by converting them to CIELAB color space and inverting the L value. Not available with Qt < 5.14.
+##   - 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
 
-## Foreground color of pinned selected odd tabs.
-## Type: QtColor
-# c.colors.tabs.pinned.selected.odd.fg = 'white'
+## 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
 
-## Background color of selected even tabs.
-## Type: QtColor
-# c.colors.tabs.selected.even.bg = 'black'
+## 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
 
-## Foreground color of selected even tabs.
-## Type: QtColor
-# c.colors.tabs.selected.even.fg = 'white'
+## 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
 
-## Background color of selected odd tabs.
-## Type: QtColor
-# c.colors.tabs.selected.odd.bg = 'black'
+## Which images to apply dark mode to. 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].
+## 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. Not available with Qt 5.15.0.
+# c.colors.webpage.darkmode.policy.images = 'smart'
+
+## Which pages to apply dark mode to. The underlying Chromium setting has
+## been removed in QtWebEngine 5.15.3, thus this setting is ignored
+## there. Instead, every element is now classified individually.
+## 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
 
-## Foreground color of selected odd tabs.
-## Type: QtColor
-# c.colors.tabs.selected.odd.fg = 'white'
+## 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
 
-## Background color for webpages if unset (or empty to use the theme's
-## color).
-## Type: QtColor
-# c.colors.webpage.bg = 'white'
+## Value to use for `prefers-color-scheme:` for websites. The "light"
+## value is only available with QtWebEngine 5.15.2+. On older versions,
+## it is the same as "auto". The "auto" value is broken on QtWebEngine
+## 5.15.2 due to a Qt bug. There, it will fall back to "light"
+## unconditionally.
+## Type: String
+## Valid values:
+##   - auto: Use the system-wide color scheme setting.
+##   - light: Force a light theme.
+##   - dark: Force a dark theme.
+# c.colors.webpage.preferred_color_scheme = 'auto'
 
 ## Number of commands to save in the command history. 0: no history / -1:
 ## unlimited
@@ -443,6 +216,12 @@ c.colors.prompts.bg = '#333333'
 ## Type: Int
 # c.completion.delay = 0
 
+## Default filesystem autocomplete suggestions for :open. The elements of
+## this list show up in the completion window under the Filesystem
+## category when the command line contains `:open` but no argument.
+## Type: List of String
+# c.completion.favorite_paths = []
+
 ## Height (in pixels or as percentage of the window) of the completion.
 ## Type: PercOrInt
 c.completion.height = 150
@@ -458,7 +237,8 @@ c.completion.height = 150
 ##   - quickmarks
 ##   - bookmarks
 ##   - history
-# c.completion.open_categories = ['searchengines', 'quickmarks', 'bookmarks', 'history']
+##   - filesystem
+# c.completion.open_categories = ['searchengines', 'quickmarks', 'bookmarks', 'history', 'filesystem']
 
 ## Move on to the next part when there's only one possible completion
 ## left.
@@ -487,9 +267,12 @@ c.completion.quick = False
 c.completion.shrink = True
 
 ## Format of timestamps (e.g. for the history completion). See
-## https://sqlite.org/lang_datefunc.html for allowed substitutions.
+## 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'
+# c.completion.timestamp_format = '%Y-%m-%d %H:%M'
 
 ## Execute the best-matching command on a partial match.
 ## Type: Bool
@@ -497,9 +280,9 @@ c.completion.shrink = True
 
 ## 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.
+## (and visible on the `: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 = []
 
@@ -517,11 +300,67 @@ c.completion.shrink = True
 ##   - never: Never show a confirmation.
 c.confirm_quit = ['downloads']
 
-## Automatically start playing `<video>` elements. Note: On Qt < 5.11,
-## this option needs a restart and does not support URL patterns.
+## Automatically start playing `<video>` elements.
 ## Type: Bool
 # c.content.autoplay = True
 
+## List of URLs to ABP-style adblocking rulesets.  Only used when Brave's
+## ABP-style adblocker is used (see `content.blocking.method`).  You can
+## find an overview of available lists here:
+## https://adblockplus.org/en/subscriptions - note that the special
+## `subscribe.adblockplus.org` links aren't handled by qutebrowser, you
+## will instead need to find the link to the raw `.txt` file (e.g. by
+## extracting it from the `location` parameter of the subscribe URL and
+## URL-decoding it).
+## Type: List of Url
+# c.content.blocking.adblock.lists = ['https://easylist.to/easylist/easylist.txt', 'https://easylist.to/easylist/easyprivacy.txt']
+
+## Enable the ad/host blocker
+## Type: Bool
+# c.content.blocking.enabled = True
+
+## Block subdomains of blocked hosts. Note: If only a single subdomain is
+## blocked but should be allowed, consider using
+## `content.blocking.whitelist` instead.
+## Type: Bool
+# c.content.blocking.hosts.block_subdomains = True
+
+## List of URLs to host blocklists for the host blocker.  Only used when
+## the simple host-blocker is used (see `content.blocking.method`).  The
+## file can be in one of the following formats:  - An `/etc/hosts`-like
+## file - One host per line - A zip-file of any of the above, with either
+## only one file, or a file   named `hosts` (with any extension).  It's
+## also possible to add a local file or directory via a `file://` URL. In
+## case of a directory, all files in the directory are read as adblock
+## lists.  The file `~/.config/qutebrowser/blocked-hosts` is always read
+## if it exists.
+## Type: List of Url
+# c.content.blocking.hosts.lists = ['https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts']
+
+## Which method of blocking ads should be used.  Support for Adblock Plus
+## (ABP) syntax blocklists using Brave's Rust library requires the
+## `adblock` Python package to be installed, which is an optional
+## dependency of qutebrowser. It is required when either `adblock` or
+## `both` are selected.
+## Type: String
+## Valid values:
+##   - auto: Use Brave's ABP-style adblocker if available, host blocking otherwise
+##   - adblock: Use Brave's ABP-style adblocker
+##   - hosts: Use hosts blocking
+##   - both: Use both hosts blocking and Brave's ABP-style adblocker
+# c.content.blocking.method = 'auto'
+
+## A list of patterns that should always be loaded, despite being blocked
+## by the ad-/host-blocker. Local domains are always exempt from
+## adblocking. Note this whitelists otherwise blocked requests, not
+## first-party URLs. As an example, if `example.org` loads an ad from
+## `ads.example.org`, the whitelist entry could be
+## `https://ads.example.org/*`. If you want to disable the adblocker on a
+## given page, use the `content.blocking.enabled` setting with a URL
+## pattern instead.
+## Type: List of UrlPattern
+# c.content.blocking.whitelist = []
+
 ## Enable support for the HTML 5 web application cache feature. An
 ## application cache acts like an HTTP cache in some sense. For documents
 ## that use the application cache via JavaScript, the loader engine will
@@ -534,7 +373,7 @@ c.confirm_quit = ['downloads']
 ## page cache allows for a nicer user experience when navigating forth or
 ## back to pages in the forward/back history, by pausing and resuming up
 ## to _n_ pages. For more information about the feature, please refer to:
-## http://webkit.org/blog/427/webkit-page-cache-i-the-basics/
+## https://webkit.org/blog/427/webkit-page-cache-i-the-basics/
 ## Type: Int
 # c.content.cache.maximum_pages = 0
 
@@ -549,7 +388,22 @@ c.confirm_quit = ['downloads']
 ## Type: Bool
 # c.content.canvas_reading = True
 
-## Which cookies to accept.
+## Which cookies to accept. With QtWebEngine, this setting also controls
+## other features with tracking capabilities similar to those of cookies;
+## including IndexedDB, DOM storage, filesystem API, service workers, and
+## AppCache. Note that with QtWebKit, only `all` and `never` are
+## supported as per-domain values. Setting `no-3rdparty` or `no-
+## unknown-3rdparty` per-domain on QtWebKit will have the same effect as
+## `all`. If this setting is used with URL patterns, the pattern gets
+## applied to the origin/first party URL of the page making the request,
+## not the request URL. With QtWebEngine 5.15.0+, paths will be stripped
+## from URLs, so URL patterns using paths will not match. With
+## QtWebEngine 5.15.2+, subdomains are additionally stripped as well, so
+## you will typically need to set this setting for `example.com` when the
+## cookie is set on `somesubdomain.example.com` for it to work properly.
+## To debug issues with this setting, start qutebrowser with `--debug
+## --logfilter network --debug-flag log-cookies` which will show all
+## cookies being set.
 ## Type: String
 ## Valid values:
 ##   - all: Accept all cookies.
@@ -558,8 +412,7 @@ c.confirm_quit = ['downloads']
 ##   - never: Don't accept cookies at all.
 c.content.cookies.accept = 'no-3rdparty'
 
-## Store cookies. Note this option needs a restart with QtWebEngine on Qt
-## < 5.9.
+## Store cookies.
 ## Type: Bool
 # c.content.cookies.store = True
 
@@ -568,8 +421,7 @@ c.content.cookies.accept = 'no-3rdparty'
 ## Type: String
 # c.content.default_encoding = 'iso-8859-1'
 
-## Allow websites to share screen content. On Qt < 5.10, a dialog box is
-## always displayed, even if this is set to "true".
+## Allow websites to share screen content.
 ## Type: BoolAsk
 ## Valid values:
 ##   - true
@@ -579,25 +431,35 @@ c.content.cookies.accept = 'no-3rdparty'
 
 ## Try to pre-fetch DNS entries to speed up browsing.
 ## Type: Bool
-c.content.dns_prefetch = True
+c.content.dns_prefetch = True
 
 ## Expand each subframe to its contents. This will flatten all the frames
 ## to become one scrollable page.
 ## Type: Bool
 # c.content.frame_flattening = False
 
+## Set fullscreen notification overlay timeout in milliseconds. If set to
+## 0, no overlay will be displayed.
+## Type: Int
+# c.content.fullscreen.overlay_timeout = 3000
+
+## Limit fullscreen to the browser window (does not expand to fill the
+## screen).
+## Type: Bool
+# c.content.fullscreen.window = False
+
 ## Allow websites to request geolocations.
 ## Type: BoolAsk
 ## Valid values:
 ##   - true
 ##   - false
 ##   - ask
-# c.content.geolocation = 'ask'
+c.content.geolocation = False
 
 ## Value to send in the `Accept-Language` header. Note that the value
 ## read from JavaScript is always the global value.
 ## Type: String
-c.content.headers.accept_language = 'en-US,en,de,fr'
+c.content.headers.accept_language = 'en-UK;q=1.0, en;q=0.9, de;q=0.7, fr;q=0.7, *;q=0.5'
 
 ## Custom headers for qutebrowser HTTP requests.
 ## Type: Dict
@@ -610,8 +472,10 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 # c.content.headers.do_not_track = True
 
 ## When to send the Referer header. The Referer header tells websites
-## from which website you were coming from when visiting them. No restart
-## is needed with QtWebKit.
+## from which website you were coming from when visiting them. Note that
+## with QtWebEngine, websites can override this preference by setting the
+## `Referrer-Policy:` header, so that any websites visited from them get
+## the full referer. No restart is needed with QtWebKit.
 ## Type: String
 ## Valid values:
 ##   - always: Always send the Referer.
@@ -629,35 +493,12 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ## Safari/Chrome version. * `{qutebrowser_version}`: The currently
 ## running qutebrowser version.  The default value is equal to the
 ## unchanged user agent of QtWebKit/QtWebEngine.  Note that the value
-## read from JavaScript is always the global value.
+## read from JavaScript is always the global value. With QtWebEngine
+## between 5.12 and 5.14 (inclusive), changing the value exposed to
+## JavaScript requires a restart.
 ## Type: FormatString
 # c.content.headers.user_agent = 'Mozilla/5.0 ({os_info}) AppleWebKit/{webkit_version} (KHTML, like Gecko) {qt_key}/{qt_version} {upstream_browser_key}/{upstream_browser_version} Safari/{webkit_version}'
 
-## Enable host blocking.
-## Type: Bool
-# c.content.host_blocking.enabled = True
-
-## List of URLs of lists which contain hosts to block.  The file can be
-## in one of the following formats:  - An `/etc/hosts`-like file - One
-## host per line - A zip-file of any of the above, with either only one
-## file, or a file   named `hosts` (with any extension).  It's also
-## possible to add a local file or directory via a `file://` URL. In case
-## of a directory, all files in the directory are read as adblock lists.
-## The file `~/.config/qutebrowser/blocked-hosts` is always read if it
-## exists.
-## Type: List of Url
-# c.content.host_blocking.lists = ['https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts']
-
-## A list of patterns that should always be loaded, despite being ad-
-## blocked. Note this whitelists blocked hosts, not first-party URLs. As
-## an example, if `example.org` loads an ad from `ads.example.org`, the
-## whitelisted host should be `ads.example.org`. If you want to disable
-## the adblocker on a given page, use the `content.host_blocking.enabled`
-## setting with a URL pattern instead. Local domains are always exempt
-## from hostblocking.
-## Type: List of UrlPattern
-# c.content.host_blocking.whitelist = []
-
 ## Enable hyperlink auditing (`<a ping>`).
 ## Type: Bool
 # c.content.hyperlink_auditing = False
@@ -718,13 +559,29 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ## Type: Bool
 # c.content.local_storage = True
 
-## Allow websites to record audio/video.
+## Allow websites to record audio.
 ## Type: BoolAsk
 ## Valid values:
 ##   - true
 ##   - false
 ##   - ask
-# c.content.media_capture = 'ask'
+# c.content.media.audio_capture = 'ask'
+
+## Allow websites to record audio and video.
+## Type: BoolAsk
+## Valid values:
+##   - true
+##   - false
+##   - ask
+# c.content.media.audio_video_capture = 'ask'
+
+## Allow websites to record video.
+## Type: BoolAsk
+## Valid values:
+##   - true
+##   - false
+##   - ask
+# c.content.media.video_capture = 'ask'
 
 ## Allow websites to lock your mouse pointer.
 ## Type: BoolAsk
@@ -750,7 +607,36 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ##   - true
 ##   - false
 ##   - ask
-# c.content.notifications = 'ask'
+c.content.notifications.enabled = 'ask'
+config.set('content.notifications.enabled', True, '*://*.gitlab.com/*')
+config.set('content.notifications.enabled', True, '*://*.google.com/*')
+
+## What notification presenter to use for web notifications. Note that
+## not all implementations support all features of notifications: - With
+## PyQt 5.14, any setting other than `qt` does not support  the `click`
+## and   `close` events, as well as the `tag` option to replace existing
+## notifications. - The `qt` and `systray` options only support showing
+## one notification at the time   and ignore the `tag` option to replace
+## existing notifications. - The `herbe` option only supports showing one
+## notification at the time and doesn't   show icons. - The `messages`
+## option doesn't show icons and doesn't support the `click` and
+## `close` events.
+## Type: String
+## Valid values:
+##   - auto: Tries `libnotify`, `systray` and `messages`, uses the first one available without showing error messages.
+##   - qt: Use Qt's native notification presenter, based on a system tray icon. Switching from or to this value requires a restart of qutebrowser. Recommended over `systray` on PyQt 5.14.
+##   - libnotify: Shows messages via DBus in a libnotify-compatible way. If DBus isn't available, falls back to `systray` or `messages`, but shows an error message.
+##   - systray: Use a notification presenter based on a systray icon. Falls back to `libnotify` or `messages` if not systray is available. This is a reimplementation of the `qt` setting value, but with the possibility to switch to it at runtime.
+##   - messages: Show notifications as qutebrowser messages. Most notification features aren't available.
+##   - herbe: (experimental!) Show notifications using herbe (github.com/dudik/herbe). Most notification features aren't available.
+# c.content.notifications.presenter = 'auto'
+
+## Whether to show the origin URL for notifications. Note that URL
+## patterns with this setting only get matched against the origin part of
+## the URL, so e.g. paths in patterns will never match. Note that with
+## the `qt` presenter, origins are never shown.
+## Type: Bool
+# c.content.notifications.show_origin = True
 
 ## Allow pdf.js to view PDF files in the browser. Note that the files can
 ## still be downloaded by clicking the download button in the pdf.js
@@ -771,6 +657,14 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ## Type: Bool
 # c.content.plugins = False
 
+## Request websites to minimize non-essentials animations and motion.
+## This results in the `prefers-reduced-motion` CSS media query to
+## evaluate to `reduce` (rather than `no-preference`). On Windows, if
+## this setting is set to False, the system-wide animation setting is
+## considered.
+## Type: Bool
+# c.content.prefers_reduced_motion = False
+
 ## Draw the background color and images also when the page is printed.
 ## Type: Bool
 # c.content.print_element_backgrounds = True
@@ -781,7 +675,9 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 # c.content.private_browsing = False
 
 ## Proxy to use. In addition to the listed values, you can use a
-## `socks://...` or `http://...` URL.
+## `socks://...` or `http://...` URL. Note that with QtWebEngine, it will
+## take a couple of seconds until the change is applied, if this value is
+## changed at runtime.
 ## Type: Proxy
 ## Valid values:
 ##   - system: Use the system wide proxy.
@@ -800,19 +696,51 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ##   - false
 ##   - ask
 # c.content.register_protocol_handler = 'ask'
+with config.pattern('*://mail.google.com/*') as p:
+    p.content.register_protocol_handler = False
+with config.pattern('*://calendar.google.com/*') as p:
+    p.content.register_protocol_handler = False
 
 ## Enable quirks (such as faked user agent headers) needed to get
 ## specific sites to work properly.
 ## Type: Bool
-# c.content.site_specific_quirks = True
+# c.content.site_specific_quirks.enabled = True
 
-## Validate SSL handshakes.
-## Type: BoolAsk
+## Disable a list of named quirks. The js-string-replaceall quirk is
+## needed for Nextcloud Calendar < 2.2.0 with QtWebEngine < 5.15.3.
+## However, the workaround is not fully compliant to the ECMAScript spec
+## and might cause issues on other websites, so it's disabled by default.
+## Type: FlagList
 ## Valid values:
-##   - true
-##   - false
-##   - ask
-# c.content.ssl_strict = 'ask'
+##   - ua-whatsapp
+##   - ua-google
+##   - ua-slack
+##   - ua-googledocs
+##   - js-whatsapp-web
+##   - js-discord
+##   - js-string-replaceall
+##   - js-globalthis
+##   - js-object-fromentries
+##   - misc-krunker
+##   - misc-mathml-darkmode
+# c.content.site_specific_quirks.skip = ['js-string-replaceall']
+
+## How to proceed on TLS certificate errors.
+## Type: String
+## Valid values:
+##   - ask: Ask how to proceed for every certificate error (unless non-overridable due to HSTS).
+##   - ask-block-thirdparty: Ask how to proceed for normal page loads, but silently block resource loads.
+##   - block: Automatically block loading on certificate errors.
+##   - load-insecurely: Force loading pages despite certificate errors. This is *insecure* and should be avoided. Instead of using this, consider fixing the underlying issue or importing a self-signed certificate via `certutil` (or Chromium) instead.
+# c.content.tls.certificate_errors = 'ask'
+
+## How navigation requests to URLs with unknown schemes are handled.
+## Type: String
+## Valid values:
+##   - disallow: Disallows all navigation requests to URLs with unknown schemes.
+##   - allow-from-user-interaction: Allows navigation requests to URLs with unknown schemes that are issued from user-interaction (like a mouse-click), whereas other navigation requests (for example from JavaScript) are suppressed.
+##   - allow-all: Allows all navigation requests to URLs with unknown schemes.
+# c.content.unknown_url_scheme_policy = 'allow-from-user-interaction'
 
 ## List of user stylesheet filenames to use.
 ## Type: List of File, or File
@@ -822,8 +750,7 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ## Type: Bool
 # c.content.webgl = True
 
-## Which interfaces to expose via WebRTC. On Qt 5.10, this option doesn't
-## work because of a Qt bug.
+## Which interfaces to expose via WebRTC.
 ## Type: String
 ## Valid values:
 ##   - all-interfaces: WebRTC has the right to enumerate all interfaces and bind them to discover public interfaces.
@@ -832,13 +759,8 @@ c.content.headers.accept_language = 'en-US,en,de,fr'
 ##   - disable-non-proxied-udp: WebRTC should only use TCP to contact peers or servers unless the proxy server supports UDP. This doesn't expose any local addresses either.
 # c.content.webrtc_ip_handling_policy = 'all-interfaces'
 
-## Limit fullscreen to the browser window (does not expand to fill the
-## screen).
-## Type: Bool
-# c.content.windowed_fullscreen = False
-
 ## Monitor load requests for cross-site scripting attempts. Suspicious
-## scripts will be blocked and reported in the inspector's JavaScript
+## scripts will be blocked and reported in the devtools JavaScript
 ## console. Note that bypasses for the XSS auditor are widely known and
 ## it can be abused for cross-site info leaks in some scenarios, see:
 ## https://www.chromium.org/developers/design-documents/xss-auditor
@@ -880,31 +802,73 @@ c.downloads.open_dispatcher = "rifle"
 ##   - bottom
 # c.downloads.position = 'top'
 
+## Automatically abort insecure (HTTP) downloads originating from secure
+## (HTTPS) pages. For per-domain settings, the relevant URL is the URL
+## initiating the download, not the URL the download itself is coming
+## from. It's not recommended to set this setting to false globally.
+## Type: Bool
+# c.downloads.prevent_mixed_content = True
+
 ## Duration (in milliseconds) to wait before removing finished downloads.
 ## If set to -1, downloads are never removed.
 ## Type: Int
 # c.downloads.remove_finished = -1
 
-## Editor (and arguments) to use for the `open-editor` command. The
-## following placeholders are defined:  * `{file}`: Filename of the file
-## to be edited. * `{line}`: Line in which the caret is found in the
-## text. * `{column}`: Column in which the caret is found in the text. *
+## Editor (and arguments) to use for the `edit-*` commands. The following
+## placeholders are defined:  * `{file}`: Filename of the file to be
+## edited. * `{line}`: Line in which the caret is found in the text. *
+## `{column}`: Column in which the caret is found in the text. *
 ## `{line0}`: Same as `{line}`, but starting from index 0. * `{column0}`:
 ## Same as `{column}`, but starting from index 0.
 ## Type: ShellCommand
-c.editor.command = ['urxvtc', '-e', 'vim', '{file}', '-c', 'normal {line}G{column0}l']
+c.editor.command = in_terminal(['vim', '{file}', '-c', 'normal {line}G{column0}l'])
 
 ## Encoding to use for the editor.
 ## Type: Encoding
 # c.editor.encoding = 'utf-8'
 
+## Command (and arguments) to use for selecting a single folder in forms.
+## The command should write the selected folder path to the specified
+## file or stdout. The following placeholders are defined: * `{}`:
+## Filename of the file to be written to. If not contained in any
+## argument, the   standard output of the command is read instead.
+## Type: ShellCommand
+c.fileselect.folder.command = in_terminal(['ranger', '--choosedir={}'])
+
+## Handler for selecting file(s) in forms. If `external`, then the
+## commands specified by `fileselect.single_file.command` and
+## `fileselect.multiple_files.command` are used to select one or multiple
+## files respectively.
+## Type: String
+## Valid values:
+##   - default: Use the default file selector.
+##   - external: Use an external command.
+c.fileselect.handler = 'external'
+
+## Command (and arguments) to use for selecting multiple files in forms.
+## The command should write the selected file paths to the specified file
+## or to stdout, separated by newlines. The following placeholders are
+## defined: * `{}`: Filename of the file to be written to. If not
+## contained in any argument, the   standard output of the command is
+## read instead.
+## Type: ShellCommand
+c.fileselect.multiple_files.command = in_terminal(['ranger', '--choosefiles={}'])
+
+## Command (and arguments) to use for selecting a single file in forms.
+## The command should write the selected file path to the specified file
+## or stdout. The following placeholders are defined: * `{}`: Filename of
+## the file to be written to. If not contained in any argument, the
+## standard output of the command is read instead.
+## Type: ShellCommand
+c.fileselect.single_file.command = in_terminal(['ranger', '--choosefile={}'])
+
 ## Font used in the completion categories.
 ## Type: Font
-# c.fonts.completion.category = 'bold 10pt monospace'
+# c.fonts.completion.category = 'bold default_size default_family'
 
 ## Font used in the completion widget.
 ## Type: Font
-# c.fonts.completion.entry = '10pt monospace'
+# c.fonts.completion.entry = 'default_size default_family'
 
 ## Font used for the context menu. If set to null, the Qt default is
 ## used.
@@ -912,49 +876,61 @@ c.editor.command = ['urxvtc', '-e', 'vim', '{file}', '-c', 'normal {line}G{colum
 # c.fonts.contextmenu = None
 
 ## Font used for the debugging console.
-## Type: QtFont
-# c.fonts.debug_console = '10pt monospace'
+## Type: Font
+# c.fonts.debug_console = 'default_size default_family'
+
+## Default font families to use. Whenever "default_family" is used in a
+## font setting, it's replaced with the fonts listed here. If set to an
+## empty value, a system-specific monospace default is used.
+## Type: List of Font, or Font
+c.fonts.default_family = ["Fira Code"]
+
+## Default font size to use. Whenever "default_size" is used in a font
+## setting, it's replaced with the size listed here. Valid values are
+## either a float value with a "pt" suffix, or an integer value with a
+## "px" suffix.
+## Type: String
+# c.fonts.default_size = '10pt'
 
 ## Font used for the downloadbar.
 ## Type: Font
-# c.fonts.downloads = '10pt monospace'
+# c.fonts.downloads = 'default_size default_family'
 
 ## Font used for the hints.
 ## Type: Font
-# c.fonts.hints = 'bold 10pt monospace'
+# c.fonts.hints = 'bold default_size default_family'
 
 ## Font used in the keyhint widget.
 ## Type: Font
-# c.fonts.keyhint = '10pt monospace'
+# c.fonts.keyhint = 'default_size default_family'
 
 ## Font used for error messages.
 ## Type: Font
-# c.fonts.messages.error = '10pt monospace'
+# c.fonts.messages.error = 'default_size default_family'
 
 ## Font used for info messages.
 ## Type: Font
-# c.fonts.messages.info = '10pt monospace'
+# c.fonts.messages.info = 'default_size default_family'
 
 ## Font used for warning messages.
 ## Type: Font
-# c.fonts.messages.warning = '10pt monospace'
-
-## Default monospace fonts. Whenever "monospace" is used in a font
-## setting, it's replaced with the fonts listed here.
-## Type: Font
-c.fonts.monospace = 'Hack, "xos4 Terminus", Terminus, Monospace, "DejaVu Sans Mono", Monaco, "Bitstream Vera Sans Mono", "Andale Mono", "Courier New", Courier, "Liberation Mono", monospace, Fixed, Consolas, Terminal'
+# c.fonts.messages.warning = 'default_size default_family'
 
 ## Font used for prompts.
 ## Type: Font
-# c.fonts.prompts = '10pt sans-serif'
+# c.fonts.prompts = 'default_size sans-serif'
 
 ## Font used in the statusbar.
 ## Type: Font
-# c.fonts.statusbar = '10pt monospace'
+# c.fonts.statusbar = 'default_size default_family'
+
+## Font used for selected tabs.
+## Type: Font
+# c.fonts.tabs.selected = 'default_size default_family'
 
-## Font used in the tab bar.
-## Type: QtFont
-# c.fonts.tabs = '10pt monospace'
+## Font used for unselected tabs.
+## Type: Font
+# c.fonts.tabs.unselected = 'default_size default_family'
 
 ## Font family for cursive fonts.
 ## Type: FontFamily
@@ -1036,7 +1012,7 @@ c.hints.chars = 'aoeuidhtns'
 
 ## Leave hint mode when starting a new page load.
 ## Type: Bool
-# c.hints.leave_on_load = True
+# c.hints.leave_on_load = False
 
 ## Minimum number of characters used for hint strings.
 ## Type: Int
@@ -1054,10 +1030,18 @@ c.hints.min_chars = 2
 ## Type: List of Regex
 # c.hints.next_regexes = ['\\bnext\\b', '\\bmore\\b', '\\bnewer\\b', '\\b[>→≫]\\b', '\\b(>>|»)\\b', '\\bcontinue\\b']
 
+## Padding (in pixels) for hints.
+## Type: Padding
+# c.hints.padding = {'top': 0, 'bottom': 0, 'left': 3, 'right': 3}
+
 ## Comma-separated list of regular expressions to use for 'prev' links.
 ## Type: List of Regex
 # c.hints.prev_regexes = ['\\bprev(ious)?\\b', '\\bback\\b', '\\bolder\\b', '\\b[<←≪]\\b', '\\b(<<|«)\\b']
 
+## Rounding radius (in pixels) for the edges of hints.
+## Type: Int
+# c.hints.radius = 3
+
 ## Scatter hint key chains (like Vimium) or not (like dwb). Ignored for
 ## number hints.
 ## Type: Bool
@@ -1066,7 +1050,7 @@ c.hints.scatter = False
 ## CSS selectors used to determine which elements on a page should have
 ## hints.
 ## Type: Dict
-# c.hints.selectors = {'all': ['a', 'area', 'textarea', 'select', 'input:not([type="hidden"])', 'button', 'frame', 'iframe', 'img', 'link', 'summary', '[onclick]', '[onmousedown]', '[role="link"]', '[role="option"]', '[role="button"]', '[ng-click]', '[ngClick]', '[data-ng-click]', '[x-ng-click]', '[tabindex]'], 'links': ['a[href]', 'area[href]', 'link[href]', '[role="link"][href]'], 'images': ['img'], 'media': ['audio', 'img', 'video'], 'url': ['[src]', '[href]'], 'inputs': ['input[type="text"]', 'input[type="date"]', 'input[type="datetime-local"]', 'input[type="email"]', 'input[type="month"]', 'input[type="number"]', 'input[type="password"]', 'input[type="search"]', 'input[type="tel"]', 'input[type="time"]', 'input[type="url"]', 'input[type="week"]', 'input:not([type])', 'textarea']}
+# c.hints.selectors = {'all': ['a', 'area', 'textarea', 'select', 'input:not([type="hidden"])', 'button', 'frame', 'iframe', 'img', 'link', 'summary', '[contenteditable]:not([contenteditable="false"])', '[onclick]', '[onmousedown]', '[role="link"]', '[role="option"]', '[role="button"]', '[ng-click]', '[ngClick]', '[data-ng-click]', '[x-ng-click]', '[tabindex]'], 'links': ['a[href]', 'area[href]', 'link[href]', '[role="link"][href]'], 'images': ['img'], 'media': ['audio', 'img', 'video'], 'url': ['[src]', '[href]'], 'inputs': ['input[type="text"]', 'input[type="date"]', 'input[type="datetime-local"]', 'input[type="email"]', 'input[type="month"]', 'input[type="number"]', 'input[type="password"]', 'input[type="search"]', 'input[type="tel"]', 'input[type="time"]', 'input[type="url"]', 'input[type="week"]', 'input:not([type])', '[contenteditable]:not([contenteditable="false"])', 'textarea']}
 
 ## Make characters in hint strings uppercase.
 ## Type: Bool
@@ -1108,7 +1092,7 @@ c.hints.scatter = False
 ## unreliable on this setting, and they may match the url you are
 ## navigating to, or the URL you are navigating from.
 ## Type: Bool
-c.input.insert_mode.leave_on_load = True
+c.input.insert_mode.leave_on_load = True
 
 ## Switch to insert mode when clicking flash and other plugins.
 ## Type: Bool
@@ -1118,16 +1102,26 @@ c.hints.scatter = False
 ## Type: Bool
 # c.input.links_included_in_focus_chain = True
 
-## Timeout (in milliseconds) for partially typed key bindings. If the
-## current input forms only partial matches, the keystring will be
-## cleared after this time.
-## Type: Int
-# c.input.partial_timeout = 5000
+## Whether the underlying Chromium should handle media keys. On Linux,
+## disabling this also disables Chromium's MPRIS integration.
+## Type: Bool
+# c.input.media_keys = True
+
+## Enable back and forward buttons on the mouse.
+## Type: Bool
+# c.input.mouse.back_forward_buttons = True
 
 ## Enable Opera-like mouse rocker gestures. This disables the context
 ## menu.
 ## Type: Bool
-# c.input.rocker_gestures = False
+# c.input.mouse.rocker_gestures = False
+
+## Timeout (in milliseconds) for partially typed key bindings. If the
+## current input forms only partial matches, the keystring will be
+## cleared after this time. If set to 0, partially typed bindings are
+## never cleared.
+## Type: Int
+# c.input.partial_timeout = 0
 
 ## Enable spatial navigation. Spatial navigation consists in the ability
 ## to navigate between focusable elements in a Web page, such as
@@ -1153,10 +1147,33 @@ c.hints.scatter = False
 ## Type: Int
 # c.keyhint.radius = 6
 
+## Level for console (stdout/stderr) logs. Ignored if the `--loglevel` or
+## `--debug` CLI flags are used.
+## Type: LogLevel
+## Valid values:
+##   - vdebug
+##   - debug
+##   - info
+##   - warning
+##   - error
+##   - critical
+# c.logging.level.console = 'info'
+
+## Level for in-memory logs.
+## Type: LogLevel
+## Valid values:
+##   - vdebug
+##   - debug
+##   - info
+##   - warning
+##   - error
+##   - critical
+# c.logging.level.ram = 'debug'
+
 ## Duration (in milliseconds) to show messages in the statusbar for. Set
 ## to 0 to never clear messages.
 ## Type: Int
-# c.messages.timeout = 2000
+# c.messages.timeout = 3000
 
 ## How to open links in an existing instance if a new one is launched.
 ## This happens when e.g. opening a link from a terminal. See
@@ -1169,6 +1186,7 @@ c.hints.scatter = False
 ##   - tab-silent: Open a new tab in the existing window without activating the window.
 ##   - tab-bg-silent: Open a new background tab in the existing window without activating the window.
 ##   - window: Open in a new window.
+##   - private-window: Open in a new private window.
 # c.new_instance_open_target = 'tab'
 
 ## Which window to choose when opening links as new tabs. When
@@ -1181,7 +1199,7 @@ c.hints.scatter = False
 ##   - last-visible: Open new tabs in the most recently visible window.
 # c.new_instance_open_target_window = 'last-focused'
 
-## Show a filebrowser in upload/download prompts.
+## Show a filebrowser in download prompts.
 ## Type: Bool
 # c.prompt.filebrowser = True
 
@@ -1194,7 +1212,12 @@ c.hints.scatter = False
 ## https://peter.sh/experiments/chromium-command-line-switches/ for a
 ## list) will work.
 ## Type: List of String
-# c.qt.args = []
+c.qt.args = ['proxy-pac-url=file://' + str(config.configdir / 'proxy.pac')]
+
+## Additional environment variables to set. Setting an environment
+## variable to null/None will unset it.
+## Type: Dict
+# c.qt.environ = {}
 
 ## Force a Qt platform to use. This sets the `QT_QPA_PLATFORM`
 ## environment variable and is useful to force using the XCB plugin when
@@ -1202,6 +1225,13 @@ c.hints.scatter = False
 ## Type: String
 # c.qt.force_platform = None
 
+## Force a Qt platformtheme to use. This sets the `QT_QPA_PLATFORMTHEME`
+## environment variable which controls dialogs like the filepicker. By
+## default, Qt determines the platform theme based on the desktop
+## environment.
+## Type: String
+# c.qt.force_platformtheme = None
+
 ## Force software rendering for QtWebEngine. This is needed for
 ## QtWebEngine to work with Nouveau drivers and can be useful in other
 ## scenarios related to graphic issues.
@@ -1242,13 +1272,33 @@ c.hints.scatter = False
 ##   - single-process: Run all tabs in a single process. This should be used for debugging purposes only, and it disables `:open --private`.
 # c.qt.process_model = 'process-per-site-instance'
 
-## When to show the scrollbar.
+## Work around locale parsing issues in QtWebEngine 5.15.3. With some
+## locales, QtWebEngine 5.15.3 is unusable without this workaround. In
+## affected scenarios, QtWebEngine will log "Network service crashed,
+## restarting service." and only display a blank page. However, It is
+## expected that distributions shipping QtWebEngine 5.15.3 follow up with
+## a proper fix soon, so it is disabled by default.
+## Type: Bool
+# c.qt.workarounds.locale = False
+
+## Delete the QtWebEngine Service Worker directory on every start. This
+## workaround can help with certain crashes caused by an unknown
+## QtWebEngine bug related to Service Workers. Those crashes happen
+## seemingly immediately on Windows; after one hour of operation on other
+## systems. Note however that enabling this option *can lead to data
+## loss* on some pages (as Service Worker data isn't persisted) and will
+## negatively impact start-up time.
+## Type: Bool
+# c.qt.workarounds.remove_service_workers = False
+
+## When/how to show the scrollbar.
 ## Type: String
 ## Valid values:
 ##   - always: Always show the scrollbar.
 ##   - never: Never show the scrollbar.
 ##   - when-searching: Show the scrollbar when searching for text in the webpage. With the QtWebKit backend, this is equal to `never`.
-c.scrolling.bar = 'never'
+##   - overlay: Show an overlay scrollbar. On macOS, this is unavailable and equal to `when-searching`; with the QtWebKit backend, this is equal to `never`. Enabling/disabling overlay scrollbars requires a restart.
+# c.scrolling.bar = 'overlay'
 
 ## Enable smooth scrolling for web pages. Note smooth scrolling does not
 ## work with the `:scroll-px` command.
@@ -1268,6 +1318,11 @@ c.scrolling.bar = 'never'
 ## Type: Bool
 # c.search.incremental = True
 
+## Wrap around at the top and bottom of the page when advancing through
+## text matches using `:search-next` and `:search-prev`.
+## Type: Bool
+# c.search.wrap = True
+
 ## Name of the session to save by default. If this is set to null, the
 ## session which was last loaded is saved.
 ## Type: SessionName
@@ -1275,7 +1330,17 @@ c.scrolling.bar = 'never'
 
 ## Load a restored tab as soon as it takes focus.
 ## Type: Bool
-c.session.lazy_restore = True
+# c.session.lazy_restore = False
+
+## Whether to automatically save a session when it is closed.
+## Type: Bool
+# c.session.save_when_close = True
+
+## Which sessions to load on startup. None will load the last saved
+## sessions from the sate file, if you want to not load any sessions,
+## pass an empty list.
+## Type: List of String
+# c.session.startup_sessions = None
 
 ## Languages to use for spell checking. You can check for available
 ## languages and install dictionaries using scripts/dictcli.py. Run the
@@ -1327,10 +1392,6 @@ c.session.lazy_restore = True
 ##   - vi-VN: Vietnamese (Viet Nam)
 c.spellcheck.languages = ['en-GB']
 
-## Hide the statusbar unless a message is shown.
-## Type: Bool
-# c.statusbar.hide = False
-
 ## Padding (in pixels) for the statusbar.
 ## Type: Padding
 # c.statusbar.padding = {'top': 1, 'bottom': 1, 'left': 0, 'right': 0}
@@ -1342,8 +1403,16 @@ c.spellcheck.languages = ['en-GB']
 ##   - bottom
 # c.statusbar.position = 'bottom'
 
+## When to show the statusbar.
+## Type: String
+## Valid values:
+##   - always: Always show the statusbar.
+##   - never: Always hide the statusbar.
+##   - in-mode: Show the statusbar when in modes other than normal mode.
+# c.statusbar.show = 'always'
+
 ## List of widgets displayed in the statusbar.
-## Type: List of String
+## Type: List of StatusbarWidget
 ## Valid values:
 ##   - url: Current page URL.
 ##   - scroll: Percentage of the current page position like `10%`.
@@ -1352,11 +1421,12 @@ c.spellcheck.languages = ['en-GB']
 ##   - tabs: Current active tab, e.g. `2`.
 ##   - keypress: Display pressed keys when composing a vi command.
 ##   - progress: Progress bar for the current page loading.
+##   - text:foo: Display the static text after the colon, `foo` in the example.
 # c.statusbar.widgets = ['keypress', 'url', 'scroll', 'history', 'tabs', 'progress']
 
 ## Open new tabs (middleclick/ctrl+click) in the background.
 ## Type: Bool
-# c.tabs.background = False
+# c.tabs.background = True
 
 ## Mouse button with which to close tabs.
 ## Type: String
@@ -1380,7 +1450,9 @@ c.spellcheck.languages = ['en-GB']
 ## Type: Float
 # c.tabs.favicons.scale = 1.0
 
-## When to show favicons in the tab bar.
+## When to show favicons in the tab bar. When switching this from never
+## to always/pinned, note that favicons might not be loaded yet, thus
+## tabs might require a reload to display them.
 ## Type: String
 ## Valid values:
 ##   - always: Always show favicons.
@@ -1400,7 +1472,9 @@ c.spellcheck.languages = ['en-GB']
 ## Type: Int
 # c.tabs.indicator.width = 3
 
-## How to behave when the last tab is closed.
+## How to behave when the last tab is closed. If the
+## `tabs.tabs_are_windows` setting is set, this is ignored and the
+## behavior is always identical to the `close` value.
 ## Type: String
 ## Valid values:
 ##   - ignore: Don't do anything.
@@ -1519,16 +1593,21 @@ c.tabs.select_on_remove = 'prev'
 # c.tabs.title.alignment = 'left'
 
 ## Format to use for the tab title. The following placeholders are
-## defined:  * `{perc}`: Percentage as a string like `[10%]`. *
-## `{perc_raw}`: Raw percentage, e.g. `10`. * `{current_title}`: Title of
-## the current web page. * `{title_sep}`: The string ` - ` if a title is
-## set, empty otherwise. * `{index}`: Index of this tab. * `{id}`:
-## Internal tab ID of this tab. * `{scroll_pos}`: Page scroll position. *
-## `{host}`: Host of the current web page. * `{backend}`: Either
-## ''webkit'' or ''webengine'' * `{private}`: Indicates when private mode
-## is enabled. * `{current_url}`: URL of the current web page. *
-## `{protocol}`: Protocol (http/https/...) of the current web page. *
-## `{audio}`: Indicator for audio/mute status.
+## defined:
+##   * `{perc}`: Percentage as a string like `[10%]`.
+##   * `{perc_raw}`: Raw percentage, e.g. `10`.
+##   * `{current_title}`: Title of the current web page.
+##   * `{title_sep}`: The string `" - "` if a title is set, empty otherwise.
+##   * `{index}`: Index of this tab.
+##   * `{aligned_index}`: Index of this tab padded with spaces to have the same width.
+##   * `{id}`: Internal tab ID of this tab.
+##   * `{scroll_pos}`: Page scroll position.
+##   * `{host}`: Host of the current web page.
+##   * `{backend}`: Either `webkit` or `webengine`
+##   * `{private}`: Indicates when private mode is enabled.
+##   * `{current_url}`: URL of the current web page.
+##   * `{protocol}`: Protocol (http/https/...) of the current web page.
+##   * `{audio}`: Indicator for audio/mute status.
 ## Type: FormatString
 # c.tabs.title.format = '{audio}{index}: {current_title}'
 
@@ -1542,15 +1621,15 @@ c.tabs.select_on_remove = 'prev'
 ## Type: Bool
 # c.tabs.tooltips = True
 
-## Number of close tab actions to remember, per window (-1 for no
-## maximum).
+## Number of closed tabs (per window) and closed windows to remember for
+## :undo (-1 for no maximum).
 ## Type: Int
 # c.tabs.undo_stack_size = 100
 
 ## Width (in pixels or as percentage of the window) of the tab bar if
 ## it's vertical.
 ## Type: PercOrInt
-# c.tabs.width = '20%'
+# c.tabs.width = '15%'
 
 ## Wrap when changing tabs.
 ## Type: Bool
@@ -1562,6 +1641,7 @@ c.tabs.select_on_remove = 'prev'
 ##   - naive: Use simple/naive check.
 ##   - dns: Use DNS requests (might be slow!).
 ##   - never: Never search automatically.
+##   - schemeless: Always search automatically unless URL explicitly contains a scheme.
 # c.url.auto_search = 'naive'
 
 ## Page to open if :open -t/-b/-w is used without URL. Use `about:blank`
@@ -1585,19 +1665,33 @@ c.url.default_page = 'https://duckduckgo.com/?t=chakra'
 ## Type: Bool
 # c.url.open_base_url = False
 
-## Search engines which can be used via the address bar. Maps a search
+## Search engines which can be used via the address bar.  Maps a search
 ## engine name (such as `DEFAULT`, or `ddg`) to a URL with a `{}`
 ## placeholder. The placeholder will be replaced by the search term, use
-## `{{` and `}}` for literal `{`/`}` signs. The search engine named
-## `DEFAULT` is used when `url.auto_search` is turned on and something
-## else than a URL was entered to be opened. Other search engines can be
-## used by prepending the search engine name to the search term, e.g.
-## `:open google qutebrowser`.
+## `{{` and `}}` for literal `{`/`}` braces.  The following further
+## placeholds are defined to configure how special characters in the
+## search terms are replaced by safe characters (called 'quoting'):
+##  * `{}` and `{semiquoted}` quote everything except slashes; this is the
+##    most sensible choice for almost all search engines (for the search
+##    term `slash/and&amp` this placeholder expands to `slash/and%26amp`).
+##  * `{quoted}` quotes all characters (for `slash/and&amp` this
+##    placeholder   expands to `slash%2Fand%26amp`).
+##  * `{unquoted}` quotes nothing (for `slash/and&amp` this placeholder
+##    expands to `slash/and&amp`).
+##  * `{0}` means the same as `{}`, but can be used multiple times.  The search
+##    engine named `DEFAULT` is used when
+## `url.auto_search` is turned on and something else than a URL was
+## entered to be opened. Other search engines can be used by prepending
+## the search engine name to the search term, e.g. `:open google
+## qutebrowser`.
 ## Type: Dict
 c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
                        'ddg':     'https://duckduckgo.com/?t=chakra&q={}',
+                       'cdda':    'https://nornagon.github.io/cdda-guide/?v=0.F-2#/search/{}',
                        'slack':   'https://focalpointpositioning.slack.com/messages/{}',
                        'std':     'http://en.cppreference.com/mwiki/index.php?title=Special%3ASearch&search={}',
+                       'hoogle':  'https://hoogle.haskell.org/?hoogle={}',
+                       'h':       'https://hoogle.haskell.org/?hoogle={}',
                       }
 
 ## Page(s) to open at the start.
@@ -1618,6 +1712,15 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 ## Type: FormatString
 # c.window.title_format = '{perc}{current_title}{title_sep}qutebrowser'
 
+## Set the main window background to transparent.  This allows having a
+## transparent tab- or statusbar (might require a compositor such as
+## picom). However, it breaks some functionality such as dmenu embedding
+## via its `-w` option. On some systems, it was additionally reported
+## that main window transparency negatively affects performance.  Note
+## this setting only affects windows opened after setting it.
+## Type: Bool
+# c.window.transparent = False
+
 ## Default zoom level.
 ## Type: Perc
 # c.zoom.default = '100%'
@@ -1635,7 +1738,7 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 # c.zoom.text_only = False
 
 ## Bindings for normal mode
-# config.bind("'", 'enter-mode jump_mark')
+# config.bind("'", 'mode-enter jump_mark')
 # config.bind('+', 'zoom-in')
 # config.bind('-', 'zoom-out')
 # config.bind('.', 'repeat-command')
@@ -1674,7 +1777,7 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 # config.bind('<Ctrl-PgDown>', 'tab-next')
 # config.bind('<Ctrl-PgUp>', 'tab-prev')
 # config.bind('<Ctrl-Q>', 'quit')
-# config.bind('<Ctrl-Return>', 'follow-selected -t')
+# config.bind('<Ctrl-Return>', 'selection-follow -t')
 # config.bind('<Ctrl-Shift-N>', 'open -p')
 # config.bind('<Ctrl-Shift-T>', 'undo')
 # config.bind('<Ctrl-Shift-Tab>', 'nop')
@@ -1682,7 +1785,7 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 # config.bind('<Ctrl-T>', 'open -t')
 # config.bind('<Ctrl-Tab>', 'tab-focus last')
 # config.bind('<Ctrl-U>', 'scroll-page 0 -0.5')
-# config.bind('<Ctrl-V>', 'enter-mode passthrough')
+# config.bind('<Ctrl-V>', 'mode-enter passthrough')
 # config.bind('<Ctrl-W>', 'tab-close')
 # config.bind('<Ctrl-X>', 'navigate decrement')
 # config.bind('<Ctrl-^>', 'tab-focus last')
@@ -1692,12 +1795,12 @@ c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?t=chakra&q={}',
 config.bind('<Escape>', 'clear-keychain ;; search ;; fullscreen --leave ;; fake-key <Escape>')
 # config.bind('<F11>', 'fullscreen')
 # config.bind('<F5>', 'reload')
-# config.bind('<Return>', 'follow-selected')
+# config.bind('<Return>', 'selection-follow')
 # config.bind('<back>', 'back')
 # config.bind('<forward>', 'forward')
 # config.bind('=', 'zoom')
 # config.bind('?', 'set-cmd-text ?')
-# config.bind('@', 'run-macro')
+# config.bind('@', 'macro-run')
 # config.bind('B', 'set-cmd-text -s :quickmark-load -t')
 # config.bind('D', 'tab-close -o')
 # config.bind('F', 'hint all tab')
@@ -1712,16 +1815,18 @@ config.bind('J', 'tab-prev')
 # 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('Sb', 'bookmark-list --jump')
+# config.bind('Sh', 'history')
+# config.bind('Sq', 'bookmark-list')
+# config.bind('Ss', 'set')
+# config.bind('T', 'set-cmd-text -sr :tab-focus')
+# config.bind('U', 'undo -w')
+# config.bind('V', 'mode-enter caret ;; selection-toggle --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('`', 'mode-enter set_mark')
 # config.bind('ad', 'download-cancel')
 # config.bind('b', 'set-cmd-text -s :quickmark-load')
 # config.bind('cd', 'download-clear')
@@ -1734,6 +1839,8 @@ config.bind('co', 'download-open')
 # config.bind('gB', 'set-cmd-text -s :bookmark-load -t')
 # config.bind('gC', 'tab-clone')
 # config.bind('gD', 'tab-give')
+# config.bind('gJ', 'tab-move +')
+# config.bind('gK', 'tab-move -')
 # config.bind('gO', 'set-cmd-text :open -t -r {url:pretty}')
 # config.bind('gU', 'navigate up -t')
 # config.bind('g^', 'tab-focus 1')
@@ -1743,29 +1850,33 @@ config.bind('co', 'download-open')
 # 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('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('gr', 'tab-move +')
+# config.bind('gt', 'set-cmd-text -s :tab-select')
 # config.bind('gu', 'navigate up')
 # config.bind('h', 'scroll left')
-# config.bind('i', 'enter-mode insert')
+# config.bind('i', 'mode-enter insert')
 # config.bind('j', 'scroll down')
 # config.bind('k', 'scroll up')
 # config.bind('l', 'scroll right')
-# config.bind('m', 'quickmark-save')
 config.bind('m', 'spawn mpv {url}')
 # 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('q', 'macro-record')
 # 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('sq', 'quickmark-save')
+config.bind('tCh', 'spawn --userscript config-cycle-tld -p    content.cookies.accept no-3rdparty never all;; reload')
+config.bind('tch', 'spawn --userscript config-cycle-tld -p -t content.cookies.accept no-3rdparty never all;; reload')
+config.bind('tGh', 'spawn --userscript config-cycle-tld -p    content.geolocation ;; reload')
+config.bind('tgh', 'spawn --userscript config-cycle-tld -p -t content.geolocation ;; 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')
@@ -1787,14 +1898,20 @@ config.bind('m', 'spawn mpv {url}')
 # 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('v', 'mode-enter 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', 'inspector')
+# config.bind('wi', 'devtools')
 # config.bind('wl', 'forward -w')
 # config.bind('wo', 'set-cmd-text -s :open -w')
 # config.bind('wp', 'open -w -- {clipboard}')
@@ -1810,34 +1927,39 @@ config.bind('m', 'spawn mpv {url}')
 # config.bind('yp', 'yank pretty-url')
 # config.bind('yt', 'yank title')
 # config.bind('yy', 'yank')
+config.bind('zl',  'spawn --userscript qute-pass')
+config.bind('zul', 'spawn --userscript qute-pass --username-only')
+config.bind('zpl', 'spawn --userscript qute-pass --password-only')
+config.bind('zol', 'spawn --userscript qute-pass --otp-only')
 # 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('<Ctrl-Space>', 'drop-selection', mode='caret')
-# config.bind('<Escape>', 'leave-mode', mode='caret')
+# config.bind('<Ctrl-Space>', 'selection-drop', mode='caret')
+# config.bind('<Escape>', 'mode-leave', mode='caret')
 # config.bind('<Return>', 'yank selection', mode='caret')
-# config.bind('<Space>', 'toggle-selection', mode='caret')
+# config.bind('<Space>', 'selection-toggle', 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', 'selection-toggle --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('c', 'mode-enter 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('o', 'selection-reverse', mode='caret')
+# config.bind('v', 'selection-toggle', 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')
@@ -1867,7 +1989,9 @@ config.bind('m', 'spawn mpv {url}')
 # config.bind('<Ctrl-W>', 'rl-unix-word-rubout', mode='command')
 # config.bind('<Ctrl-Y>', 'rl-yank', mode='command')
 # config.bind('<Down>', 'completion-item-focus --history next', mode='command')
-# config.bind('<Escape>', 'leave-mode', mode='command')
+# config.bind('<Escape>', 'mode-leave', mode='command')
+# config.bind('<PgDown>', 'completion-item-focus next-page', mode='command')
+# config.bind('<PgUp>', 'completion-item-focus prev-page', mode='command')
 # config.bind('<Return>', 'command-accept', mode='command')
 # config.bind('<Shift-Delete>', 'completion-item-del', mode='command')
 # config.bind('<Shift-Tab>', 'completion-item-focus prev', mode='command')
@@ -1878,16 +2002,17 @@ config.bind('m', 'spawn mpv {url}')
 # config.bind('<Ctrl-B>', 'hint all tab-bg', mode='hint')
 # config.bind('<Ctrl-F>', 'hint links', mode='hint')
 # config.bind('<Ctrl-R>', 'hint --rapid links tab-bg', mode='hint')
-# config.bind('<Escape>', 'leave-mode', mode='hint')
-# config.bind('<Return>', 'follow-hint', mode='hint')
+# config.bind('<Escape>', 'mode-leave', mode='hint')
+# config.bind('<Return>', 'hint-follow', mode='hint')
 
 ## Bindings for insert mode
-# config.bind('<Ctrl-E>', 'open-editor', mode='insert')
-# config.bind('<Escape>', 'leave-mode', mode='insert')
+# config.bind('<Ctrl-E>', 'edit-text', mode='insert')
+# config.bind('<Escape>', 'mode-leave', mode='insert')
+# config.bind('<Shift-Escape>', 'fake-key <Escape>', mode='insert')
 # config.bind('<Shift-Ins>', 'insert-text -- {primary}', mode='insert')
 
 ## Bindings for passthrough mode
-# config.bind('<Shift-Escape>', 'leave-mode', mode='passthrough')
+# config.bind('<Shift-Escape>', 'mode-leave', mode='passthrough')
 
 ## Bindings for prompt mode
 # config.bind('<Alt-B>', 'rl-backward-word', mode='prompt')
@@ -1909,21 +2034,23 @@ config.bind('m', 'spawn mpv {url}')
 # config.bind('<Ctrl-X>', 'prompt-open-download', mode='prompt')
 # config.bind('<Ctrl-Y>', 'rl-yank', mode='prompt')
 # config.bind('<Down>', 'prompt-item-focus next', mode='prompt')
-# config.bind('<Escape>', 'leave-mode', mode='prompt')
+# config.bind('<Escape>', 'mode-leave', mode='prompt')
 # config.bind('<Return>', 'prompt-accept', mode='prompt')
 # config.bind('<Shift-Tab>', 'prompt-item-focus prev', mode='prompt')
 # config.bind('<Tab>', 'prompt-item-focus next', mode='prompt')
 # config.bind('<Up>', 'prompt-item-focus prev', mode='prompt')
 
 ## Bindings for register mode
-# config.bind('<Escape>', 'leave-mode', mode='register')
+# config.bind('<Escape>', 'mode-leave', mode='register')
 
 ## Bindings for yesno mode
 # config.bind('<Alt-Shift-Y>', 'prompt-yank --sel', mode='yesno')
 # config.bind('<Alt-Y>', 'prompt-yank', mode='yesno')
-# config.bind('<Escape>', 'leave-mode', mode='yesno')
+# config.bind('<Escape>', 'mode-leave', mode='yesno')
 # config.bind('<Return>', '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')
+
+config.source('themes/nord-qutebrowser.py')