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