ff-ruyijs
A AI Browser run any site JavaScript from Python with the real Firefox engine. Headless SpiderMonkey + Necko for automation and scraping.
Karabiner-Elements software layer reference for the Serenity keyboard layout on macOS.
Developer toolsTypeScriptGitHub @wheredoesyourmindgoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Partial Karabiner config containing snippet for Serenity rules
Translation pending
Loading the full README.
Read the full README ↗The Serenity layout for any Mac keyboard, laptop included, as a Karabiner-Elements rules file.
With Karabiner-Elements installed, open this link:
Import Serenity into Karabiner-Elements
(GitHub doesn't make karabiner:// links clickable. Use the button at serenity-layout.fyi/software, or paste the link into Safari.)
Karabiner lists the rules it's about to add. Click Import. In the list that opens, find Serenity below Karabiner's own Examples and click Enable All at the bottom of it. Nothing changes until you do.
Or by hand:
curl -fsSL --create-dirs -o ~/.config/karabiner/assets/complex_modifications/serenity.json \
https://raw.githubusercontent.com/wheredoesyourmindgo/serenity-karabiner/main/serenity.json
Then go to Karabiner-Elements → Complex Modifications → Add predefined rule → Enable All at the bottom of Serenity.
Rule order matters. Karabiner gives rules higher in the list priority, and the Fn layer has to come before Serenity: Layout. Enable All keeps the order right. If you enable rules one at a time, keep Serenity: Layout at the bottom.
Every rule's name starts with Serenity:, so you can tell them apart from your own. The rules leave your other Karabiner settings, devices and rules alone.
In Karabiner-Elements → Complex Modifications, delete the rules that start with Serenity:.
Delete the copies earlier imports saved. Karabiner keeps a file for every import in ~/.config/karabiner/assets/complex_modifications/, named by a timestamp, so without this step Serenity is listed twice under Add predefined rule:
grep -l '"title": "Serenity"' ~/.config/karabiner/assets/complex_modifications/*.json | xargs rm
Install again as above.
All rules apply only to Apple keyboards: built in, over USB (vendor ID 1452) or over Bluetooth (vendor ID 76). QMK and other keyboards pass through untouched.
- as _. Digits and Backspace keep it going; any other key, or Left Shift again, ends itThe Fn key still sends a real Fn/Globe, so tapping it alone does whatever Press 🌐 key to says in System Settings → Keyboard (by default, show the emoji picker or change input source). Set it to Do Nothing.
Most rules turn off while the screen is locked, so you can type your password in QWERTY. Karabiner can't tell when the screen is locked by itself. The Hammerspoon snippet sets the is_lock_screen variable for it. Without the snippet, the rules work but stay on at the lock screen too.
serenity.json is generated. Edit build.ts, then:
npm run build # regenerate serenity.json (Node 24+, no dependencies)
npm run lint # validate with Karabiner's own linter (needs Karabiner-Elements installed)
Commit both files. CI runs npm run check, which fails if serenity.json doesn't match build.ts. The install link reads serenity.json from main, so a push goes straight to users.
MIT