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