Native macOS menu bar app that controls Light/Dark appearance based on sunrise/sunset or custom daily times.
- Menu bar utility (no Dock icon) with left-click popup and right-click context menu.
Auto,Light, andDarkmodes.- Two scheduling options:
Sunrise and sunset(automatic by location or manual coordinates).Custom times(user-defined daily switch times).
- Weekly preview of sunrise/sunset times, including polar night and midnight sun indicators.
- Optional countdown in menu bar for time remaining to next transition.
- Local solar calculations (no external API calls).
- Automatic update checking (once daily) with manual "Check for Updates" option.
- Native macOS login item integration with System Settings approval flow.
- Five settings tabs: General, Schedule, Location, Permissions, and About.
brew tap happytoolin/happytap
brew install --cask happymodeDownload the latest build from Releases, then move happymode.app to /Applications.
If Gatekeeper blocks launch, use one of these:
- Open
System Settings -> Privacy & Securityand clickOpen Anyway. - Right-click
happymode.appin/Applications, then clickOpen.
If needed:
xattr -dr com.apple.quarantine "/Applications/happymode.app"Left-click the menu bar icon to open the popup:
- Set
ModetoAuto,Light, orDark. - In
Auto, choose betweenSunrise and sunsetorCustom times. - View next switch countdown and today's sunrise/sunset times.
Refreshto force location refresh.Settings…(Cmd+,) to open settings window.Quit(Cmd+Q) to exit.
Right-click the menu bar icon for quick access:
- Switch between
Auto,Light, andDarkmodes. Settings…to open settings window.Check for Updates…to manually check for new releases.Quit happymodeto exit.
Open Settings… to configure:
- General: Theme picker, menu bar countdown toggle, startup at login.
- Schedule: Choose between sunrise/sunset or custom times, view weekly preview.
- Location: Automatic location detection or manual latitude/longitude coordinates.
- Permissions: Grant Location and Automation permissions with quick links to System Settings.
- About: App version, GitHub repository, website, and update check button.
- Launch
happymode. - Click the menu bar icon and set your preferred
Mode. - Open
Settings…to grant permissions:- Location: Required for automatic sunrise/sunset calculations.
- Automation: Required to switch macOS appearance.
- (Optional) Enable
Start happymode at loginin General settings.
- Location Services: Required for automatic sunrise/sunset calculations. Can be disabled if using manual coordinates or custom times.
- Automation -> System Events: Required to apply macOS appearance changes.
Both permissions can be granted from the Permissions settings tab, which provides direct links to System Privacy settings. If location is denied, you can disable automatic location and set manual latitude/longitude in the Location settings tab.
- macOS 15.0
- Xcode 16+
- Swift 5.10+
xcodebuild \
-project happymode.xcodeproj \
-scheme happymode \
-configuration Debug \
-sdk macosx \
CODE_SIGNING_ALLOWED=NO \
SYMROOT="$PWD/build" \
clean buildswift testReleases are automated with GitHub Actions on version tags (v*).
- Merge changes to
main. - Tag and push:
git tag v0.0.4
git push origin v0.0.4The release workflow publishes:
happymode-vX.Y.Z.ziphappymode-vX.Y.Z.sha256happymode-latest.zip
To auto-update the Homebrew tap cask, set repository secret:
TAP_GITHUB_TOKEN(write access tohappytoolin/homebrew-happytap)
If this secret is missing, the release still succeeds and tap update is skipped.
- App does not switch appearance:
- Open
Settings…, go toPermissions, grant Automation permission, and allowhappymodeunder Privacy settings.
- Open
- Sunrise/sunset schedule is unavailable:
- Grant Location permission in
Permissions, or switch to manual coordinates/custom times inLocationorSchedulesettings.
- Grant Location permission in
- App shows warning icon in menu bar:
- Open the popup and follow the setup guidance to grant required permissions.
Licensed under GNU GPL v3.




