Official mirrors
The configuration is available at the following locations:GitHub
Primary repositoryMain development location. All pull requests, issues, and discussions happen here.
GitLab
MirrorSynchronized mirror with the same commit history.
Codeberg
MirrorCommunity-focused Git hosting mirror.
Iztea
Self-hosted mirrorIsabel’s personal Git instance.
Tangled
Tangled mirrorAlternative self-hosted mirror.
Cloning from mirrors
You can clone the repository from any of the mirrors:Using Nix flakes with mirrors
When referencing the dotfiles flake, you can use any of the mirrors:The GitHub mirror is recommended for Nix flakes as it benefits from GitHub’s CDN and reliability.
Mirror synchronization
Mirrors are synchronized using thepush-mirrors just command, which pushes changes to all configured mirrors:
- GitLab: Regular push to
mainbranch - Codeberg: Mirror push (all refs)
- Tangled: Mirror push (all refs)
Mirror synchronization is typically performed by the repository maintainer after merging changes to the main branch.
Switching remotes
If you’ve cloned from one mirror and want to switch to another:Adding multiple remotes
You can configure multiple remotes to pull from different mirrors:- Compare commits across mirrors
- Pull from a different mirror if one is unavailable
- Verify mirror synchronization
Mirror status
All mirrors should contain identical commits. To verify synchronization:Contributing
To contribute:- Fork the GitHub repository
- Create a feature branch
- Make your changes
- Submit a pull request to the GitHub repository
Mirror implementation
The mirror push is implemented in the justfile atjustfile:136-142:
Understanding the push commands
Understanding the push commands
- GitLab: Uses a standard
git pushwhich only pushes the current branch - Codeberg: Uses
git push --mirrorwhich pushes all refs (branches, tags) - Tangled: Uses
git push --mirrorfor complete synchronization
Frequently asked questions
Why are there multiple mirrors?
Why are there multiple mirrors?
Multiple mirrors provide:
- Redundancy: If one platform experiences downtime, others remain available
- Choice: Users can choose their preferred Git hosting platform
- Privacy: Self-hosted mirrors offer alternatives to large platforms
- Censorship resistance: Distributed hosting makes the repository harder to take down
Which mirror should I use?
Which mirror should I use?
For most users, the GitHub mirror is recommended because:
- It’s the primary development location
- Pull requests and issues are handled there
- GitHub’s infrastructure is highly reliable
- Better integration with Nix flake tooling
How often are mirrors synchronized?
How often are mirrors synchronized?
Mirrors are synchronized whenever changes are pushed to the main repository, typically:
- After merging pull requests
- After direct commits to main
- When running
just push-mirrors
Can I submit issues or PRs to mirrors?
Can I submit issues or PRs to mirrors?
No. Only the GitHub repository accepts issues and pull requests. Mirrors are maintained for distribution and redundancy, not for collaborative development.If you want to contribute, fork the GitHub repository and submit your pull request there.
What if a mirror is out of sync?
What if a mirror is out of sync?
If you notice a mirror is behind the main repository:
- Check the commit hash on both repositories
- Wait a few hours in case synchronization is in progress
- If still out of sync after 24 hours, open an issue on the GitHub repository
Technical details
The mirrors use SSH authentication for pushing. The
push-mirrors command requires appropriate SSH keys configured for each platform.SSH configuration
To runjust push-mirrors yourself, you need SSH keys set up for:
~/.ssh/config
Automation
While there’s no automated CI/CD for mirror synchronization, you could set up GitHub Actions to automatically push to mirrors:.github/workflows/mirror.yml
The above is an example. The actual repository may or may not use automated mirroring.