CLI tool — Python dotfile manager (Dotbot-style), driven by a YAML/JSON config file

Qonfig
OVERVIEW
Qonfig is "A Quality Dotfile Manager": you fill in `qonfig.yaml` and Qonfig takes care of the rest, symlinking files, cleaning dead links, and running shell commands from a list of directives. It is installed into a dotfiles repo as a Git submodule (or Mercurial subrepo) behind a small `install` shim.
HOW IT WORKS
- 1Add Qonfig to your dotfiles repo: `git submodule add https://github.com/qompassai/qonfig`, copy the shim with `cp qonfig/tools/git-submodule/install .`, and create `qonfig.yaml`.
- 2Or bootstrap a new setup with `curl -fsSL https://raw.githubusercontent.com/qompassai/qonfig/main/scripts/quickstart.sh | sh`.
- 3Fill in `qonfig.yaml` as a list of tasks using the `defaults`, `clean`, `link`, and `shell` directives.
- 4Run `./install`; the shim updates the submodule and calls `bin/qonfig -d <base dir> -c qonfig.yaml`.
- 5Qonfig dispatches each task to its plugin, in order, and reports "All tasks executed successfully" or fails.
- 6Upgrade later with `git submodule update --remote qonfig`.
CONCEPTS
CONFIGURATION
| Option | Default | What it does |
|---|---|---|
defaults.link.create | true (in repo's own qonfig.yaml) | Create parent directories for links; set via a `defaults:` task applying to following tasks |
defaults.link.relink | true (in repo's own qonfig.yaml) | Overwrite incorrect symlinks |
link.<target>.path | target's plain value | Source path (relative to base directory) for an extended link entry |
link.<target>.create | false (plugin default) | Create the parent directory if necessary |
link.<target>.relink | false (plugin default) | Automatically overwrite incorrect symbolic links |
link.<target>.force | false (plugin default) | Forcibly link, overwriting existing files/directories |
link.<target>.relative | false (plugin default) | Make the symlink with a relative path |
clean | `["~", ~/.config]` (repo's own qonfig.yaml) | Directories checked for dead symlinks pointing into the dotfiles directory; dead links are removed |
shell[].command / description / stdin / stdout / stderr | — | Extended shell-command form: command plus optional description and stdio toggles |
-c / --config-file CONFIGFILE | required (no default) | Config file to run |
-d / --base-directory BASEDIR | required (no default) | Directory commands execute from within |
install shim CONFIG / QONFIG_DIR | qonfig.yaml` / `qonfig | Config location and submodule location assumed by the `install` script; editable in the script |
CONTROLS
| Action | Control |
|---|---|
| Quick start | `curl -fsSL https://raw.githubusercontent.com/qompassai/qonfig/main/scripts/quickstart.sh \ |
| Set up with Git | git submodule add https://github.com/qompassai/qonfig` then `cp qonfig/tools/git-submodule/install . |
| Set up with Mercurial | hg init`, write `.hgsub`, `git clone https://github.com/qompassai/qonfig`, `cp qonfig/tools/hg-subrepo/install . |
| Apply the configuration | `./install` (shim for `bin/qonfig -d BASEDIR -c CONFIGFILE`) |
| Run the CLI directly | `qonfig -d BASEDIR -c CONFIGFILE` (console script `qonfig = qonfig.cli:main`) |
| Verbose / quiet output | -v/--verbose`, `-q/--quiet`, `-Q/--super-quiet |
| Load a plugin | `-p/--plugin PLUGIN` (repeatable) |
| Load all plugins in a directory | `--plugin-dir PLUGIN_DIR` (repeatable) |
| Disable built-in plugins | --disable-built-in-plugins |
| Upgrade (submodule install) | git submodule update --remote qonfig |
NOT COVERED
- The repo's own `qonfig.yaml`/`qonfig.jsonc` (and the dotfiles repo's) use a top-level `- create: [~/Downloads]` directive, but `plugins/` contains only `clean.py`, `link.py`, and `shell.py` and `docs/README.md` documents no `create` directive; the dispatcher logs "Action %s not handled" for unhandled actions (`qonfig/dispatcher.py`). Whether `create` works in the shipped build could not be verified from sources. - Per-link `if:` conditions used in the dotfiles repo's `qonfig.yaml` are likewise not handled in `plugins/link.py` as read. - `pyproject.toml` describes the package as "Quantum AI models for healthcare and education", which does not match the dotfile-manager documentation; treated as stale metadata.
REFERENCES
- YAML Specification, version 1.2.2The YAML specification — the format qonfig.yaml task lists are written in (a JSON/JSONC form is also accepted).
- Dotbot — a tool that bootstraps your dotfilesThe upstream dotfile manager Qonfig is styled on (Dotbot-style, per the project's own description): a YAML list of directives applied in order.