# SimpleTopBar A native macOS menu bar app: a **hamburger menu** in the menu bar whose panel collects every other app's menu bar (tray) icons, plus every app running on your Mac, into three sections: - **Menu Bar** — a tray of all other apps' menu bar items, discovered through the Accessibility API. Click one to open its real menu. Optionally **hide the items from the menu bar** so they only live inside this panel (best-effort; see below). - **Apps** — regular apps that live in the Dock. - **Background Apps** — accessory/agent apps without a Dock icon. This section is a **dropdown**: it stays collapsed to a single header, and when you expand it only the first few apps are shown. The rest are hidden behind a **Show N more** row so the list never overflows the panel. Click any row to activate the app, or right-click for Activate / Hide / Quit. ## Accessibility permission Collecting and opening other apps' menu bar items needs **Accessibility** permission (System Settings → Privacy & Security → Accessibility). The panel prompts for it; without it the Menu Bar section is empty and everything else still works. ## Hiding menu bar items (best-effort) macOS has no public API to move another app's status item. The **Hide items from the menu bar** toggle uses the spacer technique: a zero-width status item is created at launch whose length is expanded to push the other icons off-screen so they only live in this panel. It is off by default and always undone on quit; if the app dies, macOS removes the spacer automatically. What it can and cannot hide: - It hides **other third-party apps' icons** (and can also catch some Apple items such as Wi-Fi). - It **cannot** hide **Spotlight, Clock, Battery, or Control Center**. macOS reserves the far right of the menu bar for those, and a third-party app cannot place its item to their right, so there is nothing to push them with. (This is the same limit Bartender and Ice hit; they cover the area with their own overlay bar instead.) - Newly launched apps are placed to the left of the spacer, so they are hidden automatically. ## Install with Homebrew ```bash brew tap TZGyn/tap https://gitea.tzgyn.dev/TZGyn/homebrew-tap.git brew trust TZGyn/tap brew install --cask simpletopbar ``` The tap is hosted on Gitea, so the full URL is required. Homebrew may print an "Unsupported tap" warning — it's harmless. ## Upgrade ```bash brew update brew upgrade --cask simpletopbar ``` If Gatekeeper still blocks the app after upgrading (it is not notarized yet): ```bash xattr -dr com.apple.quarantine /Applications/SimpleTopBar.app ``` ## Build from source ```bash swift build # debug build swift run SimpleTopBar # run from terminal (app appears in the menu bar) swift run SimpleTopBar --self-test # headless check of the dropdown logic ./build-app.sh 0.2.0 # release build + SimpleTopBar.app bundle + icon + codesign ./release.sh 0.2.0 # build-app.sh + dist/SimpleTopBar.zip + sha256 ``` ## Around the Background dropdown The background section is collapsed by default. Expanding it reveals `AppListModel.backgroundPageSize` (5) apps at a time; when more are running a **Show N more** button reveals the next page. Collapsing resets the page. ## Releases `./release.sh ` builds and zips the app to `dist/SimpleTopBar.zip` and prints its sha256. Tag `v`, attach the zip to a release on the Gitea repo, and bump `version`/`sha256` in the cask in [TZGyn/homebrew-tap](https://gitea.tzgyn.dev/TZGyn/homebrew-tap).