Keymin

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.

min.toolson GitHub Coming to the Mac App Store

macOS 14 or later on Apple silicon. skhd or skhd.zig runs your hotkeys. 30 days of Pro without a subscription.

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.

  • Two daemons, one file

    skhd by Åsmund Vikane, written in C, or skhd.zig by Jackie Li, a compatible rewrite with extra features. Both read the same file, and Keymin writes it the same way.

  • 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? Run skhd --reload after 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 the fn modifier skhd needs to match it, and loses it again when written by name.

  • Every modifier skhd knows

    Side-specific modifiers such as lcmd and ralt, the hyper and meh combinations, and fn. 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.

⌘N
New bindingAdded below the selected one
⌘R
Record the shortcutThen press the keys
⌘S
SaveWritten in skhd's syntax
⌘F
Find a bindingBy key, name, command, app, or mode
⌘D
Duplicate the bindingSame command, new shortcut
⌘⌫
Delete the bindingAfter a confirmation
⌘⌥↑ ↓
Move the bindingUp or down in the file
⌘1–6
Switch pagesBindings, Modes, Blacklist, Files, After Saving, Source

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
No accountNo Keymin account required
No serversYour configuration never passes through ours

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
Yearly · $9.99Auto-renews yearly through your Apple Account; cancel any time
Lifetime · $39.99One-time purchase, no renewal

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.

Coming to the Mac App Store.

Keymin is a Mac app. Follow the project for launch updates, or visit Support for help.