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"
@michael-duren
Copy link

michael-duren commented Jun 6, 2025

In case anyone else wanted this. Added functions for specifying the time.

Use:
w 50 # work 50 minutes

# Mac setup for pomo
alias work="timer 60m && terminal-notifier -message 'Pomodoro'\
        -title 'Work Timer is up! Take a Break 😊'\
        -appIcon '~/Pictures/pumpkin.jpg'\
        -sound Crystal"
        
alias rest="timer 10m && terminal-notifier -message 'Pomodoro'\
        -title 'Break is over! Get back to work 😬'\
        -appIcon '~/Pictures/pumpkin.jpg'\
        -sound Crystal"

w() {
    timer "${1}m" && terminal-notifier -message 'Pomodoro'\
        -title 'Work Timer is up! Take a Break 😊'\
        -appIcon '~/Pictures/pumpkin.jpg'\
        -sound Crystal
}

r() {
    timer "${1}m" && terminal-notifier -message 'Pomodoro'\
        -title 'Break is over! Get back to work 😬'\
        -appIcon '~/Pictures/pumpkin.jpg'\
        -sound Crystal
}

@nameerakhter
Copy link

for those who want to use this on windows here is a workaround you can add the following code to your powershell profile

Screenshot 2025-08-11 130250

Requires https://github.com/caarlos0/timer to be installed

# --- The Main Function ---
function Start-PomoTimer {
    param (
        [string]$TimerType
    )

    $pomoOptions = @{
        "work"  = "50m"
        "break" = "10m"
        "short" = "5m"
    }

    # --- REMEMBER TO UPDATE THIS PATH WITH THE PATH WHERE YOU CLONED THE REPO MENTIONED ABOVE ---
    $timerPath = "D:\timer\timer.exe"

    if ($pomoOptions.ContainsKey($TimerType)) {
        $duration = $pomoOptions[$TimerType]
        Write-Host "Starting '$TimerType' timer for $duration..."
        & $timerPath $duration -n $TimerType
        Write-Host "'$TimerType' session done!"
    } else {
        Write-Host "Invalid timer type: '$TimerType'. Available types: $($pomoOptions.Keys -join ', ')"
    }
}

function Start-PomoWork {
    Start-PomoTimer -TimerType "work"
}

function Start-PomoBreak {
    Start-PomoTimer -TimerType "break"
}


# --- Updated Aliases pointing to the new functions ---
Set-Alias -Name wo -Value Start-PomoWork
Set-Alias -Name br -Value Start-PomoBreak

@Bahaaio
Copy link

Bahaaio commented Aug 16, 2025

Nice setup! I built a Go CLI tool inspired by this approach - handles notifications and timing with a simple config file:
https://github.com/Bahaaio/pomo

you can do:

  • pomo (work session)
  • pomo 15m (custom duration)
  • pomo break

Is cross-platform (Linux, macOS, Windows).
Includes pause/resume, add/subtract time, and reset functionality.

pomo

example notification config:

notification:
    enabled: true
    title: work finished πŸŽ‰
    message: time to take a break
    icon: ~/my/icon.png

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