Interactive dotfile generator and project configuration manager.
Answer a few questions, get a fully configured project —
.gitignore, linting, formatting, testing, Docker, CI, and more, all in one place.
# Recommended: install as a global tool via pipx
pipx install dotmaster
# Or install into your current environment
pip install dotmaster# Navigate to your project directory
cd my-new-project
# Run the guided wizard
dotmaster initThe wizard will ask you about your stack, and then generate all relevant dotfiles.
| Command | Description |
|---|---|
dotmaster init |
Run the wizard and generate all dotfiles |
dotmaster sync |
Regenerate files from an existing dotmaster.yaml |
dotmaster add <plugin> |
Add or regenerate one plugin's files |
dotmaster list |
Show all available plugins |
dotmaster profile [name] |
Inspect or apply a preset profile |
dotmaster validate |
Check dotmaster.yaml for inconsistencies |
Skip the wizard entirely with --preset:
dotmaster init --preset web_app # React/Next.js + ESLint + Prettier + Docker + CI
dotmaster init --preset backend_api # Python + FastAPI + Ruff + Docker + CI
dotmaster init --preset library # ESLint + Jest, no Docker
dotmaster init --preset monorepo # pnpm + ESLint + CIDepending on your answers, dotmaster can generate:
| File | Plugin |
|---|---|
.gitignore |
gitignore (via gitignore.io API or template) |
.eslintrc.json + .eslintignore |
eslint |
.prettierrc + .prettierignore |
prettier |
.editorconfig |
editorconfig |
Dockerfile + .dockerignore |
docker |
.github/workflows/ci.yml |
github_actions |
.gitlab-ci.yml |
gitlab_ci |
pyproject.toml |
pyproject |
.env.example |
dotenv |
ruff.toml |
ruff |
All answers are persisted in dotmaster.yaml at the root of your project:
version: "1"
project:
name: my-app
description: A web application
author: Jane Doe
stack:
languages: [javascript, typescript]
framework: nextjs
package_manager: pnpm
quality:
linter: eslint
formatter: prettier
testing: jest
infrastructure:
docker: true
docker_multistage: true
ci: github_actions
env_file: true
editorconfig: true
profile: web_appEdit it directly, then run dotmaster sync to re-generate.
Each tool is implemented as a plugin with two strategies:
- Delegate — hand off to the official CLI tool if available (e.g. gitignore.io API for
.gitignore) - Generate — fall back to a high-quality Jinja2 template
You can add custom plugins by subclassing dotmaster.plugins.base.BasePlugin.
git clone https://github.com/your-org/dotmaster
cd dotmaster
pip install -e ".[dev]"
pytestMIT