This toolkit centralizes the reusable parts of a FHEM module development environment:
- base container image and compose wiring
- runtime bootstrap and overlay logic
- optional add-ons such as SVN support
- scaffold and sync helpers for consuming repositories
Module-specific reverse proxies are intentionally out of scope for the toolkit
core. If a consumer needs Caddy or a similar proxy for a module-specific
workflow, keep that proxy config in the consumer repository instead of the
shared scaffold.
The toolkit is meant to be maintained centrally and consumed by module
repositories through the sync script in sync/.
The generated consumer layer uses these environment variables:
MODULE_REPO_ROOT: absolute path to the consumer repositoryMODULE_OVERLAY_ROOT: optional root containingFHEM/,lib/,t/, etc.FHEM_TOOLKIT_ROOT: absolute path to this toolkit checkoutFHEM_SOURCE_ROOT: full FHEM source tree used as the runtime baseFHEM_TOOLKIT_FEATURES: optional comma-separated add-onsFHEM_SVN_ROOT: optional SVN working copy root for the SVN add-onLOCAL_USER/LOCAL_UID/LOCAL_GID: optional local overrides for the generic container user (defaults:dev,1000,1000)
FHEM_SOURCE_ROOT defaults to ${MODULE_REPO_ROOT}/fhem so full-tree
repositories continue to work. Module-only repositories should set it to an
external FHEM checkout.
base/: generic Dockerfile, compose wiring, bootstrap, helper scriptsaddons/svn/: optional SVN checkout and sync helpersscaffold/templates/: managed file templates for consumer repositoriessync/: repo sync entrypoint
- Clone the toolkit next to the consumer repository.
- Create or clone the consumer repository.
- Run
sync/sync-into-repo.sh <target-repo>. - Add the repo-specific layer such as profiles, config, SVN manifest, and any
host-specific mounts like
.gitconfig.
Run sync/sync-into-repo.sh <target-repo> to initialize or update a consumer
repository. Generated files are intentionally thin and resolve the toolkit from
the consumer's sibling checkout ../fhem-devcontainer-toolkit unless
FHEM_TOOLKIT_ROOT overrides that location.
Sync preserves existing .gitignore entries and appends the toolkit defaults
instead of overwriting repo-local ignore rules.