A modern, interactive terminal UI for installing development tools across multiple platforms. Select your package manager, choose which tools to install, and watch the installation progress in real-time.
- Multi-Panel Interface: Intuitive side-by-side layout for installation method selection, tool selection, and status monitoring
- Dynamic Panel Sizing: Responsive panel dimensions that adapt to content
- Multiple Package Managers: Support for Homebrew, APT, YUM, DNF, Pacman, Nix, Scoop, Chocolatey, and Curl
- Tool Selection: Multi-select interface for choosing from 46 development tools
- Vim-Style Navigation: Jump to first (g/w), last (G/s), and scroll through lists efficiently
- Real-Time Status: Live installation status with spinner animation and output display
- Parallel Installation: Install multiple tools simultaneously for faster setup
- Retry Logic: Automatic retry mechanism with random delays for failed installations
- Installation Duration: Track how long each tool takes to install
- Colored Output: Green for successful installations, red for failures
- Error Handling: Clear error messages and validation at each step
- Static Binary: Single binary works across all Linux distributions (no GLIBC version issues)
The safest way to install lazysetup with automatic checksum verification:
# Latest stable release (recommended)
curl -fsSL https://github.com/youpele52/lazysetup/releases/latest/download/install.sh | bash
# Specific version
curl -fsSL https://github.com/youpele52/lazysetup/releases/latest/download/install.sh | bash -s v0.1.0Features:
- ✅ Auto-detects OS and architecture
- ✅ Fetches latest release automatically
- ✅ Downloads pre-built binary
- ✅ Verifies checksum for security
- ✅ Installs to
/usr/local/bin - ✅ Requests sudo only if needed
Verify installation:
curl -fsSL https://github.com/youpele52/lazysetup/releases/latest/download/verify.sh | bashIf you have Go 1.16+ installed:
# Latest version
go install github.com/youpele52/lazysetup@latest
# Specific version
go install github.com/youpele52/lazysetup@v0.1.0Binary will be installed to $GOPATH/bin/lazysetup (usually ~/go/bin/lazysetup)
git clone https://github.com/youpele52/lazysetup.git
cd lazysetup
CGO_ENABLED=0 go build -o lazysetup
./lazysetupIf installed via Curl:
Interactive uninstall (prompts for confirmation):
curl -fsSL https://github.com/youpele52/lazysetup/releases/latest/download/uninstall.sh -o /tmp/uninstall.sh && bash /tmp/uninstall.shOr manually:
# Find installation location
which lazysetup
# Remove it
sudo rm /usr/local/bin/lazysetupIf installed via Go:
# Remove from GOPATH
rm ~/go/bin/lazysetupIf built from source:
# Remove the binary you built
rm ./lazysetup- Curl method: curl, sha256sum/shasum (for verification)
- Go method: Go 1.16 or higher
- Source method: Go 1.16 or higher
- Runtime: A supported package manager (Homebrew, APT, YUM, Curl, Scoop, or Chocolatey)
./lazysetup| Key | Action |
|---|---|
Tab / Shift+Tab |
Cycle through panels (left/right) |
0, 1, 2, 3 |
Jump to specific panels (Status, Package Manager, Action, Tools) |
↑ ↓ |
Navigate within active panel |
g or w |
Jump to first item (vim-style) |
G or s |
Jump to last item (vim-style) |
/ |
Search/filter tools (toggle on/off in Tools panel) |
Space |
Toggle tool selection |
Enter |
Confirm selection or proceed to next panel |
c |
Clear status screen and reset state |
u |
Update application (when update available) |
Esc (double-tap) |
Cancel and return to main menu |
Ctrl+C |
Quit application |
- Panel 1 (Package Manager): Select your package manager (Homebrew, APT, YUM, DNF, Pacman, Nix, Scoop, Chocolatey, Curl)
- Panel 2 (Action): Choose action - Check, Install, Update, or Uninstall
- Panel 3 (Tools): Select which tools to install/update/uninstall (tool list adapts to the selected package manager)
- Panel 0 (Status): Watch real-time progress with spinner animation and results
- git: Version control system
- gh: GitHub CLI for pull requests and issues
- lazygit: Terminal UI for git
- delta: Syntax-highlighting pager for git diffs
- docker: Container platform
- lazydocker: Terminal UI for docker
- podman: OCI container and pod manager
- ripgrep (rg): Fast grep alternative with .gitignore support
- fd: User-friendly find alternative
- bat: Cat with syntax highlighting
- eza: Better ls with git integration and colors
- zoxide: Smarter cd that learns your habits
- fzf: Fuzzy finder for files and command history
- nvim: Modern Vim-based editor with LSP support
- zsh: Superior shell with better completion
- tmux: Terminal multiplexer for persistent sessions
- starship: Beautiful, fast cross-shell prompt
- btop: Modern htop with more features
- tree: Directory structure visualizer
- rsync: Fast file synchronization and transfer utility
- node: JavaScript runtime
- python3: Python interpreter and pip
- bun: Fast JavaScript/TypeScript runtime and package manager
- pnpm: Fast, disk space efficient Node.js package manager
- uv: Ultra-fast Python package manager and environment manager
- just: Modern command runner (alternative to make)
- make: Build automation tool
- jq: JSON processor for APIs
- yq: YAML, JSON, and XML processor
- wget: File downloader
- httpie: User-friendly HTTP client
- tldr: Simplified man pages
- lazysql: Terminal UI for databases
- direnv: Per-directory environment loader
- mise: Polyglot runtime manager
- shellcheck: Shell script linter
- pre-commit: Hook manager for multi-language repos
- claude-code: Anthropic coding agent CLI
- opencode: OpenCode terminal coding agent
- codex: OpenAI coding agent CLI
- openclaw: Personal AI assistant CLI
- ollama: Local LLM runtime and model manager
- kubectl: Kubernetes command-line tool
- k9s: Terminal UI for Kubernetes clusters
- terraform: Infrastructure as Code tool
- helm: Kubernetes package manager
- Homebrew: macOS and Linux
- APT: Debian/Ubuntu
- YUM: RHEL/CentOS (older versions)
- DNF: Fedora/RHEL 8+
- Pacman: Arch/Manjaro
- Nix: NixOS and cross-platform
- Scoop: Windows
- Chocolatey: Windows
- Curl: Universal fallback (downloads binaries or runs official install scripts)
Tool availability varies by package manager. The tools panel only shows tools supported by the selected install method.
lazysetup/
├── main.go # Application entry point
├── pkg/
│ ├── commands/ # Installation command definitions (install, update, uninstall)
│ ├── config/ # Configuration (install methods, etc.)
│ ├── constants/ # UI constants and messages
│ ├── colors/ # Color scheme definitions
│ ├── executor/ # Command execution with timeout and cancellation
│ ├── handlers/ # Event handlers and keybindings
│ │ ├── handlers_navigation.go # Panel navigation and cursor movement
│ │ ├── handlers_actions.go # Action selection and execution
│ │ ├── handlers_execution.go # Tool execution and command runners
│ │ └── handlers_legacy.go # Legacy single-page installation handler
│ ├── models/ # State management
│ │ ├── state.go # Application state struct
│ │ ├── state_methods.go # UI state getters/setters
│ │ └── state_installation.go # Installation-related state methods
│ ├── tools/ # Tool definitions
│ └── ui/ # UI layout and rendering
│ ├── layout_multipanel.go # Main 4-panel layout orchestration
│ ├── layout_panels.go # Individual panel rendering functions
│ ├── messages.go # Message builder for consistent formatting
│ └── keybindings.go # Centralized keybinding setup
└── go.mod # Go module definition
layout_multipanel.go: 4-panel layout management (Status, Package Manager, Action, Tools)layout_panels.go: Individual panel rendering (Package Manager, Action, Tools)messages.go: Dynamic message builder with action-specific success/failure messageskeybindings.go: Centralized keybinding setup
handlers_navigation.go: Panel navigation and cursor movementhandlers_actions.go: Action selection and execution initializationhandlers_execution.go: Concurrent tool execution and command runnershandlers_legacy.go: Legacy single-page installation handler
state.go: Application state struct with ActionType enumstate_methods.go: UI state getters/setters with mutex protectionstate_installation.go: Installation-related state methods
- Installation, update, and uninstall command definitions for each package manager
- Support for Homebrew, APT, YUM, Curl, Scoop, and Chocolatey
For optimal visual experience, use a terminal with:
- Background: Dark Navy/Charcoal (#2d2d44)
- Foreground: White/Light Gray
- Highlight: Bright Magenta
- Accent: Bright Cyan
CGO_ENABLED=0 go build -o lazysetupgo test ./...For detailed testing documentation including test structure, race detection, and test priorities, see docs/TESTING.md.
The project follows a modular architecture with clear separation of concerns:
- UI Layer: Handles all terminal rendering and layout
- Handler Layer: Manages user input and business logic
- Model Layer: Maintains application state
- Command Layer: Executes system commands for installation
Copyright 2026 Youpele Michael
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.
- Ensure the package manager is installed on your system
- The application checks for package manager availability before installation
- Select at least one tool before pressing Enter to start installation
- Use Space to toggle tool selection
- Check your internet connection
- Some installations may take time; the spinner indicates progress
- Ensure you press Esc twice within 500ms to cancel and return to main menu
- Single Esc press marks the time; second press within 500ms triggers abort
For a detailed history of changes and version updates, see docs/CHANGE_LOG.md.
For planned features, enhancements, and development roadmap, see docs/PLAN.md.