Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tuck

A ~350 line menu bar tidier. Bartender / Ice / Hidden Bar in miniature.

I built it for myself because I wanted three features, not thirty. If you found it and it does what you need, help yourself. Just read the unsigned app section first, because you'll be building it yourself.

No Apple Developer account, no notarisation, no Accessibility permission, no private APIs, no network access. It only ever touches its own status items.

Tuck hiding and revealing menu bar icons

How it works

macOS packs menu bar status items right to left. Tuck adds three of its own:

[ … system items ] [ ⌃ toggle ] [ marker ] … hidden icons … [ marker₂ ] … always-hidden icons …

Collapsing sets the marker's width to 10,000pt, which shoves every item to its left past the edge of the screen. That's the entire mechanism.

Requirements

  • macOS 14 or later (developed and tested on macOS 26)
  • Xcode, or just the command line tools: xcode-select --install
  • Swift 5.9 or later, which those give you

Build and install

There are no downloads. Clone it and build it:

git clone https://github.com/lordkerwin/tuck.git
cd tuck
./build.sh
cp -R build/Tuck.app /Applications/
open /Applications/Tuck.app

Copy it to /Applications (or anywhere permanent) before turning on launch at login. SMAppService registers the bundle at whatever path it's sitting in, so if you move the app afterwards you'll need to toggle the setting off and on again.

It's not signed. What that means for you

I have no paid Apple Developer account, so Tuck has no Developer ID signature and isn't notarised. build.sh ad-hoc signs it instead (codesign --sign -), which is a signature with no identity behind it.

If you build it yourself, as above, nothing gets in your way. Gatekeeper only challenges apps that arrive with a quarantine flag, and files you compiled locally don't have one. That's the whole reason I'd rather you built it than downloaded it.

If you get a prebuilt copy from anyone, including a zip somebody attached to an issue, macOS will quarantine it and refuse to launch it. Two ways past that:

# strip the quarantine flag
xattr -dr com.apple.quarantine /Applications/Tuck.app

or launch it once, let it get blocked, then go to System Settings → Privacy & Security, scroll to the message about Tuck, and click Open Anyway. Note that Control-click → Open, the old trick, no longer works for unnotarised apps on macOS 15 and later.

Being unsigned costs Tuck nothing functionally. It requests no entitlements, isn't sandboxed, and asks for no privacy permissions, so there's nothing an absent signature can gate.

Obvious but worth saying: only do any of the above for code you've read. It's 350 lines, so reading it is genuinely quick.

Setup

  1. Launch it. A chevron and a thin vertical marker appear in the menu bar.
  2. Hold and drag menu bar icons to the left of the marker. Those are now the hidden ones.
  3. ⌘-drag the marker itself if you want it somewhere else. macOS remembers the positions.

Use

Action Result
Click chevron or marker Show / hide the hidden section
⌥-click chevron Show everything, including the always-hidden section
Right-click either Menu: Show All, Hide, Settings…, Quit

Expanded, it re-collapses on its own after the configured delay. With "keep open while pointer is in the menu bar" on, the countdown only starts once the pointer leaves the menu bar, so it won't snap shut mid-click.

Settings

Right-click the chevron → Settings…

  • Collapse automatically plus a delay slider (1 to 120 seconds)
  • Keep open while pointer is in the menu bar
  • Marker width: invisible, thin, normal, wide
  • Second marker for an always-hidden section, a section that stays hidden unless you ⌥-click
  • Start collapsed
  • Launch at login (SMAppService)

Layout

Package.swift
Resources/Info.plist          LSUIElement, so no dock icon and no app menu
build.sh                      compile, assemble .app bundle, ad-hoc sign
Sources/Tuck/
  main.swift                  NSApplication bootstrap, .accessory policy
  AppDelegate.swift           owns the controller and settings window
  StatusBarController.swift   the three status items and all the state
  Prefs.swift                 UserDefaults keys, defaults, read accessors
  SettingsView.swift          SwiftUI settings form

Preferences are written by @AppStorage and read back by the controller via UserDefaults.didChangeNotification, so changes apply live with no plumbing between the two.

Known rough edges

  • Some Control Center items (Bluetooth, battery, display) sit left of the marker by default and therefore hide too. ⌘-drag them right of the marker if you'd rather keep them.
  • On multiple displays macOS draws status items on every menu bar, so hiding applies to all of them at once.
  • The marker is invisible while collapsed, on purpose. It's 10,000pt wide at that point and would otherwise paint a smear across the bar.
  • Auto-collapse polls the pointer every 0.25s while expanded rather than installing a global event monitor, which is what keeps it clear of the Input Monitoring permission prompt. The timer only exists while something is expanded.

Uninstall

osascript -e 'tell application "Tuck" to quit'
rm -rf /Applications/Tuck.app
defaults delete dev.seankerwin.tuck   # settings and saved marker positions

Turn off launch at login in Settings before you delete the app, or the login item registration will linger.

Licence

MIT. See LICENSE. Do what you like with it, no warranty.

About

Tiny macOS menu bar tidier: hide status items behind a marker, click to expand, auto-collapse on a timer

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages