6. Fork¶
Make this setup your own: your packages, your dotfiles, your branding.
Rename¶
| What | Where |
|---|---|
| distribution name, description | pyproject.toml: [project] name, description |
| package folder | src/personal_os_setup/, imports, and the [project.scripts] entry point |
| logger name | settings.py: the name used to bind and filter the loguru logger |
| documentation site | properdocs.yml (site_name, site_author, theme.logo/favicon), CNAME for a custom domain, DOCS_SITE_URL in tasks/system/help.py |
| documentation | README.md, AGENTS.md (CLAUDE.md links to it), SECURITY.md, docs/ |
| version and changelog | semantic-release owns project.version and CHANGELOG.md; never edit them by hand |
Then: uv lock, make install-dev, make check.
Customize the data¶
Most personalization is data, not code. Keep your changes in these files to minimize upstream merge conflicts:
| What | Where |
|---|---|
| package catalog | src/personal_os_setup/config/packages.yaml (distro → manager → category → packages) |
| dotfiles | src/personal_os_setup/config/chezmoi/ (the chezmoi source dir) |
| OS-specific files | src/personal_os_setup/config/{darwin,unix,windows,others}/, wired in tasks/factory.py |
The package-manager backends (tasks/managers/) and detect_os.py are reusable as they are.
The fork-and-customize skill in .claude/skills/ covers the details for coding agents.
Once on GitHub¶
- Create
mainanddev, and protect them; use squash merges for pull requests. Allow release automation and the documentedmain→devmerge sync to push as needed. - Workflow permissions "Read and write", and GitHub Pages from
gh-pages(5. Release). - Install the Renovate app on the repository.
Stay in sync with upstream¶
Shared files: makefiles/, Makefile, scripts/emoji_commit_parser.py, .pre-commit-config.yaml,
.markdownlint-cli2.yaml, .github/, docs/developer/.