container-superposition 0.1.1

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.
Files changed (327) hide show
  1. package/README.md +843 -0
  2. package/dist/scripts/init.d.ts +3 -0
  3. package/dist/scripts/init.d.ts.map +1 -0
  4. package/dist/scripts/init.js +1190 -0
  5. package/dist/scripts/init.js.map +1 -0
  6. package/dist/scripts/migrate-to-manifests.d.ts +12 -0
  7. package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
  8. package/dist/scripts/migrate-to-manifests.js +230 -0
  9. package/dist/scripts/migrate-to-manifests.js.map +1 -0
  10. package/dist/tool/questionnaire/composer.d.ts +6 -0
  11. package/dist/tool/questionnaire/composer.d.ts.map +1 -0
  12. package/dist/tool/questionnaire/composer.js +1232 -0
  13. package/dist/tool/questionnaire/composer.js.map +1 -0
  14. package/dist/tool/readme/markdown-parser.d.ts +30 -0
  15. package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
  16. package/dist/tool/readme/markdown-parser.js +139 -0
  17. package/dist/tool/readme/markdown-parser.js.map +1 -0
  18. package/dist/tool/readme/readme-generator.d.ts +9 -0
  19. package/dist/tool/readme/readme-generator.d.ts.map +1 -0
  20. package/dist/tool/readme/readme-generator.js +422 -0
  21. package/dist/tool/readme/readme-generator.js.map +1 -0
  22. package/dist/tool/schema/custom-loader.d.ts +17 -0
  23. package/dist/tool/schema/custom-loader.d.ts.map +1 -0
  24. package/dist/tool/schema/custom-loader.js +149 -0
  25. package/dist/tool/schema/custom-loader.js.map +1 -0
  26. package/dist/tool/schema/overlay-loader.d.ts +47 -0
  27. package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
  28. package/dist/tool/schema/overlay-loader.js +252 -0
  29. package/dist/tool/schema/overlay-loader.js.map +1 -0
  30. package/dist/tool/schema/types.d.ts +212 -0
  31. package/dist/tool/schema/types.d.ts.map +1 -0
  32. package/dist/tool/schema/types.js +5 -0
  33. package/dist/tool/schema/types.js.map +1 -0
  34. package/docs/README.md +308 -0
  35. package/docs/architecture.md +233 -0
  36. package/docs/creating-overlays.md +549 -0
  37. package/docs/custom-patches.md +540 -0
  38. package/docs/dependencies.md +279 -0
  39. package/docs/examples/custom-patches-example.md +85 -0
  40. package/docs/examples.md +576 -0
  41. package/docs/messaging-comparison.md +265 -0
  42. package/docs/messaging-quick-start.md +385 -0
  43. package/docs/observability-workflow.md +537 -0
  44. package/docs/overlay-manifest-refactoring.md +214 -0
  45. package/docs/overlay-metadata-archive.md +54 -0
  46. package/docs/overlays.md +523 -0
  47. package/docs/presets-architecture.md +498 -0
  48. package/docs/presets.md +366 -0
  49. package/docs/publishing.md +476 -0
  50. package/docs/quick-reference.md +326 -0
  51. package/docs/ux.md +170 -0
  52. package/features/README.md +85 -0
  53. package/features/cross-distro-packages/README.md +146 -0
  54. package/features/cross-distro-packages/devcontainer-feature.json +20 -0
  55. package/features/cross-distro-packages/install.sh +58 -0
  56. package/features/local-secrets-manager/devcontainer-feature.json +18 -0
  57. package/features/local-secrets-manager/install.sh +127 -0
  58. package/features/project-scaffolder/devcontainer-feature.json +24 -0
  59. package/features/project-scaffolder/install.sh +100 -0
  60. package/features/team-conventions/devcontainer-feature.json +24 -0
  61. package/features/team-conventions/install.sh +93 -0
  62. package/overlays/.registry/README.md +14 -0
  63. package/overlays/.registry/base-images.yml +26 -0
  64. package/overlays/.registry/base-templates.yml +7 -0
  65. package/overlays/README.md +155 -0
  66. package/overlays/alertmanager/.env.example +5 -0
  67. package/overlays/alertmanager/README.md +465 -0
  68. package/overlays/alertmanager/alert-rules.yml +56 -0
  69. package/overlays/alertmanager/alertmanager.yml +42 -0
  70. package/overlays/alertmanager/devcontainer.patch.json +12 -0
  71. package/overlays/alertmanager/docker-compose.yml +20 -0
  72. package/overlays/alertmanager/overlay.yml +17 -0
  73. package/overlays/alertmanager/setup.sh +53 -0
  74. package/overlays/alertmanager/verify.sh +31 -0
  75. package/overlays/aws-cli/README.md +473 -0
  76. package/overlays/aws-cli/devcontainer.patch.json +13 -0
  77. package/overlays/aws-cli/overlay.yml +13 -0
  78. package/overlays/azure-cli/README.md +551 -0
  79. package/overlays/azure-cli/devcontainer.patch.json +8 -0
  80. package/overlays/azure-cli/overlay.yml +13 -0
  81. package/overlays/bun/README.md +312 -0
  82. package/overlays/bun/devcontainer.patch.json +41 -0
  83. package/overlays/bun/overlay.yml +16 -0
  84. package/overlays/bun/setup.sh +79 -0
  85. package/overlays/bun/verify.sh +30 -0
  86. package/overlays/codex/README.md +128 -0
  87. package/overlays/codex/devcontainer.patch.json +3 -0
  88. package/overlays/codex/overlay.yml +14 -0
  89. package/overlays/codex/setup.sh +24 -0
  90. package/overlays/codex/verify.sh +30 -0
  91. package/overlays/commitlint/README.md +333 -0
  92. package/overlays/commitlint/devcontainer.patch.json +8 -0
  93. package/overlays/commitlint/overlay.yml +16 -0
  94. package/overlays/commitlint/setup.sh +234 -0
  95. package/overlays/direnv/README.md +504 -0
  96. package/overlays/direnv/devcontainer.patch.json +6 -0
  97. package/overlays/direnv/overlay.yml +13 -0
  98. package/overlays/direnv/setup.sh +139 -0
  99. package/overlays/docker-in-docker/README.md +534 -0
  100. package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
  101. package/overlays/docker-in-docker/overlay.yml +13 -0
  102. package/overlays/docker-sock/README.md +256 -0
  103. package/overlays/docker-sock/devcontainer.patch.json +9 -0
  104. package/overlays/docker-sock/docker-compose.yml +8 -0
  105. package/overlays/docker-sock/overlay.yml +13 -0
  106. package/overlays/dotnet/README.md +147 -0
  107. package/overlays/dotnet/devcontainer.patch.json +51 -0
  108. package/overlays/dotnet/global-tools.txt +24 -0
  109. package/overlays/dotnet/overlay.yml +13 -0
  110. package/overlays/dotnet/setup.sh +51 -0
  111. package/overlays/dotnet/verify.sh +26 -0
  112. package/overlays/gcloud/README.md +269 -0
  113. package/overlays/gcloud/devcontainer.patch.json +14 -0
  114. package/overlays/gcloud/overlay.yml +14 -0
  115. package/overlays/gcloud/verify.sh +52 -0
  116. package/overlays/git-helpers/README.md +168 -0
  117. package/overlays/git-helpers/devcontainer.patch.json +33 -0
  118. package/overlays/git-helpers/overlay.yml +15 -0
  119. package/overlays/git-helpers/setup.sh +91 -0
  120. package/overlays/go/README.md +293 -0
  121. package/overlays/go/devcontainer.patch.json +43 -0
  122. package/overlays/go/overlay.yml +15 -0
  123. package/overlays/go/setup.sh +33 -0
  124. package/overlays/go/verify.sh +40 -0
  125. package/overlays/grafana/.env.example +9 -0
  126. package/overlays/grafana/README.md +462 -0
  127. package/overlays/grafana/dashboard-provider.yml +11 -0
  128. package/overlays/grafana/dashboards/observability-overview.json +263 -0
  129. package/overlays/grafana/devcontainer.patch.json +12 -0
  130. package/overlays/grafana/docker-compose.yml +27 -0
  131. package/overlays/grafana/grafana-datasources.yml +57 -0
  132. package/overlays/grafana/overlay.yml +21 -0
  133. package/overlays/grafana/verify.sh +34 -0
  134. package/overlays/jaeger/.env.example +7 -0
  135. package/overlays/jaeger/README.md +867 -0
  136. package/overlays/jaeger/devcontainer.patch.json +12 -0
  137. package/overlays/jaeger/docker-compose.yml +17 -0
  138. package/overlays/jaeger/overlay.yml +19 -0
  139. package/overlays/java/README.md +267 -0
  140. package/overlays/java/devcontainer.patch.json +44 -0
  141. package/overlays/java/overlay.yml +16 -0
  142. package/overlays/java/setup.sh +41 -0
  143. package/overlays/java/verify.sh +42 -0
  144. package/overlays/just/README.md +443 -0
  145. package/overlays/just/devcontainer.patch.json +3 -0
  146. package/overlays/just/overlay.yml +13 -0
  147. package/overlays/just/setup.sh +182 -0
  148. package/overlays/kubectl-helm/README.md +660 -0
  149. package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
  150. package/overlays/kubectl-helm/overlay.yml +13 -0
  151. package/overlays/loki/.env.example +5 -0
  152. package/overlays/loki/README.md +1156 -0
  153. package/overlays/loki/devcontainer.patch.json +12 -0
  154. package/overlays/loki/docker-compose.yml +18 -0
  155. package/overlays/loki/loki-config.yaml +45 -0
  156. package/overlays/loki/overlay.yml +17 -0
  157. package/overlays/minio/.env.example +9 -0
  158. package/overlays/minio/README.md +639 -0
  159. package/overlays/minio/devcontainer.patch.json +30 -0
  160. package/overlays/minio/docker-compose.yml +28 -0
  161. package/overlays/minio/overlay.yml +18 -0
  162. package/overlays/minio/setup.sh +61 -0
  163. package/overlays/minio/verify.sh +64 -0
  164. package/overlays/mkdocs/README.md +309 -0
  165. package/overlays/mkdocs/devcontainer.patch.json +24 -0
  166. package/overlays/mkdocs/overlay.yml +15 -0
  167. package/overlays/modern-cli-tools/README.md +556 -0
  168. package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
  169. package/overlays/modern-cli-tools/overlay.yml +13 -0
  170. package/overlays/modern-cli-tools/setup.sh +153 -0
  171. package/overlays/mongodb/.env.example +9 -0
  172. package/overlays/mongodb/README.md +481 -0
  173. package/overlays/mongodb/devcontainer.patch.json +32 -0
  174. package/overlays/mongodb/docker-compose.yml +44 -0
  175. package/overlays/mongodb/overlay.yml +17 -0
  176. package/overlays/mongodb/verify.sh +48 -0
  177. package/overlays/mysql/.env.example +11 -0
  178. package/overlays/mysql/README.md +542 -0
  179. package/overlays/mysql/devcontainer.patch.json +34 -0
  180. package/overlays/mysql/docker-compose.yml +55 -0
  181. package/overlays/mysql/overlay.yml +16 -0
  182. package/overlays/mysql/verify.sh +48 -0
  183. package/overlays/nats/.env.example +5 -0
  184. package/overlays/nats/README.md +762 -0
  185. package/overlays/nats/devcontainer.patch.json +24 -0
  186. package/overlays/nats/docker-compose.yml +31 -0
  187. package/overlays/nats/overlay.yml +18 -0
  188. package/overlays/nats/verify.sh +50 -0
  189. package/overlays/ngrok/README.md +503 -0
  190. package/overlays/ngrok/devcontainer.patch.json +3 -0
  191. package/overlays/ngrok/overlay.yml +14 -0
  192. package/overlays/ngrok/setup.sh +125 -0
  193. package/overlays/nodejs/README.md +192 -0
  194. package/overlays/nodejs/devcontainer.patch.json +49 -0
  195. package/overlays/nodejs/global-packages.txt +16 -0
  196. package/overlays/nodejs/overlay.yml +14 -0
  197. package/overlays/nodejs/setup.sh +46 -0
  198. package/overlays/nodejs/verify.sh +32 -0
  199. package/overlays/otel-collector/.env.example +9 -0
  200. package/overlays/otel-collector/README.md +1257 -0
  201. package/overlays/otel-collector/devcontainer.patch.json +28 -0
  202. package/overlays/otel-collector/docker-compose.yml +22 -0
  203. package/overlays/otel-collector/otel-collector-config.yaml +68 -0
  204. package/overlays/otel-collector/overlay.yml +21 -0
  205. package/overlays/otel-collector/setup.sh +49 -0
  206. package/overlays/otel-demo-nodejs/.env.example +2 -0
  207. package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
  208. package/overlays/otel-demo-nodejs/README.md +409 -0
  209. package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
  210. package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
  211. package/overlays/otel-demo-nodejs/overlay.yml +23 -0
  212. package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
  213. package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
  214. package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
  215. package/overlays/otel-demo-nodejs/verify.sh +31 -0
  216. package/overlays/otel-demo-python/.env.example +2 -0
  217. package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
  218. package/overlays/otel-demo-python/README.md +82 -0
  219. package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
  220. package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
  221. package/overlays/otel-demo-python/docker-compose.yml +19 -0
  222. package/overlays/otel-demo-python/overlay.yml +23 -0
  223. package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
  224. package/overlays/otel-demo-python/verify.sh +31 -0
  225. package/overlays/playwright/README.md +629 -0
  226. package/overlays/playwright/devcontainer.patch.json +9 -0
  227. package/overlays/playwright/overlay.yml +13 -0
  228. package/overlays/postgres/.env.example +6 -0
  229. package/overlays/postgres/README.md +602 -0
  230. package/overlays/postgres/devcontainer.patch.json +21 -0
  231. package/overlays/postgres/docker-compose.yml +22 -0
  232. package/overlays/postgres/overlay.yml +15 -0
  233. package/overlays/postgres/verify.sh +45 -0
  234. package/overlays/powershell/README.md +314 -0
  235. package/overlays/powershell/devcontainer.patch.json +22 -0
  236. package/overlays/powershell/overlay.yml +13 -0
  237. package/overlays/powershell/setup.sh +29 -0
  238. package/overlays/powershell/verify.sh +38 -0
  239. package/overlays/pre-commit/README.md +263 -0
  240. package/overlays/pre-commit/devcontainer.patch.json +9 -0
  241. package/overlays/pre-commit/overlay.yml +16 -0
  242. package/overlays/pre-commit/setup.sh +129 -0
  243. package/overlays/presets/docs-site.yml +118 -0
  244. package/overlays/presets/fullstack.yml +181 -0
  245. package/overlays/presets/microservice.yml +118 -0
  246. package/overlays/presets/web-api.yml +109 -0
  247. package/overlays/prometheus/.env.example +5 -0
  248. package/overlays/prometheus/README.md +1246 -0
  249. package/overlays/prometheus/devcontainer.patch.json +12 -0
  250. package/overlays/prometheus/docker-compose.yml +22 -0
  251. package/overlays/prometheus/overlay.yml +17 -0
  252. package/overlays/prometheus/prometheus.yml +12 -0
  253. package/overlays/prometheus/verify.sh +34 -0
  254. package/overlays/promtail/.env.example +2 -0
  255. package/overlays/promtail/README.md +357 -0
  256. package/overlays/promtail/devcontainer.patch.json +5 -0
  257. package/overlays/promtail/docker-compose.yml +16 -0
  258. package/overlays/promtail/overlay.yml +17 -0
  259. package/overlays/promtail/promtail-config.yaml +60 -0
  260. package/overlays/promtail/verify.sh +31 -0
  261. package/overlays/pulumi/README.md +472 -0
  262. package/overlays/pulumi/devcontainer.patch.json +13 -0
  263. package/overlays/pulumi/overlay.yml +14 -0
  264. package/overlays/pulumi/verify.sh +31 -0
  265. package/overlays/python/README.md +919 -0
  266. package/overlays/python/devcontainer.patch.json +41 -0
  267. package/overlays/python/overlay.yml +12 -0
  268. package/overlays/python/requirements-overlay.txt +13 -0
  269. package/overlays/python/setup.sh +47 -0
  270. package/overlays/python/verify.sh +32 -0
  271. package/overlays/rabbitmq/.env.example +7 -0
  272. package/overlays/rabbitmq/README.md +680 -0
  273. package/overlays/rabbitmq/devcontainer.patch.json +28 -0
  274. package/overlays/rabbitmq/docker-compose.yml +30 -0
  275. package/overlays/rabbitmq/overlay.yml +18 -0
  276. package/overlays/rabbitmq/verify.sh +41 -0
  277. package/overlays/redis/.env.example +4 -0
  278. package/overlays/redis/README.md +776 -0
  279. package/overlays/redis/devcontainer.patch.json +21 -0
  280. package/overlays/redis/docker-compose.yml +21 -0
  281. package/overlays/redis/overlay.yml +15 -0
  282. package/overlays/redis/verify.sh +41 -0
  283. package/overlays/redpanda/.env.example +10 -0
  284. package/overlays/redpanda/README.md +703 -0
  285. package/overlays/redpanda/devcontainer.patch.json +37 -0
  286. package/overlays/redpanda/docker-compose.yml +67 -0
  287. package/overlays/redpanda/overlay.yml +21 -0
  288. package/overlays/redpanda/verify.sh +48 -0
  289. package/overlays/rust/README.md +299 -0
  290. package/overlays/rust/devcontainer.patch.json +39 -0
  291. package/overlays/rust/overlay.yml +15 -0
  292. package/overlays/rust/setup.sh +36 -0
  293. package/overlays/rust/verify.sh +51 -0
  294. package/overlays/sqlite/README.md +584 -0
  295. package/overlays/sqlite/devcontainer.patch.json +14 -0
  296. package/overlays/sqlite/overlay.yml +15 -0
  297. package/overlays/sqlite/setup.sh +27 -0
  298. package/overlays/sqlite/verify.sh +43 -0
  299. package/overlays/sqlserver/.env.example +6 -0
  300. package/overlays/sqlserver/README.md +592 -0
  301. package/overlays/sqlserver/devcontainer.patch.json +22 -0
  302. package/overlays/sqlserver/docker-compose.yml +32 -0
  303. package/overlays/sqlserver/overlay.yml +17 -0
  304. package/overlays/sqlserver/verify.sh +30 -0
  305. package/overlays/tempo/.env.example +5 -0
  306. package/overlays/tempo/README.md +273 -0
  307. package/overlays/tempo/devcontainer.patch.json +12 -0
  308. package/overlays/tempo/docker-compose.yml +20 -0
  309. package/overlays/tempo/overlay.yml +20 -0
  310. package/overlays/tempo/tempo-config.yaml +32 -0
  311. package/overlays/tempo/verify.sh +31 -0
  312. package/overlays/terraform/README.md +389 -0
  313. package/overlays/terraform/devcontainer.patch.json +15 -0
  314. package/overlays/terraform/overlay.yml +14 -0
  315. package/overlays/terraform/verify.sh +63 -0
  316. package/package.json +74 -0
  317. package/templates/README.md +285 -0
  318. package/templates/compose/.devcontainer/devcontainer.json +46 -0
  319. package/templates/compose/.devcontainer/docker-compose.yml +12 -0
  320. package/templates/compose/README.md +20 -0
  321. package/templates/plain/.devcontainer/devcontainer.json +35 -0
  322. package/templates/plain/README.md +21 -0
  323. package/tool/README.md +281 -0
  324. package/tool/schema/base-images.schema.json +43 -0
  325. package/tool/schema/base-templates.schema.json +34 -0
  326. package/tool/schema/config.schema.json +71 -0
  327. package/tool/schema/overlay-manifest.schema.json +86 -0
@@ -0,0 +1,504 @@
1
+ # direnv Overlay
2
+
3
+ Automatic environment variable management for project-specific configurations.
4
+
5
+ **⚠️ Security Note:** The sample `.envrc` file is automatically allowed during setup for convenience in the devcontainer environment. `.envrc` files can execute arbitrary code, so always review the contents before using in production or with untrusted repositories. Run `direnv deny` to disable if needed.
6
+
7
+ ## What's Included
8
+
9
+ - **direnv** - Per-directory environment variable loader
10
+ - **Shell integration** - Auto-hook for bash/zsh
11
+ - **Sample .envrc** - Ready-to-use configuration
12
+ - **Sample .env.example** - Environment variable template
13
+
14
+ ## What is direnv?
15
+
16
+ direnv automatically loads/unloads environment variables when you enter/leave a directory. Perfect for:
17
+
18
+ - Project-specific configurations
19
+ - API keys and secrets
20
+ - Database URLs
21
+ - Feature flags
22
+ - Development vs. production settings
23
+
24
+ ## Quick Start
25
+
26
+ 1. **Edit .envrc** in your project root:
27
+
28
+ ```bash
29
+ export DATABASE_URL="postgresql://localhost:5432/mydb"
30
+ export API_KEY="dev-key-123"
31
+ ```
32
+
33
+ 2. **Allow the configuration**:
34
+
35
+ ```bash
36
+ direnv allow
37
+ ```
38
+
39
+ 3. **Variables are automatically loaded** when you `cd` into the directory:
40
+
41
+ ```bash
42
+ cd /workspace
43
+ # direnv: loading .envrc
44
+ # ✓ Environment loaded
45
+
46
+ echo $DATABASE_URL
47
+ # postgresql://localhost:5432/mydb
48
+ ```
49
+
50
+ 4. **Variables are unloaded** when you leave:
51
+
52
+ ```bash
53
+ cd /tmp
54
+ # direnv: unloading
55
+
56
+ echo $DATABASE_URL
57
+ # (empty)
58
+ ```
59
+
60
+ ## .envrc Syntax
61
+
62
+ ### Basic Variables
63
+
64
+ ```bash
65
+ export PROJECT_NAME="my-project"
66
+ export NODE_ENV="development"
67
+ export DEBUG="true"
68
+ ```
69
+
70
+ ### Load .env File
71
+
72
+ ```bash
73
+ # Load .env if it exists
74
+ dotenv_if_exists .env
75
+
76
+ # Load multiple files
77
+ dotenv_if_exists .env
78
+ dotenv_if_exists .env.local
79
+ ```
80
+
81
+ ### Modify PATH
82
+
83
+ ```bash
84
+ # Add directories to PATH
85
+ PATH_add ./bin
86
+ PATH_add ./node_modules/.bin
87
+ PATH_add /usr/local/custom/bin
88
+ ```
89
+
90
+ ### Conditional Logic
91
+
92
+ ```bash
93
+ # Environment-specific variables
94
+ if [ "$USER" = "alice" ]; then
95
+ export LOG_LEVEL="debug"
96
+ else
97
+ export LOG_LEVEL="info"
98
+ fi
99
+ ```
100
+
101
+ ### Load Programming Language Versions
102
+
103
+ ```bash
104
+ # Node.js (requires nvm)
105
+ use node 20.11.0
106
+
107
+ # Python (creates/activates venv)
108
+ layout python python3.12
109
+
110
+ # Ruby (requires rbenv/rvm)
111
+ use ruby 3.3.0
112
+ ```
113
+
114
+ ### Source Other Files
115
+
116
+ ```bash
117
+ # Load shared configuration
118
+ source_env ../shared/.envrc
119
+
120
+ # Load if exists
121
+ source_env_if_exists ./config/local.envrc
122
+ ```
123
+
124
+ ### Functions and Helpers
125
+
126
+ ```bash
127
+ # Log messages
128
+ log_status "Environment loaded"
129
+ log_error "Something went wrong"
130
+
131
+ # Watch files for changes
132
+ watch_file config/settings.yml
133
+ ```
134
+
135
+ ## Common Patterns
136
+
137
+ ### Node.js Project
138
+
139
+ ```bash
140
+ # .envrc
141
+ use node 20
142
+
143
+ PATH_add ./node_modules/.bin
144
+ export NODE_ENV=development
145
+ export PORT=3000
146
+
147
+ dotenv_if_exists .env
148
+ ```
149
+
150
+ ### Python Project
151
+
152
+ ```bash
153
+ # .envrc
154
+ layout python python3.12
155
+
156
+ export PYTHONPATH="$PWD/src"
157
+ export FLASK_ENV=development
158
+ export DATABASE_URL="sqlite:///dev.db"
159
+
160
+ dotenv_if_exists .env
161
+ ```
162
+
163
+ ### Go Project
164
+
165
+ ```bash
166
+ # .envrc
167
+ export GOPATH="$PWD/.go"
168
+ export GOBIN="$PWD/bin"
169
+
170
+ PATH_add ./bin
171
+ PATH_add "$GOPATH/bin"
172
+ ```
173
+
174
+ ### Multi-Service Project
175
+
176
+ ```bash
177
+ # .envrc
178
+ export COMPOSE_PROJECT_NAME="myapp"
179
+
180
+ # Service URLs
181
+ export API_URL="http://localhost:3000"
182
+ export WEB_URL="http://localhost:8080"
183
+ export DB_URL="postgresql://localhost:5432/mydb"
184
+
185
+ # Load environment-specific config
186
+ dotenv_if_exists .env.${NODE_ENV:-development}
187
+ ```
188
+
189
+ ### Monorepo
190
+
191
+ ```bash
192
+ # Root .envrc
193
+ export WORKSPACE_ROOT="$PWD"
194
+ export NODE_ENV=development
195
+
196
+ # Shared variables
197
+ export DATABASE_URL="postgresql://localhost:5432/shared"
198
+
199
+ # Child directories can extend:
200
+ # source_env_if_exists $WORKSPACE_ROOT/.envrc
201
+ ```
202
+
203
+ ## Advanced Features
204
+
205
+ ### Private .envrc
206
+
207
+ For personal/local configurations:
208
+
209
+ ```bash
210
+ # .envrc
211
+ dotenv_if_exists .env
212
+
213
+ # Load personal settings (gitignored)
214
+ source_env_if_exists .envrc.local
215
+ ```
216
+
217
+ Create `.envrc.local` (add to `.gitignore`):
218
+
219
+ ```bash
220
+ export PERSONAL_API_KEY="my-secret-key"
221
+ export DEBUG_MODE="true"
222
+ ```
223
+
224
+ ### Watch Files
225
+
226
+ Reload when files change:
227
+
228
+ ```bash
229
+ # .envrc
230
+ watch_file config/database.yml
231
+ watch_file .env.local
232
+
233
+ # Parse and export YAML/JSON
234
+ export DATABASE_HOST=$(yq .host config/database.yml)
235
+ ```
236
+
237
+ ### Lazy Loading
238
+
239
+ Defer expensive operations:
240
+
241
+ ```bash
242
+ # Only load when variable is accessed
243
+ export_function() {
244
+ export EXPENSIVE_VALUE=$(some-slow-command)
245
+ }
246
+
247
+ # Or use lazy loading helper
248
+ has nvm && use node
249
+ ```
250
+
251
+ ### Layout Functions
252
+
253
+ Built-in helpers for common setups:
254
+
255
+ ```bash
256
+ # Python virtualenv
257
+ layout python python3.12
258
+
259
+ # Anaconda
260
+ layout anaconda myenv
261
+
262
+ # Node.js
263
+ layout node
264
+
265
+ # Go workspace
266
+ layout go
267
+ ```
268
+
269
+ ### Custom Functions
270
+
271
+ ```bash
272
+ # Define reusable function
273
+ setup_aws() {
274
+ export AWS_PROFILE="dev"
275
+ export AWS_REGION="us-west-2"
276
+ }
277
+
278
+ setup_aws
279
+ ```
280
+
281
+ ## Security Best Practices
282
+
283
+ ### Never Commit Secrets
284
+
285
+ **.envrc** - Commit to version control (no secrets):
286
+
287
+ ```bash
288
+ # Safe to commit
289
+ export PROJECT_NAME="myapp"
290
+ export NODE_ENV="development"
291
+
292
+ # Load secrets from gitignored file
293
+ dotenv_if_exists .env
294
+ ```
295
+
296
+ **.env** - Do NOT commit (add to `.gitignore`):
297
+
298
+ ```bash
299
+ # Secrets - never commit
300
+ API_KEY="sk_live_abc123"
301
+ DATABASE_PASSWORD="super-secret"
302
+ ```
303
+
304
+ ### Use .env.example
305
+
306
+ Provide template without secrets:
307
+
308
+ ```bash
309
+ # .env.example (committed)
310
+ API_KEY=your-api-key-here
311
+ DATABASE_PASSWORD=your-password-here
312
+ ```
313
+
314
+ Users copy and fill in:
315
+
316
+ ```bash
317
+ cp .env.example .env
318
+ # Edit .env with real values
319
+ ```
320
+
321
+ ### Validate .envrc Changes
322
+
323
+ direnv requires explicit permission:
324
+
325
+ ```bash
326
+ # After editing .envrc
327
+ direnv allow .
328
+
329
+ # Deny if suspicious
330
+ direnv deny .
331
+ ```
332
+
333
+ ### Separate Environments
334
+
335
+ ```bash
336
+ # .envrc
337
+ case "${ENVIRONMENT:-dev}" in
338
+ production)
339
+ dotenv_if_exists .env.production
340
+ ;;
341
+ staging)
342
+ dotenv_if_exists .env.staging
343
+ ;;
344
+ *)
345
+ dotenv_if_exists .env.development
346
+ ;;
347
+ esac
348
+ ```
349
+
350
+ ## Commands
351
+
352
+ ### Allow/Deny
353
+
354
+ ```bash
355
+ direnv allow # Allow .envrc in current dir
356
+ direnv allow /path # Allow specific .envrc
357
+ direnv deny # Deny .envrc in current dir
358
+ ```
359
+
360
+ ### Status
361
+
362
+ ```bash
363
+ direnv status # Show configuration status
364
+ direnv reload # Force reload environment
365
+ ```
366
+
367
+ ### Debugging
368
+
369
+ ```bash
370
+ direnv exec . env # Show all exported variables
371
+ direnv exec . bash # Start shell with environment
372
+ ```
373
+
374
+ ## Troubleshooting
375
+
376
+ ### .envrc Not Loading
377
+
378
+ 1. Check if direnv is hooked:
379
+
380
+ ```bash
381
+ echo $DIRENV_DIR
382
+ # Should show current directory
383
+ ```
384
+
385
+ 2. Reload shell configuration:
386
+
387
+ ```bash
388
+ source ~/.bashrc
389
+ ```
390
+
391
+ 3. Allow .envrc explicitly:
392
+ ```bash
393
+ direnv allow
394
+ ```
395
+
396
+ ### Variables Not Exported
397
+
398
+ Ensure you use `export`:
399
+
400
+ ```bash
401
+ # ✗ Won't work outside .envrc
402
+ MY_VAR="value"
403
+
404
+ # ✓ Correctly exported
405
+ export MY_VAR="value"
406
+ ```
407
+
408
+ ### Performance Issues
409
+
410
+ Disable logging:
411
+
412
+ ```bash
413
+ # In .envrc or environment
414
+ export DIRENV_LOG_FORMAT=""
415
+ ```
416
+
417
+ Cache expensive operations:
418
+
419
+ ```bash
420
+ # .envrc
421
+ CACHE_FILE=".direnv/cache"
422
+ if [ ! -f "$CACHE_FILE" ]; then
423
+ echo "Computing expensive value..."
424
+ expensive-command > "$CACHE_FILE"
425
+ fi
426
+ export VALUE=$(cat "$CACHE_FILE")
427
+ ```
428
+
429
+ ### Conflicts with Other Tools
430
+
431
+ Load direnv last in shell config:
432
+
433
+ ```bash
434
+ # .bashrc
435
+ eval "$(rbenv init -)"
436
+ eval "$(nvm use)"
437
+ eval "$(direnv hook bash)" # Last
438
+ ```
439
+
440
+ ## Integration
441
+
442
+ ### VS Code
443
+
444
+ Settings are automatically loaded. Reload window if needed:
445
+
446
+ - `Cmd/Ctrl + Shift + P` → "Developer: Reload Window"
447
+
448
+ ### Git
449
+
450
+ Prevent committing secrets:
451
+
452
+ ```bash
453
+ # .gitignore
454
+ .env
455
+ .env.local
456
+ .envrc.local
457
+ .direnv/
458
+ ```
459
+
460
+ ### Docker Compose
461
+
462
+ ```bash
463
+ # .envrc
464
+ export COMPOSE_PROJECT_NAME="${PROJECT_NAME}"
465
+ dotenv_if_exists .env
466
+ ```
467
+
468
+ Variables are available to `docker-compose.yml`:
469
+
470
+ ```yaml
471
+ services:
472
+ app:
473
+ environment:
474
+ - DATABASE_URL=${DATABASE_URL}
475
+ ```
476
+
477
+ ### CI/CD
478
+
479
+ Set variables in CI instead of loading .envrc:
480
+
481
+ ```yaml
482
+ # .github/workflows/test.yml
483
+ env:
484
+ NODE_ENV: test
485
+ DATABASE_URL: postgresql://localhost/test
486
+ ```
487
+
488
+ ## Best Practices
489
+
490
+ 1. **Commit .envrc** - Share project configuration
491
+ 2. **Gitignore .env** - Keep secrets local
492
+ 3. **Use .env.example** - Document required variables
493
+ 4. **Validate on allow** - Review changes before allowing
494
+ 5. **Keep it simple** - Complex logic belongs in scripts
495
+ 6. **Use dotenv** - Separate code from configuration
496
+ 7. **Namespace variables** - Prefix project-specific vars
497
+ 8. **Document purpose** - Comment each variable
498
+
499
+ ## Additional Resources
500
+
501
+ - [direnv Documentation](https://direnv.net/)
502
+ - [direnv Wiki](https://github.com/direnv/direnv/wiki)
503
+ - [Common Patterns](https://github.com/direnv/direnv/wiki/Python)
504
+ - [Security Guide](https://github.com/direnv/direnv/wiki/Security)
@@ -0,0 +1,6 @@
1
+ {
2
+ "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
+ "remoteEnv": {
4
+ "DIRENV_LOG_FORMAT": ""
5
+ }
6
+ }
@@ -0,0 +1,13 @@
1
+ id: direnv
2
+ name: direnv
3
+ description: Per-directory environment variable management
4
+ category: dev
5
+ supports: []
6
+ requires: []
7
+ suggests: []
8
+ conflicts: []
9
+ tags:
10
+ - dev
11
+ - environment
12
+ - automation
13
+ ports: []
@@ -0,0 +1,139 @@
1
+ #!/bin/bash
2
+ # direnv setup script
3
+
4
+ set -e
5
+
6
+ echo "🔐 Setting up direnv..."
7
+
8
+ # Install direnv from package manager
9
+ sudo apt-get update -qq
10
+ sudo apt-get install -y direnv
11
+
12
+ # Verify installation
13
+ if command -v direnv &> /dev/null; then
14
+ echo "✓ direnv installed: $(direnv version)"
15
+ else
16
+ echo "✗ direnv installation failed"
17
+ exit 1
18
+ fi
19
+
20
+ # Add direnv hook to bash profile
21
+ if [ -f "$HOME/.bashrc" ]; then
22
+ if ! grep -q "direnv hook bash" "$HOME/.bashrc"; then
23
+ echo 'eval "$(direnv hook bash)"' >> "$HOME/.bashrc"
24
+ echo "✓ direnv hook added to .bashrc"
25
+ fi
26
+ fi
27
+
28
+ # Add direnv hook to zsh profile if zsh is installed
29
+ if command -v zsh &> /dev/null && [ -f "$HOME/.zshrc" ]; then
30
+ if ! grep -q "direnv hook zsh" "$HOME/.zshrc"; then
31
+ echo 'eval "$(direnv hook zsh)"' >> "$HOME/.zshrc"
32
+ echo "✓ direnv hook added to .zshrc"
33
+ fi
34
+ fi
35
+
36
+ # Create sample .envrc if it doesn't exist
37
+ if [ ! -f .envrc ]; then
38
+ cat > .envrc << 'EOF'
39
+ # .envrc - Directory-specific environment variables
40
+ # Run `direnv allow` to activate this file
41
+
42
+ # Load .env file if it exists
43
+ dotenv_if_exists .env
44
+
45
+ # Example: Set project-specific variables
46
+ export PROJECT_NAME="my-project"
47
+ export ENVIRONMENT="development"
48
+
49
+ # Example: Add local bin to PATH
50
+ PATH_add ./bin
51
+ PATH_add ./scripts
52
+
53
+ # Example: Set Node.js version (requires nvm)
54
+ # use node 20
55
+
56
+ # Example: Activate Python virtual environment
57
+ # layout python python3.12
58
+
59
+ # Example: Load secrets from file
60
+ # dotenv_if_exists .env.local
61
+
62
+ # Example: Set database URL
63
+ # export DATABASE_URL="postgresql://localhost:5432/mydb"
64
+
65
+ # Example: Set API endpoints
66
+ # export API_BASE_URL="http://localhost:3000"
67
+
68
+ # Example: Configure logging
69
+ # export LOG_LEVEL="debug"
70
+
71
+ # Log message when environment is loaded
72
+ log_status "✓ Environment loaded for $PROJECT_NAME"
73
+ EOF
74
+ echo "✓ Sample .envrc created"
75
+
76
+ # Note: Auto-allowing .envrc in devcontainer context
77
+ # WARNING: .envrc can execute arbitrary code. Review before allowing in production.
78
+ echo "⚠️ Auto-allowing .envrc for devcontainer (review contents before use)"
79
+ direnv allow .envrc 2>/dev/null || true
80
+ echo "✓ .envrc pre-allowed (run 'direnv deny' to disable)"
81
+ fi
82
+
83
+ # Create sample .env file if it doesn't exist
84
+ if [ ! -f .env ] && [ ! -f .env.example ]; then
85
+ cat > .env.example << 'EOF'
86
+ # .env.example - Example environment variables
87
+ # Copy to .env and customize for your local environment
88
+
89
+ # Application settings
90
+ NODE_ENV=development
91
+ PORT=3000
92
+
93
+ # Database
94
+ DATABASE_URL=postgresql://localhost:5432/mydb
95
+ DATABASE_POOL_SIZE=10
96
+
97
+ # Authentication
98
+ JWT_SECRET=change-me-in-production
99
+ SESSION_SECRET=change-me-too
100
+
101
+ # API Keys (never commit real keys)
102
+ API_KEY=your-api-key-here
103
+ THIRD_PARTY_API_KEY=another-key
104
+
105
+ # Feature Flags
106
+ ENABLE_BETA_FEATURES=false
107
+ ENABLE_DEBUG_MODE=true
108
+
109
+ # External Services
110
+ REDIS_URL=redis://localhost:6379
111
+ ELASTICSEARCH_URL=http://localhost:9200
112
+
113
+ # Logging
114
+ LOG_LEVEL=info
115
+ LOG_FORMAT=json
116
+ EOF
117
+ echo "✓ Sample .env.example created"
118
+ fi
119
+
120
+ # Create .gitignore entries for environment files
121
+ if [ -f .gitignore ]; then
122
+ if ! grep -q ".envrc" .gitignore; then
123
+ echo "" >> .gitignore
124
+ echo "# Direnv" >> .gitignore
125
+ echo ".envrc.local" >> .gitignore
126
+ echo ".env" >> .gitignore
127
+ echo ".env.local" >> .gitignore
128
+ echo "✓ Added direnv entries to .gitignore"
129
+ fi
130
+ fi
131
+
132
+ echo "✓ direnv setup complete"
133
+ echo ""
134
+ echo "💡 Usage:"
135
+ echo " - Edit .envrc to set environment variables"
136
+ echo " - Run 'direnv allow' to activate changes"
137
+ echo " - Variables are automatically loaded when entering directory"
138
+ echo " - Use 'direnv deny' to disable"
139
+ echo " - Check status: 'direnv status'"