Websites & site packs 2.0

Every website can have settings of its own in Vimlike: keys for its places, styles that hide its clutter, AI commands, CSS, a script, and switches. Two things fill them — a signed site pack from the catalogue, and you, by hand or by asking the AI. The two are kept apart, and yours win.

The Vimlike toolbar popup on Hacker News: a Site Pack card with the pack installed and its keys, and a This Website card with Suggest shortcuts and Clean up this page
Top: the site pack. Below: what is yours on this website.
CardWhat is in it
Site PackShown only when the catalogue has a pack for this site. Before installing: its name, what it does, how many keys. After: every key with a switch, the keys it hands back to the site, its CSS, Update when a new version is out, Remove. Installing applies at once, no reload.
This Website✦ My shortcuts — what the AI made for you here, each key and style with a ✕, and the two buttons below: Suggest shortcuts and Clean up this page. Under it, the site's switches: Vimlike on/off/auto, start in Normal or Insert, dark mode. Customize turns the website's own settings on for a site that only had a pack.

Suggest shortcuts

CNN with the Vimlike Try panel listing eight suggested keys, the top story outlined on the page
Try it — the keys already work; nothing is saved until you say so.
  1. Press ✦ Suggest shortcuts in the popup, or type :keys in the bar. The AI looks at the page — what can be pressed, what the site's places are — and proposes keys in the g family: gh home, gn new, gs search. It never picks a key you already use.
  2. The Try panel opens in the bar's window. Every key is live: press one and watch the page. Each suggested element is outlined; untick anything you do not want. A key marked may break rests on a fragile selector.
  3. + Add or change… asks for more in your words — "a key for the Subscribe button", "use other keys for World", "turn on Watch" — with chips to start the sentence.
  4. ↩ or Save keeps them in this website's settings. Esc or Discard throws the draft away. The draft survives moving to another page of the site while you try.

A key for a place whose contents change — the top story, the first result — follows the place, not today's item. Keys are clicks and addresses, never code: the AI answers with which element and which key, and Vimlike builds the XPath and checks it on the page before it is shown to you.

By hand instead. Press gk on any page, click the element, press the key you want and name it. Or in Settings › Websites › the site › Add…, give a key a click target, an address, or several steps (click, move to the next match, scroll, wait, open).

Clean up this page

CNN with the top banner ad gone and the Try panel listing two hide styles for the ad slots
"Hide the ads at the top and in the right column" — the banner is gone before you save.

✧ Clean up this page in the popup, or :clean, opens the same panel aimed at styles. Chips offer the usual culprits — ads and promos, banners and pop-ups, the sidebar, comments, dim the rest, reading mode — or say what should go. Each result is a style: hide, dim, or show on hover, applied to one area of the page. The main text can never be hidden. Styles land in the website's settings as CSS; Settings › Websites › My Styles lists them in words and removes them one by one.

A website's own settings

Settings › Websites lists every website with settings, A to Z, and opens each as one sheet in two groups.

Settings › Websites with a site's sheet open: the Site Pack card on top and Website Settings below
Website SettingsWhat it holds
My Keys & AI CommandsKeys the AI suggested or you added, and AI commands limited to this site. A tag on each says what it does — Click, Open, Steps, AI — and opens its editor; click the key to re-record it.
My StylesThe hide/dim/hover styles from Clean up this page, with the request they came from.
Keys I give backVimlike keys that should do nothing on this site, so its own shortcuts get them — j k slash on a site with vim keys of its own.
SwitchesVimlike, start-up mode and dark mode for this site. Auto follows the pack's suggestion, then your global settings.
CSS & ScriptYour own stylesheet and JavaScript for the site, loaded after the pack's so yours wins. This is the one place code of yours runs.

A site that only has a pack has no website settings until you turn them on — Enable Website Settings in the sheet, or Customize in the popup. Delete Website Settings removes only yours; the pack stays.

Site packs

A site pack is one signed file for one website, published by Jasmine Studios: keys for the site's places, a few AI commands, optional CSS that tidies it, and the Vimlike keys it hands back so the site's own shortcuts work. The catalogue is in Settings › Websites, below your sites, and the popup offers the pack for the site you are on.

Packs at the time of writing: Amazon, Bing, ChatGPT, Claude, Clien, DuckDuckGo, Figma, GitHub, Gmail, Google Calendar, Google Docs, Google Drive, Google News, Google Search, The Guardian, Hacker News, Instagram, Jira, Netflix, Reddit, Slack, Stack Overflow, Wikipedia, X and YouTube. Want one for a site you use? Tell us.

The pack format

For the curious — and for anyone who wants to read what an installed pack does: View Source in the site's sheet shows exactly this.

{
  "format": "vimlike-site-pack/1",
  "id": "hacker-news",
  "name": "Hacker News",
  "description": "Next page, open the top story, jump to new, ask, show, past, comments and jobs",
  "version": 3,                 // build; "marketingVersion": "1.0" is what people see
  "minBuild": 261,              // the app build that understands this pack
  "host": "news.ycombinator.com",
  "match": ["^https://news\\.ycombinator\\.com/"],
  "actions": [
    { "id": "next",  "title": "Next page",         "keys": "bracketright", "click": "//a[@class='morelink']" },
    { "id": "new",   "title": "New",               "keys": "g n",          "open": "https://news.ycombinator.com/newest" },
    { "id": "top",   "title": "Open the top story","keys": "backslash",
      "steps": [ { "click": "(//span[@class='titleline']/a)[1]" } ] }
  ],
  "unmap": ["j", "k"],          // Vimlike keys released to the site (optional)
  "css": "…", "cssDescription": "Hides the footer",
  "commands": [ { "shortcut": "comments", "name": "Top comments", "prompt": "…", "key": "a c" } ],
  "hud": ["next", "top"],       // what the first visit announces
  "localized": { "ko": { "name": "해커 뉴스", "titles": { "next": "다음 페이지" } } }
}

An action has exactly one of click (an XPath), open (an address) or steps. Steps run in order: click (one XPath or a list — the first that exists), open, wait (ms), move to the next or previous match of an XPath, reveal one element, scroll top or bottom, media end — each with an optional if / unless. A "trigger": "load" action runs when the page loads. Your own keys use the same steps.

Export and import

Settings › Websites › Backup writes every website's settings — packs, keys, AI commands, CSS, scripts and switches — to one .vimlike file, and a site's sheet exports that site alone. Importing replaces the settings of a site that is already there. Settings also sync through your own iCloud when you allow it.

Back to the overview · Versions & privacy →