lazymake makes it easy to work with multiple projects and Makefiles. Press w to see recent workspaces and automatically discovered Makefiles in your project.
Access recent and discovered Makefiles with a single keypress:
┌─ Switch Workspace ────────────────────────────────────────┐
│ │
│ FAVORITES │
│ ⭐ Makefile │
│ ./myapp • Last used: 2 minutes ago │
│ │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ │
│ ALL WORKSPACES │
│ Makefile │
│ ../other-project • Last used: 1 hour ago │
│ │
│ dangerous.mk │
│ ./myapp/examples • Discovered │
│ │
│ Makefile │
│ ./myapp/tools • Discovered │
│ │
└───────────────────────────────────────────────────────────┘
1 favorite • 3 workspaces
enter: switch • f: favorite • esc/w: cancel
Features:
- Automatic discovery: Scans your project tree (up to 3 levels deep) to find all Makefiles
- Recent workspaces: Shows last 10 accessed Makefiles with directory path and last used time
- Discovered workspaces: Displays found Makefiles you haven't used yet
- Favorites section: Star frequently used projects with
f- they appear in a dedicated section at the top - Visual separation: Favorites and all workspaces are clearly separated with headers and dividers
- Clear organization: Filename in title, full relative path with root directory in description
- Smart exclusions: Skips
.git,node_modules,vendor, build directories, and other common non-code paths - Fast scanning: 5-second timeout ensures responsiveness even in large projects
The current workspace is always visible in the status bar:
└──────────────────────────────────────────────────────────┘
│ ./Makefile • 12 targets • 2 dangerous enter: run • q │
└──────────────────────────────────────────────────────────┘
The path is displayed relative to your current working directory:
./Makefile- in current directory../other/Makefile- in sibling directory~/projects/foo/Makefile- absolute path with~expansion
Each workspace automatically maintains its own execution history. When you switch between projects, you'll see the recent targets for that specific Makefile:
# Working in project A
RECENT
⏱ build-api Build the API server 3.2s
⏱ test-api Run API tests 1.5s
# Switch to project B (press 'w')
RECENT
⏱ deploy-prod Deploy to production 45.1s
⏱ build-web Build web frontend 8.3s
This means:
- Each Makefile remembers its own frequently used targets
- No need to scroll through unrelated targets
- Faster context switching between projects
lazymake automatically tracks workspace usage:
- On first use: Creates workspace entry when you run a target
- On subsequent uses: Updates last accessed time
- On cleanup: Removes entries for deleted Makefiles automatically
- Persistent: Data survives across sessions in
~/.cache/lazymake/workspaces.json
When you press w, lazymake:
- Records current Makefile - Ensures your current file appears in the list
- Scans project tree - Searches up to 3 levels deep from current directory
- Finds all Makefiles - Detects
Makefile,makefile,GNUmakefile,*.mk,*.mak - Applies exclusions - Skips
.git,node_modules,vendor,build,dist,.cache, etc. - Combines results - Shows recent workspaces first, then newly discovered ones
- Fast operation - 5-second timeout prevents hanging on large projects
Working with multiple Makefiles in a large repository:
my-monorepo/
├── Makefile # Root Makefile
├── services/
│ ├── api/Makefile # API service
│ ├── auth/Makefile # Auth service
│ └── worker/Makefile # Background worker
└── frontend/Makefile # Frontend app
Press w to see all Makefiles automatically - no manual browsing needed!
Switching between different projects:
- Press
wto see recent projects and discovered Makefiles - Star your most frequently used projects with
f - Favorites always appear at the top of the list
New to a project? Press w:
- Instantly see all available Makefiles
- Discovered Makefiles show "Discovered in project"
- Select one to start working - it gets added to your recent list
If you need a Makefile that's:
- More than 3 levels deep
- In an excluded directory
- Outside your current project
Use the CLI flag:
lazymake -f path/to/MakefileOnce accessed, it appears in your recent workspaces list.
w: Open workspace picker from list view↑/↓orj/k: Navigate workspacesf: Toggle favorite (star/unstar workspace)enter: Switch to selected workspaceescorw: Return to main list view