• Stars
    star
    373
  • Rank 114,600 (Top 3 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 7 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

Maddison's SurfingKeys Configuration

This is my configuration for the SurfingKeys browser extension.

It includes:

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
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
=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
MappingDescription
<Space>aOpen search result
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
MappingDescription
<Space>aView package
behance.net
MappingDescription
<Space>sAppreciate project
<Space>bAdd project to collection
<Space>aView project
<Space>AView project (non-active new tab)
craigslist.org
MappingDescription
<Space>aView listing
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
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
MappingDescription
<Space>fsFakespot
fonts.adobe.com
MappingDescription
<Space>aActivate font
<Space>sFavorite font
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>DView GoDoc for Project
<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
MappingDescription
<Space>ROpen Repository page
gitlab.com
MappingDescription
<Space>sToggle Star
<Space>yCopy Project Path
<Space>YCopy Project Path (including domain)
<Space>DView GoDoc for Project
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
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
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
MappingDescription
<Space>aView product (external)
<Space>vView product
<Space>sUpvote product
raw.githubusercontent.com
MappingDescription
<Space>ROpen Repository page
<Space>FOpen Source File
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
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
MappingDescription
<Space>aView question
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
MappingDescription
<Space>FToggle fullscreen
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
MappingDescription
<Space>aOpen search result
<Space>AOpen search result (new tab)
<Space>dOpen search in DuckDuckGo
www.yelp.com
MappingDescription
<Space>fsFakespot
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
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 🖼️
aw archwiki wiki.archlinux.org
az amazon smile.amazon.com 🖼️
ci caniuse caniuse.com
cl craigslist www.craigslist.org
cs chromestore chrome.google.com
dd duckduckgo duckduckgo.com
de define onelook.com 🖼️
dh dockerhub hub.docker.com 🖼️
di duckduckgo-images duckduckgo.com
dm duckduckgo-maps duckduckgo.com
dn duckduckgo-news duckduckgo.com
do domainr domainr.com 🖼️
dv duckduckgo-videos duckduckgo.com
eb ebay www.ebay.com
fa firefox-addons addons.mozilla.org 🖼️
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 🖼️
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 🖼️
ho hoogle www.haskell.org 🖼️
hw haskellwiki wiki.haskell.org
hx hex hex.pm
jq jquery jquery.com
ka kagi kagi.com
md mdn developer.mozilla.org 🖼️
no node nodejs.org
np npm www.npmjs.com
ow owasp www.owasp.org
re reddit www.reddit.com 🖼️🖼️
se stackexchange stackexchange.com
so stackoverflow stackoverflow.com
th thesaurus www.onelook.com 🖼️
tw twitter twitter.com
un unicode unicode-table.com 🖼️
vw vimwiki vim.fandom.com
wa wolframalpha www.wolframalpha.com 🖼️🖼️
wp wikipedia en.wikipedia.org 🖼️
ws wikipedia-simple simple.wikipedia.org
wt wiktionary en.wiktionary.org
yp yelp www.yelp.com
yt youtube www.youtube.com 🖼️

∗ 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

Copyright

Author

© 2017-2023 Maddison Hellstrom

License

Released under the MIT License

More Repositories

1

incline.nvim

🎈 Floating statuslines for Neovim, winbar alternative
Lua
759
star
2

SchemaStore.nvim

🛍 JSON schemas for Neovim
Lua
709
star
3

mapx.nvim

🗺 A better way to create key mappings in Neovim
Lua
255
star
4

nvim-conf

☄ Maddison's Neovim configuration!
Lua
144
star
5

awesome-by-example

😎 A curated list of example-based learning resources.
121
star
6

aws-favicons-webextension

☁ Tired of all your AWS browser tabs having the same orange cube favicon? This WebExtension fixes that.
JavaScript
95
star
7

tmux-autoreload

🧐 Automatically reload your tmux config file on change
Shell
74
star
8

apple-autofill-domains

Apple's allowed autofill domains
63
star
9

nvim-tree-preview.lua

🍃 Floating preview windows for nvim-tree
Lua
59
star
10

swaynagmode

⌨ swaynag wrapper for the love of keybindings
Shell
44
star
11

starred

🌟 Maddison's starred repos, updated daily!
42
star
12

blender.nvim

🔶 Develop Blender Add-ons with Neovim
Lua
38
star
13

snag

📸 snag screenshots and screencasts in Sway
Shell
30
star
14

zfzf

zfzf is a fzf-based file picker for zsh which allows you to quickly navigate the directory hierarchy
Shell
25
star
15

lavi.nvim

🪻 A soft and sweet colorscheme for Neovim
Lua
25
star
16

neuron-extras

Auto-generate a Table of Contents for your Neuron Zettelkasten.
JSONiq
13
star
17

updoot

🎺 Unify the update process for your entire system
Shell
12
star
18

arch-lwc

🚛 Create & run lightweight Arch Linux containers
Shell
10
star
19

clipshare

Securely synchronize your clipboard between computers
JavaScript
6
star
20

b0o

👻
JavaScript
6
star
21

tmux-conf

Maddison's tmux configuration!
Shell
5
star
22

dotfiles

🫥 Maddison's dotfiles
5
star
23

refind-genconf

refind-genconf makes it easier to generate rEFInd configurations for multiple kernels
Shell
5
star
24

spotify-export

Export a listing of your saved tracks as JSON
JavaScript
5
star
25

zsh-conf

Maddy's zsh configuration!
Shell
5
star
26

alacritty-conf

Maddison's alacritty configuration!
Shell
4
star
27

zsh-extras

Extra completions and functions for zsh!
Shell
3
star
28

maddison.io-old

maddison's github pages blog
Dhall
2
star
29

Mulberry

Mulberry is a single-file Lua BDD library for testing Neovim plugins.
Lua
2
star
30

I-m-using-GitHub-like-Twitter-now

This is my first “tweet”. I guess you’d call it a gleet? Or a giit? Hubeet? A hut? Octomew?
2
star
31

nextdns-logs-export

Export your NextDNS logs
JavaScript
2
star
32

btrfs-extras

extra tools for managing btrfs and btrbk. Warning: experimental - don't use anything you find here and expect your filesystem to survive
Shell
2
star
33

tree-sitter-cython

Cython grammar for tree-sitter (WIP)
C
1
star
34

wezterm-conf

Lua
1
star
35

Steam-HiDPI

HiDPI skin for Steam [WIP]
JavaScript
1
star
36

builder.vim

A VimL DSL for building Patterns and Syntax Rules
Vim Script
1
star
37

advent-of-code-2023-jq

Advent of Code 2023 in Jq
jq
1
star
38

playground

A local Golang playground optimized for tmux/vim environments
Go
1
star
39

kitty-conf

1
star
40

synergy-core

A fork of symless/synergy-core 1.9 with some added features
C++
1
star
41

ndbproxy

A proxy/bridge that runs between a Node.JS debug server and a Chromium devtools client and adds some additional features.
Python
1
star
42

suto

get sudo timeout status
Shell
1
star
43

vim-HiLinkTrace

Vim Script
1
star
44

ghostty-conf

👻 Maddison's Ghostty config!
GLSL
1
star
45

blender-addon-template

Blender Add-on Starter Template
Python
1
star