@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.
- package/CHANGELOG.md +86 -1
- package/README.md +5 -5
- package/docs/COPYRIGHT +1 -1
- package/docs/OPENCODE.md +1 -1
- package/docs/index.md +2 -2
- package/docs/interop/A2A.md +2 -2
- package/docs/manual/00-introduction.md +1 -1
- package/docs/manual/02-tutorials/01-first-install.md +1 -1
- package/docs/operations/RELEASE_PIPELINE.md +3 -3
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +6 -6
- package/docs/security/AUTOMATION_SECRETS.md +1 -1
- package/docs/security/MCP_POLICY.md +4 -4
- package/docs/security/SECURITY_CHECKLIST.md +1 -1
- package/docs/security/SOUP_REGISTER.md +4 -4
- package/install.sh +98 -6
- package/package.json +1 -1
- package/scripts/README.md +3 -3
- package/scripts/ci/check-copyright-headers.sh +3 -2
- package/scripts/ci/check-shell-preamble.sh +3 -2
- package/scripts/ci/guard-gitleaks-checkout.sh +3 -2
- package/scripts/demo/record.sh +2 -1
- package/scripts/diagnostics/a2a-conformance.sh +2 -1
- package/scripts/diagnostics/alias-governance.sh +2 -1
- package/scripts/diagnostics/aliases-cheatsheet.sh +2 -1
- package/scripts/diagnostics/aliases-manifest.sh +2 -1
- package/scripts/diagnostics/benchmark.sh +3 -2
- package/scripts/diagnostics/conflicts.sh +2 -1
- package/scripts/diagnostics/doctor-unified.sh +3 -2
- package/scripts/diagnostics/doctor.sh +2 -1
- package/scripts/diagnostics/drift-dashboard.sh +2 -1
- package/scripts/diagnostics/health.sh +2 -1
- package/scripts/diagnostics/history-analysis.sh +2 -1
- package/scripts/diagnostics/mcp-doctor.sh +2 -1
- package/scripts/diagnostics/perf.sh +3 -2
- package/scripts/diagnostics/scorecard.sh +2 -1
- package/scripts/diagnostics/secret-governance.sh +2 -1
- package/scripts/diagnostics/security-score.sh +25 -5
- package/scripts/diagnostics/smoke-test.sh +2 -1
- package/scripts/diagnostics/snapshot.sh +2 -1
- package/scripts/diagnostics/verify.sh +2 -1
- package/scripts/diagnostics/verify_state.sh +2 -1
- package/scripts/diagnostics/version-locks.sh +13 -2
- package/scripts/diagnostics/workstation-attestation.sh +2 -1
- package/scripts/dot/commands/agent.sh +2 -1
- package/scripts/dot/commands/agents.sh +2 -1
- package/scripts/dot/commands/ai.sh +19 -33
- package/scripts/dot/commands/aliases.sh +2 -1
- package/scripts/dot/commands/appearance.sh +2 -1
- package/scripts/dot/commands/core.sh +2 -1
- package/scripts/dot/commands/diagnostics.sh +2 -1
- package/scripts/dot/commands/env-emit.sh +2 -1
- package/scripts/dot/commands/fleet.sh +12 -6
- package/scripts/dot/commands/init.sh +2 -1
- package/scripts/dot/commands/lint.sh +2 -1
- package/scripts/dot/commands/manual.sh +2 -1
- package/scripts/dot/commands/meta.sh +2 -1
- package/scripts/dot/commands/patterns.sh +2 -1
- package/scripts/dot/commands/registry.sh +2 -1
- package/scripts/dot/commands/restore.sh +2 -1
- package/scripts/dot/commands/secrets.sh +2 -1
- package/scripts/dot/commands/security.sh +2 -1
- package/scripts/dot/commands/tools.sh +2 -1
- package/scripts/fonts/install-nerd-fonts.sh +2 -1
- package/scripts/fonts/patch-fonts.sh +2 -1
- package/scripts/git-hooks/install.sh +2 -1
- package/scripts/git-hooks/pre-commit-audit.sh +4 -3
- package/scripts/lib/secrets_provider.sh +2 -1
- package/scripts/ops/ai-setup.sh +2 -1
- package/scripts/ops/bundle.sh +3 -2
- package/scripts/ops/chaos.sh +2 -1
- package/scripts/ops/chezmoi-apply.sh +19 -5
- package/scripts/ops/chezmoi-diff.sh +2 -1
- package/scripts/ops/chezmoi-remove.sh +2 -1
- package/scripts/ops/chezmoi-update.sh +2 -1
- package/scripts/ops/heal-chezmoi.sh +2 -1
- package/scripts/ops/heal-system.sh +2 -1
- package/scripts/ops/heal-tools.sh +2 -1
- package/scripts/ops/heal.sh +2 -1
- package/scripts/ops/post-apply-repair.sh +2 -1
- package/scripts/ops/prewarm.sh +2 -1
- package/scripts/ops/release.sh +2 -1
- package/scripts/ops/rollback.sh +2 -1
- package/scripts/ops/setup.sh +2 -1
- package/scripts/ops/teleport.sh +2 -1
- package/scripts/qa/check-version-consistency.sh +2 -1
- package/scripts/qa/coverage-baseline.sh +2 -1
- package/scripts/qa/docs-coverage.sh +2 -1
- package/scripts/qa/reliability-audit.sh +2 -1
- package/scripts/qa/scorecard-snapshot.sh +2 -1
- package/scripts/qa/traceability-coverage.sh +2 -1
- package/scripts/qa/validate-examples.sh +2 -1
- package/scripts/qa/wsl-contract.sh +2 -1
- package/scripts/secrets/age-init.sh +2 -1
- package/scripts/secrets/create-secrets-file.sh +2 -1
- package/scripts/secrets/encrypt-ssh-key.sh +2 -1
- package/scripts/security/backup.sh +2 -1
- package/scripts/security/check-disclosure-key-expiry.sh +2 -1
- package/scripts/security/dns-doh.sh +2 -1
- package/scripts/security/encryption-check.sh +2 -1
- package/scripts/security/enforce-policies.sh +2 -1
- package/scripts/security/firewall.sh +2 -1
- package/scripts/security/lock-configs.sh +2 -1
- package/scripts/security/lock-screen.sh +2 -1
- package/scripts/security/manage-secrets.sh +2 -1
- package/scripts/security/ssh-cert.sh +2 -1
- package/scripts/security/telemetry-kill.sh +2 -1
- package/scripts/security/usb-safety.sh +2 -1
- package/scripts/theme/apply-gnome-theme.sh +2 -1
- package/scripts/theme/extract-heic-frames.sh +2 -1
- package/scripts/theme/extract-theme.py +2 -1
- package/scripts/theme/install-boot-logo.sh +2 -1
- package/scripts/theme/install-catppuccin-themes.sh +2 -1
- package/scripts/theme/install-cursors.sh +2 -1
- package/scripts/theme/install-file-icons.sh +2 -1
- package/scripts/theme/install-grub-theme.sh +2 -1
- package/scripts/theme/install-lock-icon.sh +2 -1
- package/scripts/theme/merge-wallpaper.sh +2 -1
- package/scripts/theme/rebuild-themes.sh +26 -3
- package/scripts/theme/switch.sh +3 -2
- package/scripts/theme/wallpaper-rotate.sh +2 -1
- package/scripts/theme/wallpaper-sync.sh +3 -2
- package/scripts/tools/cmatrix.sh +2 -1
- package/scripts/tools/detect-collisions.py +2 -1
- package/scripts/tools/emoji-picker.sh +2 -1
- package/scripts/tools/figlet-banner.sh +2 -1
- package/scripts/tools/log-rotate.sh +2 -1
- package/scripts/tools/lolcat-wrap.sh +2 -1
- package/scripts/tools/pipes.sh +2 -1
- package/scripts/tuning/linux.sh +2 -1
- package/scripts/tuning/macos.sh +2 -1
- package/scripts/uninstall.sh +2 -1
- 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.
|
|
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.
|
|
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/
|
|
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.
|
|
56
|
-
echo "
|
|
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`) —
|
|
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
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/
|
|
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
|
[](https://github.com/sebastienrousseau/dotfiles/actions)
|
|
10
|
-
[](https://github.com/sebastienrousseau/dotfiles/releases/tag/v0.2.505)
|
|
11
11
|
[](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.
|
|
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)
|
package/docs/interop/A2A.md
CHANGED
|
@@ -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](/
|
|
12
|
-
- [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.
|
|
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** |
|
|
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/
|
|
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/
|
|
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=
|
|
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](/
|
|
24
|
-
- [agent-profiles.json](/
|
|
25
|
-
- [mcp-policy.json](/
|
|
26
|
-
- [mcp-registry.json](/
|
|
27
|
-
- [model-registry.json](/
|
|
28
|
-
- [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](/
|
|
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](/
|
|
25
|
-
Approved package pins live in [mcp-lock.json](/
|
|
26
|
-
Tracked server registry entries live in [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](/
|
|
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](
|
|
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](
|
|
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](
|
|
19
|
-
| Trivy container | `aquasec/trivy` | Pinned tag in workflow | Container tag in [security-enhanced.yml](
|
|
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](
|
|
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
|
-
#
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
#
|
|
3
|
-
#
|
|
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
|
-
#
|
|
3
|
-
#
|
|
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
|
-
#
|
|
3
|
-
#
|
|
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
|
package/scripts/demo/record.sh
CHANGED