@sebastienrousseau/dotfiles 0.2.469 → 0.2.499

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 (221) hide show
  1. package/docs/ARCHITECTURE.md +62 -0
  2. package/docs/COMPLIANCE.md +47 -0
  3. package/docs/COPYRIGHT +6 -0
  4. package/docs/OPERATIONS.md +103 -0
  5. package/docs/PLAN.md +161 -0
  6. package/docs/PR_DESCRIPTION.md +150 -0
  7. package/docs/ROADMAP.md +148 -0
  8. package/docs/ROADMAP_legacy.md +556 -0
  9. package/docs/SECURITY_CHECKLIST.md +25 -0
  10. package/docs/TASK.md +99 -0
  11. package/docs/WALKTHROUGH.md +46 -0
  12. package/package.json +64 -76
  13. package/scripts/backup.sh +142 -0
  14. package/{dist/scripts → scripts}/banner.sh +1 -1
  15. package/scripts/benchmark.sh +20 -0
  16. package/{dist/scripts → scripts}/build.sh +1 -1
  17. package/{dist/scripts → scripts}/clean.sh +1 -1
  18. package/{dist/scripts → scripts}/compile.sh +1 -1
  19. package/{dist/scripts → scripts}/copy.sh +1 -1
  20. package/scripts/detect-collisions.py +84 -0
  21. package/scripts/doctor.sh +79 -0
  22. package/{dist/scripts → scripts}/dotfiles.sh +1 -1
  23. package/{dist/scripts → scripts}/download.sh +1 -1
  24. package/{dist/scripts → scripts}/help.sh +1 -1
  25. package/scripts/lock-configs.sh +57 -0
  26. package/scripts/package.sh +46 -0
  27. package/{dist/scripts → scripts}/ssh.sh +1 -1
  28. package/scripts/teleport.sh +23 -0
  29. package/scripts/test-aliases.sh +25 -0
  30. package/scripts/test_smoke.sh +88 -0
  31. package/{dist/scripts → scripts}/unpack.sh +1 -1
  32. package/scripts/verify_state.sh +60 -0
  33. package/templates/projects/go/README.md +3 -0
  34. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +7 -0
  35. package/templates/projects/go/go.mod +3 -0
  36. package/templates/projects/node/README.md +3 -0
  37. package/templates/projects/node/package.json +10 -0
  38. package/templates/projects/node/src/index.js +2 -0
  39. package/templates/projects/python/README.md +3 -0
  40. package/templates/projects/python/pyproject.toml +10 -0
  41. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  42. package/templates/projects/python/tests/test_basic.py +2 -0
  43. package/LICENSE +0 -1283
  44. package/README.md +0 -398
  45. package/dist/Makefile +0 -140
  46. package/dist/bin/backup.d.ts +0 -3
  47. package/dist/bin/backup.d.ts.map +0 -1
  48. package/dist/bin/backup.js +0 -4
  49. package/dist/bin/backup.js.map +0 -1
  50. package/dist/bin/constants.d.ts +0 -7
  51. package/dist/bin/constants.d.ts.map +0 -1
  52. package/dist/bin/constants.js +0 -2
  53. package/dist/bin/constants.js.map +0 -1
  54. package/dist/bin/copy.d.ts +0 -3
  55. package/dist/bin/copy.d.ts.map +0 -1
  56. package/dist/bin/copy.js +0 -3
  57. package/dist/bin/copy.js.map +0 -1
  58. package/dist/bin/dotfiles.d.ts +0 -3
  59. package/dist/bin/dotfiles.d.ts.map +0 -1
  60. package/dist/bin/dotfiles.js +0 -2
  61. package/dist/bin/dotfiles.js.map +0 -1
  62. package/dist/bin/download.d.ts +0 -3
  63. package/dist/bin/download.d.ts.map +0 -1
  64. package/dist/bin/download.js +0 -2
  65. package/dist/bin/download.js.map +0 -1
  66. package/dist/bin/index.d.ts +0 -2
  67. package/dist/bin/index.d.ts.map +0 -1
  68. package/dist/bin/index.js +0 -1
  69. package/dist/bin/index.js.map +0 -1
  70. package/dist/bin/transfer.d.ts +0 -3
  71. package/dist/bin/transfer.d.ts.map +0 -1
  72. package/dist/bin/transfer.js +0 -4
  73. package/dist/bin/transfer.js.map +0 -1
  74. package/dist/bin/unpack.d.ts +0 -3
  75. package/dist/bin/unpack.d.ts.map +0 -1
  76. package/dist/bin/unpack.js +0 -3
  77. package/dist/bin/unpack.js.map +0 -1
  78. package/dist/filesizes.txt +0 -382
  79. package/dist/lib/README.md +0 -86
  80. package/dist/lib/aliases/README.md +0 -57
  81. package/dist/lib/aliases/archives/README.md +0 -145
  82. package/dist/lib/aliases/archives/archives.aliases.sh +0 -114
  83. package/dist/lib/aliases/cd/README.md +0 -146
  84. package/dist/lib/aliases/cd/cd.aliases.sh +0 -51
  85. package/dist/lib/aliases/chmod/README.md +0 -160
  86. package/dist/lib/aliases/chmod/chmod.aliases.sh +0 -107
  87. package/dist/lib/aliases/clear/README.md +0 -37
  88. package/dist/lib/aliases/clear/clear.aliases.sh +0 -71
  89. package/dist/lib/aliases/configuration/README.md +0 -39
  90. package/dist/lib/aliases/configuration/configuration.aliases.sh +0 -70
  91. package/dist/lib/aliases/default/README.md +0 -40
  92. package/dist/lib/aliases/default/default.aliases.sh +0 -139
  93. package/dist/lib/aliases/dig/README.md +0 -37
  94. package/dist/lib/aliases/dig/dig.aliases.sh +0 -43
  95. package/dist/lib/aliases/disk-usage/README.md +0 -36
  96. package/dist/lib/aliases/disk-usage/du.aliases.sh +0 -84
  97. package/dist/lib/aliases/editor/README.md +0 -53
  98. package/dist/lib/aliases/editor/editor.aliases.sh +0 -26
  99. package/dist/lib/aliases/find/README.md +0 -46
  100. package/dist/lib/aliases/find/find.aliases.sh +0 -60
  101. package/dist/lib/aliases/gcloud/README.md +0 -63
  102. package/dist/lib/aliases/gcloud/gcloud.aliases.sh +0 -335
  103. package/dist/lib/aliases/git/README.md +0 -153
  104. package/dist/lib/aliases/git/git.aliases.sh +0 -544
  105. package/dist/lib/aliases/gnu/README.md +0 -89
  106. package/dist/lib/aliases/gnu/gnucoreutils-aliases.sh +0 -150
  107. package/dist/lib/aliases/heroku/README.md +0 -430
  108. package/dist/lib/aliases/heroku/heroku.aliases.sh +0 -1053
  109. package/dist/lib/aliases/interactive/README.md +0 -55
  110. package/dist/lib/aliases/interactive/interactive.aliases.sh +0 -50
  111. package/dist/lib/aliases/list/README.md +0 -131
  112. package/dist/lib/aliases/list/list.aliases.sh +0 -132
  113. package/dist/lib/aliases/macOS/README.md +0 -42
  114. package/dist/lib/aliases/macOS/macos.aliases.sh +0 -65
  115. package/dist/lib/aliases/make/README.md +0 -32
  116. package/dist/lib/aliases/make/make.aliases.sh +0 -35
  117. package/dist/lib/aliases/mkdir/README.md +0 -30
  118. package/dist/lib/aliases/mkdir/mkdir.aliases.sh +0 -29
  119. package/dist/lib/aliases/npm/README.md +0 -41
  120. package/dist/lib/aliases/npm/npm.aliases.sh +0 -61
  121. package/dist/lib/aliases/permission/README.md +0 -47
  122. package/dist/lib/aliases/permission/permission.aliases.sh +0 -73
  123. package/dist/lib/aliases/pnpm/README.md +0 -53
  124. package/dist/lib/aliases/pnpm/pnpm.aliases.sh +0 -76
  125. package/dist/lib/aliases/ps/README.md +0 -29
  126. package/dist/lib/aliases/ps/ps.aliases.sh +0 -20
  127. package/dist/lib/aliases/python/python.aliases.sh +0 -141
  128. package/dist/lib/aliases/rsync/README.md +0 -25
  129. package/dist/lib/aliases/rsync/rsync.aliases.sh +0 -17
  130. package/dist/lib/aliases/rust/README.md +0 -182
  131. package/dist/lib/aliases/rust/rust.aliases.sh +0 -119
  132. package/dist/lib/aliases/subversion/README.md +0 -66
  133. package/dist/lib/aliases/subversion/subversion.aliases.sh +0 -47
  134. package/dist/lib/aliases/sudo/README.md +0 -27
  135. package/dist/lib/aliases/sudo/sudo.aliases.sh +0 -20
  136. package/dist/lib/aliases/tmux/README.md +0 -31
  137. package/dist/lib/aliases/tmux/tmux.aliases.sh +0 -36
  138. package/dist/lib/aliases/update/README.md +0 -38
  139. package/dist/lib/aliases/update/update.aliases.sh +0 -310
  140. package/dist/lib/aliases/uuid/README.md +0 -24
  141. package/dist/lib/aliases/uuid/uuid.aliases.sh +0 -19
  142. package/dist/lib/aliases/wget/README.md +0 -27
  143. package/dist/lib/aliases/wget/wget.aliases.sh +0 -22
  144. package/dist/lib/aliases.sh +0 -50
  145. package/dist/lib/configurations/README.md +0 -18
  146. package/dist/lib/configurations/bash/bashrc +0 -167
  147. package/dist/lib/configurations/curl/cacert.pem +0 -3460
  148. package/dist/lib/configurations/curl/curlrc +0 -53
  149. package/dist/lib/configurations/default/color.sh +0 -24
  150. package/dist/lib/configurations/default/constants.sh +0 -43
  151. package/dist/lib/configurations/default/editor.sh +0 -18
  152. package/dist/lib/configurations/default/prompt.sh +0 -48
  153. package/dist/lib/configurations/gem/gemrc +0 -9
  154. package/dist/lib/configurations/input/inputrc +0 -23
  155. package/dist/lib/configurations/jshint/jshintrc +0 -37
  156. package/dist/lib/configurations/nano/nanorc +0 -35
  157. package/dist/lib/configurations/profile/profile +0 -37
  158. package/dist/lib/configurations/prompt/prompt.sh +0 -81
  159. package/dist/lib/configurations/tmux/default +0 -18
  160. package/dist/lib/configurations/tmux/display +0 -30
  161. package/dist/lib/configurations/tmux/linux +0 -18
  162. package/dist/lib/configurations/tmux/navigation +0 -30
  163. package/dist/lib/configurations/tmux/panes +0 -10
  164. package/dist/lib/configurations/tmux/theme +0 -29
  165. package/dist/lib/configurations/tmux/tmux +0 -21
  166. package/dist/lib/configurations/vim/vimrc +0 -193
  167. package/dist/lib/configurations/wget/wgetrc +0 -40
  168. package/dist/lib/configurations/zsh/zshrc +0 -50
  169. package/dist/lib/configurations.sh +0 -45
  170. package/dist/lib/functions/README.md +0 -92
  171. package/dist/lib/functions/apihealth.sh +0 -277
  172. package/dist/lib/functions/apilatency.sh +0 -157
  173. package/dist/lib/functions/apiload.sh +0 -165
  174. package/dist/lib/functions/backup.sh +0 -143
  175. package/dist/lib/functions/cdls.sh +0 -60
  176. package/dist/lib/functions/curlheader.sh +0 -78
  177. package/dist/lib/functions/curlstatus.sh +0 -74
  178. package/dist/lib/functions/curltime.sh +0 -75
  179. package/dist/lib/functions/encode64.sh +0 -107
  180. package/dist/lib/functions/environment.sh +0 -78
  181. package/dist/lib/functions/extract.sh +0 -86
  182. package/dist/lib/functions/freespace.sh +0 -67
  183. package/dist/lib/functions/genpwd.sh +0 -105
  184. package/dist/lib/functions/goto.sh +0 -67
  185. package/dist/lib/functions/hexdump.sh +0 -96
  186. package/dist/lib/functions/hiddenfiles.sh +0 -77
  187. package/dist/lib/functions/hostinfo.sh +0 -98
  188. package/dist/lib/functions/hstats.sh +0 -75
  189. package/dist/lib/functions/httpdebug.sh +0 -113
  190. package/dist/lib/functions/kebabcase.sh +0 -61
  191. package/dist/lib/functions/keygen.sh +0 -194
  192. package/dist/lib/functions/last.sh +0 -112
  193. package/dist/lib/functions/logout.sh +0 -120
  194. package/dist/lib/functions/lowercase.sh +0 -61
  195. package/dist/lib/functions/matrix.sh +0 -216
  196. package/dist/lib/functions/mount_read_only.sh +0 -11
  197. package/dist/lib/functions/myproc.sh +0 -9
  198. package/dist/lib/functions/prependpath.sh +0 -21
  199. package/dist/lib/functions/ql.sh +0 -9
  200. package/dist/lib/functions/rd.sh +0 -17
  201. package/dist/lib/functions/remove_disk.sh +0 -11
  202. package/dist/lib/functions/ren.sh +0 -73
  203. package/dist/lib/functions/sentencecase.sh +0 -63
  204. package/dist/lib/functions/showhiddenfiles.sh +0 -14
  205. package/dist/lib/functions/size.sh +0 -16
  206. package/dist/lib/functions/snakecase.sh +0 -61
  207. package/dist/lib/functions/stopwatch.sh +0 -15
  208. package/dist/lib/functions/sysinfo.sh +0 -145
  209. package/dist/lib/functions/titlecase.sh +0 -65
  210. package/dist/lib/functions/uppercase.sh +0 -61
  211. package/dist/lib/functions/view-source.sh +0 -9
  212. package/dist/lib/functions/vscode.sh +0 -32
  213. package/dist/lib/functions/whoisport.sh +0 -14
  214. package/dist/lib/functions/zipf.sh +0 -16
  215. package/dist/lib/functions.sh +0 -46
  216. package/dist/lib/history.sh +0 -90
  217. package/dist/lib/paths/README.md +0 -52
  218. package/dist/lib/paths/custom.paths.sh +0 -40
  219. package/dist/lib/paths/default.paths.sh +0 -37
  220. package/dist/lib/paths.sh +0 -46
  221. package/dist/scripts/backup.sh +0 -95
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.469) - <https://dotfiles.io>
3
+ # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.471) - <https://dotfiles.io>
4
4
  # Made with ♥ in London, UK by Sebastien Rousseau
5
5
  # Copyright (c) 2015-2025. All rights reserved
6
6
  # License: MIT
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.469) - <https://dotfiles.io>
3
+ # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.471) - <https://dotfiles.io>
4
4
  # Made with ♥ in London, UK by Sebastien Rousseau
5
5
  # Copyright (c) 2015-2025. All rights reserved
6
6
  # License: MIT
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.469) - <https://dotfiles.io>
3
+ # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.471) - <https://dotfiles.io>
4
4
  # Made with ♥ in London, UK by Sebastien Rousseau
5
5
  # Copyright (c) 2015-2025. All rights reserved
6
6
  # License: MIT
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env bash
2
+ # MIT License
3
+ # Copyright (c) 2026 Sebastien Rousseau
4
+ # See LICENSE file for details.
5
+
6
+ # Script: lock-configs.sh
7
+ # Description: Toggles immutability flags on critical configuration files.
8
+ # Usage: lock-configs [lock|unlock]
9
+
10
+ set -e
11
+
12
+ ACTION="${1:-lock}"
13
+ CRITICAL_FILES=(
14
+ "$HOME/.zshrc"
15
+ "$HOME/.bashrc"
16
+ "$HOME/.profile"
17
+ )
18
+
19
+ # Determine OS command for immutability
20
+ if [[ "$OSTYPE" == "darwin"* ]]; then
21
+ LOCK_CMD="chflags uchg"
22
+ UNLOCK_CMD="chflags nouchg"
23
+ CHECK_CMD="ls -lO"
24
+ else
25
+ # Linux (requires root usually, but we'll try)
26
+ if command -v chattr >/dev/null; then
27
+ LOCK_CMD="sudo chattr +i"
28
+ UNLOCK_CMD="sudo chattr -i"
29
+ CHECK_CMD="lsattr"
30
+ else
31
+ echo "❌ 'chattr' not found. Cannot set immutability on Linux without it."
32
+ exit 1
33
+ fi
34
+ fi
35
+
36
+ if [[ "$ACTION" == "lock" ]]; then
37
+ echo "🔒 Locking critical configuration files..."
38
+ CMD="$LOCK_CMD"
39
+ elif [[ "$ACTION" == "unlock" ]]; then
40
+ echo "🔓 Unlocking critical configuration files..."
41
+ CMD="$UNLOCK_CMD"
42
+ else
43
+ echo "Usage: $0 [lock|unlock]"
44
+ exit 1
45
+ fi
46
+
47
+ for file in "${CRITICAL_FILES[@]}"; do
48
+ if [[ -f "$file" ]]; then
49
+ echo "Processing: $file"
50
+ $CMD "$file" || echo "⚠️ Failed to modify flags for $file (permission denied?)"
51
+ fi
52
+ done
53
+
54
+ echo "Done. Environment state:"
55
+ for file in "${CRITICAL_FILES[@]}"; do
56
+ [[ -f "$file" ]] && $CHECK_CMD "$file"
57
+ done
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env bash
2
+ # Script: package.sh
3
+ # Description: Bundles the dotfiles for distribution or backup.
4
+ # Generates a standard .tar.gz archive and validates structure.
5
+
6
+ set -e
7
+
8
+ VERSION="${1:-v0.2.471}"
9
+ DIST_DIR="dist"
10
+ ARCHIVE_NAME="dotfiles-${VERSION}.tar.gz"
11
+
12
+ echo "📦 Packaging Dotfiles (${VERSION})..."
13
+
14
+ # Create dist directory
15
+ mkdir -p "$DIST_DIR"
16
+
17
+ # Create artifact manifest
18
+ echo "Manifest generated at $(date)" > "$DIST_DIR/MANIFEST.txt"
19
+ echo "Version: ${VERSION}" >> "$DIST_DIR/MANIFEST.txt"
20
+ echo "Commit: $(git rev-parse HEAD)" >> "$DIST_DIR/MANIFEST.txt"
21
+
22
+ # Archive core files (excluding sensitive data/git)
23
+ # Using git archive for clean export if possible, fallback to tar
24
+ if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
25
+ echo " -> EXPORT: Using git archive..."
26
+ git archive --format=tar.gz \
27
+ --output="$DIST_DIR/$ARCHIVE_NAME" \
28
+ --prefix="dotfiles-${VERSION}/" \
29
+ HEAD
30
+ else
31
+ echo " -> EXPORT: Using tar (fallback)..."
32
+ tar --exclude='.git' \
33
+ --exclude='dist' \
34
+ --exclude='secrets' \
35
+ -czf "$DIST_DIR/$ARCHIVE_NAME" .
36
+ fi
37
+
38
+ echo " -> CHECKSUM: Generating sha256..."
39
+ if command -v shasum >/dev/null; then
40
+ shasum -a 256 "$DIST_DIR/$ARCHIVE_NAME" > "$DIST_DIR/${ARCHIVE_NAME}.sha256"
41
+ else
42
+ sha256sum "$DIST_DIR/$ARCHIVE_NAME" > "$DIST_DIR/${ARCHIVE_NAME}.sha256"
43
+ fi
44
+
45
+ echo "✅ Package created at ${DIST_DIR}/${ARCHIVE_NAME}"
46
+ echo " Size: $(du -h "$DIST_DIR/$ARCHIVE_NAME" | cut -f1)"
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.469) - <https://dotfiles.io>
3
+ # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.471) - <https://dotfiles.io>
4
4
  # Made with ♥ in London, UK by Sebastien Rousseau
5
5
  # Copyright (c) 2015-2025. All rights reserved
6
6
  # License: MIT
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env bash
2
+ # Script: teleport.sh
3
+ # Description: Deploys dotfiles to a remote host ephemerally.
4
+ # Usage: ./teleport.sh user@hostname
5
+
6
+ set -e
7
+
8
+ TARGET="$1"
9
+
10
+ if [[ -z "$TARGET" ]]; then
11
+ echo "Usage: $0 user@host"
12
+ exit 1
13
+ fi
14
+
15
+ echo "🚀 Teleporting dotfiles to ${TARGET}..."
16
+
17
+ # 1. Archive the current state
18
+ # 2. Pipe to SSH
19
+ # 3. Extract in remote home directory
20
+ chezmoi archive | ssh "$TARGET" "tar xz -C ~"
21
+
22
+ echo "✅ Teleport successful!"
23
+ echo " Note: Changes are applied to files, but shell may need restart or sourcing."
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+ # MIT License
3
+ # Copyright (c) 2026 Sebastien Rousseau
4
+ # See LICENSE file for details.
5
+
6
+ # Script: test-aliases.sh
7
+ # Description: Verifies disjoint alias files for syntax errors.
8
+
9
+ set -e
10
+
11
+ echo "Testing alias syntax..."
12
+
13
+ ALIAS_DIR="$HOME/.local/share/chezmoi/.chezmoitemplates/aliases"
14
+
15
+ find "$ALIAS_DIR" -name "*.aliases.sh" | while read -r file; do
16
+ # Check for syntax errors using bash -n
17
+ if bash -n "$file"; then
18
+ echo "✅ Checked: $(basename "$file")"
19
+ else
20
+ echo "❌ Syntax Error: $(basename "$file")"
21
+ exit 1
22
+ fi
23
+ done
24
+
25
+ echo "All alias files passed syntax check."
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env bash
2
+ set -uo pipefail
3
+
4
+ # Colors for output
5
+ GREEN='\033[0;32m'
6
+ RED='\033[0;31m'
7
+ NC='\033[0m' # No Color
8
+
9
+ echo "----------------------------------------------------------------"
10
+ echo "🔥 Running Dotfiles Smoke Tests..."
11
+ echo "----------------------------------------------------------------"
12
+
13
+ failed=0
14
+
15
+ check_cmd() {
16
+ local cmd=$1
17
+ if command -v "$cmd" >/dev/null 2>&1; then
18
+ if [ "$cmd" = "tmux" ]; then
19
+ local version
20
+ version=$($cmd -V 2>/dev/null || echo "v?")
21
+ else
22
+ local version
23
+ version=$($cmd --version 2>/dev/null || echo "v?")
24
+ fi
25
+ echo -e "${GREEN}✔ Found: $cmd ($version)${NC}"
26
+ else
27
+ echo -e "${RED}✘ Missing: $cmd${NC}"
28
+ failed=1
29
+ fi
30
+ }
31
+
32
+ check_cask() {
33
+ local app=$1
34
+ # Skip GUI checks in CI or on Linux
35
+ if [[ "${CI:-}" == "true" ]] || [[ "$(uname -s)" == "Linux" ]]; then
36
+ echo -e "${GREEN}○ Skipping GUI App: $app (CI/Linux detected)${NC}"
37
+ return 0
38
+ fi
39
+
40
+ if [ -d "/Applications/$app.app" ] || [ -d "${HOME}/Applications/$app.app" ]; then
41
+ echo -e "${GREEN}✔ Found App: $app${NC}"
42
+ else
43
+ # Fallback check for CLI tools installed via cask (e.g. ghostty might be CLI accessible)
44
+ if command -v "$app" >/dev/null 2>&1; then
45
+ echo -e "${GREEN}✔ Found App (CLI): $app${NC}"
46
+ else
47
+ echo -e "${RED}✘ Missing App: $app${NC}"
48
+ failed=1
49
+ fi
50
+ fi
51
+ }
52
+
53
+ echo "Testing Core Toolchain..."
54
+ check_cmd git
55
+ check_cmd chezmoi
56
+ check_cmd age
57
+ check_cmd zsh
58
+
59
+ if [ -n "${DOTFILES_CI_SKIP_EXTRAS:-}" ]; then
60
+ echo "Skipping optional tool checks (CI mode detected)"
61
+ else
62
+ echo "Testing Modern Replacements..."
63
+ check_cmd rg
64
+ check_cmd eza
65
+ check_cmd bat
66
+ check_cmd fzf
67
+ check_cmd zoxide
68
+
69
+ echo "Testing Roadmap Additions..."
70
+ check_cmd gh
71
+ check_cmd nvim
72
+ check_cmd tmux
73
+ check_cmd yazi
74
+ check_cmd zellij
75
+ fi
76
+
77
+ echo "Testing GUI Apps (Casks)..."
78
+ check_cask "Ghostty"
79
+ check_cask "Zed"
80
+
81
+ echo "----------------------------------------------------------------"
82
+ if [ $failed -eq 0 ]; then
83
+ echo -e "${GREEN}✅ All Smoke Tests Passed!${NC}"
84
+ exit 0
85
+ else
86
+ echo -e "${RED}❌ Some tests failed.${NC}"
87
+ exit 1
88
+ fi
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
2
 
3
- # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.469) - <https://dotfiles.io>
3
+ # 🅳🅾🆃🅵🅸🅻🅴🆂 (v0.2.471) - <https://dotfiles.io>
4
4
  # Made with ♥ in London, UK by Sebastien Rousseau
5
5
  # Copyright (c) 2015-2025. All rights reserved
6
6
  # License: MIT
@@ -0,0 +1,60 @@
1
+ #!/usr/bin/env bash
2
+ # MIT License
3
+ # Copyright (c) 2026 Sebastien Rousseau
4
+ # See LICENSE file for details.
5
+
6
+ # Script: verify_state.sh
7
+ # Description: Final verification of the dotfiles environment state.
8
+
9
+ set -e
10
+
11
+ echo "🔍 Starting Final Environment Verification..."
12
+
13
+ Errors=0
14
+
15
+ check_file() {
16
+ if [[ ! -f "$1" ]]; then
17
+ echo "❌ Missing file: $1"
18
+ Errors=$((Errors + 1))
19
+ else
20
+ echo "✅ Found file: $1"
21
+ fi
22
+ }
23
+
24
+ check_alias_in_config() {
25
+ if ! grep -q "$1" "$HOME/.config/shell/aliases.sh"; then
26
+ echo "❌ Missing alias definition '$1' in built config"
27
+ Errors=$((Errors + 1))
28
+ else
29
+ echo "✅ Verified alias: $1"
30
+ fi
31
+ }
32
+
33
+ # 1. Verify Docs
34
+ check_file ".chezmoitemplates/aliases/security/README.md"
35
+ check_file ".chezmoitemplates/aliases/legal/README.md"
36
+
37
+ # 2. Verify Scripts
38
+ check_file "scripts/lock-configs.sh"
39
+ check_file "scripts/detect-collisions.py"
40
+ check_file "scripts/test-aliases.sh"
41
+
42
+ # 3. Verify Generated Config Content (Key Features)
43
+ # Security
44
+ check_alias_in_config "lock-configs"
45
+ check_alias_in_config "unlock-configs"
46
+ check_alias_in_config "enable-signing"
47
+ # Legal
48
+ check_alias_in_config "scan-licenses"
49
+ check_alias_in_config "add-headers"
50
+
51
+ # 4. Verify Workflows
52
+ check_file ".github/workflows/security-release.yml"
53
+
54
+ if [[ $Errors -eq 0 ]]; then
55
+ echo "🎉 Verification Passed! All systems nominal."
56
+ exit 0
57
+ else
58
+ echo "⚠️ Verification Failed with $Errors errors."
59
+ exit 1
60
+ fi
@@ -0,0 +1,3 @@
1
+ # __PROJECT_NAME__
2
+
3
+ Minimal Go project scaffold.
@@ -0,0 +1,7 @@
1
+ package main
2
+
3
+ import "fmt"
4
+
5
+ func main() {
6
+ fmt.Println("__PROJECT_NAME__")
7
+ }
@@ -0,0 +1,3 @@
1
+ module __PROJECT_NAME__
2
+
3
+ go 1.22
@@ -0,0 +1,3 @@
1
+ # __PROJECT_NAME__
2
+
3
+ Minimal Node project scaffold.
@@ -0,0 +1,10 @@
1
+ {
2
+ "name": "__PROJECT_NAME__",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "start": "node src/index.js",
8
+ "test": "node -e \"console.log('ok')\""
9
+ }
10
+ }
@@ -0,0 +1,2 @@
1
+ // eslint-disable-next-line no-console
2
+ console.log("__PROJECT_NAME__");
@@ -0,0 +1,3 @@
1
+ # __PROJECT_NAME__
2
+
3
+ Minimal Python project scaffold.
@@ -0,0 +1,10 @@
1
+ [project]
2
+ name = "__PROJECT_NAME__"
3
+ version = "0.1.0"
4
+ requires-python = ">=3.10"
5
+
6
+ dependencies = []
7
+
8
+ [build-system]
9
+ requires = ["hatchling"]
10
+ build-backend = "hatchling.build"
@@ -0,0 +1 @@
1
+ """__PROJECT_NAME__ package."""
@@ -0,0 +1,2 @@
1
+ def test_smoke():
2
+ assert True