Menu bar items, moved into the notch. Hover the notch and the island expands to show the items that would otherwise crowd the menu bar — the Bartender idea, except the overflow lives in the hole rather than in a second bar.
The island shell works: a borderless panel sits flush against the top of the screen, exactly covering the notch, and springs open on hover.
Relocating actual menu bar items is not built yet. That is the point of the project; everything below the shell is still to come.
packages/
├── barisland/ # the macOS app (SwiftUI + AppKit)
│ ├── NotchGeometry.swift # measures the notch, positions the panel
│ ├── NotchPanel.swift # the overlay panel and hover tracking
│ └── NotchView.swift # the island itself
└── backend/ # axum service, currently just GET /health
open packages/barisland/barisland.xcodeproj # ⌘R to run
cargo run -p backend # http://127.0.0.1:3000/healthThree things the current shell already had to work around, all of which the menu bar feature will run into again:
- Window level. The menu bar is a window server window at level 24 and it
spans the notch strip. The panel has to sit above it (
.statusBar). SettingisFloatingPanelafter the level silently resets it back to.floating, and the island vanishes behind the menu bar. - Frame constraining. AppKit pushes any window clear of the menu bar, so the
panel overrides
constrainFrameRect(_:to:)to keep its top edge on the screen edge. - Hover.
NSTrackingAreanever fires for a borderless, non-activating panel that never becomes key. Pointer position comes from a global mouse monitor instead, which needs no permission.
Reading and moving other apps' menu bar items will need more than that:
Accessibility permission (AXIsProcessTrusted) to see and click items owned by
other processes, probably Screen Recording to draw their icons, and the app
sandbox turned off — ENABLE_APP_SANDBOX is currently YES, which blocks
cross-process Accessibility outright.
Makefile.toml and dev-containers/ still describe the Tauri PostgreSQL client
this repo used to hold. They are dead and not wired to anything.