Note: This is personal software I built for my own use as my first experiment with Swift. It's shared publicly in case others find it useful, but it's designed specifically for my workflow and preferences. The overall architecture is not good, and the codebase is subject to change.
A minimal macOS Pomodoro timer that lives in your menu bar and blocks distracting apps during focus sessions. No fancy UI, no settings panels -- just a simple timer controlled by a configuration file.
Dora is a UI-less Pomodoro timer that:
- Shows remaining time in your menu bar
- Blocks specified apps during focus sessions
- Switches between focus/break modes automatically
- Plays a system sound when sessions complete
- Is configured entirely through a dotfile (
~/.dora
)
- Left Click: Start/pause timer
- Right Click: Switch between focus/break modes manually
During focus sessions, specified apps are automatically hidden when launched or activated. The apps remain running but become inaccessible until the focus session ends.
Everything is configured through a JSON file at ~/.dora
:
{
"breakDurationMinutes" : 5,
"focusDurationMinutes" : 25,
"blockedApps" : [
"com.google.Chrome"
]
}
Note: The config file is created automatically with default settings on first run.
To block an app, you need its bundle identifier. You can find this by:
-
Using Terminal:
osascript -e 'id of app "App Name"'
-
Using System Information:
- Hold Option and click Apple menu → System Information
- Go to Software → Applications
- Find your app and look for "Bundle Identifier"
- Clone this repository
- Open
Dora.xcodeproj
in Xcode - Build and run (⌘+R)
- The app will create a config file at
~/.dora
automatically
This app follows the UNIX (well, almost) philosophy: do one thing well. No preferences windows, no fancy animations, no distractions. Just a timer that works and gets out of your way.
This is personal software, so development is driven by my needs. However, here's what I'm considering:
- Improved dependency injection patterns
Note: The overall architecture sucks for now
- Website blocking (not just apps)
- Config file hot reloading
This is personal software, but if you find bugs or have suggestions, feel free to open an issue. Pull requests are welcome too.