This is my configuration for the SurfingKeys browser extension.
It includes:
- 267 key mappings for 104 unique websites which automate many common actions.
- Omnibar integration with 55 Search Engines and Knowledge Sources, many of which include inline images and instant answers.
- Site-Specific Key Mappings
- Omnibar Search Engine Integrations
- Installation Instructions
- Screenshots
- License
global | |
---|---|
Mapping | Description |
F | Open a link in non-active new tab |
zf | Open link URL in vim editor |
w | Scroll up |
s | Scroll down |
K | Scroll half page up |
J | Scroll half page down |
gh | Scroll to element targeted by URL hash |
gi | Edit current URL with vim editor |
gI | View image in new tab |
g. | Go to parent domain |
yp | Copy URL path of current page |
yI | Copy Image URL |
yA | Copy link as Markdown |
yO | Copy page URL/Title as Org-mode link |
yM | Copy page URL/Title as Markdown link |
yT | Duplicate current tab (non-active new tab) |
;se | Edit Settings |
gS | Open Chrome settings |
=W | Lookup whois information for domain |
=d | Lookup dns information for domain |
=D | Lookup all information for domain |
=c | Show Google's cached version of page |
=a | Show Archive.org Wayback Machine for page |
=A | Show Alexa.com info for domain |
=s | View social discussions for page |
=S | View summary for page |
=o | Show outline.com version of page |
=bw | Show BuiltWith report for page |
=wa | Show Wappalyzer report for page |
;pd | Toggle PDF viewer from SurfingKeys |
gxE | Close tab to left |
gxR | Close tab to right |
\cgh | Open clipboard string as GitHub path (e.g. 'torvalds/linux') |
F | Open a link in non-active new tab |
oh | Open URL from history |
Mapping | Description |
<Space>a | Open search result |
Mapping | Description |
<Space>fs | Fakespot |
<Space>a | View product |
<Space>c | Add to Cart |
<Space>R | View Product Reviews |
<Space>Q | View Product Q&A |
<Space>A | Open Account page |
<Space>C | Open Cart page |
<Space>O | Open Orders page |
Mapping | Description |
<Space>a | View package |
Mapping | Description |
<Space>s | Appreciate project |
<Space>b | Add project to collection |
<Space>a | View project |
<Space>A | View project (non-active new tab) |
Mapping | Description |
<Space>d | Copy user DID |
<Space>p | Copy user post ID |
Mapping | Description |
<Space>n | New chat |
<Space>a | Open chat |
Mapping | Description |
i | Focus input |
Mapping | Description |
<Space>a | View listing |
Mapping | Description |
w | Scroll sidebar up |
s | Scroll sidebar down |
e | Scroll sidebar page up |
d | Scroll sidebar page down |
k | Scroll body up |
j | Scroll body down |
K | Scroll body page up |
J | Scroll body page down |
Mapping | Description |
<Space>a | Open search result |
<Space>A | Open search result (non-active new tab) |
]] | Show more results |
<Space>g | Open search in Google |
<Space>sgh | Search site:github.com |
<Space>sre | Search site:reddit.com |
Mapping | Description |
<Space>fs | Fakespot |
Mapping | Description |
<Space>a | Activate font |
<Space>s | Favorite font |
Mapping | Description |
<Space>A | Open repository Actions page |
<Space>C | Open repository Commits page |
<Space>I | Open repository Issues page |
<Space>N | Open notifications page |
<Space>P | Open repository Pull Requests page |
<Space>R | Open Repository page |
<Space>S | Open repository Settings page |
<Space>W | Open repository Wiki page |
<Space>X | Open repository Security page |
<Space>O | Open repository Owner's profile page |
<Space>M | Open your profile page ('Me') |
<Space>a | View Repository |
<Space>u | View User |
<Space>f | View File |
<Space>c | View Commit |
<Space>i | View Issue |
<Space>p | View Pull Request |
<Space>e | View external link |
gu | Go up one path in the URL (GitHub) |
<Space>s | Toggle Star |
<Space>yy | Copy Project Path |
<Space>Y | Copy Project Path (including domain) |
<Space>l | Toggle repo language stats |
<Space>D | Open in github.dev (new tab) |
<Space>dd | Open in github.dev |
<Space>G | View on SourceGraph |
<Space>r | View live raw version of file |
<Space>yr | Copy raw link to file |
<Space>yf | Copy link to file |
<Space>gcp | Open clipboard string as file path in repo |
Mapping | Description |
<Space>R | Open Repository page |
Mapping | Description |
<Space>s | Toggle Star |
<Space>y | Copy Project Path |
<Space>Y | Copy Project Path (including domain) |
<Space>D | View GoDoc for Project |
Mapping | Description |
= | Increment temperature |
- | Decrement temperature |
<Space>h | Switch mode to Heat |
<Space>c | Switch mode to Cool |
<Space>r | Switch mode to Heat/Cool |
<Space>o | Switch mode to Off |
<Space>f | Switch fan On |
<Space>F | Switch fan Off |
Mapping | Description |
<Space>d | Toggle Product Details |
<Space>i | Toggle Product Details |
<Space>r | Toggle Product Reviews |
<Space>C | Open Cart page |
<Space>P | Open Profile page |
<Space>F | Open Favorites page |
<Space>O | Open Orders page |
Mapping | Description |
<Space>x | Collapse comment |
<Space>X | Collapse next comment |
<Space>s | Upvote |
<Space>S | Downvote |
<Space>a | View post (link) |
<Space>A | View post (link and comments) |
<Space>c | View post (comments) |
<Space>C | View post (comments) (non-active new tab) |
<Space>e | View external link |
gp | Go to parent |
]] | Next page |
[[ | Prev page |
Mapping | Description |
<Space>a | View product (external) |
<Space>v | View product |
<Space>s | Upvote product |
Mapping | Description |
<Space>R | Open Repository page |
<Space>F | Open Source File |
Mapping | Description |
<Space>x | Collapse comment |
<Space>X | Collapse next comment |
<Space>s | Upvote |
<Space>S | Downvote |
<Space>e | Expand expando |
<Space>a | View post (link) |
<Space>A | View post (link) (non-active new tab) |
<Space>c | View post (comments) |
<Space>C | View post (comments) (non-active new tab) |
Mapping | Description |
i | Focus search field |
<Space>a | Open docs link |
<Space>L | Open language manual |
<Space>R | Open ReScript + React docs |
<Space>G | Open GenType docs |
<Space>P | Open package index |
<Space>Y | Open playground |
<Space>S | Open syntax lookup |
<Space>F | Open community forum |
<Space>A | Open API docs |
<Space>J | Open JS API docs |
<Space>B | Open Belt API docs |
<Space>D | Open DOM API docs |
w | Scroll sidebar up |
s | Scroll sidebar down |
e | Scroll sidebar page up |
d | Scroll sidebar page down |
k | Scroll body up |
j | Scroll body down |
K | Scroll body page up |
J | Scroll body page down |
Mapping | Description |
<Space>a | View question |
Mapping | Description |
<Space>f | Follow user |
<Space>s | Like tweet |
<Space>R | Retweet |
<Space>c | Comment/Reply |
<Space>T | New tweet |
<Space>u | Goto user |
<Space>t | Goto tweet |
Mapping | Description |
<Space>F | Toggle fullscreen |
Mapping | Description |
<Space>s | Toggle simple version of current article |
<Space>a | View page |
<Space>e | View external link |
<Space>ys | Copy article summary as Markdown |
<Space>R | View WikiRank for current article |
Mapping | Description |
<Space>a | Open search result |
<Space>A | Open search result (new tab) |
<Space>d | Open search in DuckDuckGo |
Mapping | Description |
<Space>fs | Fakespot |
Mapping | Description |
A | Open video |
C | Open channel |
gH | Goto homepage |
F | Toggle fullscreen |
Yt | Copy YouTube video link for current time |
Ym | Copy YouTube video markdown link for current time |
There are also mappings to open academic papers from 70+ publishers using a DOI handler.
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
.
Requires Surfingkeys v1.0.0 or newer
.
Coming soon!
- git
- node.js v17
-
Clone
$ git clone https://github.com/b0o/surfingkeys-conf $ cd surfingkeys-conf
-
Install Node.js dependencies
$ npm install
-
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! -
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:https://extensions/
and enableAllow access to file URLs
for the Surfingkeys extension. -
II. Open the SurfingKeys configuration page:
chrome-extension:https://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:https:///home/{USERNAME}/.config/surfingkeys.js
(replace{USERNAME}
with your username) - macOS:
file:https:///Users/{USERNAME}/.config/surfingkeys.js
(replace{USERNAME}
with your username) - Windows:
file:https://%Homedrive%%Homepath%/surfingkeys.js
(This is a guess, please correct me if I'm wrong)
- Linux:
-
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:
-
II. Open the SurfingKeys configuration page:
Chrome:
chrome-extension:https://gfbliohnnapiefjpjlpjnehglfpaknnc/pages/options.html
Firefox:
moz-extension:https://7b04efeb-0b36-47f6-9f57-70293e5ee7b2/pages/options.html
-
III. Set the
Load settings from
option tohttps://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 rangulp install
) -
II. Paste the contents into the SurfingKeys configuration page:
Chrome:
chrome-extension:https://gfbliohnnapiefjpjlpjnehglfpaknnc/pages/options.html
Firefox:
moz-extension:https://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.
-
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!
- Copy the example private configuration:
$ cp ./src/conf.priv.example.js ./src/conf.priv.js
- Open
./src/conf.priv.js
in your favorite editor and follow the instructions inside:
$ vim ./src/conf.priv.js
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.