A streamlined terminal companion for provisioning Pop!_OS developer and project machines. Powered by Python and simple shell scripts, Pop Setup CLI centralizes install flows, checks, and configuration in one ergonomic menu.
- Single entrypoint – run
python -m pop_setup_clifor a guided menu. - Profile-aware installs – switch between
developer_pcandproject_pcbundles from YAML config. - Composable scripts – add install/check steps by dropping shell scripts into
scripts/and registering them in config. - Status-first UX – concise
[OK],[RUN],[DONE],[FAIL]tags across install and check flows. - Safe placeholders – sample git/docker/runtime scripts demonstrate the pattern without touching real packages.
The bootstrap script handles everything for a brand-new Pop!_OS 22.04 machine:
git clone <repo>
cd Pop_Setup
bash bootstrap_pop_setup.shIt verifies python3, installs python3-venv and python3-pip if needed, creates .venv, installs requirements.txt, and launches the CLI.
Prefer manual control? Use standard venv and pip:
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python -m pop_setup_cli.
├─ pop_setup_cli/
│ ├─ app.py # main loop + CLI entry
│ ├─ config_loader.py # YAML parsing & validation
│ ├─ executor.py # run checks/installs via subprocess
│ ├─ models.py # dataclasses for Script/Profile/Result
│ └─ ui.py # menus, prompts, formatted output
├─ configs/
│ ├─ scripts.yml # install/check metadata
│ └─ profiles.yml # profile definitions (developer/project)
├─ scripts/ # individual install/check scripts
│ ├─ install_*.sh
│ └─ check_*.sh
├─ bootstrap_pop_setup.sh # venv bootstrap + CLI launcher
└─ pop_setup.sh # legacy reference (do not modify)
Pop Setup
1) Install all
2) Install selected
3) Check system status
q) Quit
- Install all prompts for
developer(default) orprojectmode and runs the respective profile. - Install selected lists every script from
configs/scripts.ymlfor ad-hoc execution. - Check system status executes only check scripts and summarizes installed vs missing.
configs/scripts.yml:
scripts:
- id: git
name: "Git"
description: "Install and configure Git"
script: "scripts/install_git.sh"
check: "scripts/check_git.sh"configs/profiles.yml:
profiles:
developer_pc:
description: "Full developer workstation"
scripts:
- system_prep
- docker
- nodejs
project_pc:
description: "Project runtime machine"
scripts:
- system_prep
- dockerAdd a new component by:
- Writing
scripts/install_<name>.sh(and optionalscripts/check_<name>.sh). - Adding an entry to
configs/scripts.yml. - Referencing its
idin any profile insideconfigs/profiles.yml.
The repo ships with placeholder scripts for Git, Docker, runtimes, desktop apps, and more. Each script is bash-based with safe echo/sleep commands so you can observe the CLI flow without changing your system. Replace them with real install logic once you’re ready.
- Python 3.x, 4-space indentation, minimal comments per project guidelines.
- Execution uses
subprocess.run(..., check=False)to stream concise success/failure markers. pop_setup.shis legacy reference only—leave it untouched.- Optional dependencies like
richcan enhance console styling if desired.
- Fork & branch.
- Keep new install/check logic modular—one script per task.
- Update configs and profiles as needed.
- Run the CLI (
python -m pop_setup_cli) to validate UX before pushing.
Add your preferred license information here.
Happy provisioning! 🛠️