container-superposition 0.1.6 → 0.1.8
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 -1534
- 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.d.ts.map +1 -1
- package/dist/tool/commands/adopt.js +1 -27
- package/dist/tool/commands/adopt.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +3 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -1
- package/dist/tool/commands/doctor.js +1068 -70
- 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 +18 -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 +3 -3
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +902 -37
- 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 +164 -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 +580 -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 +25 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/project-config.d.ts +14 -2
- package/dist/tool/schema/project-config.d.ts.map +1 -1
- package/dist/tool/schema/project-config.js +277 -34
- 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 +123 -12
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/merge.d.ts.map +1 -1
- package/dist/tool/utils/merge.js +9 -0
- package/dist/tool/utils/merge.js.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/creating-overlays.md +151 -2
- 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 +202 -101
- package/docs/overlays.md +162 -34
- package/docs/quick-reference.md +99 -0
- package/docs/specs/003-mkdocs2-overlay/spec.md +114 -0
- package/docs/specs/004-doctor-fix/spec.md +70 -0
- package/docs/specs/005-cuda-overlay/spec.md +101 -0
- package/docs/specs/006-rocm-overlay/spec.md +109 -0
- package/docs/specs/007-init-project-file/spec.md +66 -0
- package/docs/specs/007-target-aware-generation/spec.md +126 -0
- package/docs/specs/008-project-file-canonical/spec.md +83 -0
- package/docs/specs/009-project-env/spec.md +147 -0
- package/docs/specs/010-compose-env-materialization/spec.md +130 -0
- package/docs/specs/011-overlay-parameters/spec.md +235 -0
- package/overlays/.shared/README.md +105 -21
- package/overlays/.shared/compose/common-healthchecks.md +60 -0
- package/overlays/.shared/compose/nvidia-gpu-devcontainer.yml +22 -0
- package/overlays/.shared/vscode/recommended-extensions.json +15 -11
- package/overlays/alertmanager/setup.sh +4 -19
- package/overlays/alertmanager/verify.sh +8 -9
- package/overlays/all/README.md +43 -0
- package/overlays/all/devcontainer.patch.json +6 -0
- package/overlays/all/overlay.yml +14 -0
- package/overlays/amp/setup.sh +5 -0
- package/overlays/bun/setup.sh +10 -1
- package/overlays/bun/verify.sh +6 -1
- package/overlays/claude-code/setup.sh +5 -0
- package/overlays/cloudflared/setup.sh +9 -12
- package/overlays/codex/README.md +9 -6
- package/overlays/codex/devcontainer.patch.json +7 -1
- package/overlays/codex/setup.sh +5 -0
- package/overlays/codex/verify.sh +8 -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 +39 -0
- package/overlays/comfyui/overlay.yml +20 -0
- package/overlays/comfyui/setup.sh +36 -0
- package/overlays/comfyui/verify.sh +103 -0
- package/overlays/commitlint/setup.sh +5 -0
- package/overlays/cuda/README.md +179 -0
- package/overlays/cuda/devcontainer.patch.json +7 -0
- package/overlays/cuda/overlay.yml +17 -0
- package/overlays/cuda/setup.sh +32 -0
- package/overlays/cuda/verify.sh +38 -0
- package/overlays/devcontainer-cli/README.md +50 -0
- package/overlays/devcontainer-cli/devcontainer.patch.json +13 -0
- package/overlays/devcontainer-cli/overlay.yml +16 -0
- package/overlays/devcontainer-cli/setup.sh +14 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/setup.sh +7 -6
- package/overlays/dotnet/setup.sh +14 -7
- package/overlays/duckdb/devcontainer.patch.json +1 -2
- package/overlays/gcloud/devcontainer.patch.json +0 -6
- package/overlays/gcloud/setup.sh +51 -0
- package/overlays/gemini-cli/setup.sh +5 -0
- package/overlays/git-helpers/devcontainer.patch.json +2 -1
- package/overlays/go/setup.sh +15 -14
- package/overlays/jaeger/overlay.yml +2 -0
- package/overlays/just/setup.sh +5 -17
- 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/docker-compose.yml +6 -4
- package/overlays/keycloak/verify.sh +4 -3
- package/overlays/kind/devcontainer.patch.json +1 -2
- package/overlays/kind/setup.sh +8 -17
- package/overlays/minio/setup.sh +10 -18
- package/overlays/mkdocs/overlay.yml +2 -1
- package/overlays/mkdocs2/README.md +135 -0
- package/overlays/mkdocs2/devcontainer.patch.json +19 -0
- package/overlays/mkdocs2/overlay.yml +17 -0
- package/overlays/mkdocs2/setup.sh +67 -0
- package/overlays/mkdocs2/verify.sh +35 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +7 -1
- package/overlays/modern-cli-tools/setup.sh +21 -71
- package/overlays/mongodb/devcontainer.patch.json +0 -6
- package/overlays/mongodb/setup.sh +59 -0
- package/overlays/mysql/verify.sh +4 -3
- package/overlays/nats/.env.example +1 -1
- package/overlays/nats/README.md +1 -1
- package/overlays/nats/docker-compose.yml +1 -1
- package/overlays/ngrok/setup.sh +9 -6
- package/overlays/nodejs/setup.sh +5 -0
- package/overlays/ollama/.env.example +14 -0
- package/overlays/ollama/README.md +325 -0
- package/overlays/ollama/devcontainer.patch.json +14 -0
- package/overlays/ollama/docker-compose.yml +24 -0
- package/overlays/ollama/overlay.yml +22 -0
- package/overlays/ollama/setup.sh +106 -0
- package/overlays/ollama/verify.sh +99 -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 +23 -0
- package/overlays/open-webui/overlay.yml +38 -0
- package/overlays/openapi-tools/devcontainer.patch.json +1 -2
- package/overlays/openapi-tools/setup.sh +9 -8
- package/overlays/opencode/setup.sh +5 -0
- package/overlays/otel-collector/overlay.yml +2 -0
- package/overlays/otel-collector/setup.sh +3 -16
- package/overlays/otel-demo-nodejs/verify.sh +8 -9
- package/overlays/otel-demo-python/verify.sh +16 -10
- package/overlays/pandoc/README.md +22 -15
- package/overlays/pandoc/devcontainer.patch.json +6 -2
- package/overlays/pandoc/setup.sh +217 -18
- package/overlays/pandoc/verify.sh +16 -4
- package/overlays/pgvector/.env.example +6 -0
- package/overlays/pgvector/README.md +215 -0
- package/overlays/pgvector/devcontainer.patch.json +23 -0
- package/overlays/pgvector/docker-compose.yml +32 -0
- package/overlays/pgvector/overlay.yml +44 -0
- package/overlays/playwright/devcontainer.patch.json +3 -1
- package/overlays/playwright/setup.sh +37 -0
- package/overlays/postgres/.env.example +5 -5
- package/overlays/postgres/devcontainer.patch.json +4 -4
- package/overlays/postgres/docker-compose.yml +15 -5
- package/overlays/postgres/overlay.yml +19 -1
- package/overlays/powershell/setup.sh +49 -13
- package/overlays/pre-commit/setup.sh +12 -3
- package/overlays/prometheus/overlay.yml +2 -0
- package/overlays/promtail/verify.sh +16 -10
- package/overlays/pulumi/devcontainer.patch.json +1 -1
- package/overlays/python/setup.sh +28 -9
- package/overlays/python/verify.sh +4 -2
- 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 +25 -0
- package/overlays/qdrant/overlay.yml +40 -0
- package/overlays/redpanda/docker-compose.yml +3 -5
- package/overlays/rocm/README.md +227 -0
- package/overlays/rocm/devcontainer.patch.json +4 -0
- package/overlays/rocm/overlay.yml +17 -0
- package/overlays/rocm/setup.sh +45 -0
- package/overlays/rocm/verify.sh +47 -0
- package/overlays/rust/setup.sh +11 -18
- 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/spec-kit/setup.sh +7 -3
- package/overlays/sqlite/setup.sh +14 -14
- package/overlays/sqlserver/docker-compose.yml +3 -3
- package/overlays/sqlserver/verify.sh +22 -5
- package/overlays/tempo/verify.sh +16 -10
- package/overlays/tilt/devcontainer.patch.json +1 -2
- package/overlays/tilt/setup.sh +14 -4
- package/overlays/windsurf-cli/setup.sh +27 -4
- package/overlays/windsurf-cli/verify.sh +13 -3
- package/package.json +4 -2
- package/templates/scripts/setup-utils.sh +228 -0
- package/tool/schema/config.schema.json +141 -9
- package/tool/schema/overlay-manifest.schema.json +38 -0
- package/overlays/.shared/compose/common-healthchecks.yml +0 -38
- /package/overlays/otel-demo-nodejs/{Dockerfile-otel-demo-nodejs → Dockerfile} +0 -0
- /package/overlays/otel-demo-nodejs/{package-otel-demo-nodejs.json → package.json} +0 -0
- /package/overlays/otel-demo-nodejs/{server-otel-demo-nodejs.js → server.js} +0 -0
- /package/overlays/otel-demo-nodejs/{tracing-otel-demo-nodejs.js → tracing.js} +0 -0
- /package/overlays/otel-demo-python/{Dockerfile-otel-demo-python → Dockerfile} +0 -0
- /package/overlays/otel-demo-python/{app-otel-demo-python.py → app.py} +0 -0
- /package/overlays/otel-demo-python/{requirements-otel-demo-python.txt → requirements.txt} +0 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# MkDocs 2 Overlay
|
|
2
|
+
|
|
3
|
+
MkDocs 2.0 pre-release from [encode/mkdocs](https://github.com/encode/mkdocs) — a smart, simple website design tool by Tom Christie.
|
|
4
|
+
|
|
5
|
+
> **Pre-release notice:** MkDocs 2.0 is installed from the `encode/mkdocs` git repository. There is no PyPI release yet. This is a complete rewrite of the original MkDocs project — it is **not** backward-compatible with MkDocs 1.x.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **MkDocs 2.0** — complete rewrite with modern architecture
|
|
10
|
+
- **TOML configuration** — uses `mkdocs.toml` instead of `mkdocs.yml`
|
|
11
|
+
- **Built-in theming** — custom theme system (does not use Material for MkDocs)
|
|
12
|
+
- **GitHub Flavored Markdown** — native GFM support
|
|
13
|
+
- **pymdown-extensions** — extended Markdown syntax included
|
|
14
|
+
- **Python dependency** — automatically includes the Python overlay (required)
|
|
15
|
+
- **VS Code Extensions:**
|
|
16
|
+
- Markdown All in One
|
|
17
|
+
- Markdown Lint
|
|
18
|
+
- Markdown Mermaid
|
|
19
|
+
- **Port forwarding:** 8000 (MkDocs dev server, auto-opens in browser)
|
|
20
|
+
|
|
21
|
+
## How It Works
|
|
22
|
+
|
|
23
|
+
The overlay's `setup.sh` script installs MkDocs 2.0 directly from the
|
|
24
|
+
[encode/mkdocs](https://github.com/encode/mkdocs) GitHub repository via
|
|
25
|
+
`pip install git+https://github.com/encode/mkdocs.git` into the workspace
|
|
26
|
+
virtual environment (`.venv`) created by the Python overlay.
|
|
27
|
+
|
|
28
|
+
## Dependencies
|
|
29
|
+
|
|
30
|
+
- Requires: **python** overlay (automatically selected)
|
|
31
|
+
- Conflicts: **mkdocs** overlay — only one MkDocs variant can be active at a time
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
|
|
35
|
+
### New Documentation Site
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Create a README.md and start the dev server
|
|
39
|
+
echo "# My Docs" > README.md
|
|
40
|
+
mkdocs serve
|
|
41
|
+
# Opens at http://localhost:8000
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Build Static Site
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
mkdocs build
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Configuration
|
|
51
|
+
|
|
52
|
+
MkDocs 2.0 uses `mkdocs.toml` (not the 1.x `mkdocs.yml`):
|
|
53
|
+
|
|
54
|
+
```toml
|
|
55
|
+
[mkdocs]
|
|
56
|
+
nav = [
|
|
57
|
+
{path = "README.md", title = "Introduction"},
|
|
58
|
+
{path = "guide.md", title = "Guide"},
|
|
59
|
+
{path = "CREDITS.md", title = "Credits"},
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[loaders]
|
|
63
|
+
theme = "pkg://mkdocs/default"
|
|
64
|
+
docs = "dir://docs"
|
|
65
|
+
|
|
66
|
+
[context]
|
|
67
|
+
title = "Documentation"
|
|
68
|
+
favicon = "📘"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Page Structure
|
|
72
|
+
|
|
73
|
+
Use either `README.md` or `index.md` for the homepage. Place additional pages in a `docs/` directory:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
my-project/
|
|
77
|
+
├── mkdocs.toml
|
|
78
|
+
├── README.md
|
|
79
|
+
├── docs/
|
|
80
|
+
│ ├── guide.md
|
|
81
|
+
│ └── reference.md
|
|
82
|
+
└── site/ # Built output (git-ignored)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Key Differences from MkDocs 1.x
|
|
86
|
+
|
|
87
|
+
| Feature | MkDocs 1.x (`mkdocs` overlay) | MkDocs 2.0 (`mkdocs2` overlay) |
|
|
88
|
+
| -------------- | ----------------------------- | ------------------------------ |
|
|
89
|
+
| Config file | `mkdocs.yml` | `mkdocs.toml` |
|
|
90
|
+
| Theme | Material for MkDocs | Built-in themes |
|
|
91
|
+
| Plugin system | `mkdocs-plugins` ecosystem | New architecture |
|
|
92
|
+
| Install source | PyPI / devcontainer feature | `encode/mkdocs` git repo |
|
|
93
|
+
| Markdown | Standard + extensions | GitHub Flavored Markdown |
|
|
94
|
+
| Status | Stable (1.6.1) | Pre-release (2.0) |
|
|
95
|
+
|
|
96
|
+
## Common Commands
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Start live-reloading dev server
|
|
100
|
+
mkdocs serve
|
|
101
|
+
|
|
102
|
+
# Build static site
|
|
103
|
+
mkdocs build
|
|
104
|
+
|
|
105
|
+
# Serve on a different port
|
|
106
|
+
mkdocs serve --dev-addr 0.0.0.0:8001
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Troubleshooting
|
|
110
|
+
|
|
111
|
+
### `mkdocs: command not found`
|
|
112
|
+
|
|
113
|
+
The Python virtual environment may not be activated. Activate it manually:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
source .venv/bin/activate
|
|
117
|
+
mkdocs --version
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Port 8000 already in use
|
|
121
|
+
|
|
122
|
+
Use a different port: `mkdocs serve --dev-addr 0.0.0.0:8001`
|
|
123
|
+
|
|
124
|
+
## References
|
|
125
|
+
|
|
126
|
+
- [encode/mkdocs on GitHub](https://github.com/encode/mkdocs)
|
|
127
|
+
- [MkDocs 2.0 writing guide](https://github.com/encode/mkdocs/blob/main/docs/writing.md)
|
|
128
|
+
- [MkDocs 2.0 navigation docs](https://github.com/encode/mkdocs/blob/main/docs/navigation.md)
|
|
129
|
+
- [MkDocs 2.0 styling docs](https://github.com/encode/mkdocs/blob/main/docs/styling.md)
|
|
130
|
+
|
|
131
|
+
**Related Overlays:**
|
|
132
|
+
|
|
133
|
+
- `python` — required Python runtime
|
|
134
|
+
- `mkdocs` — legacy MkDocs 1.x overlay (conflicts with this overlay)
|
|
135
|
+
- `pandoc` — convert Markdown to PDF
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"customizations": {
|
|
4
|
+
"vscode": {
|
|
5
|
+
"extensions": [
|
|
6
|
+
"yzhang.markdown-all-in-one",
|
|
7
|
+
"DavidAnson.vscode-markdownlint",
|
|
8
|
+
"bierner.markdown-mermaid"
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"forwardPorts": [8000],
|
|
13
|
+
"portsAttributes": {
|
|
14
|
+
"8000": {
|
|
15
|
+
"label": "MkDocs Server",
|
|
16
|
+
"onAutoForward": "openBrowser"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
id: mkdocs2
|
|
2
|
+
name: MkDocs 2
|
|
3
|
+
description: MkDocs 2.0 pre-release (encode/mkdocs) — smart, simple website design tool
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires:
|
|
7
|
+
- python
|
|
8
|
+
suggests: []
|
|
9
|
+
conflicts:
|
|
10
|
+
- mkdocs
|
|
11
|
+
tags:
|
|
12
|
+
- dev
|
|
13
|
+
- documentation
|
|
14
|
+
- mkdocs
|
|
15
|
+
- python
|
|
16
|
+
ports:
|
|
17
|
+
- 8000
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# mkdocs2 setup script — install MkDocs 2.0 pre-release from encode/mkdocs
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "📚 Setting up MkDocs 2.0 (encode/mkdocs)..."
|
|
7
|
+
|
|
8
|
+
# Always install into the workspace virtual environment.
|
|
9
|
+
# The Python overlay is declared as a hard dependency (requires: [python]) so
|
|
10
|
+
# its setup script should have run first; but if the .venv doesn't exist yet
|
|
11
|
+
# (e.g., ordering edge-case) we create it here so this script is self-contained.
|
|
12
|
+
VENV_DIR="${PWD}/.venv"
|
|
13
|
+
|
|
14
|
+
# Helper: validate that the venv's Python interpreter is actually executable.
|
|
15
|
+
venv_is_valid() {
|
|
16
|
+
"${VENV_DIR}/bin/python" -c "import sys" &>/dev/null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if [ -d "${VENV_DIR}" ]; then
|
|
20
|
+
if venv_is_valid; then
|
|
21
|
+
echo " Using virtual environment: ${VENV_DIR}"
|
|
22
|
+
else
|
|
23
|
+
echo "⚠️ Existing .venv is invalid (stale interpreter or broken site-packages), recreating..."
|
|
24
|
+
rm -rf "${VENV_DIR}"
|
|
25
|
+
fi
|
|
26
|
+
else
|
|
27
|
+
# Also handle the case where the directory listing showed site-packages exists
|
|
28
|
+
# but venv_is_valid failed — this handles partial/corrupted venvs
|
|
29
|
+
: # nothing to do, venv doesn't exist yet
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# If the venv directory exists but python fails with EEXIST on site-packages,
|
|
33
|
+
# it is a leftover from a previous interrupted run — recreate it.
|
|
34
|
+
if [ -d "${VENV_DIR}" ] && ! "${VENV_DIR}/bin/python" -m pip --version &>/dev/null; then
|
|
35
|
+
echo "⚠️ Existing .venv has broken pip, recreating..."
|
|
36
|
+
rm -rf "${VENV_DIR}"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
if [ ! -d "${VENV_DIR}" ]; then
|
|
40
|
+
echo "📦 Creating virtual environment at .venv..."
|
|
41
|
+
if ! command -v python3 &>/dev/null; then
|
|
42
|
+
echo "❌ python3 is not available. Please ensure the python overlay is included."
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
python3 -m venv "${VENV_DIR}"
|
|
46
|
+
echo "✓ Virtual environment created"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# Use the venv's Python directly to invoke pip — this is more robust than
|
|
50
|
+
# calling the pip wrapper script, whose shebang can point to a stale path.
|
|
51
|
+
PYTHON="${VENV_DIR}/bin/python"
|
|
52
|
+
|
|
53
|
+
echo "📦 Installing MkDocs 2.0 from encode/mkdocs..."
|
|
54
|
+
"${PYTHON}" -m pip install -q --no-cache-dir \
|
|
55
|
+
"mkdocs @ git+https://github.com/encode/mkdocs.git"
|
|
56
|
+
|
|
57
|
+
MKDOCS_BIN="${VENV_DIR}/bin/mkdocs"
|
|
58
|
+
if [ -x "${MKDOCS_BIN}" ]; then
|
|
59
|
+
echo "✓ $( "${MKDOCS_BIN}" --version 2>/dev/null || echo 'mkdocs 2.0' )"
|
|
60
|
+
else
|
|
61
|
+
echo "✗ mkdocs not found in ${VENV_DIR}/bin after installation"
|
|
62
|
+
exit 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
echo "✅ MkDocs 2.0 setup complete"
|
|
66
|
+
echo "ℹ️ Start dev server: mkdocs serve"
|
|
67
|
+
echo "ℹ️ Build static site: mkdocs build"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# mkdocs2 overlay verification script
|
|
3
|
+
|
|
4
|
+
echo "🔍 Verifying MkDocs 2.0 overlay setup..."
|
|
5
|
+
|
|
6
|
+
ALL_CHECKS_PASSED=true
|
|
7
|
+
|
|
8
|
+
# mkdocs may be installed inside .venv (Python overlay) or on the system PATH
|
|
9
|
+
MKDOCS_BIN="mkdocs"
|
|
10
|
+
if [ -f "${PWD}/.venv/bin/mkdocs" ]; then
|
|
11
|
+
MKDOCS_BIN="${PWD}/.venv/bin/mkdocs"
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Check mkdocs is available
|
|
15
|
+
if ! command -v "${MKDOCS_BIN}" &>/dev/null && [ ! -x "${MKDOCS_BIN}" ]; then
|
|
16
|
+
echo "✗ mkdocs not found"
|
|
17
|
+
ALL_CHECKS_PASSED=false
|
|
18
|
+
else
|
|
19
|
+
VERSION=$("${MKDOCS_BIN}" --version 2>/dev/null || echo "unknown")
|
|
20
|
+
echo "✓ mkdocs is installed: ${VERSION}"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
if [ "${ALL_CHECKS_PASSED}" = true ]; then
|
|
24
|
+
echo ""
|
|
25
|
+
echo "✅ MkDocs 2.0 overlay verification complete!"
|
|
26
|
+
echo ""
|
|
27
|
+
echo "💡 Tips:"
|
|
28
|
+
echo " - Start dev server: mkdocs serve"
|
|
29
|
+
echo " - Build static site: mkdocs build"
|
|
30
|
+
echo " - New project: mkdocs new ."
|
|
31
|
+
else
|
|
32
|
+
echo ""
|
|
33
|
+
echo "✗ MkDocs 2.0 overlay verification failed"
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "jq ripgrep fd-find bat",
|
|
6
|
+
"apk": "jq ripgrep fd bat"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
3
9
|
}
|
|
@@ -1,94 +1,44 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Modern CLI tools setup script
|
|
3
|
+
# jq, ripgrep, fd, bat are installed via cross-distro-packages devcontainer feature.
|
|
4
|
+
# This script installs yq (not in standard repos), creates Debian symlinks, and configures tools.
|
|
3
5
|
|
|
4
6
|
set -e
|
|
5
7
|
|
|
6
8
|
echo "🚀 Setting up modern CLI tools..."
|
|
7
9
|
|
|
8
|
-
#
|
|
9
|
-
sudo apt-get update -qq
|
|
10
|
-
|
|
11
|
-
# Install jq (JSON processor)
|
|
12
|
-
echo "📦 Installing jq..."
|
|
13
|
-
sudo apt-get install -y jq
|
|
14
|
-
if command -v jq &> /dev/null; then
|
|
15
|
-
echo "✓ jq installed: $(jq --version)"
|
|
16
|
-
else
|
|
17
|
-
echo "✗ jq installation failed"
|
|
18
|
-
exit 1
|
|
19
|
-
fi
|
|
20
|
-
|
|
21
|
-
# Install yq (YAML processor)
|
|
10
|
+
# Install yq (YAML processor — not in standard distro repos)
|
|
22
11
|
echo "📦 Installing yq..."
|
|
23
|
-
YQ_VERSION="4.52.2"
|
|
12
|
+
YQ_VERSION="${YQ_VERSION:-4.52.2}"
|
|
24
13
|
ARCH=$(uname -m)
|
|
14
|
+
case "$ARCH" in
|
|
15
|
+
x86_64) YQ_ARCH="amd64" ;;
|
|
16
|
+
aarch64|arm64) YQ_ARCH="arm64" ;;
|
|
17
|
+
*) echo "⚠️ Unsupported architecture: $ARCH, defaulting to amd64"; YQ_ARCH="amd64" ;;
|
|
18
|
+
esac
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
if [ "$ARCH" = "x86_64" ]; then
|
|
28
|
-
YQ_ARCH="amd64"
|
|
29
|
-
YQ_CHECKSUM="a74bd266990339e0c48a2103534aef692abf99f19390d12c2b0ce6830385c459"
|
|
30
|
-
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
|
31
|
-
YQ_ARCH="arm64"
|
|
32
|
-
YQ_CHECKSUM="c82856ac30da522f50dcdd4f53065487b5a2927e9b87ff637956900986f1f7c2"
|
|
33
|
-
else
|
|
34
|
-
echo "⚠️ Unsupported architecture: $ARCH, defaulting to amd64"
|
|
35
|
-
YQ_ARCH="amd64"
|
|
36
|
-
YQ_CHECKSUM="a74bd266990339e0c48a2103534aef692abf99f19390d12c2b0ce6830385c459"
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
curl -L "https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_${YQ_ARCH}" \
|
|
20
|
+
curl -fsSL "https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_${YQ_ARCH}" \
|
|
40
21
|
-o /tmp/yq
|
|
22
|
+
sudo install -m 0755 /tmp/yq /usr/local/bin/yq
|
|
23
|
+
rm /tmp/yq
|
|
41
24
|
|
|
42
|
-
|
|
43
|
-
echo "🔐 Verifying yq checksum..."
|
|
44
|
-
echo "${YQ_CHECKSUM} /tmp/yq" | sha256sum -c - || {
|
|
45
|
-
echo "✗ yq checksum verification failed"
|
|
46
|
-
rm /tmp/yq
|
|
47
|
-
exit 1
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
sudo mv /tmp/yq /usr/local/bin/yq
|
|
51
|
-
sudo chmod +x /usr/local/bin/yq
|
|
52
|
-
|
|
53
|
-
if command -v yq &> /dev/null; then
|
|
25
|
+
if command -v yq &>/dev/null; then
|
|
54
26
|
echo "✓ yq installed: $(yq --version)"
|
|
55
27
|
else
|
|
56
28
|
echo "✗ yq installation failed"
|
|
57
29
|
exit 1
|
|
58
30
|
fi
|
|
59
31
|
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
sudo
|
|
63
|
-
|
|
64
|
-
echo "✓ ripgrep installed: $(rg --version | head -n 1)"
|
|
65
|
-
else
|
|
66
|
-
echo "✗ ripgrep installation failed"
|
|
67
|
-
exit 1
|
|
32
|
+
# Create fd symlink — Debian installs the binary as 'fdfind'
|
|
33
|
+
if command -v fdfind &>/dev/null && ! command -v fd &>/dev/null; then
|
|
34
|
+
sudo ln -sf "$(which fdfind)" /usr/local/bin/fd
|
|
35
|
+
echo "✓ fd symlink created (fdfind → fd)"
|
|
68
36
|
fi
|
|
69
37
|
|
|
70
|
-
#
|
|
71
|
-
|
|
72
|
-
sudo
|
|
73
|
-
|
|
74
|
-
sudo ln -sf $(which fdfind) /usr/local/bin/fd
|
|
75
|
-
if command -v fd &> /dev/null; then
|
|
76
|
-
echo "✓ fd installed: $(fd --version)"
|
|
77
|
-
else
|
|
78
|
-
echo "✗ fd installation failed"
|
|
79
|
-
exit 1
|
|
80
|
-
fi
|
|
81
|
-
|
|
82
|
-
# Install bat (better cat with syntax highlighting)
|
|
83
|
-
echo "📦 Installing bat..."
|
|
84
|
-
sudo apt-get install -y bat
|
|
85
|
-
# Create symlink for 'bat' command (package installs as 'batcat' on Debian)
|
|
86
|
-
sudo ln -sf $(which batcat) /usr/local/bin/bat
|
|
87
|
-
if command -v bat &> /dev/null; then
|
|
88
|
-
echo "✓ bat installed: $(bat --version)"
|
|
89
|
-
else
|
|
90
|
-
echo "✗ bat installation failed"
|
|
91
|
-
exit 1
|
|
38
|
+
# Create bat symlink — Debian installs the binary as 'batcat'
|
|
39
|
+
if command -v batcat &>/dev/null && ! command -v bat &>/dev/null; then
|
|
40
|
+
sudo ln -sf "$(which batcat)" /usr/local/bin/bat
|
|
41
|
+
echo "✓ bat symlink created (batcat → bat)"
|
|
92
42
|
fi
|
|
93
43
|
|
|
94
44
|
# Configure bat
|
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
-
"features": {
|
|
4
|
-
"./features/cross-distro-packages": {
|
|
5
|
-
"apt": "mongodb-mongosh",
|
|
6
|
-
"apk": "mongodb-tools"
|
|
7
|
-
}
|
|
8
|
-
},
|
|
9
3
|
"customizations": {
|
|
10
4
|
"vscode": {
|
|
11
5
|
"extensions": ["mongodb.mongodb-vscode"]
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# MongoDB setup script - Install mongosh client
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "📦 Installing mongosh client..."
|
|
7
|
+
|
|
8
|
+
# Source shared setup utilities
|
|
9
|
+
# shellcheck source=setup-utils.sh
|
|
10
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
11
|
+
|
|
12
|
+
if command -v apk >/dev/null 2>&1; then
|
|
13
|
+
# Alpine Linux — `mongodb-tools` does not include mongosh on Alpine.
|
|
14
|
+
# Install mongosh from the MongoDB community package (available on Alpine 3.17+).
|
|
15
|
+
apk add --no-cache mongodb-mongosh 2>/dev/null || {
|
|
16
|
+
echo "⚠️ mongosh package not found in Alpine repos; falling back to npm install"
|
|
17
|
+
apk add --no-cache nodejs npm
|
|
18
|
+
npm install -g mongosh
|
|
19
|
+
}
|
|
20
|
+
elif command -v apt-get >/dev/null 2>&1; then
|
|
21
|
+
# Debian/Ubuntu — install prerequisites first, then add the MongoDB repo.
|
|
22
|
+
# MongoDB doesn't publish a trixie/sid repo yet; fall back to bookworm.
|
|
23
|
+
CODENAME=$(. /etc/os-release && echo "${VERSION_CODENAME:-bookworm}")
|
|
24
|
+
case "$CODENAME" in
|
|
25
|
+
trixie | sid | testing) CODENAME="bookworm" ;;
|
|
26
|
+
esac
|
|
27
|
+
|
|
28
|
+
# Single lock acquisition: install prereqs, add repo, update, install mongosh.
|
|
29
|
+
# curl and gnupg must be present before add_apt_repo runs them.
|
|
30
|
+
acquire_apt_lock
|
|
31
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get update -qq
|
|
32
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get install -y -qq --no-install-recommends curl gnupg ca-certificates
|
|
33
|
+
release_apt_lock
|
|
34
|
+
|
|
35
|
+
add_apt_repo \
|
|
36
|
+
"https://www.mongodb.org/static/pgp/server-8.0.asc" \
|
|
37
|
+
"/usr/share/keyrings/mongodb-server.gpg" \
|
|
38
|
+
"deb [ arch=amd64,arm64 signed-by=/usr/share/keyrings/mongodb-server.gpg ] https://repo.mongodb.org/apt/debian ${CODENAME}/mongodb-org/8.0 main" \
|
|
39
|
+
"/etc/apt/sources.list.d/mongodb-org.list"
|
|
40
|
+
|
|
41
|
+
acquire_apt_lock
|
|
42
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get update -qq
|
|
43
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get install -y -qq --no-install-recommends mongodb-mongosh
|
|
44
|
+
sudo apt-get clean
|
|
45
|
+
sudo rm -rf /var/lib/apt/lists/*
|
|
46
|
+
release_apt_lock
|
|
47
|
+
else
|
|
48
|
+
echo "⚠️ Unsupported package manager, skipping mongosh installation"
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
if command -v mongosh >/dev/null 2>&1; then
|
|
53
|
+
echo "✓ mongosh installed: $(mongosh --version)"
|
|
54
|
+
else
|
|
55
|
+
echo "✗ mongosh installation failed"
|
|
56
|
+
exit 1
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
echo "✓ mongodb setup complete"
|
package/overlays/mysql/verify.sh
CHANGED
|
@@ -21,8 +21,9 @@ fi
|
|
|
21
21
|
echo ""
|
|
22
22
|
echo "2️⃣ Checking MySQL service..."
|
|
23
23
|
MYSQL_READY=false
|
|
24
|
-
for i in {1..
|
|
25
|
-
|
|
24
|
+
for i in {1..90}; do
|
|
25
|
+
# MYSQL_PWD avoids interactive prompt; </dev/null prevents TTY queries.
|
|
26
|
+
if MYSQL_PWD=rootpassword mysql -h mysql -P 3306 -u root -e "SELECT 1" </dev/null &>/dev/null; then
|
|
26
27
|
echo " ✅ MySQL service is ready"
|
|
27
28
|
MYSQL_READY=true
|
|
28
29
|
break
|
|
@@ -31,7 +32,7 @@ for i in {1..15}; do
|
|
|
31
32
|
done
|
|
32
33
|
|
|
33
34
|
if [ "$MYSQL_READY" = false ]; then
|
|
34
|
-
echo " ❌ MySQL service not ready after
|
|
35
|
+
echo " ❌ MySQL service not ready after 90 seconds"
|
|
35
36
|
exit 1
|
|
36
37
|
fi
|
|
37
38
|
|
package/overlays/nats/README.md
CHANGED
package/overlays/ngrok/setup.sh
CHANGED
|
@@ -8,16 +8,19 @@ echo "🌐 Setting up ngrok..."
|
|
|
8
8
|
# Install ngrok using official apt repository (provides signed packages)
|
|
9
9
|
echo "📦 Installing ngrok from official repository..."
|
|
10
10
|
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
# Source shared setup utilities
|
|
12
|
+
# shellcheck source=setup-utils.sh
|
|
13
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
14
14
|
|
|
15
|
+
# Add ngrok GPG key and repository
|
|
16
|
+
# Note: ngrok uses .asc (armored) format, piped directly to trusted.gpg.d (no --dearmor needed)
|
|
17
|
+
curl -fsSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
|
|
18
|
+
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null
|
|
15
19
|
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
|
|
16
|
-
| sudo tee /etc/apt/sources.list.d/ngrok.list
|
|
20
|
+
| sudo tee /etc/apt/sources.list.d/ngrok.list >/dev/null
|
|
17
21
|
|
|
18
22
|
# Update and install
|
|
19
|
-
|
|
20
|
-
sudo apt-get install -y ngrok
|
|
23
|
+
apt_install ngrok
|
|
21
24
|
|
|
22
25
|
# Verify installation
|
|
23
26
|
if command -v ngrok &> /dev/null; then
|
package/overlays/nodejs/setup.sh
CHANGED
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
set -e
|
|
5
5
|
|
|
6
|
+
# Source shared setup utilities (provides load_nvm)
|
|
7
|
+
# shellcheck source=setup-utils.sh
|
|
8
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
9
|
+
load_nvm
|
|
10
|
+
|
|
6
11
|
# Extract overlay name from script filename (setup-<overlay>.sh -> <overlay>)
|
|
7
12
|
OVERLAY_NAME=$(basename "$0" | sed 's/setup-//;s/\.sh$//')
|
|
8
13
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Ollama Configuration
|
|
2
|
+
|
|
3
|
+
# Path to the Ollama data directory on the host machine.
|
|
4
|
+
# Defaults to ~/.ollama — models downloaded there are available without re-pull.
|
|
5
|
+
# Override to use a different directory, e.g. an external drive:
|
|
6
|
+
# OLLAMA_MODELS_PATH=/Volumes/BigDrive/ollama
|
|
7
|
+
# Windows users: set this explicitly, e.g. OLLAMA_MODELS_PATH=C:/Users/you/.ollama
|
|
8
|
+
OLLAMA_MODELS_PATH=~/.ollama
|
|
9
|
+
|
|
10
|
+
# Ollama image version (defaults to latest)
|
|
11
|
+
OLLAMA_VERSION=latest
|
|
12
|
+
|
|
13
|
+
# Host port for the Ollama API (defaults to 11434)
|
|
14
|
+
OLLAMA_PORT=11434
|