Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/b0o/surfingkeys-conf

🏄 A SurfingKeys config which adds 180+ key mappings & 50+ search engines
https://github.com/b0o/surfingkeys-conf

browser chrome chrome-extension chromium conf config configuration firefox firefox-addon surfingkeys vim web-browser

Last synced: about 2 months ago
JSON representation

🏄 A SurfingKeys config which adds 180+ key mappings & 50+ search engines

Awesome Lists containing this project

README

        

# Maddison's SurfingKeys Configuration

This is my configuration for the [SurfingKeys](https://github.com/brookhong/Surfingkeys) browser extension.

It includes:

- [267 key mappings for 104 unique websites](#site-specific-key-mappings) which **automate many common actions**.
- [Omnibar integration with 55 Search Engines and Knowledge Sources](#omnibar-search-engine-integrations), many of which include **inline images** and **instant answers**.

## Table of Contents

1. [Site-Specific Key Mappings](#site-specific-key-mappings)
2. [Omnibar Search Engine Integrations](#omnibar-search-engine-integrations)
3. [Installation Instructions](#installation)
4. [Screenshots](#screenshots)
5. [License](#license)

## Features

### Site-Specific Key Mappings

globalMappingDescription
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
gSOpen Chrome 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.comMappingDescription
<Space>aOpen search result
amazon.comMappingDescription
<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.orgMappingDescription
<Space>aView package
behance.netMappingDescription
<Space>sAppreciate project
<Space>bAdd project to collection
<Space>aView project
<Space>AView project (non-active new tab)
bsky.appMappingDescription
<Space>dCopy user DID
<Space>pCopy user post ID
chat.openai.comMappingDescription
<Space>nNew chat
<Space>aOpen chat
claude.aiMappingDescription
iFocus input
craigslist.orgMappingDescription
<Space>aView listing
devdocs.ioMappingDescription
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.comMappingDescription
<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.comMappingDescription
<Space>fsFakespot
fonts.adobe.comMappingDescription
<Space>aActivate font
<Space>sFavorite font
github.comMappingDescription
<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.ioMappingDescription
<Space>ROpen Repository page
gitlab.comMappingDescription
<Space>sToggle Star
<Space>yCopy Project Path
<Space>YCopy Project Path (including domain)
<Space>DView GoDoc for Project
home.nest.comMappingDescription
=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.comMappingDescription
<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.comMappingDescription
<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.comMappingDescription
<Space>aView product (external)
<Space>vView product
<Space>sUpvote product
raw.githubusercontent.comMappingDescription
<Space>ROpen Repository page
<Space>FOpen Source File
reddit.comMappingDescription
<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.orgMappingDescription
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.comMappingDescription
<Space>aView question
twitter.comMappingDescription
<Space>fFollow user
<Space>sLike tweet
<Space>RRetweet
<Space>cComment/Reply
<Space>TNew tweet
<Space>uGoto user
<Space>tGoto tweet
vimeo.comMappingDescription
<Space>FToggle fullscreen
wikipedia.orgMappingDescription
<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.comMappingDescription
<Space>aOpen search result
<Space>AOpen search result (new tab)
<Space>dOpen search in DuckDuckGo
www.yelp.comMappingDescription
<Space>fsFakespot
youtube.comMappingDescription
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](https://github.com/b0o/surfingkeys-conf/blob/4263985b12b2acd126a70988de4db8a39e118144/src/keys.js#L1240) using a [DOI handler](https://github.com/b0o/surfingkeys-conf/blob/4263985b12b2acd126a70988de4db8a39e118144/src/conf.priv.example.js#L38-L41).

### 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



D
duckduckgo-lucky
duckduckgo.com




G
google-lucky
www.google.com




af
archforums
bbs.archlinux.org




al
archlinux
www.archlinux.org




at
alternativeTo
alternativeto.net




au
AUR
aur.archlinux.org
:framed_picture:



aw
archwiki
wiki.archlinux.org




az
amazon
smile.amazon.com
:framed_picture:



ci
caniuse
caniuse.com




cl
craigslist
www.craigslist.org




cs
chromestore
chrome.google.com




du
duckduckgo
duckduckgo.com




de
define
onelook.com
:framed_picture:



dh
dockerhub
hub.docker.com
:framed_picture:



di
duckduckgo-images
duckduckgo.com




dm
duckduckgo-maps
duckduckgo.com




dn
duckduckgo-news
duckduckgo.com




do
domainr
domainr.com
:framed_picture:



dv
duckduckgo-videos
duckduckgo.com




eb
ebay
www.ebay.com




fa
firefox-addons
addons.mozilla.org
:framed_picture:



fe
firefox-extensions
addons.mozilla.org




ft
firefox-themes
addons.mozilla.org




gI
google-reverse-image
www.google.com




gg
golang
golang.org




gh
github
github.com
:framed_picture:



gi
google-images
www.google.com




go
google
www.google.com




gs
google-scholar
scholar.google.com




hd
hexdocs
hex.pm




hf
huggingface
huggingface.co




hn
hackernews
news.ycombinator.com
:framed_picture:



ho
hoogle
www.haskell.org
:framed_picture:



hw
haskellwiki
wiki.haskell.org




hx
hex
hex.pm




jq
jquery
jquery.com




ka
kagi
kagi.com




md
mdn
developer.mozilla.org
:framed_picture:



no
node
nodejs.org




np
npm
www.npmjs.com




ow
owasp
www.owasp.org




re
reddit
www.reddit.com
:framed_picture::framed_picture:



se
stackexchange
stackexchange.com




so
stackoverflow
stackoverflow.com




th
thesaurus
www.onelook.com
:framed_picture:



ts
typescript
www.typescriptlang.org




tw
twitter
twitter.com




un
unicode
symbl.cc
:framed_picture:



vw
vimwiki
vim.fandom.com




wa
wolframalpha
www.wolframalpha.com
:framed_picture::framed_picture:



wp
wikipedia
en.wikipedia.org
:framed_picture:



ws
wikipedia-simple
simple.wikipedia.org




wt
wiktionary
en.wiktionary.org




yp
yelp
www.yelp.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**

```shell
$ git clone http://github.com/b0o/surfingkeys-conf
$ cd surfingkeys-conf
```

2. **Install Node.js dependencies**

```shell
$ npm install
```

3. **Gulp Build/Install**

```shell
$ 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](#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](./extra/surfingkeys-conf.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](#omnibar-search-engine-integrations) 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`](./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:

```shell
$ cp ./src/conf.priv.example.js ./src/conf.priv.js
```

2. Open `./src/conf.priv.js` in your favorite editor and follow the instructions inside:

```shell
$ 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](#procedure), then run:

```shell
$ 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](./extra/surfingkeys-conf.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](./assets/screenshots/au.png)

##### amazon
![amazon screenshot](./assets/screenshots/az.png)

##### define
![define screenshot](./assets/screenshots/de.png)

##### dockerhub
![dockerhub screenshot](./assets/screenshots/dh.png)

##### domainr
![domainr screenshot](./assets/screenshots/do.png)

##### firefox-addons
![firefox-addons screenshot](./assets/screenshots/fa.png)

##### github
![github screenshot](./assets/screenshots/gh.png)

##### hackernews
![hackernews screenshot](./assets/screenshots/hn.png)

##### hoogle
![hoogle screenshot](./assets/screenshots/ho.png)

##### mdn
![mdn screenshot](./assets/screenshots/md.png)

##### reddit
![reddit screenshot](./assets/screenshots/re-01.png)

##### reddit 2
![reddit screenshot](./assets/screenshots/re-02.png)

##### thesaurus
![thesaurus screenshot](./assets/screenshots/th.png)

##### unicode
![unicode screenshot](./assets/screenshots/un.png)

##### wolframalpha
![wolframalpha screenshot](./assets/screenshots/wa-01.png)

##### wolframalpha 2
![wolframalpha screenshot](./assets/screenshots/wa-02.png)

##### wikipedia
![wikipedia screenshot](./assets/screenshots/wp.png)

##### youtube
![youtube screenshot](./assets/screenshots/yt.png)

## Copyright

Author

© 2017-2024 Maddison Hellstrom

License

Released under the MIT License