dotforge is a Python CLI for applying a dotfiles manifest: install required system packages and create links for configured files.
Important
Work in progress. This project is not fully completed.
- Overview
- Requirements
- Quick Start
- Usage
- Development Setup
- Quality Checks
- Project Structure
- Contributing
- Contributors
- Language: Python
- Package management: uv
- CLI framework: Click
- Current wired commands: install, link
- Python 3.12+
- uv
Install uv:
pip install uv# 1) Clone
git clone https://github.com/aazerra/dotforge.git
cd dotforge
# 2) Sync dependencies and create project environment
uv sync
# 3) Run CLI
python -m forge --helpRun with module entrypoint:
python -m forge install manifest.yaml
python -m forge link manifest.yamlOr run the installed script:
dotforge install manifest.yaml
dotforge link manifest.yamlManifest file example:
name: my-dotfilesversion: 1.0.0description: My personal dotfilespackages:
- ncmpcpp
- notionlinks:
- source: nvimtarget: ~/.config/nvim# Install runtime + dev + test groups
uv sync --group dev --group test# Optional: install pre-commit hooks
uv run --group dev pre-commit install# Tests
python -m pytest -q
# Lint and format
uv run --group dev ruff check .
uv run --group dev black --check .# Type checking
uv run --group dev mypy
# Run all configured pre-commit hooks
uv run --group dev pre-commit run --all-filesTDD loop:
- Write or update a test first.
- Run tests and watch it fail.
- Implement the smallest change.
- Run tests again until green.
- Refactor with checks staying green.
.
├── forge/
│ ├── commands/
│ ├── core/
│ ├── exceptions/
│ └── types/
├── tests/
├── manifest.yaml
├── pyproject.toml
└── uv.lock
Contributions are welcome.
- Fork the repository.
- Create a feature branch.
- Add or update tests for behavior changes.
- Run quality checks locally.
- Open a pull request.
Thanks to everyone who has contributed to this project: