Back to directory
b0o avatar
b0o / surfingkeys-conf

surfingkeys-conf

๐Ÿ„ A SurfingKeys config which adds 180+ key mappings & 50+ search engines

473

Stars

83

Forks

16

Watchers

MIT

License

Maddison's SurfingKeys Configuration

This is my configuration for the SurfingKeys browser extension.

It includes:

  • 265 key mappings for 104 unique websites which automate many common actions.
  • Omnibar integration with 58 Search Engines and Knowledge Sources, many of which include inline images and instant answers.

Table of Contents

  1. Site-Specific Key Mappings
  2. Omnibar Search Engine Integrations
  3. Installation Instructions
  4. Screenshots
  5. License

Features

Site-Specific Key Mappings

global
MappingDescription
FOpen a link in non-active new tab
zfOpen link URL in vim editor
wScroll up
sScroll down
KScroll half page up
JScroll half page down
ghScroll to element targeted by URL hash
giEdit current URL with vim editor
gIView image in new tab
g.Go to parent domain
ypCopy URL path of current page
yICopy Image URL
yACopy link as Markdown
yOCopy page URL/Title as Org-mode link
yMCopy page URL/Title as Markdown link
yTDuplicate current tab (non-active new tab)
;seEdit Settings
=WLookup whois information for domain
=dLookup dns information for domain
=DLookup all information for domain
=cShow Google's cached version of page
=aShow Archive.org Wayback Machine for page
=AShow Alexa.com info for domain
=sView social discussions for page
=SView summary for page
=oShow outline.com version of page
=bwShow BuiltWith report for page
=waShow Wappalyzer report for page
;pdToggle PDF viewer from SurfingKeys
gxEClose tab to left
gxRClose tab to right
\cghOpen clipboard string as GitHub path (e.g. 'torvalds/linux')
FOpen a link in non-active new tab
ohOpen URL from history
algolia com algolia.com
MappingDescription
<Space>aOpen search result
amazon com amazon.com
MappingDescription
<Space>fsFakespot
<Space>aView product
<Space>cAdd to Cart
<Space>RView Product Reviews
<Space>QView Product Q&A
<Space>AOpen Account page
<Space>COpen Cart page
<Space>OOpen Orders page
aur archlinux org aur.archlinux.org
MappingDescription
<Space>aView package
behance net behance.net
MappingDescription
<Space>sAppreciate project
<Space>bAdd project to collection
<Space>aView project
<Space>AView project (non-active new tab)
bsky app bsky.app
MappingDescription
<Space>dCopy user DID
<Space>pCopy user post ID
chatgpt com chatgpt.com
MappingDescription
iFocus input
claude ai claude.ai
MappingDescription
iFocus input
craigslist org craigslist.org
MappingDescription
<Space>aView listing
devdocs io devdocs.io
MappingDescription
wScroll sidebar up
sScroll sidebar down
eScroll sidebar page up
dScroll sidebar page down
kScroll body up
jScroll body down
KScroll body page up
JScroll body page down
duckduckgo com duckduckgo.com
MappingDescription
<Space>aOpen search result
<Space>AOpen search result (non-active new tab)
]]Show more results
<Space>gOpen search in Google
<Space>sghSearch site:github.com
<Space>sreSearch site:reddit.com
ebay com ebay.com
MappingDescription
<Space>fsFakespot
fonts adobe com fonts.adobe.com
MappingDescription
<Space>aActivate font
<Space>sFavorite font
github com github.com
MappingDescription
<Space>AOpen repository Actions page
<Space>COpen repository Commits page
<Space>IOpen repository Issues page
<Space>NOpen notifications page
<Space>POpen repository Pull Requests page
<Space>ROpen Repository page
<Space>SOpen repository Settings page
<Space>WOpen repository Wiki page
<Space>XOpen repository Security page
<Space>OOpen repository Owner's profile page
<Space>MOpen your profile page ('Me')
<Space>aView Repository
<Space>uView User
<Space>fView File
<Space>cView Commit
<Space>iView Issue
<Space>pView Pull Request
<Space>eView external link
guGo up one path in the URL (GitHub)
<Space>sToggle Star
<Space>yyCopy Project Path
<Space>YCopy Project Path (including domain)
<Space>lToggle repo language stats
<Space>DOpen in github.dev (new tab)
<Space>ddOpen in github.dev
<Space>GView on SourceGraph
<Space>rView live raw version of file
<Space>yrCopy raw link to file
<Space>yfCopy link to file
<Space>gcpOpen clipboard string as file path in repo
github io github.io
MappingDescription
<Space>ROpen Repository page
gitlab com gitlab.com
MappingDescription
<Space>sToggle Star
<Space>yCopy Project Path
<Space>YCopy Project Path (including domain)
<Space>DView GoDoc for Project
home nest com home.nest.com
MappingDescription
=Increment temperature
-Decrement temperature
<Space>hSwitch mode to Heat
<Space>cSwitch mode to Cool
<Space>rSwitch mode to Heat/Cool
<Space>oSwitch mode to Off
<Space>fSwitch fan On
<Space>FSwitch fan Off
ikea com ikea.com
MappingDescription
<Space>dToggle Product Details
<Space>iToggle Product Details
<Space>rToggle Product Reviews
<Space>COpen Cart page
<Space>POpen Profile page
<Space>FOpen Favorites page
<Space>OOpen Orders page
news ycombinator com news.ycombinator.com
MappingDescription
<Space>xCollapse comment
<Space>XCollapse next comment
<Space>sUpvote
<Space>SDownvote
<Space>aView post (link)
<Space>AView post (link and comments)
<Space>cView post (comments)
<Space>CView post (comments) (non-active new tab)
<Space>eView external link
gpGo to parent
]]Next page
[[Prev page
producthunt com producthunt.com
MappingDescription
<Space>aView product (external)
<Space>vView product
<Space>sUpvote product
raw githubusercontent com raw.githubusercontent.com
MappingDescription
<Space>ROpen Repository page
<Space>FOpen Source File
reddit com reddit.com
MappingDescription
<Space>xCollapse comment
<Space>XCollapse next comment
<Space>sUpvote
<Space>SDownvote
<Space>eExpand expando
<Space>aView post (link)
<Space>AView post (link) (non-active new tab)
<Space>cView post (comments)
<Space>CView post (comments) (non-active new tab)
rescript lang org rescript-lang.org
MappingDescription
iFocus search field
<Space>aOpen docs link
<Space>LOpen language manual
<Space>ROpen ReScript + React docs
<Space>GOpen GenType docs
<Space>POpen package index
<Space>YOpen playground
<Space>SOpen syntax lookup
<Space>FOpen community forum
<Space>AOpen API docs
<Space>JOpen JS API docs
<Space>BOpen Belt API docs
<Space>DOpen DOM API docs
wScroll sidebar up
sScroll sidebar down
eScroll sidebar page up
dScroll sidebar page down
kScroll body up
jScroll body down
KScroll body page up
JScroll body page down
stackoverflow com stackoverflow.com
MappingDescription
<Space>aView question
twitter com twitter.com
MappingDescription
<Space>fFollow user
<Space>sLike tweet
<Space>RRetweet
<Space>cComment/Reply
<Space>TNew tweet
<Space>uGoto user
<Space>tGoto tweet
vimeo com vimeo.com
MappingDescription
<Space>FToggle fullscreen
wikipedia org wikipedia.org
MappingDescription
<Space>sToggle simple version of current article
<Space>aView page
<Space>eView external link
<Space>ysCopy article summary as Markdown
<Space>RView WikiRank for current article
www google com www.google.com
MappingDescription
<Space>aOpen search result
<Space>AOpen search result (new tab)
<Space>dOpen search in DuckDuckGo
www yelp com www.yelp.com
MappingDescription
<Space>fsFakespot
youtube com youtube.com
MappingDescription
AOpen video
COpen channel
gHGoto homepage
FToggle fullscreen
YtCopy YouTube video link for current time
YmCopy YouTube video markdown link for current time

There are also mappings to open academic papers from 70+ publishers using a DOI handler.

Omnibar Search Engine Integrations

To open the omnibar integration for a search engine, press the search leader key (a by default) followed by the alias for the desired search engine, as found in the table below.

For example, to open the Wikipedia omnibar integration, type awp.

Alias Name Domain Screenshots
duckduckgo com D duckduckgo-lucky duckduckgo.com
www google com G google-lucky www.google.com
bbs archlinux org af archforums ∗ bbs.archlinux.org
www archlinux org al archlinux ∗ www.archlinux.org
alternativeto net at alternativeTo ∗ alternativeto.net
aur archlinux org au AUR aur.archlinux.org :framed_picture:
wiki archlinux org aw archwiki wiki.archlinux.org
smile amazon com az amazon smile.amazon.com :framed_picture:
caniuse com ci caniuse caniuse.com
www craigslist org cl craigslist www.craigslist.org
chrome google com cs chromestore ∗ chrome.google.com
duckduckgo com du duckduckgo duckduckgo.com
onelook com de define onelook.com :framed_picture:
hub docker com dh dockerhub hub.docker.com :framed_picture:
duckduckgo com di duckduckgo-images duckduckgo.com
duckduckgo com dm duckduckgo-maps duckduckgo.com
duckduckgo com dn duckduckgo-news duckduckgo.com
domainr com do domainr domainr.com :framed_picture:
duckduckgo com dv duckduckgo-videos duckduckgo.com
www ebay com eb ebay www.ebay.com
addons mozilla org fa firefox-addons addons.mozilla.org :framed_picture:
addons mozilla org fe firefox-extensions addons.mozilla.org
addons mozilla org ft firefox-themes addons.mozilla.org
www google com gI google-reverse-image www.google.com
golang org gg golang ∗ golang.org
github com gh github github.com :framed_picture:
www google com gi google-images www.google.com
www google com go google www.google.com
scholar google com gs google-scholar scholar.google.com
hex pm hd hexdocs hex.pm
huggingface co hf huggingface huggingface.co
news ycombinator com hn hackernews news.ycombinator.com :framed_picture:
www haskell org ho hoogle www.haskell.org :framed_picture:
wiki haskell org hw haskellwiki wiki.haskell.org
hex pm hx hex hex.pm
jquery com jq jquery ∗ jquery.com
kagi com ka kagi kagi.com
developer mozilla org md mdn developer.mozilla.org :framed_picture:
nodejs org no node ∗ nodejs.org
www npmjs com np npm www.npmjs.com
www owasp org ow owasp www.owasp.org
crates io rc crates crates.io
docs rs rd crates-docs docs.rs
www reddit com re reddit www.reddit.com :framed_picture::framed_picture:
query rs rr query-rs query.rs
stackexchange com se stackexchange stackexchange.com
stackoverflow com so stackoverflow stackoverflow.com
www onelook com th thesaurus www.onelook.com :framed_picture:
www typescriptlang org ts typescript www.typescriptlang.org
twitter com tw twitter twitter.com
symbl cc un unicode † symbl.cc :framed_picture:
vim fandom com vw vimwiki vim.fandom.com
www wolframalpha com wa wolframalpha ∗ www.wolframalpha.com :framed_picture::framed_picture:
en wikipedia org wp wikipedia en.wikipedia.org :framed_picture:
simple wikipedia org ws wikipedia-simple simple.wikipedia.org
en wiktionary org wt wiktionary en.wiktionary.org
www yelp com yp yelp www.yelp.com
www youtube com yt youtube ∗ www.youtube.com :framed_picture:

โˆ— requires private API key

โ€  requires local webserver

Installation

Requires Surfingkeys v1.0.0 or newer.

Pre-built

Coming soon!

Build and Install

Dependencies

  • git
  • node.js v17

Procedure

  1. Clone

    $ git clone http://github.com/b0o/surfingkeys-conf
    $ cd surfingkeys-conf
    
  2. Install Node.js dependencies

    $ npm install
    
  3. Gulp Build/Install

    $ npm run gulp install # OR "npm run gulp build" to build to ./build/surfingkeys.js without installing
    

    This will build the final configuration file and place it at ~/.config/surfingkeys.js. If you already have a file in that location, make sure you back it up first!

  4. Load your configuration into the SurfingKeys Extension

    Option A (recommended): Configure SurfingKeys to automatically load the configuration file
    Local File Access (Chrome/Chromium only)
    • I. Visit chrome://extensions/ and enable Allow access to file URLs for the Surfingkeys extension.

    • II. Open the SurfingKeys configuration page: chrome-extension://gfbliohnnapiefjpjlpjnehglfpaknnc/pages/options.html.

    • III. Set the Load settings from option to point to the configuration file.

      Note: you must specify the full, absolute path; the tilde ~ or environment variables like $HOME won't work:

      • Linux: file:///home/{USERNAME}/.config/surfingkeys.js (replace {USERNAME} with your username)
      • macOS: file:///Users/{USERNAME}/.config/surfingkeys.js (replace {USERNAME} with your username)
      • Windows: file://%Homedrive%%Homepath%/surfingkeys.js (This is a guess, please correct me if I'm wrong)
    • IV. Repeat these steps after you make any changes to your configuration files. Your new configuration will be automatically loaded by SurfingKeys.

    Local Web Server (Chrome, Chromium, and Firefox)
    • I. Run the configuration file server:

      See Running the Local Web Server

    • II. Open the SurfingKeys configuration page:

      Chrome: chrome-extension://gfbliohnnapiefjpjlpjnehglfpaknnc/pages/options.html

      Firefox: moz-extension://7b04efeb-0b36-47f6-9f57-70293e5ee7b2/pages/options.html

    • III. Set the Load settings from option to http://localhost:9919

    • IV. SurfingKeys will lose the settings as soon as the local web server shuts down. You will likely want to configure your system to automatically start the server on login.

      If you run Linux with systemd, an example user service is provided in this repo. You will need to modify it to contain the proper path to your surfingkeys-conf repo.

    • V. Repeat the npm run gulp build command from step 4 above after you make any changes to your configuration files. Your new configuration will be automatically loaded by the web server and SurfingKeys will pick it up the next time you load a webpage.

    Option B: Manually copy/paste into the SurfingKeys configuration form
    • I. Copy the contents of ./build/surfingkeys.js (or $HOME/.config/surfingkeys.js if you ran gulp install)

    • II. Paste the contents into the SurfingKeys configuration page:

      Chrome: chrome-extension://gfbliohnnapiefjpjlpjnehglfpaknnc/pages/options.html

      Firefox: moz-extension://7b04efeb-0b36-47f6-9f57-70293e5ee7b2/pages/options.html

    • III. Repeat these steps after you make any changes to your configuration files. Your new configuration will be automatically loaded by SurfingKeys.

Optional: Private API Key Configuration

Some omnibar search engine integrations require private API keys for access (marked with a โˆ— in the table above). These keys are to be defined in ./src/conf.priv.js, which should be created based on the template: ./src/conf.priv.example.js. The template contains instructions on how to generate each API key.

Note: The ./src/conf.priv.js does not exist in the repository, you need to copy the template file. The conf.priv.js should not be commited!

  1. Copy the example private configuration:
$ cp ./src/conf.priv.example.js ./src/conf.priv.js
  1. Open ./src/conf.priv.js in your favorite editor and follow the instructions inside:
$ vim ./src/conf.priv.js

Running the Local Web Server

This project provides a local web server which:

  • Serves your configuration file via HTTP
  • Serves additional API routes for certain search engines, like the unicode search engine.

To run the local web server, follow steps 1-3 in the installation instructions above, then run:

$ gulp serve-simple

Alternatively, you can use the gulp serve task, which also automatically rebuilds the configuration file whenever a source file is modified.

If you wish to use the local web server, you will likely want it to start automatically with your PC. If you run Linux with systemd, an example user service is provided for this purpose. You will need to modify it to contain the proper path to your surfingkeys-conf repo.

Note: This starts a local web server on localhost:9919 which serves your built configuration file and additional API endpoints. Depending on your firewall configuration, other devices on your network may be able to read your configuration file, including any private API keys or other secrets you have configured in conf.priv.js. Proceed with caution.

Screenshots

AUR

AUR screenshot

amazon

amazon screenshot

define

define screenshot

dockerhub

dockerhub screenshot

domainr

domainr screenshot

firefox-addons

firefox-addons screenshot

github

github screenshot

hackernews

hackernews screenshot

hoogle

hoogle screenshot

mdn

mdn screenshot

reddit

reddit screenshot

reddit 2

reddit screenshot

thesaurus

thesaurus screenshot

unicode

unicode screenshot

wolframalpha

wolframalpha screenshot

wolframalpha 2

wolframalpha screenshot

wikipedia

wikipedia screenshot

youtube

youtube screenshot

Author

© 2017-2025 Maddison Cohodas

License

Released under the MIT License