@yevhen.b/pi-macos-theme-sync

Sync Pi's theme with macOS appearance changes.

Package details

extension

Install @yevhen.b/pi-macos-theme-sync from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@yevhen.b/pi-macos-theme-sync
Package
@yevhen.b/pi-macos-theme-sync
Version
0.0.9
Published
Mar 13, 2026
Downloads
17/mo ยท 3/wk
Author
yevhen.bobrov
License
MIT
Types
extension
Size
18.5 KB
Dependencies
0 dependencies ยท 1 peer
Pi manifest JSON
{
  "extensions": [
    "index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

macOS Theme Sync

macOS Theme Sync keeps Pi's theme aligned with the current macOS appearance.

When macOS switches between light and dark mode, Pi updates automatically. You can also map macOS dark/light to any Pi themes you prefer.

Install

Install from npm:

pi install npm:@yevhen.b/pi-macos-theme-sync

From a local checkout:

pi install /absolute/path/to/bo-pi/macos-theme-sync

Temporary run without installing:

pi -e npm:@yevhen.b/pi-macos-theme-sync

What it does

  • Watches macOS appearance changes without polling.
  • Reuses one shared osascript watcher across Pi sessions.
  • Applies Pi's built-in dark / light themes by default.
  • Lets you remap macOS dark and light to any installed Pi themes.
  • Shows a small status indicator in the UI (๐ŸŒ™ or โ˜€๏ธ).

Command

  • /macos-theme-map opens a simple picker flow to map:
    • macOS dark โ†’ Pi theme
    • macOS light โ†’ Pi theme

Files

  • Theme map: ~/.pi/agent/extensions/macos-theme-map.json
  • Debug log: ~/.pi/agent/extensions/macos-theme-sync.log
  • Shared state file: /tmp/pi-macos-theme
  • Shared watcher pid file: /tmp/pi-macos-theme.pid

Notes

  • Only runs on macOS.
  • If Pi is running inside Ghostty IDE, this extension stays inactive so Ghostty-specific syncing can take over.
  • The shared watcher is detached and intentionally not killed on session shutdown, so multiple Pi sessions can reuse it.

More docs