macOSFor skhd and skhd.zigSource available
Hotkeys for skhd, without the syntax.
Edit the configuration of the skhd hotkey daemon in a native Mac app. Record a shortcut, pick the key and modifiers, write the command or set per-app commands, and Keymin writes the file back in skhd's own syntax. Your comments and untouched lines stay as they were.
macOS 14 or later on Apple silicon. skhd or skhd.zig runs your hotkeys. 30 days of Pro without a subscription.
/usr/bin/open -b com.apple.Safari/usr/bin/open -b com.apple.Terminal/usr/bin/open -b com.apple.mail/usr/bin/open -b com.apple.NotesSafari, Google Chrome · others pass throughskhd -k "ctrl + cmd - f"switch to mode resize~/.config/skhd/skhdrc
Change
Saved
Save ⌘S
/usr/bin/open -b com.apple.Safari- Writes skhd's own syntax
- Comments and spacing kept
- Never runs your commands
- No network entitlement
- Sandboxed
- Mac App Store, Family Sharing
The whole file, as forms
Record a shortcut. Write the command. Save.
Keymin opens your skhdrc and shows every binding, mode, blacklist entry, and included file as something you can edit. Press ⌘N for a new binding, ⌘R to record its shortcut, and ⌘S to write the file back.
Every binding in plain language
The sidebar lists each shortcut as key caps, named by the comment above it. Filter by key, name, command, app, or mode.
Record instead of typing
Press ⌘R, then the keys. Keymin writes alt + shift - a, a named key such as return, or an Apple key code such as 0x27 for keys that have no name.
Commands, per-app commands, and modes
Open an app, run a shell command, give one shortcut a different command per app with pass-through for the rest, or switch skhd into a mode. Modes, the blacklist, and included files each have their own page.
Your file stays yours
Unchanged bindings and directives are written back exactly as they were, alignment included. Comments and blank lines stay in place. A line skhd would reject is kept and flagged, not rewritten.
Source when you want it
The Source page shows the exact text Keymin will write. Edit it there for anything the forms do not cover. Your text is applied when you click Apply, save, leave the page, or make any other change.
Asks before losing work
Before you quit, open or create another file, or forget file access, Keymin offers to save your changes, including text typed on the Source page and not yet applied.
Links and dotfiles work
Point Keymin at ~/.config/skhd/skhdrc even when it is a symbolic link into a repository. Keymin may ask once for access to the file the link points to, keeps the link, and updates that file with its permissions intact.
Sandboxed and offline
Keymin edits the configuration file you choose, never runs the commands it edits, and has no network entitlement. There is no Keymin account, no analytics, and no developer server.
Hook in Shortcuts after saving
With hot loading on, skhd reloads the file on its own. For anything more, such as restarting the skhd service, Keymin can ask the Shortcuts app to run a shortcut after every save, with the saved file's path as input.
Keymin writes. skhd runs.
Needs skhd. On purpose.
Keymin edits the configuration file; the skhd hotkey daemon reads it and runs your hotkeys. Keymin does not include, start, or control skhd, so install either skhd or the compatible skhd.zig and start it once. The first screen tells you whether it was found and whether it is running.
Found, running, or missing
Keymin looks in the usual install places and at the running processes, and says what it found. The install and start commands are one click to copy.
Changes go live on save
With hot loading on, skhd picks up the saved file by itself. Running with
--no-hotload? Runskhd --reloadafter saving, or let a Shortcuts shortcut do it.
Record instead of typing
Press the keys. Keymin writes the line.
Press ⌘R and the shortcut you want. Modifiers, the key, and the way the line is written follow the rules of skhd's own tokenizer and parser, so what Keymin writes is what skhd reads.
Named keys and key codes
A letter or digit follows the active keyboard layout. Keys without a name are written as Apple key codes such as
0x27. An arrow, navigation, or function key written as a key code gets thefnmodifier skhd needs to match it, and loses it again when written by name.Every modifier skhd knows
Side-specific modifiers such as
lcmdandralt, thehyperandmehcombinations, andfn. Choose them by hand under More Options when a recording is not what you want.Pass the key on
Tick Also send the keypress to the app, written as
->, and the app receives the key as if skhd had not intercepted it.
Your file stays yours
Nothing is rewritten that you did not touch.
Keymin writes out only the bindings you change. Everything else, including comments, blank lines, alignment, and lines it cannot read, goes back exactly as it was. The Source page shows the result before you save.
Verbatim by default
Unchanged bindings and directives keep their spacing and alignment. A new mode declaration goes above the first binding, where skhd expects it.
Errors flagged, not hidden
A line skhd would reject, such as a key code with lowercase hex digits, is kept and marked as an error. Keymin does not save while an error remains in a part of the file you can edit.
Line endings fixed once
skhd would pass a carriage return to the shell as part of a command, so a file with Windows line endings opens with unsaved changes and is saved with plain line feeds.
Private by design
One file in. The same file out.
Keymin has no advertising, analytics, account system, or developer server, and no network entitlement at all. The only network traffic on its behalf is Apple's own StoreKit, for product and purchase information.
The file you choose
Keymin remembers your permission to reopen the configuration next time. It also reads app names and icons to help you choose commands.
Never runs a command
The commands in your file are text to Keymin. It does not run them, does not monitor keystrokes outside its own window, and does not start, stop, or signal skhd.
Nothing to the developer
No usage tracking and no sync. Apple handles purchases and never shares payment details with the developer.
Built for the keyboard
New, record, save, done.
Add, record, move, and save without leaving the keyboard. Every page is one ⌘ number away.
Keymin Pro
Every binding for 30 days. Then choose.
Free to download, with 30 days of full access. After the trial, Keymin shows and edits the first five bindings in your file. The rest stay in the file, untouched, and Pro brings them back.
Free After the trial
Small configurations, fully editable.
- The first five bindings, with recording, per-app commands, and modes
- Modes, the blacklist, included files, and After Saving
- Hidden bindings stay in the file and are written back unchanged · visible again if Pro is restored
- The first screen's skhd check and install help
- Sandboxed, no account, no network entitlement
Pro Yearly or lifetime
Your whole configuration, and its source.
- All bindings, however many
- The Source page, for anything the forms do not cover
- Everything the trial included
- Family Sharing · yearly and lifetime purchases
The trial starts when you first get Keymin from the App Store. It needs no card or additional account, starts no subscription, and charges nothing. Trial information is not sent to the developer.
US base prices are shown in USD. Apple converts prices for other App Store regions and handles purchases, renewals, and refunds. Lifetime purchases do not appear in Apple's subscription settings.
The details
Small things, done carefully.
Requirements
An Apple-silicon Mac running macOS 14 or later. Install and start skhd or skhd.zig to run your hotkeys; you can edit configurations without it. Keymin needs no Accessibility access.
Three steps
Choose your skhdrc, usually at ~/.config/skhd/skhdrc, or create a new one. Press ⌘N for a binding and ⌘R to record it. Write the command and press ⌘S.
Per-app commands
Give one shortcut a different command in each app, with pass-through for the rest. Pick apps from the ones running or with an Open panel; Keymin writes skhd's [ "App" : command, * ~ ] block.
Modes
Declare modes with capture and an on-enter command, switch into them from a binding, and scope bindings to them. Renaming a mode updates every binding that uses it.
Blacklist and included files
Keep skhd out of chosen apps with .blacklist, and split a long configuration across .load files. Keymin checks that an included file exists and is not the configuration itself.
After Saving
Run a Shortcuts shortcut after every save, with the saved file's path as input, or run it right away. Handy for restarting the skhd service.
Sandboxed
Keymin runs in the App Sandbox with Hardened Runtime. Its container holds the file bookmarks, the trial state, and a few settings such as the After Saving option.
Source available
The source is on GitHub under the PolyForm Strict License 1.0.0 with added permissions. You can read exactly how Keymin reads and writes your file.
Support and policies
Help, privacy, and terms.
Find help and read the app's privacy policy and terms.
Coming to the Mac App Store.
Keymin is a Mac app. Follow the project for launch updates, or visit Support for help.