Skip to content

Instantly share code, notes, and snippets.

@bashbunni
Created October 27, 2022 21:41
Show Gist options
  • Save bashbunni/f6b04fc4703903a71ce9f70c58345106 to your computer and use it in GitHub Desktop.
Save bashbunni/f6b04fc4703903a71ce9f70c58345106 to your computer and use it in GitHub Desktop.
CLI Pomodoro for Mac
# I'll be doing another one for Linux, but this one will give you
# a pop up notification and sound alert (using the built-in sounds for macOS)
# Requires https://github.com/caarlos0/timer to be installed
# Mac setup for pomo
alias work="timer 60m && terminal-notifier -message 'Pomodoro'\
-title 'Work Timer is up! Take a Break 😊'\
-appIcon '~/Pictures/pumpkin.png'\
-sound Crystal"
alias rest="timer 10m && terminal-notifier -message 'Pomodoro'\
-title 'Break is over! Get back to work 😬'\
-appIcon '~/Pictures/pumpkin.png'\
-sound Crystal"
@kimmy2611
Copy link

I managed to get the script working, but at the end of the timer, the notification does not show up. I've installed the terminal-notifier using homebrew, but it doesn't appear to be show up. The timer just counts down and displays "finished" on the terminal. Any suggestions on how to fix this?

@bashbunni
Copy link
Author

@kimmy2611 go to Systems Preferences > Notifications > then make sure that terminal-notifier is allowed to send notifications with sounds, banners, etc

@kimmy2611
Copy link

@kimmy2611 go to Systems Preferences > Notifications > then make sure that terminal-notifier is allowed to send notifications with sounds, banners, etc

Oh I overlooked that! Thank you for the help!

@ben-hampson
Copy link

Also check that macOS is allowing terminal-notifier to run. At first when I ran terminal-notifier from iTerm 2, it wouldn't create notifications. I'm not sure exactly how I got it to show notifications but I think I first got it to run in Terminal, and then notifications worked when I ran the command from iTerm 2.

@griffeth
Copy link

griffeth commented Oct 4, 2023

@kimmy2611 go to Systems Preferences > Notifications > then make sure that terminal-notifier is allowed to send notifications with sounds, banners, etc

I'm running into the same problem but I have checked that Notifications have been enabled for terminal-notifier...anything else that could be causing this?
Screenshot 2023-10-04 at 11 44 01 AM

@hey-laura
Copy link

@kimmy2611 go to Systems Preferences > Notifications > then make sure that terminal-notifier is allowed to send notifications with sounds, banners, etc

I'm running into the same problem but I have checked that Notifications have been enabled for terminal-notifier...anything else that could be causing this? Screenshot 2023-10-04 at 11 44 01 AM

It's a mess. My weird fix was to install via brew (wasn't working correctly like yours even with Notifications enabled), download the binary from the repo and put the app in Applications - which triggered it to work. Then I brew uninstalled it, removed the app, and reinstalled again, now it works .... Made sure the Notifications are enabled after all that - macos might do a banner pop up for you to enable it.

@woolgathering
Copy link

Super helpful, thanks for posting this.

If it's helpful to anyone, I edited the alias to instead run as a bash script so we can turn on/off focus mode easily, including turning it off when exiting the program early. I also added a time arg but it defaults to whatever you time you write in the script (25m and 5m below):

#!/bin/bash

# Function for work mode
work() {
    local duration=${1:-25m}  # Default to 5 minutes if no argument is provided
    macos-focus-mode enable
    timer "$duration"
    macos-focus-mode disable
    osascript -e 'display notification "β˜•" with title "Work Timer is up!" subtitle "Take a Break 😊" sound name "Crystal"'
}

# Function for rest mode
rest() {
    local duration=${1:-5m}  # Default to 10 minutes if no argument is provided
    timer "$duration"
    osascript -e 'display notification "β˜•" with title "Break is over" subtitle "Back to work, loser δ·‘" sound name "Crystal"'
}

# Trap to disable focus mode when script exits
trap 'macos-focus-mode disable' EXIT

# Main script logic
case "$1" in
    work)
        work "$2"
        ;;
    rest)
        rest "$2"
        ;;
    *)
        echo "Usage: $0 {work|rest} [time]"
        exit 1
        ;;
esac

@umkl
Copy link

umkl commented Apr 8, 2024

You don't need to install terminal-notifier if you don't want to. You can trigger notifications on osx with applescript

osascript -e 'display notification "β˜•" with title "Work Timer is up!" subtitle "Take a Break 😊" sound name "Crystal"'

but how would i combine this with the alias, cause then there are 3 layers of strings?

@umkl
Copy link

umkl commented Apr 8, 2024

You don't need to install terminal-notifier if you don't want to. You can trigger notifications on osx with applescript

osascript -e 'display notification "β˜•" with title "Work Timer is up!" subtitle "Take a Break 😊" sound name "Crystal"'

but how would i combine this with the alias, cause then there are 3 layers of strings?

ok you would have to escape it like this: " -> so in the rc-file it would look like this:

alias work="timer 50m && osascript -e 'display notification \"β˜•\" with title \"Work Timer is up!\" subtitle \"Take a Break 😊\" sound name \"Crystal\"'"

@SmithWebDev
Copy link

i've been playing around and attempting to add a time input, but it doesnt recognize an argument. I've looked over my other alias and have no issues with adding an argument.

alias work="timer $1 && osascript -e 'display notification \"β˜•\" with title \"Work Timer is up!\" subtitle \"Take a Break 😊\" sound name \"Crystal\"' && say \"Phase complete\""

@umkl
Copy link

umkl commented Apr 9, 2024

i've been playing around and attempting to add a time input, but it doesnt recognize an argument. I've looked over my other alias and have no issues with adding an argument.

alias work="timer $1 && osascript -e 'display notification \"β˜•\" with title \"Work Timer is up!\" subtitle \"Take a Break 😊\" sound name \"Crystal\"' && say \"Phase complete\""

alias work='work_alias(){ timer "$1" && osascript -e "display notification \"β˜•\" with title \"Work Timer is up!\" subtitle \"Take a Break 😊\" sound name \"Crystal\"" && say "Phase complete"; unset -f work_alias; }; work_alias'

this works for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment