AboutProjects
Notes

Shared Mac Keyboard Setup with Karabiner, Goku, and Keyboard Maestro

productivitymacoskarabinergokukeyboard-maestro

One of the most useful ideas in keyboard automation is separating source config from generated or machine-local config.

That becomes even more important if you use multiple macOS user accounts on the same machine.

A practical shared setup can look like this:

The architecture

A clean shared layout is:

/Users/Shared/keyboard/
  karabiner.edn
  Keyboard Maestro Macros.kmsync

The idea is simple:

Why this split matters

Karabiner works from karabiner.json, but Goku is much nicer to edit because it lets you define your config in karabiner.edn.

So the durable source of truth should be the Goku file, not the generated JSON file.

That gives you a better workflow:

  1. edit one shared source file
  2. run goku
  3. let Karabiner reload the generated JSON

Shared Goku setup

A practical per-user link looks like this:

mkdir -p ~/.config
ln -sfn /Users/Shared/keyboard/karabiner.edn ~/.config/karabiner.edn

Then in each user account:

goku

That account reads the shared source but still generates its own local Karabiner JSON -- keeping the editable config shared and the output local.

What not to share directly

Avoid treating generated files as the main editable asset.

In practice, that means:

That keeps the setup easier to reason about and reduces weird reload behavior.

Shared Keyboard Maestro setup

Keyboard Maestro fits well into the same model.

Instead of copying macros manually between accounts, sync both accounts to the same .kmsync file in the shared folder.

That gives you:

The main caution is straightforward:

So export anything important before switching an existing account to shared sync.

When shared setup is the right choice

A shared setup is a good idea when:

When per-user setup is better

A shared setup is not always the right answer.

Use per-user configs if:

In that case, keep separate karabiner.edn files per user and separate Keyboard Maestro sync sources, or stop syncing macros entirely.

The maintenance mindset

The real value of a shared setup is not only convenience. It is maintainability.

A good automation system should be:

That is why directory structure and symlink choices matter more than they first appear.

Share the human-edited source files. Keep generated files local. That split is what makes the whole thing maintainable — one place to make changes, each account consuming what it needs, no mysterious drift between users.

Further reading