Last active
December 4, 2025 17:32
-
Star
(271)
You must be signed in to star a gist -
Fork
(30)
You must be signed in to fork a gist
-
-
Save bashbunni/3880e4194e3f800c4c494de286ebc1d7 to your computer and use it in GitHub Desktop.
CLI Pomodoro for Linux (zsh)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # study stream aliases | |
| # Requires https://github.com/caarlos0/timer to be installed. spd-say should ship with your distro | |
| declare -A pomo_options | |
| pomo_options["work"]="45" | |
| pomo_options["break"]="10" | |
| pomodoro () { | |
| if [ -n "$1" -a -n "${pomo_options["$1"]}" ]; then | |
| val=$1 | |
| echo $val | lolcat | |
| timer ${pomo_options["$val"]}m | |
| spd-say "'$val' session done" | |
| fi | |
| } | |
| alias wo="pomodoro 'work'" | |
| alias br="pomodoro 'break'" |
for anyone trying to use this on windows you can add this function to your powershell profile
# --- The Main Function ---
function Start-PomoTimer {
param (
[string]$TimerType
)
$pomoOptions = @{
"work" = "50m"
"break" = "10m"
"short" = "5m"
}
# --- REMEMBER TO UPDATE THE PATH OF THE CLONED REPOSITORY HERE ---
$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
Check out my setup in this repo — fish-flowmodoro, a simple Fish Shell productivity timer with chill audio cues.
Thanks Bash, love you.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To use your
.zshrcand thepomodorofunction on WSL with Ubuntu 24.04, follow these steps:✅ 1. Install Required Tools
Before using your aliases and functions, install the required tools in your WSL environment:
sudo apt update sudo apt install zsh lolcat espeak # spd-say comes from speech-dispatcher or use espeak as fallbackThen install
timerfrom GitHub (bycaarlos0):Now
timershould be available system-wide.✅ 2. Ensure You're Using
zshin WSLIf you're not already using Zsh as your shell in WSL, switch to it:
sudo apt install zsh chsh -s $(which zsh)Then restart WSL or run
zsh.✅ 3. Configure
.zshrcPut your function and aliases in the
.zshrcfile:nano ~/.zshrcPaste this:
Then reload it:
✅ 4. Run the Commands
Now you can simply run:
spd-sayin WSLspd-saymay not produce audio output in WSL directly unless you have audio forwarding set up (via PulseAudio or similar). If it doesn't work, consider replacingspd-saywith something likeespeakor even just anotify-send(if running a Linux GUI).Example:
espeak "'$val' session done"or remove it if sound isn’t essential.
✅ How to Send Windows Notifications from WSL
The only way to get native Windows notifications from WSL is to explicitly call Windows tools from WSL, like PowerShell.
✔️ Step-by-Step: Add Windows Toast Notification
🔧 1. Install the BurntToast module (Windows side)
In a Windows PowerShell terminal (not WSL), run:
✏️ 2. Modify Your
pomodoroFunctionUpdate your function to use PowerShell from WSL to send a toast:
🧪 3. Test It
After timer finishes, you should:
espeak)