container-superposition 0.1.7 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -15
- package/dist/scripts/init.js +1 -1537
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/cli/args.d.ts +20 -0
- package/dist/tool/cli/args.d.ts.map +1 -0
- package/dist/tool/cli/args.js +325 -0
- package/dist/tool/cli/args.js.map +1 -0
- package/dist/tool/cli/run.d.ts +2 -0
- package/dist/tool/cli/run.d.ts.map +1 -0
- package/dist/tool/cli/run.js +318 -0
- package/dist/tool/cli/run.js.map +1 -0
- package/dist/tool/commands/adopt.js +1 -1
- package/dist/tool/commands/adopt.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +1 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -1
- package/dist/tool/commands/doctor.js +1510 -78
- package/dist/tool/commands/doctor.js.map +1 -1
- package/dist/tool/commands/explain.d.ts.map +1 -1
- package/dist/tool/commands/explain.js +9 -0
- package/dist/tool/commands/explain.js.map +1 -1
- package/dist/tool/commands/migrate.d.ts +7 -0
- package/dist/tool/commands/migrate.d.ts.map +1 -0
- package/dist/tool/commands/migrate.js +52 -0
- package/dist/tool/commands/migrate.js.map +1 -0
- package/dist/tool/questionnaire/answers.d.ts +16 -0
- package/dist/tool/questionnaire/answers.d.ts.map +1 -0
- package/dist/tool/questionnaire/answers.js +102 -0
- package/dist/tool/questionnaire/answers.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -4
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +778 -45
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/questionnaire/presets.d.ts +60 -0
- package/dist/tool/questionnaire/presets.d.ts.map +1 -0
- package/dist/tool/questionnaire/presets.js +165 -0
- package/dist/tool/questionnaire/presets.js.map +1 -0
- package/dist/tool/questionnaire/questionnaire.d.ts +10 -0
- package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -0
- package/dist/tool/questionnaire/questionnaire.js +582 -0
- package/dist/tool/questionnaire/questionnaire.js.map +1 -0
- package/dist/tool/schema/manifest-migrations.d.ts +5 -0
- package/dist/tool/schema/manifest-migrations.d.ts.map +1 -1
- package/dist/tool/schema/manifest-migrations.js +45 -0
- package/dist/tool/schema/manifest-migrations.js.map +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +24 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/project-config.d.ts +13 -1
- package/dist/tool/schema/project-config.d.ts.map +1 -1
- package/dist/tool/schema/project-config.js +188 -10
- package/dist/tool/schema/project-config.js.map +1 -1
- package/dist/tool/schema/target-rules.d.ts +78 -0
- package/dist/tool/schema/target-rules.d.ts.map +1 -0
- package/dist/tool/schema/target-rules.js +367 -0
- package/dist/tool/schema/target-rules.js.map +1 -0
- package/dist/tool/schema/types.d.ts +42 -3
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/parameters.d.ts +76 -0
- package/dist/tool/utils/parameters.d.ts.map +1 -0
- package/dist/tool/utils/parameters.js +125 -0
- package/dist/tool/utils/parameters.js.map +1 -0
- package/dist/tool/utils/paths.d.ts +2 -0
- package/dist/tool/utils/paths.d.ts.map +1 -0
- package/dist/tool/utils/paths.js +31 -0
- package/dist/tool/utils/paths.js.map +1 -0
- package/docs/deployment-targets.md +88 -56
- package/docs/examples.md +20 -17
- package/docs/filesystem-contract.md +5 -0
- package/docs/minimal-and-editor.md +65 -5
- package/docs/overlay-imports.md +92 -14
- package/docs/overlays.md +231 -135
- package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
- package/docs/specs/002-superposition-config-file/spec.md +5 -12
- package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
- package/docs/specs/004-doctor-fix/spec.md +1 -8
- package/docs/specs/005-cuda-overlay/spec.md +2 -9
- package/docs/specs/006-rocm-overlay/spec.md +3 -10
- package/docs/specs/007-target-aware-generation/spec.md +119 -0
- package/docs/specs/008-project-file-canonical/spec.md +82 -0
- package/docs/specs/009-project-env/spec.md +140 -0
- package/docs/specs/010-compose-env-materialization/spec.md +123 -0
- package/docs/specs/011-overlay-parameters/spec.md +228 -0
- package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
- package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
- package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
- package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
- package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
- package/docs/specs/017-doctor-dry-run/spec.md +276 -0
- package/docs/specs/018-init-project-file/spec.md +59 -0
- package/docs/specs/taxonomy.md +186 -0
- package/overlays/.presets/full-observability.yml +113 -0
- package/overlays/.presets/k8s-dev.yml +174 -0
- package/overlays/.presets/local-llm.yml +105 -0
- package/overlays/.presets/vector-ai.yml +150 -0
- package/overlays/.shared/README.md +27 -2
- package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
- package/overlays/.shared/vscode/js-ts-settings.json +19 -0
- package/overlays/.shared/vscode/markdown-extensions.json +8 -0
- package/overlays/alertmanager/devcontainer.patch.json +0 -1
- package/overlays/alertmanager/docker-compose.yml +8 -0
- package/overlays/alertmanager/overlay.yml +1 -0
- package/overlays/amp/devcontainer.patch.json +4 -1
- package/overlays/bun/devcontainer.patch.json +1 -10
- package/overlays/bun/overlay.yml +8 -1
- package/overlays/claude-code/devcontainer.patch.json +6 -1
- package/overlays/codex/devcontainer.patch.json +5 -0
- package/overlays/comfyui/.env.example +34 -0
- package/overlays/comfyui/README.md +342 -0
- package/overlays/comfyui/devcontainer.patch.json +15 -0
- package/overlays/comfyui/docker-compose.yml +40 -0
- package/overlays/comfyui/overlay.yml +24 -0
- package/overlays/comfyui/setup.sh +36 -0
- package/overlays/comfyui/verify.sh +103 -0
- package/overlays/commitlint/devcontainer.patch.json +1 -6
- package/overlays/docker-sock/overlay.yml +1 -0
- package/overlays/dotnet/overlay.yml +4 -1
- package/overlays/fuseki/.env.example +5 -0
- package/overlays/fuseki/README.md +173 -0
- package/overlays/fuseki/devcontainer.patch.json +18 -0
- package/overlays/fuseki/docker-compose.yml +29 -0
- package/overlays/fuseki/overlay.yml +42 -0
- package/overlays/fuseki/verify.sh +58 -0
- package/overlays/gemini-cli/devcontainer.patch.json +4 -1
- package/overlays/go/overlay.yml +6 -1
- package/overlays/grafana/devcontainer.patch.json +0 -1
- package/overlays/grafana/docker-compose.yml +8 -2
- package/overlays/grafana/overlay.yml +6 -1
- package/overlays/jaeger/.env.example +11 -0
- package/overlays/jaeger/README.md +33 -4
- package/overlays/jaeger/devcontainer.patch.json +9 -1
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +1 -12
- package/overlays/java/overlay.yml +6 -1
- package/overlays/jupyter/docker-compose.yml +1 -0
- package/overlays/jupyter/overlay.yml +1 -0
- package/overlays/k3d/README.md +201 -0
- package/overlays/k3d/devcontainer.patch.json +9 -0
- package/overlays/k3d/overlay.yml +19 -0
- package/overlays/k3d/setup.sh +34 -0
- package/overlays/k3d/verify.sh +38 -0
- package/overlays/keycloak/devcontainer.patch.json +0 -1
- package/overlays/keycloak/docker-compose.yml +1 -0
- package/overlays/keycloak/overlay.yml +15 -0
- package/overlays/localstack/docker-compose.yml +1 -0
- package/overlays/localstack/overlay.yml +19 -1
- package/overlays/loki/devcontainer.patch.json +0 -1
- package/overlays/loki/docker-compose.yml +8 -0
- package/overlays/loki/overlay.yml +1 -0
- package/overlays/mailpit/docker-compose.yml +1 -0
- package/overlays/mailpit/overlay.yml +1 -0
- package/overlays/minio/devcontainer.patch.json +1 -1
- package/overlays/minio/docker-compose.yml +1 -0
- package/overlays/minio/overlay.yml +23 -2
- package/overlays/mkdocs/devcontainer.patch.json +1 -5
- package/overlays/mkdocs/overlay.yml +3 -1
- package/overlays/mkdocs2/devcontainer.patch.json +1 -5
- package/overlays/mkdocs2/overlay.yml +2 -0
- package/overlays/mongodb/docker-compose.yml +2 -0
- package/overlays/mongodb/overlay.yml +26 -2
- package/overlays/mysql/docker-compose.yml +2 -0
- package/overlays/mysql/overlay.yml +36 -2
- package/overlays/nats/docker-compose.yml +1 -0
- package/overlays/nats/overlay.yml +18 -2
- package/overlays/nodejs/devcontainer.patch.json +1 -12
- package/overlays/nodejs/overlay.yml +8 -1
- package/overlays/ollama/.env.example +14 -0
- package/overlays/ollama/README.md +326 -0
- package/overlays/ollama/devcontainer.patch.json +14 -0
- package/overlays/ollama/docker-compose.yml +25 -0
- package/overlays/ollama/overlay.yml +27 -0
- package/overlays/ollama/verify.sh +76 -0
- package/overlays/ollama-cli/README.md +90 -0
- package/overlays/ollama-cli/devcontainer.patch.json +3 -0
- package/overlays/ollama-cli/overlay.yml +19 -0
- package/overlays/ollama-cli/setup.sh +103 -0
- package/overlays/ollama-cli/verify.sh +49 -0
- package/overlays/open-webui/.env.example +5 -0
- package/overlays/open-webui/README.md +162 -0
- package/overlays/open-webui/devcontainer.patch.json +14 -0
- package/overlays/open-webui/docker-compose.yml +24 -0
- package/overlays/open-webui/overlay.yml +45 -0
- package/overlays/opencode/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/README.md +4 -0
- package/overlays/otel-collector/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/docker-compose.yml +8 -4
- package/overlays/otel-collector/overlay.yml +1 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
- package/overlays/otel-demo-nodejs/overlay.yml +9 -1
- package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-python/docker-compose.yml +1 -0
- package/overlays/otel-demo-python/overlay.yml +6 -1
- package/overlays/pandoc/README.md +10 -0
- package/overlays/pandoc/devcontainer.patch.json +0 -5
- package/overlays/pandoc/overlay.yml +2 -0
- package/overlays/pandoc/setup.sh +10 -0
- package/overlays/pgvector/.env.example +6 -0
- package/overlays/pgvector/README.md +215 -0
- package/overlays/pgvector/devcontainer.patch.json +29 -0
- package/overlays/pgvector/docker-compose.yml +33 -0
- package/overlays/pgvector/overlay.yml +47 -0
- package/overlays/playwright/devcontainer.patch.json +0 -5
- package/overlays/playwright/overlay.yml +2 -1
- package/overlays/postgres/.env.example +5 -5
- package/overlays/postgres/devcontainer.patch.json +4 -4
- package/overlays/postgres/docker-compose.yml +11 -6
- package/overlays/postgres/overlay.yml +23 -2
- package/overlays/pre-commit/devcontainer.patch.json +1 -7
- package/overlays/prometheus/devcontainer.patch.json +0 -1
- package/overlays/prometheus/docker-compose.yml +8 -0
- package/overlays/prometheus/overlay.yml +1 -0
- package/overlays/promtail/devcontainer.patch.json +1 -2
- package/overlays/promtail/docker-compose.yml +8 -0
- package/overlays/promtail/overlay.yml +1 -0
- package/overlays/qdrant/.env.example +4 -0
- package/overlays/qdrant/README.md +216 -0
- package/overlays/qdrant/devcontainer.patch.json +20 -0
- package/overlays/qdrant/docker-compose.yml +26 -0
- package/overlays/qdrant/overlay.yml +44 -0
- package/overlays/rabbitmq/docker-compose.yml +1 -0
- package/overlays/rabbitmq/overlay.yml +25 -2
- package/overlays/redis/docker-compose.yml +7 -0
- package/overlays/redis/overlay.yml +15 -1
- package/overlays/redpanda/docker-compose.yml +1 -0
- package/overlays/redpanda/overlay.yml +15 -3
- package/overlays/rocm/overlay.yml +2 -1
- package/overlays/rust/overlay.yml +3 -1
- package/overlays/skaffold/README.md +256 -0
- package/overlays/skaffold/devcontainer.patch.json +9 -0
- package/overlays/skaffold/overlay.yml +20 -0
- package/overlays/skaffold/setup.sh +33 -0
- package/overlays/skaffold/verify.sh +24 -0
- package/overlays/sqlserver/docker-compose.yml +1 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/tempo/devcontainer.patch.json +0 -1
- package/overlays/tempo/docker-compose.yml +8 -0
- package/overlays/tempo/overlay.yml +1 -0
- package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
- package/package.json +3 -2
- package/tool/schema/config.schema.json +31 -1
- package/tool/schema/overlay-manifest.schema.json +33 -0
- package/overlays/.shared/otel/otel-base-config.yaml +0 -30
package/docs/overlay-imports.md
CHANGED
|
@@ -6,7 +6,10 @@ Overlays can import shared configuration fragments from `overlays/.shared/` to r
|
|
|
6
6
|
|
|
7
7
|
The import mechanism allows overlays to reference common configuration files instead of duplicating them. This promotes DRY principles and makes it easier to maintain consistent patterns.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Two import fields are supported in `overlay.yml`:
|
|
10
|
+
|
|
11
|
+
- **`imports:`** — shared devcontainer patch fragments (`.json`, `.yaml`, `.env`) applied before the overlay's own `devcontainer.patch.json`
|
|
12
|
+
- **`compose_imports:`** — shared docker-compose YAML fragments (`.yml`, `.yaml`) deep-merged into `docker-compose.yml` before the overlay's own `docker-compose.yml`
|
|
10
13
|
|
|
11
14
|
## Shared Directory Structure
|
|
12
15
|
|
|
@@ -15,21 +18,25 @@ overlays/
|
|
|
15
18
|
├── .shared/
|
|
16
19
|
│ ├── README.md
|
|
17
20
|
│ ├── otel/
|
|
18
|
-
│ │ ├── instrumentation.env
|
|
19
|
-
│ │ └── otel-base-config.yaml
|
|
21
|
+
│ │ ├── instrumentation.env # OTEL SDK env vars — imported by otel-collector, prometheus, jaeger
|
|
22
|
+
│ │ └── otel-base-config.yaml # Base OTEL collector pipeline config
|
|
20
23
|
│ ├── compose/
|
|
21
|
-
│ │
|
|
24
|
+
│ │ ├── nvidia-gpu-devcontainer.yml # NVIDIA GPU passthrough for the devcontainer service
|
|
25
|
+
│ │ └── common-healthchecks.md # Standard Docker Compose healthcheck patterns (reference only)
|
|
22
26
|
│ └── vscode/
|
|
23
|
-
│ └── recommended-extensions.json
|
|
27
|
+
│ └── recommended-extensions.json # Commonly recommended VS Code extensions (devcontainer patch format)
|
|
24
28
|
├── prometheus/
|
|
25
|
-
│ ├── overlay.yml
|
|
29
|
+
│ ├── overlay.yml # imports: [.shared/otel/instrumentation.env]
|
|
30
|
+
│ └── devcontainer.patch.json
|
|
31
|
+
├── jaeger/
|
|
32
|
+
│ ├── overlay.yml # imports: [.shared/otel/instrumentation.env]
|
|
26
33
|
│ └── devcontainer.patch.json
|
|
27
|
-
└──
|
|
28
|
-
├── overlay.yml
|
|
29
|
-
└──
|
|
34
|
+
└── ollama/
|
|
35
|
+
├── overlay.yml # compose_imports: [.shared/compose/nvidia-gpu-devcontainer.yml]
|
|
36
|
+
└── docker-compose.yml
|
|
30
37
|
```
|
|
31
38
|
|
|
32
|
-
## Using
|
|
39
|
+
## Using `imports` (devcontainer patch fragments)
|
|
33
40
|
|
|
34
41
|
Add the `imports` field to your `overlay.yml` manifest:
|
|
35
42
|
|
|
@@ -60,7 +67,28 @@ imports:
|
|
|
60
67
|
- Order is significant — fragments are applied in declaration order, then the overlay's own `devcontainer.patch.json`
|
|
61
68
|
- Missing files, unsupported types, or path traversal attempts cause generation to fail with a message identifying the overlay and the broken reference
|
|
62
69
|
|
|
63
|
-
##
|
|
70
|
+
## Using `compose_imports` (docker-compose fragments)
|
|
71
|
+
|
|
72
|
+
Add the `compose_imports` field to your `overlay.yml` manifest to merge shared docker-compose YAML fragments into the generated `docker-compose.yml`:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
id: ollama
|
|
76
|
+
name: Ollama
|
|
77
|
+
# ... other fields ...
|
|
78
|
+
compose_imports:
|
|
79
|
+
- .shared/compose/nvidia-gpu-devcontainer.yml
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Rules:**
|
|
83
|
+
|
|
84
|
+
- All paths **must** begin with `.shared/` (same path traversal rules as `imports`)
|
|
85
|
+
- Files must be `.yml` or `.yaml`
|
|
86
|
+
- Fragments are deep-merged in declaration order, then the overlay's own `docker-compose.yml` is merged last (overlay wins on conflict)
|
|
87
|
+
- Missing files, wrong types, or traversal attempts cause generation to fail
|
|
88
|
+
|
|
89
|
+
## Supported File Types
|
|
90
|
+
|
|
91
|
+
### `imports:` — devcontainer patch fragments
|
|
64
92
|
|
|
65
93
|
| Extension | How it is merged |
|
|
66
94
|
| ---------------- | ------------------------------------------------------------------------------ |
|
|
@@ -69,6 +97,13 @@ imports:
|
|
|
69
97
|
| `.env` | Concatenated into `.env.example` with a `# from .shared/…` comment header |
|
|
70
98
|
| Anything else | Rejected with a clear unsupported-type error |
|
|
71
99
|
|
|
100
|
+
### `compose_imports:` — docker-compose fragments
|
|
101
|
+
|
|
102
|
+
| Extension | How it is merged |
|
|
103
|
+
| ---------------- | --------------------------------------------------------------------------- |
|
|
104
|
+
| `.yaml` / `.yml` | Deep-merged into `docker-compose.yml` before the overlay's own compose file |
|
|
105
|
+
| Anything else | Rejected with a clear unsupported-type error |
|
|
106
|
+
|
|
72
107
|
### JSON import example
|
|
73
108
|
|
|
74
109
|
```jsonc
|
|
@@ -87,7 +122,7 @@ imports:
|
|
|
87
122
|
}
|
|
88
123
|
```
|
|
89
124
|
|
|
90
|
-
### YAML import example
|
|
125
|
+
### YAML devcontainer import example
|
|
91
126
|
|
|
92
127
|
```yaml
|
|
93
128
|
# overlays/.shared/otel/otel-base-config.yaml
|
|
@@ -119,8 +154,27 @@ OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
|
|
|
119
154
|
...
|
|
120
155
|
```
|
|
121
156
|
|
|
157
|
+
### YAML compose_import example
|
|
158
|
+
|
|
159
|
+
```yaml
|
|
160
|
+
# overlays/.shared/compose/nvidia-gpu-devcontainer.yml
|
|
161
|
+
services:
|
|
162
|
+
devcontainer:
|
|
163
|
+
deploy:
|
|
164
|
+
resources:
|
|
165
|
+
reservations:
|
|
166
|
+
devices:
|
|
167
|
+
- driver: nvidia
|
|
168
|
+
count: all
|
|
169
|
+
capabilities: [gpu]
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
When this fragment is imported via `compose_imports`, the generated `docker-compose.yml` will include the `deploy` block on the `devcontainer` service merged with contributions from all other overlays.
|
|
173
|
+
|
|
122
174
|
## Import Ordering and Conflict Resolution
|
|
123
175
|
|
|
176
|
+
### `imports` ordering
|
|
177
|
+
|
|
124
178
|
Imports are applied in declaration order, then the overlay's own `devcontainer.patch.json` is applied last:
|
|
125
179
|
|
|
126
180
|
```
|
|
@@ -132,6 +186,17 @@ Imports are applied in declaration order, then the overlay's own `devcontainer.p
|
|
|
132
186
|
|
|
133
187
|
This means overlays can intentionally override shared defaults by setting the same key in their `devcontainer.patch.json`.
|
|
134
188
|
|
|
189
|
+
### `compose_imports` ordering
|
|
190
|
+
|
|
191
|
+
For each overlay, compose fragments are merged before the overlay's own `docker-compose.yml`, in this order:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
[base template compose] → [overlay 1 compose_imports] → [overlay 1 docker-compose.yml] → [overlay 2 compose_imports] → [overlay 2 docker-compose.yml] → …
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
- Each overlay's `docker-compose.yml` wins over its own `compose_imports`
|
|
198
|
+
- Later overlays win over earlier overlays on key conflict
|
|
199
|
+
|
|
135
200
|
## Worked Example: OTEL Instrumentation
|
|
136
201
|
|
|
137
202
|
Many observability overlays need OTEL environment variables. With imports, these are defined once:
|
|
@@ -183,7 +248,8 @@ Checks performed:
|
|
|
183
248
|
- Import path starts with `.shared/` (path traversal check)
|
|
184
249
|
- Import path resolves within `overlays/.shared/` (traversal check)
|
|
185
250
|
- Import file exists on disk
|
|
186
|
-
- File type is one of `.json`, `.yaml`, `.yml`, `.env`
|
|
251
|
+
- File type is one of `.json`, `.yaml`, `.yml`, `.env` (for `imports:`)
|
|
252
|
+
- File type is one of `.yaml`, `.yml` (for `compose_imports:`)
|
|
187
253
|
|
|
188
254
|
Broken references are reported with the overlay ID and the bad path so maintainers can fix them quickly.
|
|
189
255
|
|
|
@@ -201,11 +267,23 @@ Shared Imports:
|
|
|
201
267
|
📎 .shared/otel/instrumentation.env
|
|
202
268
|
```
|
|
203
269
|
|
|
270
|
+
When an overlay has compose_imports, they are also shown:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
container-superposition explain ollama
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
Shared Compose Imports:
|
|
278
|
+
(docker-compose fragments from overlays/.shared/ merged before this overlay)
|
|
279
|
+
🐳 .shared/compose/nvidia-gpu-devcontainer.yml
|
|
280
|
+
```
|
|
281
|
+
|
|
204
282
|
## Creating Shared Configurations
|
|
205
283
|
|
|
206
284
|
1. **Identify common patterns** across multiple overlays
|
|
207
285
|
2. **Create `overlays/.shared/<category>/<name>.<ext>`** — use descriptive paths, one concern per file
|
|
208
|
-
3. **Update overlays** to reference the fragment via `imports:` in their `overlay.yml`
|
|
286
|
+
3. **Update overlays** to reference the fragment via `imports:` or `compose_imports:` in their `overlay.yml`
|
|
209
287
|
4. **Update `.shared/README.md`** to document the fragment's purpose and which overlays use it
|
|
210
288
|
5. **Test** with `npm test` and `container-superposition doctor` to verify
|
|
211
289
|
|