Skip to content

Repository files navigation

barisland

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.

Status

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.

Structure

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

Development

open packages/barisland/barisland.xcodeproj    # ⌘R to run
cargo run -p backend                           # http://127.0.0.1:3000/health

Notes for the menu bar work

Three 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). Setting isFloatingPanel after 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. NSTrackingArea never 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 offENABLE_APP_SANDBOX is currently YES, which blocks cross-process Accessibility outright.

Leftovers

Makefile.toml and dev-containers/ still describe the Tauri PostgreSQL client this repo used to hold. They are dead and not wired to anything.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages