import os import glob ## Load settings applied with :set config.load_autoconfig() ## General config c.content.default_encoding = 'utf-8' c.content.javascript.enabled = True c.content.local_storage = True c.content.plugins = True # c.confirm_quit = ['never'] c.editor.command = ['emacsclient', '-c', '-a', ' ', '+{line}:{column}', '{}'] ## Security & privacy c.content.mute = True # mute tabs by default c.content.autoplay = False # don't autoplay videos ## Adblocking # Use (superior) Brave adblock if available; fall back to host blocking c.content.blocking.method = "auto" c.content.blocking.hosts.lists = [ 'https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts', 'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&mimetype=plaintext' # 'https://www.malwaredomainlist.com/hostslist/hosts.txt', # 'http://someonewhocares.org/hosts/hosts', # 'http://winhelp2002.mvps.org/hosts.zip', # 'http://malwaredomains.lehigh.edu/files/justdomains.zip', ] # c.content.blocking.whitelist = [] c.downloads.position = 'bottom' c.downloads.location.directory = os.path.expanduser("~/dl") c.downloads.location.prompt = False c.editor.encoding = 'utf-8' ## Options # c.history_gap_interval = 30 # c.ignore_case = 'smart' # c.input.forward_unbound_keys = 'auto' # c.input.insert_mode.auto_leave = True c.input.insert_mode.auto_load = False # c.input.insert_mode.plugins = False # c.input.links_included_in_focus_chain = True # c.input.partial_timeout = 5000 # c.input.rocker_gestures = False # c.input.spatial_navigation = False # c.keyhint.blacklist = [] # c.keyhint.delay = 500 # c.messages.timeout = 2000 # c.messages.unfocused = False c.new_instance_open_target = 'tab-silent' # c.new_instance_open_target_window = 'last-focused' c.prompt.filebrowser = False c.prompt.radius = 0 # c.qt.args = [] # c.qt.force_platform = None # c.qt.force_software_rendering = False c.scrolling.smooth = False # c.session_default_name = None c.spellcheck.languages = ['en-US'] c.session.lazy_restore = False # c.statusbar.padding = {'top': 4, 'bottom': 4, 'left': 4, 'right': 4} # c.statusbar.hide = False # c.statusbar.position = 'bottom' # c.tabs.background = True # c.tabs.padding = {'top': 4, 'bottom': 4, 'left': 0, 'right': 3} # c.tabs.indicator.padding = {'top': 0, 'bottom': 0, 'left': 0, 'right': 5} # c.tabs.mousewheel_switching = False # c.tabs.close_mouse_button = 'middle' # c.tabs.favicons.scale = 1.0 # c.tabs.favicons.show = True # c.tabs.last_close = 'ignore' # c.tabs.new_position.related = 'next' # c.tabs.new_position.unrelated = 'last' # c.tabs.position = 'top' # c.tabs.select_on_remove = 'next' c.tabs.show = 'multiple' c.tabs.title.format = '{current_title} - {host}' c.tabs.title.format_pinned = '' c.tabs.indicator.width = 1 # c.tabs.wrap = True # c.url.auto_search = 'naive' # c.url.default_page = 'https://start.duckduckgo.com/' # c.url.incdec_segments = ['path', 'query'] # c.url.searchengines = {'DEFAULT': 'https://duckduckgo.com/?q={}'} # c.url.start_pages = ['https://start.duckduckgo.com'] # c.url.yank_ignored_parameters = ['ref', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'] # c.window.hide_wayland_decoration = False c.window.title_format = '{current_title} - {host} - qutebrowser' # c.zoom.default = '100%' # c.zoom.levels = ['25%', '33%', '50%', '67%', '75%', '90%', '100%', '110%', '125%', '150%', '175%', '200%', '250%', '300%', '400%', '500%'] # c.zoom.mouse_divider = 512 # c.zoom.text_only = False # ## Keybindings config.bind('zz', 'close') config.bind(';m', 'tab-mute') config.bind(';v', 'spawn mpv {url}') config.bind(';V', 'hint links spawn mpv {hint-url}') # Universal Emacsien C-g alias for Escape config.bind('', 'clear-keychain ;; search ;; fullscreen --leave') for mode in ['caret', 'command', 'hint', 'insert', 'passthrough', 'prompt', 'register']: config.bind('', 'leave-mode', mode=mode) ## 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('', '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('', '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('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('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('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('th', 'back -t') # config.bind('tl', 'forward -t') # config.bind('u', 'undo') # config.bind('v', 'enter-mode caret') # config.bind('wB', 'set-cmd-text -s :bookmark-load -w') # 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('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('xb', 'config-cycle statusbar.hide') # config.bind('xo', 'set-cmd-text -s :open -b') # config.bind('xt', 'config-cycle tabs.show always switching') # config.bind('xx', 'config-cycle statusbar.hide ;; config-cycle tabs.show always switching') # config.bind('yD', 'yank domain -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('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('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('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-del', mode='command') # config.bind('', 'rl-end-of-line', mode='command') # config.bind('', 'rl-forward-char', mode='command') config.bind('', 'rl-backward-word', mode='command') config.bind('', 'rl-forward-word', 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('', '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('', 'command-history-next', mode='command') # config.bind('', 'leave-mode', 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('', 'command-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('', '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-word', mode='prompt') config.bind('', 'rl-forward-word', mode='prompt') # config.bind('', 'rl-backward-delete-char', mode='prompt') # config.bind('', 'rl-kill-line', 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') # config.bind('n', 'prompt-accept no', mode='prompt') # config.bind('y', 'prompt-accept yes', mode='prompt') ## Bindings for register mode # config.bind('', 'leave-mode', mode='register') ## Ex-commands # c.aliases["m"] = ":tab-mute" ## Per-domain settings c.content.user_stylesheets = glob.glob(os.path.expanduser('~/.local/share/qutebrowser/userstyles.css')) ## Load theme for path in glob.glob(os.path.expanduser('~/.config/qutebrowser/extra/*.py')): config.source(path)