@sebastienrousseau/dotfiles 0.2.503 → 0.2.505

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/CHANGELOG.md +86 -1
  2. package/README.md +5 -5
  3. package/docs/COPYRIGHT +1 -1
  4. package/docs/OPENCODE.md +1 -1
  5. package/docs/index.md +2 -2
  6. package/docs/interop/A2A.md +2 -2
  7. package/docs/manual/00-introduction.md +1 -1
  8. package/docs/manual/02-tutorials/01-first-install.md +1 -1
  9. package/docs/operations/RELEASE_PIPELINE.md +3 -3
  10. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +6 -6
  11. package/docs/security/AUTOMATION_SECRETS.md +1 -1
  12. package/docs/security/MCP_POLICY.md +4 -4
  13. package/docs/security/SECURITY_CHECKLIST.md +1 -1
  14. package/docs/security/SOUP_REGISTER.md +4 -4
  15. package/install.sh +98 -6
  16. package/package.json +1 -1
  17. package/scripts/README.md +3 -3
  18. package/scripts/ci/check-copyright-headers.sh +3 -2
  19. package/scripts/ci/check-shell-preamble.sh +3 -2
  20. package/scripts/ci/guard-gitleaks-checkout.sh +3 -2
  21. package/scripts/demo/record.sh +2 -1
  22. package/scripts/diagnostics/a2a-conformance.sh +2 -1
  23. package/scripts/diagnostics/alias-governance.sh +2 -1
  24. package/scripts/diagnostics/aliases-cheatsheet.sh +2 -1
  25. package/scripts/diagnostics/aliases-manifest.sh +2 -1
  26. package/scripts/diagnostics/benchmark.sh +3 -2
  27. package/scripts/diagnostics/conflicts.sh +2 -1
  28. package/scripts/diagnostics/doctor-unified.sh +3 -2
  29. package/scripts/diagnostics/doctor.sh +2 -1
  30. package/scripts/diagnostics/drift-dashboard.sh +2 -1
  31. package/scripts/diagnostics/health.sh +2 -1
  32. package/scripts/diagnostics/history-analysis.sh +2 -1
  33. package/scripts/diagnostics/mcp-doctor.sh +2 -1
  34. package/scripts/diagnostics/perf.sh +3 -2
  35. package/scripts/diagnostics/scorecard.sh +2 -1
  36. package/scripts/diagnostics/secret-governance.sh +2 -1
  37. package/scripts/diagnostics/security-score.sh +25 -5
  38. package/scripts/diagnostics/smoke-test.sh +2 -1
  39. package/scripts/diagnostics/snapshot.sh +2 -1
  40. package/scripts/diagnostics/verify.sh +2 -1
  41. package/scripts/diagnostics/verify_state.sh +2 -1
  42. package/scripts/diagnostics/version-locks.sh +13 -2
  43. package/scripts/diagnostics/workstation-attestation.sh +2 -1
  44. package/scripts/dot/commands/agent.sh +2 -1
  45. package/scripts/dot/commands/agents.sh +2 -1
  46. package/scripts/dot/commands/ai.sh +19 -33
  47. package/scripts/dot/commands/aliases.sh +2 -1
  48. package/scripts/dot/commands/appearance.sh +2 -1
  49. package/scripts/dot/commands/core.sh +2 -1
  50. package/scripts/dot/commands/diagnostics.sh +2 -1
  51. package/scripts/dot/commands/env-emit.sh +2 -1
  52. package/scripts/dot/commands/fleet.sh +12 -6
  53. package/scripts/dot/commands/init.sh +2 -1
  54. package/scripts/dot/commands/lint.sh +2 -1
  55. package/scripts/dot/commands/manual.sh +2 -1
  56. package/scripts/dot/commands/meta.sh +2 -1
  57. package/scripts/dot/commands/patterns.sh +2 -1
  58. package/scripts/dot/commands/registry.sh +2 -1
  59. package/scripts/dot/commands/restore.sh +2 -1
  60. package/scripts/dot/commands/secrets.sh +2 -1
  61. package/scripts/dot/commands/security.sh +2 -1
  62. package/scripts/dot/commands/tools.sh +2 -1
  63. package/scripts/fonts/install-nerd-fonts.sh +2 -1
  64. package/scripts/fonts/patch-fonts.sh +2 -1
  65. package/scripts/git-hooks/install.sh +2 -1
  66. package/scripts/git-hooks/pre-commit-audit.sh +4 -3
  67. package/scripts/lib/secrets_provider.sh +2 -1
  68. package/scripts/ops/ai-setup.sh +2 -1
  69. package/scripts/ops/bundle.sh +3 -2
  70. package/scripts/ops/chaos.sh +2 -1
  71. package/scripts/ops/chezmoi-apply.sh +19 -5
  72. package/scripts/ops/chezmoi-diff.sh +2 -1
  73. package/scripts/ops/chezmoi-remove.sh +2 -1
  74. package/scripts/ops/chezmoi-update.sh +2 -1
  75. package/scripts/ops/heal-chezmoi.sh +2 -1
  76. package/scripts/ops/heal-system.sh +2 -1
  77. package/scripts/ops/heal-tools.sh +2 -1
  78. package/scripts/ops/heal.sh +2 -1
  79. package/scripts/ops/post-apply-repair.sh +2 -1
  80. package/scripts/ops/prewarm.sh +2 -1
  81. package/scripts/ops/release.sh +2 -1
  82. package/scripts/ops/rollback.sh +2 -1
  83. package/scripts/ops/setup.sh +2 -1
  84. package/scripts/ops/teleport.sh +2 -1
  85. package/scripts/qa/check-version-consistency.sh +2 -1
  86. package/scripts/qa/coverage-baseline.sh +2 -1
  87. package/scripts/qa/docs-coverage.sh +2 -1
  88. package/scripts/qa/reliability-audit.sh +2 -1
  89. package/scripts/qa/scorecard-snapshot.sh +2 -1
  90. package/scripts/qa/traceability-coverage.sh +2 -1
  91. package/scripts/qa/validate-examples.sh +2 -1
  92. package/scripts/qa/wsl-contract.sh +2 -1
  93. package/scripts/secrets/age-init.sh +2 -1
  94. package/scripts/secrets/create-secrets-file.sh +2 -1
  95. package/scripts/secrets/encrypt-ssh-key.sh +2 -1
  96. package/scripts/security/backup.sh +2 -1
  97. package/scripts/security/check-disclosure-key-expiry.sh +2 -1
  98. package/scripts/security/dns-doh.sh +2 -1
  99. package/scripts/security/encryption-check.sh +2 -1
  100. package/scripts/security/enforce-policies.sh +2 -1
  101. package/scripts/security/firewall.sh +2 -1
  102. package/scripts/security/lock-configs.sh +2 -1
  103. package/scripts/security/lock-screen.sh +2 -1
  104. package/scripts/security/manage-secrets.sh +2 -1
  105. package/scripts/security/ssh-cert.sh +2 -1
  106. package/scripts/security/telemetry-kill.sh +2 -1
  107. package/scripts/security/usb-safety.sh +2 -1
  108. package/scripts/theme/apply-gnome-theme.sh +2 -1
  109. package/scripts/theme/extract-heic-frames.sh +2 -1
  110. package/scripts/theme/extract-theme.py +2 -1
  111. package/scripts/theme/install-boot-logo.sh +2 -1
  112. package/scripts/theme/install-catppuccin-themes.sh +2 -1
  113. package/scripts/theme/install-cursors.sh +2 -1
  114. package/scripts/theme/install-file-icons.sh +2 -1
  115. package/scripts/theme/install-grub-theme.sh +2 -1
  116. package/scripts/theme/install-lock-icon.sh +2 -1
  117. package/scripts/theme/merge-wallpaper.sh +2 -1
  118. package/scripts/theme/rebuild-themes.sh +26 -3
  119. package/scripts/theme/switch.sh +3 -2
  120. package/scripts/theme/wallpaper-rotate.sh +2 -1
  121. package/scripts/theme/wallpaper-sync.sh +3 -2
  122. package/scripts/tools/cmatrix.sh +2 -1
  123. package/scripts/tools/detect-collisions.py +2 -1
  124. package/scripts/tools/emoji-picker.sh +2 -1
  125. package/scripts/tools/figlet-banner.sh +2 -1
  126. package/scripts/tools/log-rotate.sh +2 -1
  127. package/scripts/tools/lolcat-wrap.sh +2 -1
  128. package/scripts/tools/pipes.sh +2 -1
  129. package/scripts/tuning/linux.sh +2 -1
  130. package/scripts/tuning/macos.sh +2 -1
  131. package/scripts/uninstall.sh +2 -1
  132. package/scripts/version-sync.sh +21 -4
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Chaos Engineering: Randomly corrupt config files to test self-healing (dot heal)
4
5
  # USE WITH CAUTION: This intentionally breaks your environment.
5
6
 
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -9,11 +10,20 @@ source "$SCRIPT_DIR/../../lib/dot/ui.sh"
9
10
  # shellcheck source=../../lib/dot/log.sh
10
11
  # shellcheck disable=SC1091
11
12
  source "$SCRIPT_DIR/../../lib/dot/log.sh"
13
+ # shellcheck source=../../lib/dot/ai-install.sh
14
+ # shellcheck disable=SC1091
15
+ source "$SCRIPT_DIR/../../lib/dot/ai-install.sh"
12
16
  export DOT_COMMAND="apply"
13
17
 
14
- # Temp file cleanup
18
+ # Temp file cleanup. `set +u` guards the array expansion: on bash 3.2
19
+ # (macOS) expanding an empty array under `set -u` is an "unbound
20
+ # variable" error, which would fire on every clean `dot sync`.
15
21
  _TMPFILES=()
16
- cleanup() { rm -f "${_TMPFILES[@]}"; }
22
+ cleanup() {
23
+ set +u
24
+ rm -f "${_TMPFILES[@]}" 2>/dev/null
25
+ set -u
26
+ }
17
27
  trap cleanup EXIT
18
28
 
19
29
  # Help flag
@@ -148,9 +158,9 @@ check_cmd() {
148
158
  echo ""
149
159
  ui_header "AI provider CLI checks (optional)"
150
160
 
151
- # binary|mise_package|label
161
+ # binary|mise_package|label (claude uses the native installer, not mise)
152
162
  _AI_PROVIDERS=(
153
- "claude|npm:@anthropic-ai/claude-code|Claude Code"
163
+ "claude|native|Claude Code"
154
164
  "copilot|npm:@github/copilot|Copilot CLI"
155
165
  "gemini|npm:@google/gemini-cli|Gemini CLI"
156
166
  "sgpt|pipx:shell-gpt|Shell-GPT"
@@ -218,6 +228,10 @@ if [[ ${#_ai_missing[@]} -gt 0 ]] && [[ "${DOTFILES_NONINTERACTIVE:-0}" != "1" ]
218
228
  echo ""
219
229
  for _entry in "${_ai_to_install[@]}"; do
220
230
  IFS='|' read -r _bin _pkg _label <<<"$_entry"
231
+ if [[ "$_bin" == "claude" ]]; then
232
+ install_claude_native "$_label"
233
+ continue
234
+ fi
221
235
  if command -v gum &>/dev/null; then
222
236
  if gum spin --spinner dot --title "Installing $_label ($_pkg)" -- \
223
237
  mise use -g "$_pkg@latest" 2>&1; then
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  excludes=(scripts)
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  if [[ $# -lt 1 ]]; then
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  args=()
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # shellcheck disable=SC2034
4
5
  # =============================================================================
5
6
  # heal-chezmoi.sh — Chezmoi drift and backup repair functions for heal.sh
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # shellcheck disable=SC2034
4
5
  # =============================================================================
5
6
  # heal-system.sh — System-level repair functions for heal.sh
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # shellcheck disable=SC2034
4
5
  # =============================================================================
5
6
  # heal-tools.sh — Tool installation helpers for heal.sh
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # shellcheck disable=SC2034
4
5
  # =============================================================================
5
6
  # Dotfiles Heal Script - Auto-repair common dotfiles issues
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Pre-warm shell initialization caches for ultra-fast startup.
4
5
 
5
6
  set -euo pipefail
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # =============================================================================
4
5
  # Dotfiles Release Script
5
6
  # Orchestrates a new release: version bump, changelog, tag, and push
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # shellcheck disable=SC2034
4
5
  # =============================================================================
5
6
  # Dotfiles Rollback Script - Self-Healing Configuration Recovery
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Interactive setup for dotfiles preferences
4
5
  # Usage: dot setup
5
6
 
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Script: teleport.sh
4
5
  # Description: Deploys dotfiles to a remote host ephemerally.
5
6
  # Usage: ./teleport.sh user@hostname
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  #
4
5
  # Verify that every "live" version reference matches the canonical
5
6
  # version in .chezmoidata.toml. The intent is to catch drift between
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  #
4
5
  # Fetch the current OpenSSF Scorecard result and refresh the
5
6
  # per-check posture table in docs/security/SCORECARD.md.
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SECRETS_DIR="$HOME/.config/chezmoi"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  OUT_FILE="${1:-$HOME/.config/chezmoi/encrypted_secrets.env.age}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  KEY_PATH="${1:-$HOME/.ssh/id_ed25519}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## Create compressed backup of home directory.
4
5
  ##
5
6
  ## Archives the home directory (excluding cache and trash) to a timestamped
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  #
4
5
  # scripts/security/check-disclosure-key-expiry.sh
5
6
  #
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # Security Policy Enforcement Script
4
5
  # This script enforces security policies across the dotfiles repository
5
6
 
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## Configure system firewall with secure defaults.
4
5
  ##
5
6
  ## Enables firewall with deny-by-default policy and minimal exceptions.
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # MIT License
3
- # Copyright (c) 2026
3
+ # SPDX-License-Identifier: MIT
4
+ # Copyright (c) 2015-2026 Sebastien Rousseau
4
5
  # See LICENSE file for details.
5
6
 
6
7
  # Script: lock-configs.sh
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## Secure Configuration Management.
4
5
  ##
5
6
  ## Manages environment variables and secrets across local development.
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # shellcheck shell=bash
4
5
  set -euo pipefail
5
6
 
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## Apply GNOME Theme — Apply Catppuccin themes to GNOME desktop.
4
5
  ##
5
6
  ## Configures GTK theme, icon theme, cursor theme, shell theme,
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # extract-heic-frames.sh — extract per-frame PNGs from dynamic HEIC wallpapers.
4
5
  #
5
6
  # Apple's dynamic HEIC format packs two images (frame 0 = light, frame 1 =
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env python3
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # extract-theme.py — Generate a terminal theme from wallpaper dominant colors.
4
5
  #
5
6
  # Uses K-Means clustering in CIELAB color space for perceptually accurate
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  logo_path="${DOTFILES_BOOT_LOGO:-$HOME/.config/dotfiles/boot/logo.png}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## Catppuccin Theme Installer — Install Catppuccin themes for GNOME.
4
5
  ##
5
6
  ## Downloads and installs GTK themes, icon themes, cursor themes,
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  THEME="${DOTFILES_CURSOR_THEME:-Bibata-Modern-Ice}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  THEME="${DOTFILES_ICON_THEME:-Papirus}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  # Cross-platform sed in-place (BSD vs GNU)
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  icon_path="${DOTFILES_LOCK_ICON:-$HOME/.config/dotfiles/lock/icon.png}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # merge-wallpaper.sh — Merge dark+light wallpapers into a single dynamic HEIC.
4
5
  #
5
6
  # Creates an Apple-compatible dynamic HEIC with appearance metadata so macOS
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  # rebuild-themes.sh — Discover wallpapers and generate themes.toml dynamically.
4
5
  #
5
6
  # Scans system wallpaper directories and ~/Pictures/Wallpapers/ for images,
@@ -12,11 +13,33 @@
12
13
  # bash rebuild-themes.sh --list # List discovered wallpapers without rebuilding
13
14
  set -euo pipefail
14
15
 
16
+ # This script relies on associative arrays (`declare -A`) and `wait -n`,
17
+ # both of which need bash >= 4. macOS ships /bin/bash 3.2, where it would
18
+ # otherwise fail with cryptic "invalid option" / "bad array subscript"
19
+ # errors mid-run. Re-exec under a newer bash when one is available
20
+ # (Homebrew, MacPorts, mise), and fail with a clear, actionable message
21
+ # otherwise rather than corrupting a half-built themes.toml.
22
+ if ((BASH_VERSINFO[0] < 4)); then
23
+ for _newer_bash in \
24
+ /opt/homebrew/bin/bash \
25
+ /usr/local/bin/bash \
26
+ "${HOMEBREW_PREFIX:-}/bin/bash" \
27
+ "$(command -v bash 2>/dev/null || true)"; do
28
+ if [[ -n "$_newer_bash" && -x "$_newer_bash" ]] &&
29
+ "$_newer_bash" -c '((BASH_VERSINFO[0] >= 4))' 2>/dev/null; then
30
+ exec "$_newer_bash" "$0" "$@"
31
+ fi
32
+ done
33
+ echo "Error: 'dot theme rebuild' needs bash >= 4 (macOS ships bash 3.2)." >&2
34
+ echo " Install a newer bash and retry: brew install bash" >&2
35
+ exit 1
36
+ fi
37
+
15
38
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
39
  EXTRACT_SCRIPT="$SCRIPT_DIR/extract-theme.py"
17
40
  DOTFILES_DIR="${HOME}/.dotfiles"
18
41
 
19
- # Descend into the chezmoi source subdir when .chezmoiroot is present (v0.2.503+)
42
+ # Descend into the chezmoi source subdir when .chezmoiroot is present (post-reorg, chezmoi files under defaults/)
20
43
  CHEZMOI_SRC="$DOTFILES_DIR"
21
44
  if [[ -f "$DOTFILES_DIR/.chezmoiroot" ]]; then
22
45
  _sub="$(head -1 "$DOTFILES_DIR/.chezmoiroot" | tr -d '[:space:]')"
@@ -266,7 +289,7 @@ if [[ $TOTAL_WORK -gt 0 ]]; then
266
289
  fi
267
290
  ) &
268
291
 
269
- # Limit parallel jobs
292
+ # Limit parallel jobs (bash >= 4 guaranteed by the guard at the top).
270
293
  while [[ $(jobs -r | wc -l) -ge $JOBS ]]; do
271
294
  wait -n 2>/dev/null || true
272
295
  done
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  ## Theme Switcher — Switch between theme families and light/dark modes.
4
5
  ##
5
6
  ## Supports Tokyo Night, Catppuccin, Rose Pine, Kanagawa, and other
@@ -58,7 +59,7 @@ if [ -z "$SRC_DIR" ]; then
58
59
  exit 1
59
60
  fi
60
61
 
61
- # Descend into the chezmoi source subdir when .chezmoiroot is present (v0.2.503+)
62
+ # Descend into the chezmoi source subdir when .chezmoiroot is present (post-reorg, chezmoi files under defaults/)
62
63
  CHEZMOI_SRC="$SRC_DIR"
63
64
  if [[ -f "$SRC_DIR/.chezmoiroot" ]]; then
64
65
  _sub="$(head -1 "$SRC_DIR/.chezmoiroot" | tr -d '[:space:]')"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  WALLPAPER_DIR="${DOTFILES_WALLPAPER_DIR:-$HOME/Pictures/Wallpapers}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -14,7 +15,7 @@ WALLPAPER_DIR="${DOTFILES_WALLPAPER_DIR:-$HOME/Pictures/Wallpapers}"
14
15
  CHEZMOI_CFG="${XDG_CONFIG_HOME:-$HOME/.config}/chezmoi/chezmoi.toml"
15
16
 
16
17
  # Resolve dotfiles repo root, then descend into chezmoi source subdir if
17
- # .chezmoiroot is present (v0.2.503+, where chezmoi files live in defaults/)
18
+ # .chezmoiroot is present (where chezmoi files live in defaults/)
18
19
  _DOTFILES_ROOT="${HOME}/.dotfiles"
19
20
  [[ ! -d "$_DOTFILES_ROOT" && -d "${HOME}/.local/share/chezmoi" ]] && _DOTFILES_ROOT="${HOME}/.local/share/chezmoi"
20
21
  _CHEZMOI_SRC="$_DOTFILES_ROOT"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  if ! command -v cmatrix >/dev/null; then
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  # MIT License
3
- # Copyright (c) 2026
3
+ # SPDX-License-Identifier: MIT
4
+ # Copyright (c) 2015-2026 Sebastien Rousseau
4
5
  # See LICENSE file for details.
5
6
 
6
7
  import os
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  EMOJI_FILE="${EMOJI_FILE:-$HOME/.config/emoji/emoji.txt}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  text="${*:-${USER:-dotfiles}}"
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
2
+ # SPDX-License-Identifier: MIT
3
+ # Copyright (c) 2015-2026 Sebastien Rousseau
3
4
  set -euo pipefail
4
5
 
5
6
  LOG_DIR="${HOME}/.local/share"