A configurable timer with a plugin system meant to automate various tasks when the timer starts, stops, or ticks.
The goal of this project is to help maintain focus. Start a timer and remove distraction seamlessly. When the timer ends, take a break on revisit the distracting world for a bit before setting another timer. We accomplish the goal via:
- OS/GUI automations (applescript, powershell, etc)
- Useful 3rd party integrations (slack, rescuetime, arbitrary http/s requests)
- 1st party Persistence and analytics (see how focused you are, track trends over time)
To this end, most of the functionality of the Focus Me lies within the various plugins.
- applcation-manager - Closes distracting applications before the timer starts, and opens them back up when the timer ends.
- bell - Plays a nice sounding bell at the start and end of the timer.
- logger - Logs the time remaining to the terminal.
- rain Plays the sound of rain during the duration of the timer
- slack Toggles do not disturb and sets a status for the duration of the timer
- spotify Plays spotify during the timer, stops it when the timer ends.
- tracker Tracks the number of sessions completed per day, along with the focused applications in use for the duration of the timer.
- webhooks Fire configurable HTTP requests when the timer starts and stops.
npm install -g @focus-me/focus-cli
macOS is the only supported platform at the moment, PRs welcome!
focus
will look in a platform specific folder to try to load configuration, and if
cannot find it will throw. You can specify an alternative config with using the --config
command line option or
config
environment variable.
config.time
- The amount of time, in minutes, to count down.config.plugins
- An object of plugins to configure. Each key is the name of the plugin. Each plugin has anenabled
property to enabled/disabled it, as well as other plugin-specific configuration.
{
"time": 25,
"plugins": {
"name-of-plugin": {
"enabled": true
}
}
}
focus
will start the timer.
If you need to cancel the timer, you can kill the process with a SIGINT
.
Canceling the timer will not execute any plugins' stop methods that should only
be run upon completion of the timer.
--help
- Display the list of options--version
- Display the version of FocusMe--config
- Specify an alternative path to a FocusMe config file.
If you specify an additional plugin in config.plugins
, we attempt to import that module. The module must implement
the plugin interface
Installing this module will create files in:
~/Library/Application Support/FocusMe/preferences.json
: Your FocusMe preferences/config.~/Library/Script Libraries/FocusMe/util.scpt
: A compiled applescript that serves as a library for other applescripts to import. It is responsible for reading and parsing the user's preferences.