DistroForge
A Python CLI that automates the boring parts of a fresh Linux install — package setup, dotfile sync, and post-install configuration in one reproducible script.
- Python
- CLI
- Linux
- Automation
- Developer Tooling
A Python CLI that automates the boring parts of a fresh Linux install — package setup, dotfile sync, and post-install configuration in one reproducible script.
Every time I reinstall a Linux distro — a new laptop, a fresh VM, a broken setup — I lose an afternoon to the same routine: install the same package manager extras, pull the same dotfiles, re-enable the same systemd services, and remember which neovim plugins I actually use.
The existing solutions are either too heavy (full configuration management like Ansible) or too fragile (a personal shell script that breaks the moment a package name changes upstream).
DistroForge is a small Python CLI that runs after a clean install and brings a machine to a working state from a single declarative YAML file. The same config works across Debian/Ubuntu, Arch, and Fedora — the CLI handles the differences in package managers and paths.
It's intentionally not a configuration management framework. The goal is "post-install, in one command, without yak-shaving" — not "manage a fleet of servers."
apt, pacman, and dnf so the same profile
works across distros.The CLI is a thin orchestration layer over a few focused modules:
profile/ — parses and validates the YAML config (Pydantic schemas, fails fast on
typos).distro/ — detects the host and picks the right package-manager adapter.steps/ — each step (packages, dotfiles, services, shell) implements the same
plan() → apply() interface so dry-run is just "plan only."cli/ — click entrypoint, logging, and exit handling.Every step is unit-tested against fake adapters; the integration tests run inside throwaway Docker containers so I don't have to trash a real machine to verify behavior.
click, pydantic, rich, and pytestDistroForge is a work in progress. The current focus is making the package and dotfile steps rock-solid before adding more.
distroforge export to snapshot a working machine back into a profileIf you have ideas, the repo is the best place — issues and PRs welcome.