@sebastienrousseau/dotfiles 0.2.503 → 0.2.505

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 (132) hide show
  1. package/CHANGELOG.md +86 -1
  2. package/README.md +5 -5
  3. package/docs/COPYRIGHT +1 -1
  4. package/docs/OPENCODE.md +1 -1
  5. package/docs/index.md +2 -2
  6. package/docs/interop/A2A.md +2 -2
  7. package/docs/manual/00-introduction.md +1 -1
  8. package/docs/manual/02-tutorials/01-first-install.md +1 -1
  9. package/docs/operations/RELEASE_PIPELINE.md +3 -3
  10. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +6 -6
  11. package/docs/security/AUTOMATION_SECRETS.md +1 -1
  12. package/docs/security/MCP_POLICY.md +4 -4
  13. package/docs/security/SECURITY_CHECKLIST.md +1 -1
  14. package/docs/security/SOUP_REGISTER.md +4 -4
  15. package/install.sh +98 -6
  16. package/package.json +1 -1
  17. package/scripts/README.md +3 -3
  18. package/scripts/ci/check-copyright-headers.sh +3 -2
  19. package/scripts/ci/check-shell-preamble.sh +3 -2
  20. package/scripts/ci/guard-gitleaks-checkout.sh +3 -2
  21. package/scripts/demo/record.sh +2 -1
  22. package/scripts/diagnostics/a2a-conformance.sh +2 -1
  23. package/scripts/diagnostics/alias-governance.sh +2 -1
  24. package/scripts/diagnostics/aliases-cheatsheet.sh +2 -1
  25. package/scripts/diagnostics/aliases-manifest.sh +2 -1
  26. package/scripts/diagnostics/benchmark.sh +3 -2
  27. package/scripts/diagnostics/conflicts.sh +2 -1
  28. package/scripts/diagnostics/doctor-unified.sh +3 -2
  29. package/scripts/diagnostics/doctor.sh +2 -1
  30. package/scripts/diagnostics/drift-dashboard.sh +2 -1
  31. package/scripts/diagnostics/health.sh +2 -1
  32. package/scripts/diagnostics/history-analysis.sh +2 -1
  33. package/scripts/diagnostics/mcp-doctor.sh +2 -1
  34. package/scripts/diagnostics/perf.sh +3 -2
  35. package/scripts/diagnostics/scorecard.sh +2 -1
  36. package/scripts/diagnostics/secret-governance.sh +2 -1
  37. package/scripts/diagnostics/security-score.sh +25 -5
  38. package/scripts/diagnostics/smoke-test.sh +2 -1
  39. package/scripts/diagnostics/snapshot.sh +2 -1
  40. package/scripts/diagnostics/verify.sh +2 -1
  41. package/scripts/diagnostics/verify_state.sh +2 -1
  42. package/scripts/diagnostics/version-locks.sh +13 -2
  43. package/scripts/diagnostics/workstation-attestation.sh +2 -1
  44. package/scripts/dot/commands/agent.sh +2 -1
  45. package/scripts/dot/commands/agents.sh +2 -1
  46. package/scripts/dot/commands/ai.sh +19 -33
  47. package/scripts/dot/commands/aliases.sh +2 -1
  48. package/scripts/dot/commands/appearance.sh +2 -1
  49. package/scripts/dot/commands/core.sh +2 -1
  50. package/scripts/dot/commands/diagnostics.sh +2 -1
  51. package/scripts/dot/commands/env-emit.sh +2 -1
  52. package/scripts/dot/commands/fleet.sh +12 -6
  53. package/scripts/dot/commands/init.sh +2 -1
  54. package/scripts/dot/commands/lint.sh +2 -1
  55. package/scripts/dot/commands/manual.sh +2 -1
  56. package/scripts/dot/commands/meta.sh +2 -1
  57. package/scripts/dot/commands/patterns.sh +2 -1
  58. package/scripts/dot/commands/registry.sh +2 -1
  59. package/scripts/dot/commands/restore.sh +2 -1
  60. package/scripts/dot/commands/secrets.sh +2 -1
  61. package/scripts/dot/commands/security.sh +2 -1
  62. package/scripts/dot/commands/tools.sh +2 -1
  63. package/scripts/fonts/install-nerd-fonts.sh +2 -1
  64. package/scripts/fonts/patch-fonts.sh +2 -1
  65. package/scripts/git-hooks/install.sh +2 -1
  66. package/scripts/git-hooks/pre-commit-audit.sh +4 -3
  67. package/scripts/lib/secrets_provider.sh +2 -1
  68. package/scripts/ops/ai-setup.sh +2 -1
  69. package/scripts/ops/bundle.sh +3 -2
  70. package/scripts/ops/chaos.sh +2 -1
  71. package/scripts/ops/chezmoi-apply.sh +19 -5
  72. package/scripts/ops/chezmoi-diff.sh +2 -1
  73. package/scripts/ops/chezmoi-remove.sh +2 -1
  74. package/scripts/ops/chezmoi-update.sh +2 -1
  75. package/scripts/ops/heal-chezmoi.sh +2 -1
  76. package/scripts/ops/heal-system.sh +2 -1
  77. package/scripts/ops/heal-tools.sh +2 -1
  78. package/scripts/ops/heal.sh +2 -1
  79. package/scripts/ops/post-apply-repair.sh +2 -1
  80. package/scripts/ops/prewarm.sh +2 -1
  81. package/scripts/ops/release.sh +2 -1
  82. package/scripts/ops/rollback.sh +2 -1
  83. package/scripts/ops/setup.sh +2 -1
  84. package/scripts/ops/teleport.sh +2 -1
  85. package/scripts/qa/check-version-consistency.sh +2 -1
  86. package/scripts/qa/coverage-baseline.sh +2 -1
  87. package/scripts/qa/docs-coverage.sh +2 -1
  88. package/scripts/qa/reliability-audit.sh +2 -1
  89. package/scripts/qa/scorecard-snapshot.sh +2 -1
  90. package/scripts/qa/traceability-coverage.sh +2 -1
  91. package/scripts/qa/validate-examples.sh +2 -1
  92. package/scripts/qa/wsl-contract.sh +2 -1
  93. package/scripts/secrets/age-init.sh +2 -1
  94. package/scripts/secrets/create-secrets-file.sh +2 -1
  95. package/scripts/secrets/encrypt-ssh-key.sh +2 -1
  96. package/scripts/security/backup.sh +2 -1
  97. package/scripts/security/check-disclosure-key-expiry.sh +2 -1
  98. package/scripts/security/dns-doh.sh +2 -1
  99. package/scripts/security/encryption-check.sh +2 -1
  100. package/scripts/security/enforce-policies.sh +2 -1
  101. package/scripts/security/firewall.sh +2 -1
  102. package/scripts/security/lock-configs.sh +2 -1
  103. package/scripts/security/lock-screen.sh +2 -1
  104. package/scripts/security/manage-secrets.sh +2 -1
  105. package/scripts/security/ssh-cert.sh +2 -1
  106. package/scripts/security/telemetry-kill.sh +2 -1
  107. package/scripts/security/usb-safety.sh +2 -1
  108. package/scripts/theme/apply-gnome-theme.sh +2 -1
  109. package/scripts/theme/extract-heic-frames.sh +2 -1
  110. package/scripts/theme/extract-theme.py +2 -1
  111. package/scripts/theme/install-boot-logo.sh +2 -1
  112. package/scripts/theme/install-catppuccin-themes.sh +2 -1
  113. package/scripts/theme/install-cursors.sh +2 -1
  114. package/scripts/theme/install-file-icons.sh +2 -1
  115. package/scripts/theme/install-grub-theme.sh +2 -1
  116. package/scripts/theme/install-lock-icon.sh +2 -1
  117. package/scripts/theme/merge-wallpaper.sh +2 -1
  118. package/scripts/theme/rebuild-themes.sh +26 -3
  119. package/scripts/theme/switch.sh +3 -2
  120. package/scripts/theme/wallpaper-rotate.sh +2 -1
  121. package/scripts/theme/wallpaper-sync.sh +3 -2
  122. package/scripts/tools/cmatrix.sh +2 -1
  123. package/scripts/tools/detect-collisions.py +2 -1
  124. package/scripts/tools/emoji-picker.sh +2 -1
  125. package/scripts/tools/figlet-banner.sh +2 -1
  126. package/scripts/tools/log-rotate.sh +2 -1
  127. package/scripts/tools/lolcat-wrap.sh +2 -1
  128. package/scripts/tools/pipes.sh +2 -1
  129. package/scripts/tuning/linux.sh +2 -1
  130. package/scripts/tuning/macos.sh +2 -1
  131. package/scripts/uninstall.sh +2 -1
  132. package/scripts/version-sync.sh +21 -4
package/CHANGELOG.md CHANGED
@@ -2,7 +2,92 @@
2
2
 
3
3
  This file documents all notable changes to this project.
4
4
 
5
- ## v0.2.503 (unreleased)
5
+ ## v0.2.505 — 2026-06-04
6
+
7
+ Claude Code is no longer installed through mise/npm. npm 11 silently drops
8
+ the platform-native `optionalDependency` on global installs, leaving a stub
9
+ binary that errors with "claude native binary not installed". The fix moves
10
+ Claude Code to Anthropic's native installer and audits the other AI tools for
11
+ the same class of bug. This release also repairs Linux install breaks, hardens
12
+ cross-platform shell parity (bash, fish, nushell), and adds SPDX license
13
+ headers across the source tree.
14
+
15
+ ### Fixed
16
+
17
+ - **Claude Code install** — switched off the mise `npm:@anthropic-ai/claude-code`
18
+ pin onto Anthropic's native installer (`~/.local/bin/claude`, self-updating),
19
+ which fetches the platform binary directly and sidesteps the npm 11
20
+ optional-dependency bug. Bootstrap (`run_onchange_15-ai-cli-tools`), `dot ai`,
21
+ and `dot apply`'s "install missing providers" flow all install Claude Code
22
+ natively now instead of reinstalling the broken package.
23
+ - **Linux install breaks (every distro):** Neovim fetched `nvim-linux64.tar.gz`,
24
+ an asset Neovim renamed after v0.10.3, so the pinned v0.11.6 download 404'd and
25
+ aborted the whole provision run — now arch-aware (`nvim-linux-{x86_64,arm64}`)
26
+ with ARM support; AIChat defaulted to a `latest` tag baked into the asset
27
+ filename (also a guaranteed 404) — now pinned via `AICHAT_TAG`.
28
+ - **Clipboard (`cb`):** crashed under `set -u` on non-Wayland Linux
29
+ (`$WAYLAND_DISPLAY` was referenced unguarded); added `command -v` guards, an
30
+ `xsel` fallback, and clear per-backend (Wayland/X11/WSL) error messages.
31
+ - **Bash parity:** `dot_bashrc` shipped ~14 hardcoded aliases and none of the
32
+ library functions — it never sourced the shared `~/.config/shell/*` hub. It
33
+ now loads the same layers zsh does (867 aliases + 185 functions), matching its
34
+ documented Tier-1 "Full" status.
35
+ - **fish/nushell `goto`/`cdls`:** these change directory but were run through a
36
+ `bash -c` subshell, so the `cd` was discarded — they silently no-op'd.
37
+ Reimplemented natively (fish functions; nushell `def --env`, the only form
38
+ whose `cd` propagates to the caller).
39
+ - **Docs:** fixed 18 hardcoded absolute markdown links (`/home/seb/.dotfiles/…`,
40
+ broken on GitHub and on any other machine) to file-relative paths.
41
+
42
+ ### Changed
43
+
44
+ - **Removed two redundant mise pins** uncovered while auditing the other AI
45
+ tools: `npm:codex-cli` (a legacy package — codex.js — that collided on the
46
+ `codex` bin name; Codex is already provided by the native `codex` pin) and
47
+ `npm:opencode-ai` (a broken-wrapper duplicate of the native `opencode` pin).
48
+ Both shims already resolved to the native builds, so runtime behaviour is
49
+ unchanged. copilot/gemini/qwen/zai were checked and are unaffected.
50
+ - **Extracted** the shared Claude native-installer helper and the AI
51
+ provider→mise-package map into `lib/dot/ai-install.sh`, removing duplication
52
+ across `dot ai` and `dot apply`.
53
+ - **Cross-distro robustness:** Debian/Ubuntu now symlink `~/.local/bin/{bat,fd}`
54
+ to `batcat`/`fdfind`; a missing apt/dnf/pacman warns loudly instead of silently
55
+ installing nothing; WSL gets a best-effort `wslu` install for `wslview`. fish
56
+ and nushell now export `EDITOR`/`VISUAL`/`PAGER` to match the zsh/bash profile.
57
+ - **Licensing:** added `SPDX-License-Identifier: MIT` headers (SPDX-first / REUSE
58
+ form) and normalized the copyright line to `Sebastien Rousseau` across 831
59
+ repo-only source files; dropped the contradictory `All rights reserved.`.
60
+ - **README** — fixed the OpenSSF Best Practices badge (was linking to the
61
+ new-project form with a static label; now the live `cii/percentage/12840`
62
+ endpoint linked to the real project).
63
+
64
+ ## v0.2.504 — 2026-06-03
65
+
66
+ First-class **stock-macOS** support: the installer and the entire `dot` CLI
67
+ now run correctly under the system `/bin/bash` 3.2, and the mise↔chezmoi
68
+ ownership conflict is resolved structurally. Found by performing a clean
69
+ end-to-end install and exercising every command. Full suite: 4821/4821.
70
+
71
+ ### Fixed
72
+
73
+ - **macOS bash 3.2 compatibility** across the CLI, which had assumed bash 4+:
74
+ - iTerm2 profile `run_onchange` used `declare -A` and aborted `chezmoi apply`; rewritten with indexed arrays.
75
+ - `dot ai` used `local -n` namerefs + `declare -A`; now passes arrays by value and reads probe results from the cached TSV via `awk`.
76
+ - `dot security-score` and the `matrix` effect dropped `declare -A` (parallel arrays / `case`).
77
+ - `dot fleet apply` replaced the bash-4.3 `wait -n` throttle with a portable PID-FIFO; `dot theme rebuild` now requires bash 4 and re-execs under a newer bash when available.
78
+ - `dot perf` / `dot bundle` / `dot benchmark` / `dot doctor` / `dot sync` and the pre-commit hook: empty-array `"${arr[@]}"` under `set -u` aborted on bash 3.2; cleanup traps now use the `set +u` idiom.
79
+ - `.bashrc` guards bash-4-only `shopt` options (`globstar`, `dirspell`, `autocd`).
80
+ - **Installer:** backup loop no longer recurses into live `~/.ssh/agent` sockets; seeds git identity from `git config --global` and prints a hint when none is set. The v0.2.503 migration no longer exits non-zero under `set -e`.
81
+ - **mise:** the chezmoi-managed base config moved to `conf.d/00-dotfiles.toml`; `~/.config/mise/config.toml` is now mise's `.chezmoiignore`'d writable global, so `mise use -g` no longer drifts the source. An absent `gh` token no longer breaks the whole config, and the x86_64-only hyperfine aqua package (unrunnable on Apple Silicon) is no longer managed by mise. `version-sync.sh` no longer hangs on a non-TTY stdin (rg now searches the tree, not stdin) and respects `EXCLUDE_FILES`.
82
+ - **`Brewfile.cli`:** add `zellij` and `sops` (checked by `dot doctor`, previously absent).
83
+ - **`dot version-locks`** is `.chezmoiroot`-aware again (had reported "config not found" since the v0.2.503 reorg).
84
+ - **Tests:** robust large-HEIC wallpaper dimension probe (`-ping`); `test_perf_percentiles` trusts mise in its isolated environment.
85
+
86
+ ### Changed
87
+
88
+ - Homebrew/Scoop release installers now actually install (sha256 substitution, Scoop `extract_dir` + Windows entrypoint).
89
+
90
+ ## v0.2.503 — 2026-05-30
6
91
 
7
92
  Polish + cross-platform + Scorecard release **plus** the
8
93
  incremental repo reorganisation per
package/README.md CHANGED
@@ -10,11 +10,11 @@
10
10
 
11
11
  <p align="center">
12
12
  <a href="https://github.com/sebastienrousseau/dotfiles/actions"><img src="https://img.shields.io/github/actions/workflow/status/sebastienrousseau/dotfiles/ci.yml?style=for-the-badge&logo=github" alt="Build" /></a>
13
- <a href="https://github.com/sebastienrousseau/dotfiles/releases/latest"><img src="https://img.shields.io/badge/Version-v0.2.503-blue?style=for-the-badge" alt="Version" /></a>
13
+ <a href="https://github.com/sebastienrousseau/dotfiles/releases/latest"><img src="https://img.shields.io/badge/Version-v0.2.505-blue?style=for-the-badge" alt="Version" /></a>
14
14
  <a href="https://github.com/sebastienrousseau/dotfiles/releases"><img src="https://img.shields.io/github/downloads/sebastienrousseau/dotfiles/total?style=for-the-badge" alt="Downloads" /></a>
15
15
  <a href="https://codespaces.new/sebastienrousseau/dotfiles"><img src="https://img.shields.io/badge/Open%20in-Codespaces-blue?style=for-the-badge&logo=github" alt="Open in GitHub Codespaces" /></a>
16
16
  <a href="https://scorecard.dev/viewer/?uri=github.com/sebastienrousseau/dotfiles"><img src="https://img.shields.io/ossf-scorecard/github.com/sebastienrousseau/dotfiles?style=for-the-badge&label=OpenSSF%20Scorecard" alt="OpenSSF Scorecard" /></a>
17
- <a href="https://www.bestpractices.dev/projects/new"><img src="https://img.shields.io/badge/OpenSSF%20Best%20Practices-in%20progress-yellow?style=for-the-badge" alt="OpenSSF Best Practices" /></a>
17
+ <a href="https://www.bestpractices.dev/projects/12840"><img src="https://img.shields.io/cii/percentage/12840?style=for-the-badge&label=OpenSSF%20Best%20Practices" alt="OpenSSF Best Practices" /></a>
18
18
  <a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green?style=for-the-badge" alt="License: MIT" /></a>
19
19
  </p>
20
20
 
@@ -52,8 +52,8 @@
52
52
 
53
53
  ```bash
54
54
  curl -fsSL -o /tmp/dotfiles-install.sh \
55
- https://raw.githubusercontent.com/sebastienrousseau/dotfiles/v0.2.503/install.sh
56
- echo "4c0303a2d88d5aed98428ab0da37618c9795af4dae0e6549646c2fce5235c280 /tmp/dotfiles-install.sh" \
55
+ https://raw.githubusercontent.com/sebastienrousseau/dotfiles/v0.2.505/install.sh
56
+ echo "d5a04c5e2813a93a63c8ecce9655cf3d107f6068862c6eba84a92cf22f801c7e /tmp/dotfiles-install.sh" \
57
57
  | shasum -a 256 -c
58
58
  bash /tmp/dotfiles-install.sh
59
59
  ```
@@ -300,7 +300,7 @@ See the [Migration Guide](docs/operations/MIGRATION.md) for version upgrades.
300
300
  - **Pattern library** (`dot patterns`) — architect, hardener, and refactor patterns bundled in `dot_config/ai/patterns/`
301
301
  - **MCP policy enforcement** (`dot mcp`) — validate the Model Context Protocol registry against policy
302
302
  - **AI commit messages** (`dot commit`) — conventional commits generated from the staged diff
303
- - **AI tools** (`dot ai`) — Claude Code, Codex, GitHub Copilot, Gemini CLI, and friends managed via Mise
303
+ - **AI tools** (`dot ai`) — Codex, GitHub Copilot, Gemini CLI, and friends managed via Mise; Claude Code via Anthropic's native installer
304
304
  - **Attestation logs** — every agent session is logged with a policy hash and an outcome
305
305
 
306
306
  </details>
package/docs/COPYRIGHT CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- * 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.503) - <https://github.com/sebastienrousseau/dotfiles>
2
+ * 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.505) - <https://github.com/sebastienrousseau/dotfiles>
3
3
  * Made With ❤️ in London, United Kingdom
4
4
  * Designed by
5
5
  * Copyright (c) 2015-2026. All rights reserved.
package/docs/OPENCODE.md CHANGED
@@ -117,7 +117,7 @@ install.sh # Bootstrap installer
117
117
  ### Key Data Files
118
118
 
119
119
  - `.chezmoidata.toml` — All configuration: profiles, feature flags, tool settings
120
- - `dot_config/mise/config.toml` — mise tool versions (node, python, go, rust, etc.)
120
+ - `dot_config/mise/conf.d/00-dotfiles.toml` — mise tool versions (node, python, go, rust, etc.); the writable `~/.config/mise/config.toml` is mise-owned and not chezmoi-managed
121
121
  - `dot_config/starship.toml.tmpl` — Prompt configuration
122
122
 
123
123
  ### Testing
package/docs/index.md CHANGED
@@ -7,7 +7,7 @@ render_with_liquid: false
7
7
  Cross-platform, signed, local-first dotfiles for macOS, Linux, and WSL.
8
8
 
9
9
  [![Build](https://img.shields.io/github/actions/workflow/status/sebastienrousseau/dotfiles/ci.yml?style=for-the-badge&logo=github)](https://github.com/sebastienrousseau/dotfiles/actions)
10
- [![Version](https://img.shields.io/badge/Version-v0.2.503-blue?style=for-the-badge)](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.503)
10
+ [![Version](https://img.shields.io/badge/Version-v0.2.505-blue?style=for-the-badge)](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.505)
11
11
  [![Downloads](https://img.shields.io/github/downloads/sebastienrousseau/dotfiles/total?style=for-the-badge)](https://github.com/sebastienrousseau/dotfiles/releases)
12
12
 
13
13
  This site is published from the `docs/` directory on `master` and tracks the current workstation baseline, operational guidance, and security material for the repository.
@@ -38,6 +38,6 @@ This site is published from the `docs/` directory on `master` and tracks the cur
38
38
 
39
39
  ## Current Release
40
40
 
41
- - Current tagged release: [`v0.2.503`](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.503)
41
+ - Current tagged release: [`v0.2.505`](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.505)
42
42
  - Latest release feed: [GitHub releases](https://github.com/sebastienrousseau/dotfiles/releases/latest)
43
43
  - Source repository: [sebastienrousseau/dotfiles](https://github.com/sebastienrousseau/dotfiles)
@@ -8,8 +8,8 @@ The repository now ships an agent card and an A2A-ready discovery document.
8
8
 
9
9
  Artifacts:
10
10
 
11
- - [agent-card.json](/home/seb/.dotfiles/dot_config/dotfiles/agent-card.json)
12
- - [agent.json](/home/seb/.dotfiles/.well-known/agent.json)
11
+ - [agent-card.json](../../defaults/dot_config/dotfiles/agent-card.json)
12
+ - [agent.json](../../.well-known/agent.json)
13
13
 
14
14
  Core properties:
15
15
 
@@ -4,7 +4,7 @@ render_with_liquid: false
4
4
 
5
5
  # Introduction
6
6
 
7
- This manual describes `.dotfiles` v0.2.503 — a trusted agent workstation baseline for macOS, Linux, and WSL.
7
+ This manual describes `.dotfiles` v0.2.505 — a trusted agent workstation baseline for macOS, Linux, and WSL.
8
8
 
9
9
  The repository is more than a personal dotfiles collection. It ships as workstation infrastructure: signed, attested, multi-platform, AI-aware, and self-healing. Chezmoi handles templating and platform differences. The `dot` CLI sits on top and coordinates lifecycle operations.
10
10
 
@@ -184,7 +184,7 @@ After `dot doctor` reports a healthy score, you have:
184
184
  | **Editor** | Neovim with lazy.nvim + LSP + theme-synced colorscheme |
185
185
  | **Terminal** | Ghostty/Alacritty/Kitty/WezTerm configs (pick whichever is installed) |
186
186
  | **Git** | Signed commits, delta diff, conventional commit template |
187
- | **AI tooling** | Claude Code, Codex, Copilot CLI, Gemini CLI via mise |
187
+ | **AI tooling** | Codex, Copilot CLI, Gemini CLI via mise; Claude Code via Anthropic's native installer |
188
188
  | **Secret store** | Age key, SOPS config, `dot secrets` command ready |
189
189
  | **Security** | Gitleaks, detect-secrets baseline, signed attestation log |
190
190
  | **Theme engine** | K-Means wallpaper extractor, system + custom wallpaper discovery |
@@ -59,7 +59,7 @@ where dependencies allow.
59
59
  | `security-release.yml` (manifest job) | `release.published`, dispatch | Build `ALL_SHA256SUMS` over every release asset, Cosign-sign it. | `ALL_SHA256SUMS` + `.sig` + `.pem`. |
60
60
  | `release-distribute-homebrew.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, regenerate `install/homebrew/dot.rb`, push branch + PR to `sebastienrousseau/homebrew-tap`. | One PR on the tap repo. |
61
61
  | `release-distribute-scoop.yml` | `release.published`, dispatch | Hash `dot-VERSION.zip`, rewrite `install/scoop/dot.json` via jq (both 64bit + arm64 point at same zip), PR to `sebastienrousseau/scoop-bucket`. | One PR on the bucket repo. |
62
- | `release-distribute-aur.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, rewrite `pkgver` + `sha256sums` in `install/aur/PKGBUILD`, regenerate `.SRCINFO` via dockerised `makepkg`, push to `ssh://aur@aur.archlinux.org/dotfiles-git.git`. | One commit on AUR. |
62
+ | `release-distribute-aur.yml` | `release.published`, dispatch | Hash `dot-VERSION.tar.gz`, rewrite `pkgver` + `sha256sums` in `install/aur/PKGBUILD`, regenerate `.SRCINFO` via dockerised `makepkg`, push to `ssh://aur@aur.archlinux.org/dot-cli-git.git`. | One commit on AUR. |
63
63
  | `release-attestation-check.yml` | weekly cron + dispatch | Verify the latest release carries the full attestation bundle (SBOM + sig + cert + intoto + manifest + sig + cert). | Opens or comments on a tracking issue. |
64
64
 
65
65
  ## Why `created` vs `published`
@@ -93,7 +93,7 @@ manifest job after late asset uploads picks up the new state and the
93
93
  |---|---|---|
94
94
  | Homebrew | `sebastienrousseau/homebrew-tap` | Tap repo exists (currently bare README + LICENSE). Workflow creates the `Formula/dot.rb` path on first publish. |
95
95
  | Scoop | `sebastienrousseau/scoop-bucket` | Bucket repo exists (currently bare). Workflow creates `bucket/dot.json` on first publish. |
96
- | AUR | `ssh://aur@aur.archlinux.org/dotfiles-git.git` | **Manual one-time step**: the maintainer must create the package entry via the AUR web UI before the workflow's `git clone` can succeed. The workflow exits with a clear error message on the first run if the repo doesn't exist. |
96
+ | AUR | `ssh://aur@aur.archlinux.org/dot-cli-git.git` | **Manual one-time step**: the maintainer must create the package entry via the AUR web UI before the workflow's `git clone` can succeed. The workflow exits with a clear error message on the first run if the repo doesn't exist. |
97
97
 
98
98
  ## Verifying a release
99
99
 
@@ -105,7 +105,7 @@ independently.
105
105
 
106
106
  ## Known caveats
107
107
 
108
- - **AUR `pkgname=dotfiles-git`**: AUR's `-git` convention means
108
+ - **AUR `pkgname=dot-cli-git`**: AUR's `-git` convention means
109
109
  "tracks git HEAD", but the workflow publishes tagged stable
110
110
  releases. Either rename to plain `dotfiles` in
111
111
  `install/aur/PKGBUILD` and register that package, or accept the
@@ -20,12 +20,12 @@ It defines a signed, local-first workstation baseline for agentic development on
20
20
 
21
21
  The source of truth lives in tracked JSON artifacts:
22
22
 
23
- - [policy-bundles.json](/home/seb/.dotfiles/dot_config/dotfiles/policy-bundles.json)
24
- - [agent-profiles.json](/home/seb/.dotfiles/dot_config/dotfiles/agent-profiles.json)
25
- - [mcp-policy.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-policy.json)
26
- - [mcp-registry.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-registry.json)
27
- - [model-registry.json](/home/seb/.dotfiles/dot_config/dotfiles/model-registry.json)
28
- - [prompt-registry.json](/home/seb/.dotfiles/dot_config/dotfiles/prompt-registry.json)
23
+ - [policy-bundles.json](../../defaults/dot_config/dotfiles/policy-bundles.json)
24
+ - [agent-profiles.json](../../defaults/dot_config/dotfiles/agent-profiles.json)
25
+ - [mcp-policy.json](../../defaults/dot_config/dotfiles/mcp-policy.json)
26
+ - [mcp-registry.json](../../defaults/dot_config/dotfiles/mcp-registry.json)
27
+ - [model-registry.json](../../defaults/dot_config/dotfiles/model-registry.json)
28
+ - [prompt-registry.json](../../defaults/dot_config/dotfiles/prompt-registry.json)
29
29
 
30
30
  ## Enterprise path
31
31
 
@@ -21,6 +21,6 @@ render_with_liquid: false
21
21
  ## Provisioning notes
22
22
 
23
23
  1. Store the SSH signing private key in GitHub Actions as `ACTIONS_BOT_SIGNING_KEY`.
24
- 2. Store the matching public key in [allowed_signers](/home/seb/.dotfiles/dot_config/git/allowed_signers).
24
+ 2. Store the matching public key in [allowed_signers](../../defaults/dot_config/git/allowed_signers.tmpl).
25
25
  3. Rotate the key on personnel or workstation change.
26
26
  4. Fail closed when secrets are absent.
@@ -21,9 +21,9 @@ Properties:
21
21
 
22
22
  ## Policy artifact
23
23
 
24
- The source of truth lives in [mcp-policy.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-policy.json).
25
- Approved package pins live in [mcp-lock.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-lock.json).
26
- Tracked server registry entries live in [mcp-registry.json](/home/seb/.dotfiles/dot_config/dotfiles/mcp-registry.json).
24
+ The source of truth lives in [mcp-policy.json](../../defaults/dot_config/dotfiles/mcp-policy.json).
25
+ Approved package pins live in [mcp-lock.json](../../defaults/dot_config/dotfiles/mcp-lock.json).
26
+ Tracked server registry entries live in [mcp-registry.json](../../defaults/dot_config/dotfiles/mcp-registry.json).
27
27
 
28
28
  Current defaults:
29
29
 
@@ -75,4 +75,4 @@ Current approved refs:
75
75
  - active servers match the tracked registry entries
76
76
  - remote HTTP transports are HTTPS and OAuth-backed
77
77
 
78
- Policy bundle baselines live in [policy-bundles.json](/home/seb/.dotfiles/dot_config/dotfiles/policy-bundles.json).
78
+ Policy bundle baselines live in [policy-bundles.json](../../defaults/dot_config/dotfiles/policy-bundles.json).
@@ -11,7 +11,7 @@ Use this checklist before cutting any new release (e.g., `v0.x.x`) to ensure sup
11
11
  - [ ] **Pinned Version**: Update `install.sh` `VERSION` variable to match the release tag.
12
12
  - [ ] **Docs Sync**: Ensure `README.md` and `.github/PULL_REQUEST_TEMPLATE.md` installer URLs point to the new tag (not `main`).
13
13
  - [ ] **Clean Build**: Verify `install.sh` does not curl random scripts from third parties without pinning.
14
- - [ ] **SOUP Register**: Review [SOUP_REGISTER.md](/home/seb/.dotfiles/docs/security/SOUP_REGISTER.md) and confirm all active external components have an owner and validation path.
14
+ - [ ] **SOUP Register**: Review [SOUP_REGISTER.md](SOUP_REGISTER.md) and confirm all active external components have an owner and validation path.
15
15
 
16
16
  ## 2. Secrets & Leak Prevention
17
17
 
@@ -12,13 +12,13 @@ Controlled inventory for software of unknown pedigree used by the dotfiles platf
12
12
 
13
13
  | Component | Source | Version control | Verification path | Owner | Status |
14
14
  | :--- | :--- | :--- | :--- | :--- | :--- |
15
- | Homebrew installer | `raw.githubusercontent.com/Homebrew/install` | Moving upstream script, gated by `HOMEBREW_INSTALLER_SHA256` | SHA-256 in [package_managers.sh](/home/seb/.dotfiles/install/lib/package_managers.sh) | Repo maintainer | Conditional |
15
+ | Homebrew installer | `raw.githubusercontent.com/Homebrew/install` | Moving upstream script, gated by `HOMEBREW_INSTALLER_SHA256` | SHA-256 in [package_managers.sh](../../install/lib/package_managers.sh) | Repo maintainer | Conditional |
16
16
  | Chezmoi installer | `get.chezmoi.io` | Pinned by `CHEZMOI_INSTALLER_SHA256` when used | SHA-256 in `install/lib/chezmoi.sh` | Repo maintainer | Controlled |
17
17
  | GitHub Actions marketplace actions | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pins | Repo maintainer | Controlled |
18
- | Grype container | `anchore/grype` | Pinned tag in workflow | Container tag in [security-enhanced.yml](/home/seb/.dotfiles/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
19
- | Trivy container | `aquasec/trivy` | Pinned tag in workflow | Container tag in [security-enhanced.yml](/home/seb/.dotfiles/.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
18
+ | Grype container | `anchore/grype` | Pinned tag in workflow | Container tag in [security-enhanced.yml](../../.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
19
+ | Trivy container | `aquasec/trivy` | Pinned tag in workflow | Container tag in [security-enhanced.yml](../../.github/workflows/security-enhanced.yml) | Repo maintainer | Controlled |
20
20
  | Checkov action | GitHub Marketplace | Full commit SHA pinning | Workflow `uses:` pin | Repo maintainer | Controlled |
21
- | Nix inputs | GitHub flakes | Locked in [flake.lock](/home/seb/.dotfiles/flake.lock) | `narHash` and revision lock | Repo maintainer | Controlled |
21
+ | Nix inputs | GitHub flakes | Locked in [flake.lock](../../flake.lock) | `narHash` and revision lock | Repo maintainer | Controlled |
22
22
  | GitHub release metadata queries | GitHub API | Discovery only, not release validation | `update-deps.yml` query path | Repo maintainer | Monitored |
23
23
 
24
24
  ## Validation record
package/install.sh CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Universal Dotfiles Installer (Zero-Dependency)
4
5
  # Usage: bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
5
6
  # (or ./install.sh locally)
@@ -59,21 +60,26 @@ show_help() {
59
60
  Usage: install.sh [version] [options]
60
61
 
61
62
  Arguments:
62
- version The version (tag or branch) to install (default: v0.2.503)
63
+ version The version (tag or branch) to install (default: v0.2.505)
63
64
 
64
65
  Options:
65
66
  --help Show this help message
66
67
  --force Non-interactive mode (sets DOTFILES_NONINTERACTIVE=1)
67
68
  --silent Quiet mode (sets DOTFILES_SILENT=1)
68
69
  --minimal Minimal profile (disable nvim, tmux, zellij)
70
+ --provision After applying configs, install the toolchain (packages,
71
+ fonts, language tools) via the install/provision scripts.
72
+ Also enabled by DOTFILES_PROVISION=1. Opt-in because it
73
+ installs packages and may change OS defaults.
69
74
 
70
75
  EOF
71
76
  }
72
77
 
73
78
  main() {
74
- local version="v0.2.503"
79
+ local version="v0.2.505"
75
80
  local version_set=0
76
81
  local minimal=0
82
+ local provision="${DOTFILES_PROVISION:-0}"
77
83
  local _cleanup_files=()
78
84
  trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
79
85
 
@@ -86,6 +92,7 @@ main() {
86
92
  --silent) export DOTFILES_SILENT=1 ;;
87
93
  --force) export DOTFILES_NONINTERACTIVE=1 ;;
88
94
  --minimal) minimal=1 ;;
95
+ --provision) provision=1 ;;
89
96
  -*)
90
97
  # Catch single-dash and double-dash unknowns the same way.
91
98
  error "Unknown option: $arg"
@@ -99,7 +106,7 @@ main() {
99
106
  # like `foobar` doesn't trigger a 30s+ network download attempt.
100
107
  # Caught by the install.sh fuzz harness (#881).
101
108
  if [[ ! "$arg" =~ ^v?[0-9]+\.[0-9]+\.[0-9]+([-+][a-zA-Z0-9.-]+)?$ ]]; then
102
- error "Unrecognized positional argument '$arg' — expected a semver version (e.g. v0.2.503)."
109
+ error "Unrecognized positional argument '$arg' — expected a semver version (e.g. v0.2.505)."
103
110
  fi
104
111
  version="$arg"
105
112
  version_set=1
@@ -257,6 +264,35 @@ main() {
257
264
  sed_in_place 's/^zellij = true/zellij = false/' "$data_file"
258
265
  }
259
266
 
267
+ # Carry the user's existing global git identity into chezmoi's data.
268
+ #
269
+ # This installer sets up chezmoi via sourceDir rather than `chezmoi init`,
270
+ # so the config template's prompts for git_name / git_email never run. The
271
+ # gitconfig template coalesces git_name->name->"" (likewise email,
272
+ # signingkey) and only emits a [user] block when non-empty — so without
273
+ # this, a fresh install produces a ~/.gitconfig with no identity at all,
274
+ # and commits fail with "Author identity unknown". Seed name/email/
275
+ # signingkey from `git config --global` when present. Idempotent: skips if
276
+ # the config already carries a [data] block.
277
+ toml_escape() { printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'; }
278
+ seed_git_identity() {
279
+ local cfg="$CHEZMOI_CONFIG_FILE"
280
+ [[ -f "$cfg" ]] || return 0
281
+ grep -q '^\[data\]' "$cfg" 2>/dev/null && return 0
282
+ local gname gemail gkey
283
+ gname="$(git config --global user.name 2>/dev/null || true)"
284
+ gemail="$(git config --global user.email 2>/dev/null || true)"
285
+ gkey="$(git config --global user.signingkey 2>/dev/null || true)"
286
+ [[ -z "$gname" && -z "$gemail" ]] && return 0
287
+ {
288
+ printf '\n[data]\n'
289
+ [[ -n "$gname" ]] && printf 'name = "%s"\n' "$(toml_escape "$gname")"
290
+ [[ -n "$gemail" ]] && printf 'email = "%s"\n' "$(toml_escape "$gemail")"
291
+ [[ -n "$gkey" ]] && printf 'signingkey = "%s"\n' "$(toml_escape "$gkey")"
292
+ } >>"$cfg"
293
+ echo " Seeded git identity ($gname <$gemail>) into chezmoi data."
294
+ }
295
+
260
296
  # 5. Backup existing dotfiles that chezmoi will overwrite
261
297
  step "Backing up existing dotfiles..."
262
298
  BACKUP_DIR="$HOME/.dotfiles.bak.$(date +"%Y%m%d_%H%M%S")"
@@ -273,6 +309,17 @@ main() {
273
309
  if command -v chezmoi >/dev/null && [[ -f "$CHEZMOI_CONFIG_FILE" ]]; then
274
310
  while IFS= read -r file; do
275
311
  [[ -z "$file" ]] && continue
312
+ # Skip managed *directories*: chezmoi apply never clobbers a
313
+ # directory's existing contents, so they don't need backing up, and
314
+ # `cp -a` on one recurses into things it can't copy — e.g. the live
315
+ # ssh-agent sockets under ~/.ssh/agent, which spew
316
+ # "is a socket (not copied)" warnings. The managed files chezmoi
317
+ # would actually overwrite are listed (and backed up) individually.
318
+ # `-d` without `-L` excludes only real dirs; symlinks are copied as
319
+ # links by `cp -a`, so they never recurse.
320
+ if [[ -d "$file" && ! -L "$file" ]]; then
321
+ continue
322
+ fi
276
323
  if [[ -e "$file" ]]; then
277
324
  rel="${file#"$HOME"/}"
278
325
  mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
@@ -304,7 +351,7 @@ main() {
304
351
  # 6. Initialize & Apply
305
352
  step "Applying Configuration..."
306
353
 
307
- # ── Auto-migration for v0.2.503 reorg ─────────────────────────────────
354
+ # ── Auto-migration for v0.2.505 reorg ─────────────────────────────────
308
355
  # If the user is upgrading from a pre-0.2.503 install, run the
309
356
  # migration script BEFORE `chezmoi apply` so the reorg's source-
310
357
  # path moves don't cause chezmoi to delete deployed files.
@@ -313,7 +360,7 @@ main() {
313
360
  for migrate_src in "$SOURCE_DIR" "$LEGACY_SOURCE_DIR"; do
314
361
  migrate_script="$migrate_src/install/migrate/migrate-v0_2-to-v0_2_503.sh"
315
362
  if [[ -x "$migrate_script" ]]; then
316
- echo " Running v0.2.503 migration (idempotent; safe on fresh installs)..."
363
+ echo " Running v0.2.505 migration (idempotent; safe on fresh installs)..."
317
364
  "$migrate_script" || echo " migration exited non-zero — continuing apply"
318
365
  break
319
366
  fi
@@ -323,6 +370,7 @@ main() {
323
370
  if [[ -d "$SOURCE_DIR/.git" ]]; then
324
371
  echo " Applying from local source: $SOURCE_DIR"
325
372
  ensure_chezmoi_source "$SOURCE_DIR"
373
+ seed_git_identity
326
374
  APPLY_FLAGS=()
327
375
  if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
328
376
  APPLY_FLAGS=(--force --no-tty)
@@ -332,6 +380,7 @@ main() {
332
380
  echo " Migrating from legacy source: $LEGACY_SOURCE_DIR"
333
381
  mv "$LEGACY_SOURCE_DIR" "$SOURCE_DIR"
334
382
  ensure_chezmoi_source "$SOURCE_DIR"
383
+ seed_git_identity
335
384
  APPLY_FLAGS=()
336
385
  if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
337
386
  APPLY_FLAGS=(--force --no-tty)
@@ -362,6 +411,7 @@ main() {
362
411
  fi
363
412
 
364
413
  ensure_chezmoi_source "$SOURCE_DIR"
414
+ seed_git_identity
365
415
  APPLY_FLAGS=()
366
416
  if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
367
417
  APPLY_FLAGS=(--force --no-tty)
@@ -369,7 +419,49 @@ main() {
369
419
  chezmoi apply "${APPLY_FLAGS[@]}"
370
420
  fi
371
421
 
422
+ # Toolchain provisioning (opt-in). The install/provision/ scripts (package
423
+ # managers, fonts, language + AI tools) are chezmoi run_ scripts, but they
424
+ # live OUTSIDE the .chezmoiroot source dir (defaults/), so `chezmoi apply`
425
+ # never runs them — a fresh install otherwise ships configs but zero tools.
426
+ # Run them here only when explicitly requested: they install packages and
427
+ # can change OS defaults, so we never do it implicitly (CI / Docker /
428
+ # unattended automation must opt in via --provision or DOTFILES_PROVISION=1).
429
+ if [[ "$provision" = "1" && $minimal -eq 0 ]]; then
430
+ step "Provisioning toolchain (packages, fonts, tools)..."
431
+ local prov_dir="$SOURCE_DIR/install/provision"
432
+ if [[ -d "$prov_dir" ]]; then
433
+ local script
434
+ # run_once_install_* (shells) first, then numbered run_onchange_* in order.
435
+ while IFS= read -r script; do
436
+ [[ -f "$script" ]] || continue
437
+ echo " → $(basename "$script")"
438
+ if [[ "$script" == *.tmpl ]]; then
439
+ chezmoi execute-template <"$script" | bash ||
440
+ echo " (step exited non-zero — continuing)"
441
+ else
442
+ bash "$script" || echo " (step exited non-zero — continuing)"
443
+ fi
444
+ done < <(ls "$prov_dir"/run_once_install_* "$prov_dir"/run_onchange_* 2>/dev/null | sort)
445
+ fi
446
+ elif [[ $minimal -eq 0 ]]; then
447
+ step "Configs deployed. To also install the toolchain (packages, fonts, tools):"
448
+ echo " bash \"$SOURCE_DIR/install.sh\" --provision # or DOTFILES_PROVISION=1"
449
+ echo " (or: brew bundle --file ~/.config/shell/Brewfile.cli)"
450
+ fi
451
+
372
452
  success "Configuration loaded. Please restart your shell."
453
+
454
+ # If no git identity ended up configured, commits will fail with
455
+ # "Author identity unknown". Point the user at the one-line fix rather
456
+ # than letting them discover it on their first commit.
457
+ if [[ -z "$(git config --global user.email 2>/dev/null || true)" ]] &&
458
+ ! grep -q '^email' "$CHEZMOI_CONFIG_FILE" 2>/dev/null; then
459
+ step "No git identity detected. Set yours so commits are attributed:"
460
+ echo " git config --global user.name \"Your Name\""
461
+ echo " git config --global user.email \"you@example.com\""
462
+ echo " then re-run: chezmoi apply"
463
+ fi
464
+
373
465
  step "Run 'dot learn' for an interactive tour of your new dotfiles."
374
466
  }
375
467
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sebastienrousseau/dotfiles",
3
- "version": "0.2.503",
3
+ "version": "0.2.505",
4
4
  "description": "The Trusted Shell Platform — Universal dotfiles managed by Chezmoi. Features Bash & Zsh for macOS, Linux & WSL. Rust modern tooling & enterprise-grade security.",
5
5
  "main": "install.sh",
6
6
  "bin": {
package/scripts/README.md CHANGED
@@ -7,7 +7,7 @@ workflows, by `chezmoi apply` hooks, or by hand.
7
7
 
8
8
  ## Subtree map
9
9
 
10
- Per the v0.2.503 reorg (RFC `docs/operations/RFC_v0_2_503_reorganization.md`),
10
+ Per the repository reorg (RFC `docs/operations/RFC_v0_2_503_reorganization.md`),
11
11
  **repo-only ops** (CI, release, maintenance, docs-generation) have
12
12
  moved to the top-level `tools/` tree. `scripts/` retains the
13
13
  **runtime-invoked** scripts that the `dot` CLI dispatches to plus a
@@ -17,7 +17,7 @@ few specialised subtrees.
17
17
 
18
18
  | Path | Purpose | Touched by |
19
19
  |---|---|---|
20
- | `scripts/dot/commands/` | Per-subcommand handlers for the `dot` CLI. Sources `lib/dot/*.sh` (moved out of this tree in v0.2.503 Phase 1). | Dispatched by `bin/dot` |
20
+ | `scripts/dot/commands/` | Per-subcommand handlers for the `dot` CLI. Sources `lib/dot/*.sh` (moved out of this tree in the Phase 1 reorg). | Dispatched by `bin/dot` |
21
21
  | `scripts/dot/powershell/` | Native PowerShell module (`Dot.psm1`) exporting `Get-DotVersion` / `Invoke-DotHelp` / `Test-DotAgentsSync`. | `bin/dot.ps1` |
22
22
  | `scripts/dot/data/` | Per-command static data (registry seeds, palette tables). | `scripts/dot/commands/*` |
23
23
  | `scripts/lib/` | Cross-cutting library helpers reused across multiple scripts. Example: `secrets_provider.sh` (keychain / pass / age dispatch). | `scripts/dot/commands/*`, ops scripts |
@@ -49,7 +49,7 @@ few specialised subtrees.
49
49
  The `dot` CLI is implemented as `bin/dot`
50
50
  (dispatcher) + `scripts/dot/commands/<cmd>.sh` (per-command
51
51
  handlers) + `lib/dot/*.sh` (shared helpers — moved out of
52
- `scripts/dot/lib/` in v0.2.503 Phase 1 per the
52
+ `scripts/dot/lib/` in the Phase 1 reorg per the
53
53
  [reorganisation RFC](../docs/operations/RFC_v0_2_503_reorganization.md)).
54
54
 
55
55
  | Path | Purpose |
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Compat shim: the canonical script moved to tools/ci/ in v0.2.503.
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.
4
5
  # Pinned reusable workflows on master still reference the old path;
5
6
  # this delegates so they keep working until the next pin bump.
6
7
  set -euo pipefail
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Compat shim: the canonical script moved to tools/ci/ in v0.2.503.
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.
4
5
  # Pinned reusable workflows on master still reference the old path;
5
6
  # this delegates so they keep working until the next pin bump.
6
7
  set -euo pipefail
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
- # Compat shim: the canonical script moved to tools/ci/ in v0.2.503.
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.
4
5
  # Pinned reusable workflows on master still reference the old path;
5
6
  # this delegates so they keep working until the next pin bump.
6
7
  set -euo pipefail
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  OUT="${1:-$HOME/.dotfiles/docs/demo/demo.gif}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## A2A v0.3 and agent card conformance validation.
4
5
 
5
6
  set -euo pipefail
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Alias governance checks:
4
5
  # - duplicate alias names
5
6
  # - risky overrides must be gated
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Emit alias manifest as TSV:
4
5
  # name<TAB>value<TAB>file<TAB>line
5
6