@sebastienrousseau/dotfiles 0.2.519 → 0.2.521

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 (306) hide show
  1. package/CHANGELOG.md +200 -0
  2. package/LICENSE-APACHE +190 -0
  3. package/{LICENSE → LICENSE-MIT} +1 -1
  4. package/README.md +1172 -166
  5. package/install.sh +77 -11
  6. package/package.json +8 -8
  7. package/tools/README.md +49 -0
  8. package/tools/ci/install-chezmoi-verified.sh +68 -0
  9. package/docs/.vitepress/reports/localization-readability-audit.md +0 -73
  10. package/docs/AI.md +0 -179
  11. package/docs/CNAME +0 -1
  12. package/docs/CONFIG_STRATEGY.md +0 -124
  13. package/docs/COPYRIGHT +0 -7
  14. package/docs/GOVERNANCE.md +0 -98
  15. package/docs/MAINTAINERS.md +0 -41
  16. package/docs/NAMING_CONVENTIONS.md +0 -102
  17. package/docs/OPENCODE.md +0 -127
  18. package/docs/README.md +0 -84
  19. package/docs/STRUCTURE.md +0 -102
  20. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -118
  21. package/docs/adr/ADR-002-shell-performance.md +0 -130
  22. package/docs/adr/ADR-003-security-first.md +0 -158
  23. package/docs/adr/ADR-004-cli-architecture.md +0 -171
  24. package/docs/adr/ADR-005-chezmoi-choice.md +0 -99
  25. package/docs/adr/ADR-006-shell-selection.md +0 -124
  26. package/docs/adr/ADR-007-multi-shell-parity.md +0 -62
  27. package/docs/adr/ADR-008-alias-system-architecture.md +0 -95
  28. package/docs/adr/ADR-009-wallpaper-driven-theming.md +0 -131
  29. package/docs/adr/ADR-010-starship-transient-prompt.md +0 -144
  30. package/docs/adr/ADR-011-nushell-tier3-keep.md +0 -144
  31. package/docs/adr/ADR-012-ai-fleet-local-proxy.md +0 -79
  32. package/docs/adr/README.md +0 -40
  33. package/docs/architecture/AI_COST_OPTIMIZATION.md +0 -144
  34. package/docs/architecture/ARCHITECTURE.md +0 -117
  35. package/docs/architecture/INTEROP.md +0 -44
  36. package/docs/architecture/REPO_LAYOUT.md +0 -241
  37. package/docs/architecture/WALKTHROUGH.md +0 -86
  38. package/docs/architecture/fleet-deployment.md +0 -77
  39. package/docs/archive/EUXIS_2026_REVIEW.md +0 -127
  40. package/docs/archive/LEGACY_ROADMAP.md +0 -6
  41. package/docs/archive/MILESTONE_v0.2.493.md +0 -47
  42. package/docs/archive/PLAN.md +0 -199
  43. package/docs/archive/REPO_AUDIT.md +0 -31
  44. package/docs/articles/.pages +0 -6
  45. package/docs/articles/2026-07-05-custom-mkdocs-material-dark-theme.md +0 -216
  46. package/docs/articles/2026-07-05-fish-startup-abbr.md +0 -153
  47. package/docs/articles/2026-07-05-master-to-main-rename-runbook.md +0 -128
  48. package/docs/articles/index.md +0 -36
  49. package/docs/guides/INSTALL.md +0 -144
  50. package/docs/guides/NEOVIM_IDE_GUIDE.md +0 -61
  51. package/docs/guides/THEMING.md +0 -230
  52. package/docs/guides/TROUBLESHOOTING.md +0 -176
  53. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +0 -792
  54. package/docs/index.md +0 -132
  55. package/docs/interop/A2A.md +0 -39
  56. package/docs/interop/POWERSHELL.md +0 -102
  57. package/docs/manual/00-introduction.md +0 -89
  58. package/docs/manual/01-concepts/01-architecture.md +0 -138
  59. package/docs/manual/01-concepts/02-trust-model.md +0 -183
  60. package/docs/manual/01-concepts/03-theme-engine.md +0 -186
  61. package/docs/manual/01-concepts/04-fleet.md +0 -148
  62. package/docs/manual/01-concepts/05-self-healing.md +0 -204
  63. package/docs/manual/02-tutorials/01-first-install.md +0 -197
  64. package/docs/manual/02-tutorials/02-add-wallpaper.md +0 -216
  65. package/docs/manual/02-tutorials/03-create-profile.md +0 -244
  66. package/docs/manual/02-tutorials/04-encrypt-secret.md +0 -281
  67. package/docs/manual/02-tutorials/05-deploy-fleet.md +0 -283
  68. package/docs/manual/03-reference/01-dot-cli.md +0 -450
  69. package/docs/manual/03-reference/02-config-files.md +0 -265
  70. package/docs/manual/03-reference/03-environment.md +0 -124
  71. package/docs/manual/03-reference/04-templates.md +0 -190
  72. package/docs/manual/03-reference/05-feature-flags.md +0 -187
  73. package/docs/manual/04-cookbook/01-recipes.md +0 -285
  74. package/docs/manual/04-cookbook/02-troubleshooting.md +0 -351
  75. package/docs/manual/04-cookbook/03-faq.md +0 -175
  76. package/docs/manual/05-appendices/A-platform-matrix.md +0 -101
  77. package/docs/manual/05-appendices/B-security-checklist.md +0 -85
  78. package/docs/manual/05-appendices/C-glossary.md +0 -40
  79. package/docs/manual/05-appendices/D-bibliography.md +0 -58
  80. package/docs/manual/05-appendices/E-license.md +0 -38
  81. package/docs/manual/_toc.yml +0 -58
  82. package/docs/manual/command-index.md +0 -155
  83. package/docs/manual/concept-index.md +0 -168
  84. package/docs/manual/index.md +0 -66
  85. package/docs/operations/ARCHITECTURE_ROADMAP.md +0 -7
  86. package/docs/operations/ATTESTATION.md +0 -44
  87. package/docs/operations/CI_CADENCE.md +0 -107
  88. package/docs/operations/CI_COMPOSITES.md +0 -156
  89. package/docs/operations/COMPLETIONS.md +0 -123
  90. package/docs/operations/COVERAGE.md +0 -204
  91. package/docs/operations/DRIFT.md +0 -107
  92. package/docs/operations/HARD_AUDIT_2026.md +0 -631
  93. package/docs/operations/MAINTENANCE.md +0 -63
  94. package/docs/operations/MANIFEST.md +0 -127
  95. package/docs/operations/MIGRATION.md +0 -109
  96. package/docs/operations/OPERATIONS.md +0 -188
  97. package/docs/operations/PERFORMANCE.md +0 -133
  98. package/docs/operations/REGISTRY.md +0 -90
  99. package/docs/operations/RELEASE_PIPELINE.md +0 -128
  100. package/docs/operations/RELIABILITY.md +0 -122
  101. package/docs/operations/RFC_v0_2_503_reorganization.md +0 -280
  102. package/docs/operations/ROADMAP.md +0 -10
  103. package/docs/operations/ROADMAP_2026.md +0 -7
  104. package/docs/operations/ROADMAP_V0_2_503.md +0 -10
  105. package/docs/operations/TESTING.md +0 -216
  106. package/docs/operations/TRACEABILITY.md +0 -43
  107. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +0 -65
  108. package/docs/operations/VERSION_SYNC.md +0 -393
  109. package/docs/reference/ALIASES.md +0 -131
  110. package/docs/reference/ALIASES_CHEATSHEET.md +0 -32
  111. package/docs/reference/ALIASES_DEPRECATIONS.md +0 -13
  112. package/docs/reference/FEATURES.md +0 -66
  113. package/docs/reference/FONTS.md +0 -112
  114. package/docs/reference/POWERSHELL_PARITY.md +0 -82
  115. package/docs/reference/PROFILES.md +0 -69
  116. package/docs/reference/SCREENSHOTS.md +0 -121
  117. package/docs/reference/SCRIPTS.md +0 -71
  118. package/docs/reference/SUPPORT_MATRIX.md +0 -80
  119. package/docs/reference/THEMES.md +0 -117
  120. package/docs/reference/TOOLS.md +0 -110
  121. package/docs/reference/UTILS.md +0 -242
  122. package/docs/registry.json +0 -6
  123. package/docs/schema/dot-env-v1.json +0 -110
  124. package/docs/schema/dot-registry-v1.json +0 -33
  125. package/docs/security/AI_ACT_COMPLIANCE.md +0 -94
  126. package/docs/security/AUDIT_BYPASS.md +0 -103
  127. package/docs/security/AUTOMATION_SECRETS.md +0 -26
  128. package/docs/security/CI_EGRESS_ALLOWLIST.md +0 -127
  129. package/docs/security/CI_PINNING.md +0 -129
  130. package/docs/security/COMMIT_SIGNING.md +0 -138
  131. package/docs/security/COMPLIANCE.md +0 -458
  132. package/docs/security/DEPS_DEV_EXCEPTIONS.md +0 -86
  133. package/docs/security/DISCLOSURE.md +0 -130
  134. package/docs/security/ENCRYPTION.md +0 -57
  135. package/docs/security/FMEA.md +0 -159
  136. package/docs/security/FUZZING.md +0 -114
  137. package/docs/security/HISTORY_FILTERING.md +0 -132
  138. package/docs/security/INCIDENT_RESPONSE.md +0 -579
  139. package/docs/security/INSTALL_VERIFICATION.md +0 -122
  140. package/docs/security/KEYS.md +0 -49
  141. package/docs/security/KEY_ROTATION.md +0 -303
  142. package/docs/security/MCP_POLICY.md +0 -78
  143. package/docs/security/POLICY_RELEASES.md +0 -37
  144. package/docs/security/README.md +0 -28
  145. package/docs/security/SCORECARD.md +0 -195
  146. package/docs/security/SECRETS.md +0 -158
  147. package/docs/security/SECURITY.md +0 -45
  148. package/docs/security/SECURITY_CHECKLIST.md +0 -55
  149. package/docs/security/SHELL_EXEMPTIONS.md +0 -145
  150. package/docs/security/SOUP_REGISTER.md +0 -36
  151. package/docs/security/THREAT_MODEL.md +0 -130
  152. package/docs/security/VERIFICATION_VALIDATION.md +0 -228
  153. package/docs/security/VERIFY_RELEASE.md +0 -201
  154. package/docs/security/security-pubkey.asc +0 -15
  155. package/docs/stylesheets/extra.css +0 -444
  156. package/docs/themes/README.md +0 -10
  157. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +0 -30
  158. package/docs/themes/hero-shot.svg +0 -78
  159. package/scripts/README.md +0 -123
  160. package/scripts/ci/check-copyright-headers.sh +0 -8
  161. package/scripts/ci/check-shell-preamble.sh +0 -8
  162. package/scripts/ci/guard-gitleaks-checkout.sh +0 -8
  163. package/scripts/demo/record.sh +0 -43
  164. package/scripts/diagnostics/a2a-conformance.sh +0 -163
  165. package/scripts/diagnostics/alias-governance.sh +0 -138
  166. package/scripts/diagnostics/aliases-cheatsheet.sh +0 -74
  167. package/scripts/diagnostics/aliases-manifest.sh +0 -77
  168. package/scripts/diagnostics/benchmark.sh +0 -408
  169. package/scripts/diagnostics/conflicts.sh +0 -73
  170. package/scripts/diagnostics/doctor-unified.sh +0 -39
  171. package/scripts/diagnostics/doctor.sh +0 -751
  172. package/scripts/diagnostics/drift-dashboard.sh +0 -202
  173. package/scripts/diagnostics/health.sh +0 -623
  174. package/scripts/diagnostics/history-analysis.sh +0 -86
  175. package/scripts/diagnostics/mcp-doctor.sh +0 -582
  176. package/scripts/diagnostics/perf.sh +0 -453
  177. package/scripts/diagnostics/scorecard.sh +0 -119
  178. package/scripts/diagnostics/secret-governance.sh +0 -65
  179. package/scripts/diagnostics/security-score.sh +0 -467
  180. package/scripts/diagnostics/smoke-test.sh +0 -88
  181. package/scripts/diagnostics/snapshot.sh +0 -90
  182. package/scripts/diagnostics/verify.sh +0 -108
  183. package/scripts/diagnostics/verify_state.sh +0 -73
  184. package/scripts/diagnostics/version-locks.sh +0 -94
  185. package/scripts/diagnostics/workstation-attestation.sh +0 -187
  186. package/scripts/dot/commands/agent.sh +0 -485
  187. package/scripts/dot/commands/agents.sh +0 -336
  188. package/scripts/dot/commands/ai.sh +0 -587
  189. package/scripts/dot/commands/aliases.sh +0 -277
  190. package/scripts/dot/commands/appearance.sh +0 -110
  191. package/scripts/dot/commands/completion.sh +0 -134
  192. package/scripts/dot/commands/core.sh +0 -217
  193. package/scripts/dot/commands/diagnostics.sh +0 -265
  194. package/scripts/dot/commands/env-emit.sh +0 -203
  195. package/scripts/dot/commands/fleet.sh +0 -688
  196. package/scripts/dot/commands/init.sh +0 -185
  197. package/scripts/dot/commands/lint.sh +0 -208
  198. package/scripts/dot/commands/manual.sh +0 -169
  199. package/scripts/dot/commands/meta.sh +0 -333
  200. package/scripts/dot/commands/patterns.sh +0 -55
  201. package/scripts/dot/commands/registry.sh +0 -419
  202. package/scripts/dot/commands/restore.sh +0 -232
  203. package/scripts/dot/commands/secrets.sh +0 -296
  204. package/scripts/dot/commands/security.sh +0 -102
  205. package/scripts/dot/commands/tools.sh +0 -556
  206. package/scripts/dot/data/alias-deprecations.tsv +0 -2
  207. package/scripts/dot/powershell/Dot.psm1 +0 -319
  208. package/scripts/fonts/install-nerd-fonts.sh +0 -75
  209. package/scripts/fonts/patch-fonts.sh +0 -36
  210. package/scripts/git-hooks/install.sh +0 -12
  211. package/scripts/git-hooks/pre-commit +0 -12
  212. package/scripts/git-hooks/pre-commit-audit.sh +0 -146
  213. package/scripts/git-hooks/pre-push +0 -105
  214. package/scripts/git-hooks/prepare-commit-msg +0 -29
  215. package/scripts/lib/secrets_provider.sh +0 -185
  216. package/scripts/ops/ai-setup.sh +0 -71
  217. package/scripts/ops/bundle.sh +0 -104
  218. package/scripts/ops/chaos.sh +0 -50
  219. package/scripts/ops/chezmoi-apply.sh +0 -333
  220. package/scripts/ops/chezmoi-diff.sh +0 -16
  221. package/scripts/ops/chezmoi-remove.sh +0 -46
  222. package/scripts/ops/chezmoi-update.sh +0 -63
  223. package/scripts/ops/heal-chezmoi.sh +0 -87
  224. package/scripts/ops/heal-system.sh +0 -129
  225. package/scripts/ops/heal-tools.sh +0 -297
  226. package/scripts/ops/heal.sh +0 -223
  227. package/scripts/ops/post-apply-repair.sh +0 -107
  228. package/scripts/ops/prewarm.sh +0 -128
  229. package/scripts/ops/release.sh +0 -262
  230. package/scripts/ops/rollback.sh +0 -604
  231. package/scripts/ops/setup.sh +0 -138
  232. package/scripts/ops/teleport.sh +0 -34
  233. package/scripts/qa/check-version-consistency.sh +0 -124
  234. package/scripts/qa/coverage-baseline.sh +0 -61
  235. package/scripts/qa/docs-coverage.sh +0 -112
  236. package/scripts/qa/examples-coverage.sh +0 -94
  237. package/scripts/qa/powershell-contract.ps1 +0 -95
  238. package/scripts/qa/reliability-audit.sh +0 -139
  239. package/scripts/qa/scorecard-snapshot.sh +0 -128
  240. package/scripts/qa/traceability-coverage.sh +0 -117
  241. package/scripts/qa/validate-examples.sh +0 -27
  242. package/scripts/qa/wsl-contract.sh +0 -12
  243. package/scripts/secrets/age-init.sh +0 -82
  244. package/scripts/secrets/create-secrets-file.sh +0 -46
  245. package/scripts/secrets/encrypt-ssh-key.sh +0 -44
  246. package/scripts/security/backup.sh +0 -58
  247. package/scripts/security/check-disclosure-key-expiry.sh +0 -111
  248. package/scripts/security/dns-doh.sh +0 -52
  249. package/scripts/security/encryption-check.sh +0 -55
  250. package/scripts/security/enforce-policies.sh +0 -335
  251. package/scripts/security/firewall.sh +0 -91
  252. package/scripts/security/lock-configs.sh +0 -67
  253. package/scripts/security/lock-screen.sh +0 -56
  254. package/scripts/security/manage-secrets.sh +0 -429
  255. package/scripts/security/ssh-cert.sh +0 -204
  256. package/scripts/security/telemetry-kill.sh +0 -51
  257. package/scripts/security/usb-safety.sh +0 -52
  258. package/scripts/theme/apply-gnome-theme.sh +0 -333
  259. package/scripts/theme/extract-heic-frames.sh +0 -115
  260. package/scripts/theme/extract-theme.py +0 -742
  261. package/scripts/theme/install-boot-logo.sh +0 -63
  262. package/scripts/theme/install-catppuccin-themes.sh +0 -371
  263. package/scripts/theme/install-cursors.sh +0 -26
  264. package/scripts/theme/install-file-icons.sh +0 -27
  265. package/scripts/theme/install-grub-theme.sh +0 -62
  266. package/scripts/theme/install-lock-icon.sh +0 -31
  267. package/scripts/theme/merge-wallpaper.sh +0 -146
  268. package/scripts/theme/rebuild-themes.sh +0 -544
  269. package/scripts/theme/switch.sh +0 -449
  270. package/scripts/theme/wallpaper-rotate.sh +0 -137
  271. package/scripts/theme/wallpaper-sync.sh +0 -690
  272. package/scripts/tools/cmatrix.sh +0 -22
  273. package/scripts/tools/detect-collisions.py +0 -103
  274. package/scripts/tools/emoji-picker.sh +0 -49
  275. package/scripts/tools/figlet-banner.sh +0 -19
  276. package/scripts/tools/log-rotate.sh +0 -31
  277. package/scripts/tools/lolcat-wrap.sh +0 -20
  278. package/scripts/tools/pipes.sh +0 -49
  279. package/scripts/tuning/linux.sh +0 -186
  280. package/scripts/tuning/macos.sh +0 -56
  281. package/scripts/uninstall.sh +0 -86
  282. package/scripts/version-sync.sh +0 -654
  283. package/templates/chezmoi-data/geekom-a9.toml.example +0 -21
  284. package/templates/chezmoi-data/mac-m1.toml.example +0 -16
  285. package/templates/chezmoi-data/mac-t2-linux.toml.example +0 -21
  286. package/templates/chezmoi-data/surface-pro-7p.toml.example +0 -21
  287. package/templates/projects/go/.github/workflows/ci.yml +0 -31
  288. package/templates/projects/go/README.md +0 -7
  289. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +0 -8
  290. package/templates/projects/go/go.mod +0 -3
  291. package/templates/projects/go/go.sum +0 -0
  292. package/templates/projects/molecule/README.md +0 -7
  293. package/templates/projects/molecule/converge.yml +0 -7
  294. package/templates/projects/molecule/molecule.yml +0 -16
  295. package/templates/projects/node/.github/workflows/ci.yml +0 -30
  296. package/templates/projects/node/README.md +0 -7
  297. package/templates/projects/node/package-lock.json +0 -12
  298. package/templates/projects/node/package.json +0 -10
  299. package/templates/projects/node/src/index.js +0 -3
  300. package/templates/projects/packer/README.md +0 -15
  301. package/templates/projects/packer/main.pkr.hcl +0 -15
  302. package/templates/projects/python/.github/workflows/ci.yml +0 -34
  303. package/templates/projects/python/README.md +0 -7
  304. package/templates/projects/python/pyproject.toml +0 -25
  305. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +0 -2
  306. package/templates/projects/python/tests/test_basic.py +0 -3
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Compat shim: the canonical script moved to tools/ci/ during the repo reorg.
5
- # Pinned reusable workflows on main still reference the old path;
6
- # this delegates so they keep working until the next pin bump.
7
- set -euo pipefail
8
- exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/tools/ci/check-copyright-headers.sh" "$@"
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Compat shim: the canonical script moved to tools/ci/ during the repo reorg.
5
- # Pinned reusable workflows on main still reference the old path;
6
- # this delegates so they keep working until the next pin bump.
7
- set -euo pipefail
8
- exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/tools/ci/check-shell-preamble.sh" "$@"
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Compat shim: the canonical script moved to tools/ci/ during the repo reorg.
5
- # Pinned reusable workflows on main still reference the old path;
6
- # this delegates so they keep working until the next pin bump.
7
- set -euo pipefail
8
- exec bash "$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)/tools/ci/guard-gitleaks-checkout.sh" "$@"
@@ -1,43 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- set -euo pipefail
5
-
6
- OUT="${1:-$HOME/.dotfiles/docs/demo/demo.gif}"
7
- DURATION="${DURATION:-30}"
8
- FPS="${FPS:-15}"
9
-
10
- record_ffmpeg() {
11
- if command -v ffmpeg >/dev/null; then
12
- echo "Recording with ffmpeg for ${DURATION}s..."
13
- if [ "$(uname -s)" = "Darwin" ]; then
14
- # macOS (AVFoundation)
15
- ffmpeg -y -t "$DURATION" -f avfoundation -i "1:none" -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
16
- else
17
- # Linux (X11)
18
- ffmpeg -y -t "$DURATION" -f x11grab -i :0.0 -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
19
- fi
20
- else
21
- echo "ffmpeg not found. Install it and retry."
22
- exit 1
23
- fi
24
- }
25
-
26
- record_wf_recorder() {
27
- if command -v wf-recorder >/dev/null; then
28
- echo "Recording with wf-recorder for ${DURATION}s..."
29
- wf-recorder -f "$OUT" -t "$DURATION"
30
- else
31
- return 1
32
- fi
33
- }
34
-
35
- if [ "$(uname -s)" = "Linux" ]; then
36
- if record_wf_recorder; then
37
- exit 0
38
- fi
39
- fi
40
-
41
- record_ffmpeg
42
-
43
- printf "Saved demo to %s\n" "$OUT"
@@ -1,163 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- ## A2A v0.3 and agent card conformance validation.
5
-
6
- set -euo pipefail
7
-
8
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
- REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
10
-
11
- # shellcheck source=../../lib/dot/ui.sh
12
- source "$SCRIPT_DIR/../../lib/dot/ui.sh"
13
-
14
- JSON_MODE=0
15
- STRICT_MODE=0
16
- while [[ $# -gt 0 ]]; do
17
- case "$1" in
18
- --json | -j)
19
- JSON_MODE=1
20
- shift
21
- ;;
22
- --strict | -s)
23
- STRICT_MODE=1
24
- shift
25
- ;;
26
- *)
27
- shift
28
- ;;
29
- esac
30
- done
31
-
32
- command -v jq >/dev/null 2>&1 || {
33
- echo "jq is required for A2A conformance checks." >&2
34
- exit 1
35
- }
36
-
37
- a2a_card="$REPO_ROOT/.well-known/agent-card.json"
38
- legacy_doc="$REPO_ROOT/.well-known/agent.json"
39
- internal_card="$REPO_ROOT/defaults/dot_config/dotfiles/agent-card.json"
40
- agent_profiles="$REPO_ROOT/defaults/dot_config/dotfiles/agent-profiles.json"
41
- status="healthy"
42
- issues=()
43
-
44
- # Check primary A2A v0.3 card
45
- if [[ ! -f "$a2a_card" ]]; then
46
- issues+=("missing:.well-known/agent-card.json")
47
- fi
48
-
49
- # Check legacy agent.json
50
- if [[ ! -f "$legacy_doc" ]]; then
51
- issues+=("missing:.well-known/agent.json")
52
- fi
53
-
54
- # Check internal card
55
- if [[ ! -f "$internal_card" ]]; then
56
- issues+=("missing:agent-card.json")
57
- fi
58
-
59
- # Check agent profiles
60
- if [[ ! -f "$agent_profiles" ]]; then
61
- issues+=("missing:agent-profiles.json")
62
- fi
63
-
64
- if [[ "${#issues[@]}" -eq 0 ]]; then
65
- # Validate A2A v0.3 card
66
- spec_version="$(jq -r '.specVersion // empty' "$a2a_card")"
67
- [[ "$spec_version" == "0.3" ]] || issues+=("specVersion:expected 0.3, got $spec_version")
68
-
69
- # Skills array
70
- jq -e '.skills | type == "array"' "$a2a_card" >/dev/null 2>&1 || issues+=("skills:missing or not array")
71
- skills_count="$(jq '.skills | length' "$a2a_card" 2>/dev/null || echo 0)"
72
- [[ "$skills_count" -gt 0 ]] || issues+=("skills:empty array")
73
-
74
- # Authentication block
75
- jq -e '.authentication' "$a2a_card" >/dev/null 2>&1 || issues+=("authentication:missing")
76
-
77
- # Signing metadata
78
- signing_method="$(jq -r '.signing.method // empty' "$a2a_card")"
79
- [[ -n "$signing_method" ]] || issues+=("signing:missing method")
80
-
81
- # Capabilities
82
- jq -e '.capabilities' "$a2a_card" >/dev/null 2>&1 || issues+=("capabilities:missing")
83
-
84
- # Protocol must be "a2a" not "a2a-ready"
85
- if jq -e '.protocols | index("a2a-ready")' "$a2a_card" >/dev/null 2>&1; then
86
- issues+=("protocols:should use 'a2a' not 'a2a-ready'")
87
- fi
88
- jq -e '.protocols | index("a2a")' "$a2a_card" >/dev/null 2>&1 || issues+=("protocols:missing 'a2a'")
89
-
90
- # Validate internal card also uses v0.3 and "a2a"
91
- internal_spec="$(jq -r '.specVersion // empty' "$internal_card")"
92
- [[ "$internal_spec" == "0.3" ]] || issues+=("internal-card:specVersion expected 0.3")
93
- if jq -e '.protocols | index("a2a-ready")' "$internal_card" >/dev/null 2>&1; then
94
- issues+=("internal-card:should use 'a2a' not 'a2a-ready'")
95
- fi
96
-
97
- # Validate legacy doc points to new card
98
- jq -e '.a2aCard' "$legacy_doc" >/dev/null 2>&1 || issues+=("legacy:missing a2aCard pointer")
99
- if jq -e '.protocols | index("a2a-ready")' "$legacy_doc" >/dev/null 2>&1; then
100
- issues+=("legacy:should use 'a2a' not 'a2a-ready'")
101
- fi
102
-
103
- # Name consistency
104
- a2a_name="$(jq -r '.name // empty' "$a2a_card")"
105
- internal_name="$(jq -r '.name // empty' "$internal_card")"
106
- legacy_name="$(jq -r '.name // empty' "$legacy_doc")"
107
- [[ "$a2a_name" == "$internal_name" ]] || issues+=("name:mismatch between a2a-card and internal card")
108
- [[ "$a2a_name" == "$legacy_name" ]] || issues+=("name:mismatch between a2a-card and legacy doc")
109
-
110
- # Default profile validation
111
- default_profile="$(jq -r '.defaultProfile // empty' "$internal_card")"
112
- if [[ -n "$default_profile" ]]; then
113
- jq -e --arg profile "$default_profile" '.profiles[$profile]' "$agent_profiles" >/dev/null 2>&1 || issues+=("default-profile:missing in agent-profiles.json")
114
- fi
115
-
116
- # Card signing in internal card
117
- jq -e '.security.cardSigning' "$internal_card" >/dev/null 2>&1 || issues+=("internal-card:missing cardSigning in security")
118
- fi
119
-
120
- if [[ "${#issues[@]}" -gt 0 ]]; then
121
- status="issues"
122
- fi
123
-
124
- # Build issues JSON safely
125
- if [[ "${#issues[@]}" -gt 0 ]]; then
126
- issues_json="$(printf '%s\n' "${issues[@]}" | jq -R . | jq -s .)"
127
- else
128
- issues_json="[]"
129
- fi
130
-
131
- payload="$(jq -n \
132
- --arg status "$status" \
133
- --arg a2a_card "$a2a_card" \
134
- --arg legacy_doc "$legacy_doc" \
135
- --arg internal_card "$internal_card" \
136
- --arg agent_profiles "$agent_profiles" \
137
- --argjson strict "$([[ "$STRICT_MODE" -eq 1 ]] && echo true || echo false)" \
138
- --argjson issues "$issues_json" \
139
- '{status: $status, strict: $strict, specVersion: "0.3", files: {a2a_card: $a2a_card, legacy_doc: $legacy_doc, internal_card: $internal_card, agent_profiles: $agent_profiles}, issues: $issues}')"
140
-
141
- if [[ "$JSON_MODE" -eq 1 ]]; then
142
- printf '%s\n' "$payload"
143
- else
144
- ui_dot_banner "AI and Agents"
145
- ui_header "A2A v0.3 Conformance"
146
- if [[ "$status" == "healthy" ]]; then
147
- ui_ok "Status" "healthy"
148
- ui_ok "Spec version" "0.3"
149
- ui_ok "A2A card" "$a2a_card"
150
- ui_ok "Legacy doc" "$legacy_doc"
151
- ui_ok "Internal card" "$internal_card"
152
- else
153
- ui_warn "Status" "issues"
154
- while IFS= read -r issue; do
155
- [[ -n "$issue" ]] || continue
156
- ui_warn "Issue" "$issue"
157
- done < <(printf '%s' "$payload" | jq -r '.issues[]')
158
- fi
159
- fi
160
-
161
- if [[ "$STRICT_MODE" -eq 1 && "$status" != "healthy" ]]; then
162
- exit 1
163
- fi
@@ -1,138 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Alias governance checks:
5
- # - duplicate alias names
6
- # - risky overrides must be gated
7
- # - no hardcoded /Users paths
8
-
9
- set -euo pipefail
10
-
11
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
- manifest_script="$SCRIPT_DIR/aliases-manifest.sh"
13
- deprecations_file="$SCRIPT_DIR/../dot/data/alias-deprecations.tsv"
14
- policy="${DOTFILES_ALIAS_POLICY:-standard}"
15
- if [[ -n "${CI:-}" && "${DOTFILES_ALIAS_POLICY:-}" == "" ]]; then
16
- policy="strict"
17
- fi
18
-
19
- if [[ ! -x "$manifest_script" ]]; then
20
- echo "ERROR: aliases-manifest.sh not found or not executable" >&2
21
- exit 1
22
- fi
23
-
24
- tmp_manifest="$(umask 077 && mktemp)"
25
- trap 'rm -f "$tmp_manifest"' EXIT
26
-
27
- bash "$manifest_script" >"$tmp_manifest"
28
-
29
- errors=0
30
-
31
- echo "Alias Governance"
32
- echo ""
33
- echo "Policy: $policy"
34
- echo ""
35
-
36
- version_ge() {
37
- local a="${1#v}" b="${2#v}"
38
- local IFS=.
39
- local i
40
- read -r -a av <<<"$a"
41
- read -r -a bv <<<"$b"
42
- for i in 0 1 2; do
43
- local ai="${av[$i]:-0}"
44
- local bi="${bv[$i]:-0}"
45
- ((10#$ai > 10#$bi)) && return 0
46
- ((10#$ai < 10#$bi)) && return 1
47
- done
48
- return 0
49
- }
50
-
51
- repo_version="0.0.0"
52
- if [[ -f "$SCRIPT_DIR/../../package.json" ]]; then
53
- repo_version="$(sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' "$SCRIPT_DIR/../../package.json" | head -1)"
54
- fi
55
- repo_version="${repo_version:-0.0.0}"
56
-
57
- # 1) Duplicate alias names
58
- dupes="$(awk -F'\t' '{count[$1]++} END {for (k in count) if (count[k] > 1) print k}' "$tmp_manifest" | sort)"
59
- if [[ -n "$dupes" ]]; then
60
- if [[ "$policy" == "strict" ]]; then
61
- echo "ERROR: duplicate alias names detected:"
62
- printf "%s\n" "$dupes" | sed 's/^/ - /'
63
- errors=$((errors + 1))
64
- else
65
- echo "WARN: duplicate alias names detected (review recommended):"
66
- printf "%s\n" "$dupes" | sed 's/^/ - /'
67
- fi
68
- else
69
- echo "OK: no duplicate alias names"
70
- fi
71
-
72
- # 2) Risky overrides must be gated
73
- while IFS=$'\t' read -r name _value file _line; do
74
- case "$name" in
75
- cd | sudo | su | cp | mv | rm | mkdir | alias)
76
- # GNU coreutils aliases are intentionally centralized overrides.
77
- if [[ "$file" == *"/aliases/gnu/"* ]]; then
78
- continue
79
- fi
80
- if ! rg -q 'DOTFILES_(ENABLE|SAFE|ALIAS)' "$file"; then
81
- echo "ERROR: risky override '$name' in $file is not gated by a DOTFILES_* flag"
82
- errors=$((errors + 1))
83
- fi
84
- ;;
85
- esac
86
- done <"$tmp_manifest"
87
-
88
- if [[ $errors -eq 0 ]]; then
89
- echo "OK: risky overrides are gated"
90
- fi
91
-
92
- # 3) Hardcoded /Users path check (alias value only)
93
- hardcoded="$(awk -F'\t' '$2 ~ /\/Users\// {print $1 "\t" $2 "\t" $3 ":" $4}' "$tmp_manifest")"
94
- if [[ -n "$hardcoded" ]]; then
95
- echo "ERROR: hardcoded /Users paths detected in aliases:"
96
- printf "%s\n" "$hardcoded" | sed 's/^/ - /'
97
- errors=$((errors + 1))
98
- else
99
- echo "OK: no hardcoded /Users paths in aliases"
100
- fi
101
-
102
- # 4) Deprecation window enforcement
103
- if [[ -f "$deprecations_file" ]]; then
104
- expired_hits=0
105
- while IFS=$'\t' read -r alias_name replacement remove_in; do
106
- [[ -z "${alias_name:-}" ]] && continue
107
- [[ "${alias_name:0:1}" == "#" ]] && continue
108
- if version_ge "$repo_version" "$remove_in"; then
109
- alias_found=0
110
- if awk -F'\t' -v n="$alias_name" '$1==n{found=1} END{exit(found?0:1)}' "$tmp_manifest"; then
111
- alias_found=1
112
- fi
113
- function_found=0
114
- if rg -q --glob '*.sh' --glob '*.aliases.sh' --glob '*.tmpl' "^[[:space:]]*(function[[:space:]]+)?${alias_name}[[:space:]]*\\(\\)" "$SCRIPT_DIR/../../defaults/.chezmoitemplates/aliases" "$SCRIPT_DIR/../../scripts/dot"; then
115
- function_found=1
116
- fi
117
- if [[ $alias_found -eq 1 || $function_found -eq 1 ]]; then
118
- [[ $expired_hits -eq 0 ]] && echo "ERROR: expired deprecated aliases still present:"
119
- echo " - $alias_name (remove_in=$remove_in, replacement=$replacement)"
120
- expired_hits=$((expired_hits + 1))
121
- fi
122
- fi
123
- done < <(cut -f1-3 "$deprecations_file")
124
- if [[ $expired_hits -gt 0 ]]; then
125
- errors=$((errors + 1))
126
- else
127
- echo "OK: no expired deprecated aliases (repo version: v$repo_version)"
128
- fi
129
- fi
130
-
131
- echo ""
132
- if [[ $errors -eq 0 ]]; then
133
- echo "Alias governance checks passed."
134
- exit 0
135
- fi
136
-
137
- echo "Alias governance checks failed: $errors issue(s)." >&2
138
- exit 1
@@ -1,74 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- set -euo pipefail
5
-
6
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
- # shellcheck source=../../lib/dot/utils.sh
8
- # shellcheck disable=SC1091
9
- source "$SCRIPT_DIR/../../lib/dot/utils.sh"
10
-
11
- src_dir="$(require_source_dir)"
12
- manifest="$src_dir/scripts/diagnostics/aliases-manifest.sh"
13
- if [[ ! -x "$manifest" ]]; then
14
- echo "Alias manifest not found: $manifest" >&2
15
- exit 1
16
- fi
17
-
18
- cat <<'HEADER'
19
- # Alias Cheatsheet
20
-
21
- Auto-generated from alias manifest.
22
-
23
- ## Core shortcuts
24
- HEADER
25
-
26
- # Core list we care about (preserve ordering).
27
- core_aliases=(c q e h _ i l ll la lr lra lt lta a d)
28
-
29
- tmp_manifest="$(umask 077 && mktemp)"
30
- trap 'rm -f "$tmp_manifest"' EXIT
31
- bash "$manifest" >"$tmp_manifest"
32
-
33
- pick_alias() {
34
- local name="$1"
35
- shift
36
- local value=""
37
- local pattern
38
- while [[ $# -gt 0 ]]; do
39
- pattern="$1"
40
- value="$(awk -F$'\t' -v key="$name" -v pat="$pattern" '$1==key && $3 ~ pat {print $2; exit}' "$tmp_manifest")"
41
- [[ -n "$value" ]] && {
42
- printf '%s\n' "$value"
43
- return 0
44
- }
45
- shift
46
- done
47
- value="$(awk -F$'\t' -v key="$name" '$1==key {print $2; exit}' "$tmp_manifest")"
48
- [[ -n "$value" ]] && printf '%s\n' "$value"
49
- }
50
-
51
- for a in "${core_aliases[@]}"; do
52
- case "$a" in
53
- a)
54
- line="$(pick_alias "$a" "/ai/")"
55
- ;;
56
- d)
57
- line="$(pick_alias "$a" "/system/" "/configuration/" "/docker/")"
58
- ;;
59
- *)
60
- line="$(pick_alias "$a")"
61
- ;;
62
- esac
63
- if [[ -n "$line" ]]; then
64
- printf '%s\n' "- \`$a\` $line"
65
- fi
66
- done
67
-
68
- cat <<'FOOTER'
69
-
70
- ## Notes
71
-
72
- - Regenerate: `dot aliases cheatsheet`
73
- - Apply changes: `chezmoi apply`
74
- FOOTER
@@ -1,77 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Emit alias manifest as TSV:
5
- # name<TAB>value<TAB>file<TAB>line
6
-
7
- set -euo pipefail
8
-
9
- usage() {
10
- cat <<'EOF'
11
- Usage: aliases-manifest.sh [chezmoi-source-dir]
12
-
13
- Emit alias definitions as tab-separated rows:
14
- name<TAB>value<TAB>file<TAB>line
15
- EOF
16
- }
17
-
18
- resolve_source_dir() {
19
- if [[ -n "${CHEZMOI_SOURCE_DIR:-}" && -d "${CHEZMOI_SOURCE_DIR}" ]]; then
20
- printf "%s\n" "${CHEZMOI_SOURCE_DIR}"
21
- return
22
- fi
23
- if [[ -d "$HOME/.dotfiles" ]]; then
24
- printf "%s\n" "$HOME/.dotfiles"
25
- return
26
- fi
27
- if [[ -d "$HOME/.local/share/chezmoi" ]]; then
28
- printf "%s\n" "$HOME/.local/share/chezmoi"
29
- return
30
- fi
31
- return 1
32
- }
33
-
34
- # Descend into the chezmoi source subdir (per `.chezmoiroot`) if
35
- # present — post-Phase-4b (v0.2.503) the aliases + functions trees
36
- # live under `defaults/.chezmoitemplates/`, not at the repo root.
37
- # See `resolve_chezmoi_source_dir` in lib/dot/utils.sh.
38
- resolve_chezmoi_source_dir() {
39
- local root="$1"
40
- if [[ -f "$root/.chezmoiroot" ]]; then
41
- local sub
42
- sub="$(head -1 "$root/.chezmoiroot" | tr -d '[:space:]')"
43
- if [[ -n "$sub" && -d "$root/$sub" ]]; then
44
- printf "%s\n" "$root/$sub"
45
- return
46
- fi
47
- fi
48
- printf "%s\n" "$root"
49
- }
50
-
51
- case "${1:-}" in
52
- -h | --help)
53
- usage
54
- exit 0
55
- ;;
56
- -*)
57
- printf 'Unknown option: %s\n' "$1" >&2
58
- usage >&2
59
- exit 2
60
- ;;
61
- esac
62
-
63
- src_root="${1:-$(resolve_source_dir)}"
64
- src_dir="$(resolve_chezmoi_source_dir "$src_root")"
65
-
66
- alias_pattern='^[[:space:]]*alias[[:space:]]+[A-Za-z0-9_.:-]+='
67
- conditional_alias_pattern='^[[:space:]]*[^#"'\'']*&&[[:space:]]*alias[[:space:]]+[A-Za-z0-9_.:-]+='
68
- search_paths=(
69
- "$src_dir/.chezmoitemplates/aliases"
70
- "$src_dir/.chezmoitemplates/functions"
71
- )
72
-
73
- if command -v rg >/dev/null 2>&1; then
74
- rg -n -e "$alias_pattern" -e "$conditional_alias_pattern" "${search_paths[@]}"
75
- else
76
- grep -rEn -e "$alias_pattern" -e "$conditional_alias_pattern" "${search_paths[@]}"
77
- fi | sed -E 's#^([^:]+):([0-9]+):.*alias[[:space:]]+([A-Za-z0-9_.:-]+)=(.*)$#\3\t\4\t\1\t\2#'