A warm home screen that greets you every time you open your terminal.
Installation • Features • Commands • Configuration • Languages • Contributing
☀ Good morning, kyoungmin!
Sun, 4/6 · 9:23 AM │ Seoul 18°C Clear
──────────────────────────────────────────────
📂 Recent Projects
[1] ~/projects/my-app 3h ago
[2] ~/projects/blog yesterday
[3] ~/work/api-server 3d ago
git 2.43.0 node 20.11.0 python 3.12.2 │ main ✓
🎯 Finish API endpoints
✓ Design DB schema
○ Design login page
○ Write README
🔥 7 days streak · today: 12
💡 Tip: Press Ctrl+R to search your command history
Vibe-coding tools like Cursor and Claude Code are bringing new people to the terminal every day. But a default terminal greets you with nothing but a blank prompt — cold and intimidating.
Good Morning Terminal is a shell script dashboard that runs automatically when you open your terminal. It shows a time-aware greeting, today's tasks, recent project shortcuts, system status, and a daily terminal tip — all at a glance.
No dependencies. No frameworks. Pure shell. Under 100ms.
- Time-aware Greeting — Morning/afternoon/evening greeting + weather via wttr.in
- Recent Projects — Auto-tracks git projects on
cd, jump back withgm go 1 - To-Do List — Lightweight task management with
gm add task name - Daily Goal — Set a daily goal with
gm goal my goal(auto-expires at midnight) - System Info — git, node, python versions + current branch status in one line
- Activity Streak — Track your consecutive days of terminal usage
- Daily Tips — A new terminal tip every day, perfect for beginners
- Command Dictionary — Browse useful commands by category with
gm cmd - Command Explainer — Break down any command and its flags with
gm explain - Keyboard Shortcuts — Quick-reference cheatsheet with
gm keys - Safety Net — Warns before dangerous commands like
rm -rforgit push -f - i18n — Korean and English built-in. Community translations welcome!
- Blazing Fast — ~100ms startup. Cache-first design, minimal subshells
- Shell: bash 3.2+ or zsh 5.0+
- OS: macOS or Linux
- Optional:
curl(for weather)
No other external dependencies. Pure shell scripts.
git clone https://github.com/coldpak/gmt.git ~/.gmt && bash ~/.gmt/install.shgit clone https://github.com/coldpak/gmt.git ~/.gmt
echo 'source ~/.gmt/gmt.sh' >> ~/.zshrc # or ~/.bashrc
source ~/.zshrcOn first run, an interactive onboarding wizard will guide you through setup using arrow-key navigation.
| Command | Description |
|---|---|
gm |
Show home screen |
gm add my task |
Add a task (quotes optional) |
gm done <N> |
Toggle task completion |
gm rm <N> |
Remove a task |
gm goal my goal |
Set today's goal (quotes optional) |
gm go <N> |
Jump to a recent project |
gm list |
Show task list only |
gm clear |
Remove all completed tasks |
gm cmd |
Browse command dictionary by category |
gm cmd <N> |
Show commands in category N |
gm cmd <keyword> |
Search commands by keyword |
gm explain <command> |
Explain a command and its flags |
gm keys |
Show keyboard shortcuts cheatsheet |
gm config |
Edit settings |
gm setup |
Re-run onboarding wizard |
gm help |
Show help |
gm version |
Show version |
Edit ~/.gmt/config.sh directly or run gm config.
GMT_USERNAME="" # Leave empty to use $USER
GMT_LANG="auto" # auto | ko | en | ja | zh
GMT_WEATHER_ENABLED=true # Show weather
GMT_WEATHER_CITY="Seoul" # City name for wttr.in
GMT_WEATHER_CACHE_TTL=1800 # Weather cache TTL in seconds
GMT_MODULES="greeting projects sysinfo todos activity tips" # Reorder or remove as needed
GMT_SAFE_ENABLED=true # Safety net for dangerous commands
GMT_PROJECTS_COUNT=5 # Number of recent projects to showChange GMT_MODULES to reorder or hide modules:
# Show todos first
GMT_MODULES="todos greeting projects"
# Minimal: just greeting and tips
GMT_MODULES="greeting tips"GMT supports multiple languages. Currently bundled:
| Language | File | Status |
|---|---|---|
| English | lang/en.sh |
Built-in |
| Korean | lang/ko.sh |
Built-in |
| Japanese | lang/ja.sh |
Community |
| Chinese | lang/zh.sh |
Community |
- Copy
lang/en.shtolang/{code}.sh - Translate all
L_variables (including theL_TIPSarray) - Submit a PR
All user-facing strings are managed via L_ variables. Command names (gm add, etc.) are not translated.
~/.gmt/
├── gmt.sh # Main entry point (sourced by shell rc)
├── config.sh # User configuration
├── install.sh # Installer script
├── modules/
│ ├── onboarding.sh # First-run setup wizard (arrow-key selection)
│ ├── greeting.sh # Greeting + time + weather
│ ├── projects.sh # Recent projects & quick jump
│ ├── sysinfo.sh # System info (compact one-liner)
│ ├── todos.sh # To-do list & daily goal
│ ├── activity.sh # Activity streak counter
│ ├── tips.sh # Daily terminal tips
│ ├── cmddict.sh # Command dictionary
│ ├── explain.sh # Command explainer
│ ├── keys.sh # Keyboard shortcuts cheatsheet
│ └── safe.sh # Safety net for dangerous commands
├── lang/
│ ├── ko.sh # Korean
│ └── en.sh # English
├── lib/
│ ├── colors.sh # ANSI color utilities
│ ├── layout.sh # Drawing & alignment utilities
│ ├── cache.sh # TTL-based file cache
│ └── compat.sh # Cross-platform wrappers
├── data/ # User data (auto-generated)
└── cache/ # Cached data (auto-generated)
Designed for under 100ms perceived startup time.
- All external calls (weather API, version checks) are cached
- Cache misses trigger background refresh — never blocks rendering
- Minimal subshells and pipes; prefers bash builtins
- Version info cached daily, refreshed in background
Supports both macOS and Linux. BSD/GNU differences are handled automatically in lib/compat.sh.
| Feature | macOS | Linux |
|---|---|---|
| File mtime | stat -f %m |
stat -c %Y |
| sed in-place | sed -i '' |
sed -i |
| Reverse file | tail -r |
tac |
# Remove source line from shell rc
# zsh:
sed -i '' '/gmt\.sh/d' ~/.zshrc
# bash:
sed -i '/gmt\.sh/d' ~/.bashrc
# Remove GMT directory
rm -rf ~/.gmtContributions are welcome! See CONTRIBUTING.md for details.
- Add a language — Translate
lang/en.shinto your language - New modules — Create a
modules/your_module.shwith a_gmt_yourmodule_renderfunction - Add tips — Add terminal tips to the
L_TIPSarray in language packs - Add commands — Add entries to
L_CMD_ITEMS_*andL_EXPLAIN_DATAarrays in language packs - Bug reports — Open an issue with your OS, shell version, and
gm versionoutput
# Clone to a test directory (not ~/.gmt)
git clone https://github.com/coldpak/gmt.git ~/gmt-dev
cd ~/gmt-dev
# Test without affecting your real installation
GMT_DIR="$(pwd)" zsh -c 'source gmt.sh'- wtfutil/wtf — Terminal dashboard (Go)
- dylanaraps/neofetch — System info tool
- GitHub contribution graph
MIT © 2026 Good Morning Terminal Contributors
Made with shell scripts and morning coffee.
If GMT brightens your terminal, consider giving it a star!
