BADWOLF(1)

πŸ“¦
version 1.4.0 Β· 2 versions
, in alpine 3.24

🐺✨ BADWOLF(1) ✨🐺

okay so this is badwolf, from the General Commands Manual section (section 1, bestie, the "type it in your terminal" section πŸ’…). she's a browser. she's minimal. she's privacy-obsessed. she's literally the moment.


🌸 NAME 🌸

badwolf β€” a minimalist, privacy-oriented web browser built on WebKitGTK. no cap, that's the whole vibe.


πŸ¦‹ SYNOPSIS πŸ¦‹

badwolf [webkit/gtk options] [-iS] [URLs or paths]

πŸ’– DESCRIPTION πŸ’–

badwolf is a minimalist browser that genuinely cares about your privacy β€” it's giving "I don't want your cookies, I don't want your trackers, I want peace." 🫢

It's based on WebKitGTK, which means it also happily accepts WebKitGTK flags and environment variables (and the flags of its dependencies too, because it's generous like that). Tragically though? There doesn't seem to be manpages for those. 😭 So like... good luck, iykyk.


πŸ’… OPTIONS πŸ’…

  • -i β€” Disable images. bye bye pictures πŸ–ΌοΈ
  • -S β€” Enable JavaScript. yes, enable β€” it's off by default, slay for privacy ⭐

🌈 CUSTOM SCHEMES 🌈

badwolf supports the man: scheme ✨ β€” so for example, man(1) maps to man:man.1. iconic, honestly.


πŸ‘‘ KEYBINDINGS πŸ‘‘

Here's the whole list, sorted by action. Each entry tells you which widget has to be focused, or ⟨any⟩ if it works for the whole window β€” and then the keybind it grabs. πŸŽ€

🧚 The keys 🧚

  • webview Ctrl-Scroll β€” Zooms the webpage in and out. πŸ”
  • webview Ctrl-0 β€” Resets webpage zoom back to 100%.
  • webview Ctrl-MousePrimary, webview MouseMiddle β€” Opens the selected link in a new tab. > (heads up: JS still overrides the event πŸ’€)
  • any Ctrl-t β€” Creates a new tab (in a new session, similar to pressing the button).
  • browser Ctrl-F4, browser Alt-d β€” Closes the current tab.
  • browser Ctrl-f β€” Focuses the search entry. πŸ”Ž
  • browser Ctrl-l β€” Focuses the location (URL) entry.
  • browser Ctrl-Shift-r / Ctrl-r, browser F5 β€” Reloads the content in the current tab (with / without clearing cache).
  • browser Escape β€” Stops loading the content in the current tab.
  • browser Ctrl-Escape β€” Terminates the web process. πŸ’€ dramatic but valid
  • browser F7 β€” Toggles caret browsing.
  • browser F12 β€” Opens the web inspector. dev tools girlies rise πŸ› οΈ
  • browser Ctrl-[ / Ctrl-] β€” Goes back / forward in the current tab's history.
  • browser Ctrl-p β€” Prints the current page. (spawns a dialog)
  • any Alt-Left / Alt-Right β€” Goes to the previous / next tab.
  • any F1 β€” Shows the about dialog.
  • any Alt-n β€” where n is any numeric-row key. Goes to the n-th tab, and 0 goes to the last one. πŸ”’

πŸŽ€ DEFAULT ONES πŸŽ€

Here's an incomplete list of the default WebKit/GTK keybindings β€” not my list, theirs, so don't come for me πŸ™ˆ:

  • any Ctrl-PageUp / Ctrl-PageDown β€” Goes to the previous / next tab.
  • search Ctrl-g / Ctrl-Shift-g β€” When the search box is focused, it goes to the next / previous search term.
  • search Escape β€” Cancels the current search.
  • textarea Ctrl-; β€” Insert emoji πŸ˜­πŸ’– (the most important one fr fr)

πŸ“ ENVIRONMENT πŸ“

  • BADWOLF_L10N β€” A colon-separated list in the form lang_*COUNTRY*, where lang is in ISO-639 and COUNTRY is in ISO-3166. For example: BADWOLF_L10N="en_GB:fr_FR:de_DE". When this variable isn't set, spelling isn't activated β€” so no spellcheck, bestie. A more generic variable name is also intended to be used in the future.

To get the list of supported dictionaries, execute enchant-lsmod-2 -list-dicts β€” or, before enchant 2.0: enchant-lsmod -list-dicts πŸ“š


🧚 FILES 🧚

The following paths use sh(1) syntax so they correctly support the XDG Base Directory Specification ✨ β€” you can use the echo(1) command to check where it is on your system.

  • ${XDG_CONFIG_HOME:-$HOME/.config}/badwolf/content-filters.json β€” WebKit-specific content-filter file. This is the one that lets you block unwanted content (ads, nagware, ... 🚫). For some introductory info about the format, see:
https://webkit.org/blog/3476/content-blockers-first-look/
https://webkit.org/blog/4062/targeting-domains-with-content-blockers/
https://developer.apple.com/documentation/safariservices/creating_a_content_blocker

For a converter using AblockPlus-style filters, try: https://gitlab.com/eyeo/adblockplus/abp2blocklist

For a ready-to-use file (that you should update periodically, fr fr keep it fresh), try: https://easylist-downloads.adblockplus.org/easylist_min_content_blocker.json

  • ${XDG_CACHE_HOME:-$HOME/.cache}/badwolf/filters β€” This is where the compiled filters are stored. The file(s) in it are automatically generated, so they shouldn't be edited 🚫✏️. Documented here only for sandboxing / access-control purposes.
  • ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/bookmarks.xbel β€” Your XBEL (XML Bookmark Exchange Language) file πŸ’–. Known to be currently supported by: elinks(1), konqueror(1), kbookmarkeditor(1).

You can do a symbolic link from their path, but you might prefer to use XInclude β€” https://www.w3.org/TR/xinclude/ β€” which is natively supported by badwolf to automatically merge multiple XBEL files. ✨

Also, the bookmark entries aren't re-sorted, so you might want to put your most frequently used ones at the top of the file. πŸ‘‘

For more information about this format, see: http://pyxml.sourceforge.net/topics/xbel/

For an example XBEL file, see: https://hacktivis.me/bookmarks.xbel

  • ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/webkit-web-extension/ β€” Directory containing the WebKitWebExtensions (https://webkitgtk.org/reference/webkit2gtk/stable/WebKitWebExtension.html) to be loaded into badwolf. ⚠️ Note: these aren't the JavaScript-based Web-Extensions supported by Firefox or Chrome β€” they're native code in shared objects using the WebKitGTK API. very different energy.

Examples of useful extensions may be found at: https://hacktivis.me/git/badwolf-extensions

  • ${DATADIR:-/usr/local/share}/badwolf/interface.css ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/interface.css β€” CSS files (respectively system-level and user-level 🎨) for styling the badwolf interface. See https://docs.gtk.org/gtk3/css-properties.html for the properties being available.

For testing your styles, I would recommend using the GTK_DEBUG=interactive environment variable on launching badwolf and going to the CSS tab. chef's kiss πŸ‘©β€πŸ³πŸ’‹

  • ${XDG_DATA_HOME:-$HOME/.local/share}/badwolf/scripts/ β€” Directory containing JS userscripts (ending in .js) ran at the start of page loads, nesting down into iframes πŸͺ†. Useful to override website behaviors or add missing features to websites.

Please note that for now, unlike GreaseMonkey-style userscripts, they are always run β€” regardless of the hostname / URLs. πŸ’€ no filtering, no vibe check, they just go.


🫢 AUTHORS 🫢

Haelwenn (lanodan) Monnier <contact+badwolf@hacktivis.me> β€” the icon, the legend πŸ‘‘


πŸ’€ BUGS πŸ’€

You can submit contributions or tickets to https://sr.ht/~lanodan/badwolf/ β€” with git-send-email(1) for patches. πŸ“¨


and that's the page, bestie!! 🌸 This one's from Debian, dated 2022-07-13 β€” written back when the vibes were immaculate and the manpage was th␣is long. go browse privately, block your ads, and put your favourite bookmarks at the top of the file. periodt. πŸ’…βœ¨πŸ¦‹

πŸ“¦ where this page comes from