Configuration
qbrsh reads ~/.config/qbrsh/config.toml. Every field is optional and falls back to a default, so you only set what you want to change.
homepage = "https://duckduckgo.com"
newtab = "about:blank"
useragent = ""
[colors]
background = "#1a1a2e"
foreground = "#e0e0e0"
accent = "#ffd76e"
[font]
family = "monospace"
size = 11
[tabs]
width = 200
collapsed = false
[search]
default = "ddg"
[search.engines]
ddg = "https://duckduckgo.com/?q={}"
g = "https://www.google.com/search?q={}"
gh = "https://github.com/search?q={}"
w = "https://en.wikipedia.org/w/index.php?search={}"
[bindings]
j = "scroll down"
"<C-j>" = "tab-next"
[permissions]
default = "deny"
[permissions.sites]
"example.com" = "allow"Sections
homepage and newtab
homepage is the page opened on startup when no URL is passed on the command line. newtab is the page a blank new tab opens (for example :tabopen with no argument); it defaults to about:blank and is independent of homepage.
useragent
Override the browser's user-agent string. Leave it empty to keep the engine default.
search
Named search engines plus the keyword of the default. Each engine is a URL template with a {} placeholder that the query is substituted into. Bare command-line input that is not a URL goes to the default engine; a leading token that names an engine and is followed by a query selects that engine, so gh rust serde searches GitHub. If the configured default names no defined engine, a built-in DuckDuckGo engine is used.
bindings
Remap Normal-mode keys. Each entry maps a key string (the same syntax used in the keybinding table, such as gg or <C-f>) to a command. Entries are layered over the built-in defaults, so an entry whose key matches a default replaces it while every other default stays in place. A key string that conflicts with an existing multi-key binding (for example g while gg is bound) is reported and skipped. See also the runtime :bind, :unbind, and :bindings commands.
colors and font
Theme the chrome (tab list, status bar, command line, completion popup). Colors are any CSS color string; the font applies to the chrome, not page content.
tabs
Open tabs are shown as a vertical list down the left of the window, each row led by the site's favicon. The active tab's row is highlighted, and when the window is split the rows of tabs mounted in a pane are marked. Click a row to focus that tab. tabs.width sets the list's width in pixels (default 200); you can also drag the divider between the list and the page to resize it, or change it live with :set tabs.width. The list scrolls when the tabs do not fit.
Set tabs.collapsed to start as an icon-only rail, and toggle expanded/collapsed at any time with :tabs-toggle (bound to ,t). Collapsed rows show only the favicon, with the title as a tooltip.
proxy
The [proxy] section selects how outbound traffic is routed with a single mode value: system (or default) uses the system or default resolver, none routes directly with no proxy, and an http, https, or socks URL routes through that proxy.
[proxy]
mode = "socks://127.0.0.1:9050"The default is system, which preserves the unproxied default behavior. The proxy applies to both normal and private tabs. Change it at runtime with :proxy none, :proxy system, or :proxy socks://127.0.0.1:9050 (or :set proxy.mode ...); a non-default proxy shows a [proxy] marker in the status bar. A runtime change takes full effect for tabs opened afterward, while tabs already open keep their current routing until reloaded, because a view binds to its network session when it is created. A proxy URL may embed credentials (socks://user:pass@host), which are then stored in plain text in your config.
permissions
A default policy plus per-site overrides for geolocation, notifications, and media requests. See Permissions.
per-domain JavaScript
JavaScript runs everywhere by default. Disable or enable it for the current site at runtime with :js-disable, :js-enable, or :js-toggle (bound to ,j), which reloads the site's tabs. Rules are saved separately from config.toml and restored on the next launch. Set them directly with :set javascript.<host> true|false and change the global default with :set javascript.default true|false.
Changing settings at runtime
Use the :set command to change a value live:
:set colors.accent #ff5f5f
:set font.size 13
:set tabs.width 240
:set permissions.example.com allow
:set search.default g
:set search.engines.gh https://github.com/search?q={}
:set javascript.example.com falseReload the file from disk at any time with :config-source. There is no file watcher; reloading is explicit and deterministic.