@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,556 +0,0 @@
1
- #!/usr/bin/env bash
2
- # SPDX-License-Identifier: MIT
3
- # Copyright (c) 2015-2026 Sebastien Rousseau
4
- # Dotfiles CLI - Tools Commands
5
- # tools, new, packages, log-rotate, aliases, alias-check, env, profile
6
-
7
- set -euo pipefail
8
-
9
- _TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
- # shellcheck source=../../../lib/dot/utils.sh
11
- source "$_TOOLS_DIR/../../../lib/dot/utils.sh"
12
- # shellcheck source=aliases.sh
13
- source "$_TOOLS_DIR/aliases.sh"
14
-
15
- # Cross-platform sed in-place (BSD vs GNU)
16
- sed_in_place() {
17
- if sed --version >/dev/null 2>&1; then
18
- sed -i "$@" # GNU
19
- else
20
- sed -i '' "$@" # BSD (macOS)
21
- fi
22
- }
23
-
24
- dot_ui_command_banner "Tools" "${1:-}"
25
-
26
- ensure_line_in_file() {
27
- local file="$1"
28
- local line="$2"
29
- if ! grep -Fqx "$line" "$file" 2>/dev/null; then
30
- printf "%s\n" "$line" >>"$file"
31
- fi
32
- }
33
-
34
- apply_template_security_baseline() {
35
- local dest="$1"
36
- local template_lang="$2"
37
-
38
- # Baseline repo hygiene defaults
39
- if [[ ! -f "$dest/.editorconfig" ]]; then
40
- cat >"$dest/.editorconfig" <<'EOF'
41
- root = true
42
-
43
- [*]
44
- charset = utf-8
45
- end_of_line = lf
46
- insert_final_newline = true
47
- indent_style = space
48
- indent_size = 2
49
- trim_trailing_whitespace = true
50
- EOF
51
- fi
52
-
53
- if [[ ! -f "$dest/.gitattributes" ]]; then
54
- cat >"$dest/.gitattributes" <<'EOF'
55
- * text=auto eol=lf
56
- *.sh text eol=lf
57
- *.yml text eol=lf
58
- *.yaml text eol=lf
59
- EOF
60
- fi
61
-
62
- if [[ ! -f "$dest/.gitignore" ]]; then
63
- : >"$dest/.gitignore"
64
- fi
65
- ensure_line_in_file "$dest/.gitignore" ".env"
66
- ensure_line_in_file "$dest/.gitignore" ".env.*"
67
- ensure_line_in_file "$dest/.gitignore" "*.pem"
68
- ensure_line_in_file "$dest/.gitignore" "*.key"
69
- ensure_line_in_file "$dest/.gitignore" "*.p12"
70
- ensure_line_in_file "$dest/.gitignore" "*.agekey"
71
-
72
- if [[ ! -f "$dest/SECURITY.md" ]]; then
73
- cat >"$dest/SECURITY.md" <<'EOF'
74
- # Security Policy
75
-
76
- ## Reporting
77
-
78
- Do not disclose vulnerabilities publicly before a fix is available.
79
- Open a private security advisory or contact maintainers directly.
80
-
81
- ## Baseline Controls
82
-
83
- - No secrets in source control.
84
- - Use environment variables for API keys/tokens.
85
- - Keep dependencies and lockfiles up to date.
86
- - Enable secret scanning in CI.
87
- EOF
88
- fi
89
-
90
- mkdir -p "$dest/.github/workflows"
91
- if [[ ! -f "$dest/.github/workflows/security.yml" ]]; then
92
- cat >"$dest/.github/workflows/security.yml" <<'EOF'
93
- name: Security Baseline
94
-
95
- on:
96
- pull_request:
97
- push:
98
- branches: [main, master]
99
-
100
- permissions:
101
- contents: read
102
-
103
- jobs:
104
- secrets:
105
- runs-on: ubuntu-latest
106
- timeout-minutes: 10
107
- steps:
108
- - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
109
- - uses: gitleaks/gitleaks-action@ff98106e4c7b2bc287b24eaf42907196329070c7 # v2
110
- env:
111
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
112
- - uses: trufflesecurity/trufflehog@6961f2bace57ab32b23b3ba40f8f420f6bc7e004 # v3.93.3
113
- with:
114
- extra_args: --only-verified
115
- EOF
116
- fi
117
-
118
- # Best-effort lockfile generation to improve reproducibility.
119
- case "$template_lang" in
120
- node)
121
- if has_command npm && [[ -f "$dest/package.json" ]] && [[ ! -f "$dest/package-lock.json" ]]; then
122
- (cd "$dest" && npm install --package-lock-only --ignore-scripts --silent >/dev/null 2>&1) || true
123
- fi
124
- ;;
125
- python)
126
- if has_command uv && [[ -f "$dest/pyproject.toml" ]] && [[ ! -f "$dest/uv.lock" ]]; then
127
- (cd "$dest" && uv lock >/dev/null 2>&1) || true
128
- fi
129
- ;;
130
- go)
131
- if has_command go && [[ -f "$dest/go.mod" ]]; then
132
- (cd "$dest" && go mod tidy >/dev/null 2>&1) || true
133
- fi
134
- ;;
135
- esac
136
- }
137
-
138
- show_system_package_managers() {
139
- if has_command brew; then
140
- local brew_version brew_formulae brew_casks
141
- brew_version=$(brew --version | head -1)
142
- brew_formulae=$(brew list --formula 2>/dev/null | wc -l | tr -d ' ')
143
- brew_casks=$(brew list --cask 2>/dev/null | wc -l | tr -d ' ')
144
- echo " Homebrew: $brew_version"
145
- echo " Formulae: $brew_formulae"
146
- echo " Casks: $brew_casks"
147
- fi
148
- if has_command apt; then
149
- local apt_version apt_packages
150
- apt_version=$(apt --version 2>/dev/null | head -1 || echo 'installed')
151
- apt_packages=$(dpkg -l 2>/dev/null | grep -c '^ii' || echo 'N/A')
152
- echo " APT: $apt_version"
153
- echo " Packages: $apt_packages"
154
- fi
155
- if has_command dnf; then
156
- echo " DNF: $(dnf --version 2>/dev/null | head -1 || echo 'installed')"
157
- fi
158
- if has_command pacman; then
159
- local pacman_packages
160
- pacman_packages=$(pacman -Q 2>/dev/null | wc -l | tr -d ' ')
161
- echo " Pacman: $(pacman --version | head -1)"
162
- echo " Packages: $pacman_packages"
163
- fi
164
- if has_command nix; then
165
- echo " Nix: $(nix --version)"
166
- fi
167
- }
168
-
169
- show_language_package_managers() {
170
- if has_command npm; then
171
- local npm_globals
172
- npm_globals=$(npm list -g --depth=0 2>/dev/null | grep -c '├──\|└──' || echo 'N/A')
173
- echo " npm: $(npm --version)"
174
- echo " Global packages: $npm_globals"
175
- fi
176
- if has_command pnpm; then
177
- echo " pnpm: $(pnpm --version)"
178
- fi
179
- if has_command bun; then
180
- echo " Bun: $(bun --version)"
181
- fi
182
- if has_command cargo; then
183
- local cargo_installed
184
- cargo_installed=$(cargo install --list 2>/dev/null | grep -c ':$' || echo 'N/A')
185
- echo " Cargo: $(cargo --version | cut -d' ' -f2)"
186
- echo " Installed: $cargo_installed"
187
- fi
188
- if has_command pip3; then
189
- echo " pip: $(pip3 --version | cut -d' ' -f2)"
190
- fi
191
- if has_command pipx; then
192
- local pipx_installed pipx_list_out
193
- # `pipx list --short` returns non-zero when any installed package
194
- # has a broken interpreter (common). Under `set -euo pipefail` a
195
- # naive `local x=$(pipx …)` cascades and kills `dot packages`
196
- # mid-output. Capture the pipeline separately so we can fall back
197
- # cleanly without stray "N/A" lines from pipe-with-|| tricks.
198
- if pipx_list_out="$(pipx list --short 2>/dev/null)"; then
199
- pipx_installed="$(printf '%s' "$pipx_list_out" | wc -l | tr -d ' ')"
200
- else
201
- pipx_installed="N/A"
202
- fi
203
- echo " pipx: $(pipx --version)"
204
- echo " Installed: $pipx_installed"
205
- fi
206
- if has_command gem; then
207
- echo " RubyGems: $(gem --version)"
208
- fi
209
- if has_command go; then
210
- echo " Go: $(go version | cut -d' ' -f3)"
211
- fi
212
- }
213
-
214
- cmd_setup() {
215
- run_script "scripts/ops/setup.sh" "Setup script" "$@"
216
- }
217
-
218
- cmd_tools() {
219
- local src_dir subcommand
220
- src_dir="$(resolve_source_dir)"
221
- subcommand="${1:-}"
222
-
223
- if [ "$subcommand" = "install" ]; then
224
- if ! has_command nix; then
225
- ui_err "Nix" "not installed"
226
- echo ""
227
- ui_header "Install Nix"
228
- echo " Follow the verified installer instructions:"
229
- echo " https://nixos.org/download/"
230
- echo ""
231
- ui_info "Or" "use Homebrew/apt for individual tools"
232
- exit 1
233
- fi
234
- shift
235
- # Validate any tool name arguments
236
- for arg in "$@"; do
237
- [[ "$arg" == -* ]] && continue
238
- validate_name "$arg" "tool name"
239
- done
240
- if [ -n "$src_dir" ] && [ -f "$src_dir/nix/flake.nix" ]; then
241
- ui_info "Entering" "Nix development shell"
242
- exec nix develop "$src_dir/nix" "$@"
243
- else
244
- ui_err "Nix flake" "not found in source directory"
245
- exit 1
246
- fi
247
- elif [ "$subcommand" = "docs" ]; then
248
- if [ -n "$src_dir" ] && [ -f "$src_dir/docs/TOOLS.md" ]; then
249
- exec cat "$src_dir/docs/TOOLS.md"
250
- elif [ -n "$src_dir" ] && [ -f "$src_dir/docs/UTILS.md" ]; then
251
- exec cat "$src_dir/docs/UTILS.md"
252
- fi
253
- ui_err "Docs" "TOOLS.md not found"
254
- exit 1
255
- else
256
- ui_header "Dot Tools"
257
- echo ""
258
- ui_info "Usage" "dot tools [command]"
259
- echo ""
260
- ui_header "Commands"
261
- ui_ok "(none)" "Show tools documentation"
262
- ui_ok "install" "Enter Nix development shell with all tools"
263
- ui_ok "docs" "Show full tools markdown documentation"
264
- echo ""
265
- ui_header "Quick Reference"
266
- ui_ok "dot sync" "Apply dotfiles"
267
- ui_ok "dot update" "Pull latest changes and apply"
268
- ui_ok "dot doctor" "Run health checks"
269
- ui_ok "dot verify" "Run post-merge verification checks"
270
- ui_ok "dot keys" "Show keybindings catalog"
271
- ui_ok "dot learn" "Interactive tour"
272
- fi
273
- }
274
-
275
- cmd_new() {
276
- local template_lang="${1:-}"
277
- local project_name="${2:-}"
278
-
279
- if [ -z "$template_lang" ] || [ -z "$project_name" ]; then
280
- echo "Usage: dot new <lang> <name>"
281
- echo "Available templates: python, go, node, packer, molecule"
282
- exit 1
283
- fi
284
-
285
- # Validate inputs to prevent path traversal
286
- if [[ ! "$template_lang" =~ ^[a-zA-Z0-9_-]+$ ]]; then
287
- die "Invalid template name: $template_lang"
288
- fi
289
- if [[ ! "$project_name" =~ ^[a-zA-Z0-9_.-]+$ ]]; then
290
- die "Invalid project name: $project_name"
291
- fi
292
-
293
- local src_dir
294
- src_dir="$(require_source_dir)"
295
- local template_dir="$src_dir/templates/projects/$template_lang"
296
-
297
- if [ ! -d "$template_dir" ]; then
298
- echo "Unknown template: $template_lang"
299
- echo "Available templates: python, go, node, packer, molecule"
300
- exit 1
301
- fi
302
-
303
- # Pre-flight: verify Python is available before creating any files
304
- local python_cmd=""
305
- if has_command python3; then
306
- python_cmd="python3"
307
- elif has_command python; then
308
- python_cmd="python"
309
- else
310
- die "python3 is required to render templates."
311
- fi
312
-
313
- local dest="$PWD/$project_name"
314
- if [ -e "$dest" ]; then
315
- die "Destination exists: $dest"
316
- fi
317
-
318
- mkdir -p "$dest"
319
- cp -R "$template_dir/." "$dest"
320
-
321
- # Rename directories
322
- find "$dest" -depth -name "__PROJECT_NAME__" -print0 | while IFS= read -r -d '' path; do
323
- local parent
324
- parent="$(dirname "$path")"
325
- mv "$path" "$parent/$project_name"
326
- done
327
-
328
- # Render template placeholders
329
- find "$dest" -type f -print0 | while IFS= read -r -d '' file; do
330
- $python_cmd - "$file" "$project_name" <<'PY'
331
- import sys
332
- path = sys.argv[1]
333
- name = sys.argv[2]
334
- with open(path, "r", encoding="utf-8") as f:
335
- data = f.read()
336
- data = data.replace("__PROJECT_NAME__", name)
337
- with open(path, "w", encoding="utf-8") as f:
338
- f.write(data)
339
- PY
340
- done
341
-
342
- apply_template_security_baseline "$dest" "$template_lang"
343
-
344
- echo "Created $template_lang project at $dest"
345
- }
346
-
347
- cmd_packages() {
348
- ui_header "Package Managers"
349
- echo ""
350
- show_system_package_managers
351
- echo ""
352
- ui_header "Language Package Managers"
353
- show_language_package_managers
354
- }
355
-
356
- cmd_log_rotate() {
357
- run_script "scripts/tools/log-rotate.sh" "Log rotation script" "$@"
358
- }
359
-
360
- cmd_env_mise() {
361
- # `dot env emit` is a separate sub-handler — it doesn't need mise
362
- # at command-time, only when actually invoked (the script checks).
363
- if [[ "${1:-}" == "emit" ]]; then
364
- shift
365
- # shellcheck source=./env-emit.sh
366
- source "$(require_source_dir)/scripts/dot/commands/env-emit.sh"
367
- dot_env_emit "$@"
368
- return $?
369
- fi
370
-
371
- if ! has_command mise; then
372
- ui_err "mise not installed (required for dot env)"
373
- exit 1
374
- fi
375
- case "${1:-list}" in
376
- list | ls)
377
- if has_command jq; then
378
- ui_table_begin "Tool" "Version" "Source" "Requested"
379
- while IFS=$'\t' read -r tool ver source req; do
380
- ui_table_add "$tool" "$ver" "${source/$HOME/\~}" "$req"
381
- done < <(mise ls --json 2>/dev/null | jq -r '
382
- to_entries[] as $t
383
- | $t.value[]
384
- | [
385
- $t.key,
386
- (.version // "-"),
387
- (.source.path // ""),
388
- (.requested_version // "")
389
- ]
390
- | @tsv
391
- ')
392
- ui_table_end
393
- else
394
- mise ls
395
- fi
396
- # Surface orphan installs (tool versions on disk that no active config
397
- # claims). `--dry-run-code` exits 1 iff there is something to prune;
398
- # the call is fast (no I/O beyond reading the tracked-configs index).
399
- if mise prune --dry-run-code --quiet >/dev/null 2>&1; then
400
- :
401
- else
402
- echo ""
403
- ui_warn "orphan installs" "tool versions on disk are not requested by any config"
404
- ui_info "to clean" "run 'dot env prune' (dry-run) or 'dot env prune --yes' to commit"
405
- fi
406
- ;;
407
- prune)
408
- shift
409
- local commit=0
410
- for arg in "$@"; do
411
- case "$arg" in
412
- --yes | -y) commit=1 ;;
413
- esac
414
- done
415
- if ((commit)); then
416
- mise prune
417
- else
418
- ui_info "dry-run" "showing what 'mise prune' would remove (pass --yes to commit)"
419
- echo ""
420
- mise prune --dry-run
421
- echo ""
422
- ui_info "next" "re-run with 'dot env prune --yes' to actually uninstall"
423
- fi
424
- ;;
425
- install)
426
- shift
427
- # Validate tool names to prevent injection
428
- for arg in "$@"; do
429
- [[ "$arg" == -* ]] && continue
430
- validate_name "$arg" "tool name"
431
- done
432
- mise install "$@"
433
- ;;
434
- use)
435
- shift
436
- for arg in "$@"; do
437
- [[ "$arg" == -* ]] && continue
438
- validate_name "$arg" "tool name"
439
- done
440
- mise use "$@"
441
- ;;
442
- *) mise "$@" ;;
443
- esac
444
- }
445
-
446
- cmd_profile() {
447
- local data_file
448
- data_file="$(resolve_chezmoi_source_dir)/.chezmoidata.toml"
449
- if [[ ! -f "$data_file" ]]; then
450
- die ".chezmoidata.toml not found"
451
- fi
452
- case "${1:-show}" in
453
- show)
454
- ui_header "Dotfiles Profile"
455
- local profile_val
456
- profile_val="$(grep '^profile' "$data_file" | head -1 | sed 's/.*=\s*"\(.*\)"/\1/')"
457
- ui_info "Profile" "${profile_val:-default}"
458
- echo ""
459
- ui_section "Feature Flags"
460
- grep -A 100 '^\[features\]' "$data_file" | tail -n +2 | while IFS= read -r line; do
461
- [[ "$line" =~ ^\[ ]] && break
462
- [[ -z "$line" || "$line" =~ ^# ]] && continue
463
- local key val
464
- key="${line%%=*}"
465
- key="${key// /}"
466
- val="${line#*=}"
467
- val="${val// /}"
468
- val="${val//\"/}"
469
- ui_info "$key" "$val"
470
- done
471
- ;;
472
- set)
473
- shift
474
- local new_profile="${1:-}"
475
- if [[ -z "$new_profile" ]]; then
476
- die "Usage: dot profile set <name>"
477
- fi
478
- if grep -q '^profile' "$data_file"; then
479
- sed_in_place "s/^profile = \".*\"/profile = \"$new_profile\"/" "$data_file"
480
- else
481
- sed_in_place "1a profile = \"$new_profile\"" "$data_file"
482
- fi
483
- ui_info "Profile" "Set to '$new_profile'. Run 'dot sync' to apply."
484
- ;;
485
- *)
486
- die "Unknown profile subcommand: ${1:-}. Use 'show' or 'set'."
487
- ;;
488
- esac
489
- }
490
-
491
- # Dispatch — aliases and alias-check are defined in aliases.sh (sourced above)
492
- case "${1:-}" in
493
- --help | -h | help)
494
- cat <<'EOF'
495
- Usage: tools.sh <command> [args...]
496
-
497
- Commands:
498
- tools, alias-check, new, packages, log-rotate, setup, aliases, env,
499
- profile, lint
500
- EOF
501
- ;;
502
- "")
503
- cat <<'EOF'
504
- Usage: tools.sh <command> [args...]
505
-
506
- Commands:
507
- tools, alias-check, new, packages, log-rotate, setup, aliases, env,
508
- profile, lint
509
- EOF
510
- exit 1
511
- ;;
512
- tools)
513
- shift
514
- cmd_tools "$@"
515
- ;;
516
- alias-check)
517
- shift
518
- cmd_alias_check "$@"
519
- ;;
520
- new)
521
- shift
522
- cmd_new "$@"
523
- ;;
524
- packages)
525
- shift
526
- cmd_packages "$@"
527
- ;;
528
- log-rotate)
529
- shift
530
- cmd_log_rotate "$@"
531
- ;;
532
- setup)
533
- shift
534
- cmd_setup "$@"
535
- ;;
536
- aliases)
537
- shift
538
- cmd_aliases "$@"
539
- ;;
540
- env)
541
- shift
542
- cmd_env_mise "$@"
543
- ;;
544
- profile)
545
- shift
546
- cmd_profile "$@"
547
- ;;
548
- lint)
549
- shift
550
- exec bash "$(require_source_dir)/scripts/dot/commands/lint.sh" lint "$@"
551
- ;;
552
- *)
553
- echo "Unknown tools command: ${1:-}" >&2
554
- exit 1
555
- ;;
556
- esac
@@ -1,2 +0,0 @@
1
- # alias replacement remove_in note
2
- dlogsf dklf v0.2.487 Removed duplicate logs-follow alias