@sebastienrousseau/dotfiles 0.2.481 → 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 (317) hide show
  1. package/docs/ARCHITECTURE.md +29 -196
  2. package/docs/COMPLIANCE.md +10 -10
  3. package/docs/COPYRIGHT +3 -4
  4. package/docs/OPERATIONS.md +38 -65
  5. package/docs/PLAN.md +3 -3
  6. package/docs/PR_DESCRIPTION.md +85 -84
  7. package/docs/ROADMAP.md +11 -11
  8. package/docs/ROADMAP_legacy.md +556 -0
  9. package/docs/SECURITY_CHECKLIST.md +1 -1
  10. package/docs/TASK.md +4 -4
  11. package/docs/WALKTHROUGH.md +33 -152
  12. package/package.json +17 -5
  13. package/scripts/backup.sh +142 -0
  14. package/scripts/banner.sh +20 -0
  15. package/scripts/benchmark.sh +20 -0
  16. package/scripts/build.sh +41 -0
  17. package/scripts/clean.sh +31 -0
  18. package/scripts/compile.sh +54 -0
  19. package/scripts/copy.sh +108 -0
  20. package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
  21. package/scripts/doctor.sh +79 -0
  22. package/scripts/dotfiles.sh +63 -0
  23. package/scripts/download.sh +35 -0
  24. package/scripts/help.sh +57 -0
  25. package/scripts/lock-configs.sh +57 -0
  26. package/scripts/package.sh +46 -0
  27. package/scripts/ssh.sh +55 -0
  28. package/scripts/teleport.sh +23 -0
  29. package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
  30. package/scripts/test_smoke.sh +88 -0
  31. package/scripts/unpack.sh +28 -0
  32. package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
  33. package/templates/projects/go/README.md +0 -4
  34. package/templates/projects/node/README.md +0 -4
  35. package/templates/projects/python/README.md +0 -4
  36. package/templates/projects/python/pyproject.toml +0 -15
  37. package/CHANGELOG.md +0 -285
  38. package/LICENSE +0 -1283
  39. package/README.md +0 -315
  40. package/docs/ALIASES.md +0 -128
  41. package/docs/FEATURES.md +0 -166
  42. package/docs/FONTS.md +0 -147
  43. package/docs/INSTALL.md +0 -119
  44. package/docs/KEYS.md +0 -40
  45. package/docs/KEY_ROTATION.md +0 -219
  46. package/docs/LEGACY_ROADMAP.md +0 -142
  47. package/docs/NEOVIM_IDE_GUIDE.md +0 -52
  48. package/docs/README.md +0 -269
  49. package/docs/REPO_AUDIT.md +0 -23
  50. package/docs/SCREENSHOTS.md +0 -116
  51. package/docs/SECRETS.md +0 -76
  52. package/docs/SECURITY.md +0 -30
  53. package/docs/TESTING.md +0 -190
  54. package/docs/TOOLS.md +0 -146
  55. package/docs/TROUBLESHOOTING.md +0 -112
  56. package/docs/UTILS.md +0 -105
  57. package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
  58. package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
  59. package/docs/adr/ADR-002-shell-performance.md +0 -121
  60. package/docs/adr/ADR-003-security-first.md +0 -140
  61. package/docs/adr/ADR-004-cli-architecture.md +0 -157
  62. package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
  63. package/docs/adr/ADR-006-shell-selection.md +0 -115
  64. package/docs/adr/README.md +0 -33
  65. package/docs/themes/README.md +0 -20
  66. package/dot_config/aider/aider.conf.yml +0 -32
  67. package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
  68. package/dot_config/ansible/ansible.cfg.tmpl +0 -11
  69. package/dot_config/atuin/config.toml +0 -23
  70. package/dot_config/bat/config +0 -8
  71. package/dot_config/brave-flags.conf.tmpl +0 -7
  72. package/dot_config/btop/btop.conf +0 -16
  73. package/dot_config/btop/themes/tokyonight.theme +0 -34
  74. package/dot_config/bun/bunfig.toml.tmpl +0 -33
  75. package/dot_config/claude/mcp_servers.json +0 -49
  76. package/dot_config/clippy.toml +0 -55
  77. package/dot_config/containers/containers.conf +0 -14
  78. package/dot_config/curl/dot_curlrc +0 -18
  79. package/dot_config/dlv/config.yml +0 -39
  80. package/dot_config/docker/config.json.tmpl +0 -15
  81. package/dot_config/dotfiles/boot/README.md +0 -11
  82. package/dot_config/dotfiles/grub/README.md +0 -11
  83. package/dot_config/dotfiles/lock/README.md +0 -11
  84. package/dot_config/dotfiles/versions.env.tmpl +0 -19
  85. package/dot_config/duf/duf.conf +0 -6
  86. package/dot_config/duti/defaults.duti +0 -5
  87. package/dot_config/emoji/emoji.txt +0 -34
  88. package/dot_config/fastfetch/config.jsonc +0 -28
  89. package/dot_config/firefox/user.js +0 -8
  90. package/dot_config/flatpak/flatpak.list +0 -4
  91. package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
  92. package/dot_config/gem/gemrc +0 -9
  93. package/dot_config/gh/config.yml +0 -12
  94. package/dot_config/ghostty/config.tmpl +0 -661
  95. package/dot_config/git/attributes +0 -12
  96. package/dot_config/git/config.tmpl +0 -77
  97. package/dot_config/git/ignore +0 -27
  98. package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
  99. package/dot_config/go/aliases.sh +0 -61
  100. package/dot_config/go/env.sh +0 -24
  101. package/dot_config/go/golangci.yml +0 -118
  102. package/dot_config/go/gopls.json +0 -30
  103. package/dot_config/goose/config.yaml +0 -29
  104. package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
  105. package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
  106. package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
  107. package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
  108. package/dot_config/htop/htoprc +0 -20
  109. package/dot_config/ice/README.md +0 -13
  110. package/dot_config/inputrc +0 -2
  111. package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
  112. package/dot_config/just/justfile +0 -104
  113. package/dot_config/k9s/config.yaml.tmpl +0 -65
  114. package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
  115. package/dot_config/karabiner/karabiner.json +0 -14
  116. package/dot_config/kitty/kitty.conf.tmpl +0 -517
  117. package/dot_config/lazydocker/config.yml +0 -186
  118. package/dot_config/lazygit/config.yml +0 -23
  119. package/dot_config/lsd/config.yaml +0 -19
  120. package/dot_config/mas/masapps.txt +0 -5
  121. package/dot_config/minikube/config.json +0 -13
  122. package/dot_config/mise/config.toml +0 -41
  123. package/dot_config/mongosh/mongoshrc.js +0 -67
  124. package/dot_config/mycli/myclirc +0 -67
  125. package/dot_config/nano/nanorc +0 -28
  126. package/dot_config/ncdu/config +0 -12
  127. package/dot_config/nvim/init.lua +0 -4
  128. package/dot_config/nvim/lazy-lock.json +0 -27
  129. package/dot_config/nvim/lua/config/autocmds.lua +0 -63
  130. package/dot_config/nvim/lua/config/keymaps.lua +0 -87
  131. package/dot_config/nvim/lua/config/lazy.lua +0 -34
  132. package/dot_config/nvim/lua/config/options.lua +0 -48
  133. package/dot_config/nvim/lua/plugins/coding.lua +0 -234
  134. package/dot_config/nvim/lua/plugins/dap.lua +0 -201
  135. package/dot_config/nvim/lua/plugins/editor.lua +0 -59
  136. package/dot_config/nvim/lua/plugins/git.lua +0 -9
  137. package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
  138. package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
  139. package/dot_config/nvim/lua/plugins/rust.lua +0 -33
  140. package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
  141. package/dot_config/nvim/lua/plugins/ui.lua +0 -537
  142. package/dot_config/nvim/snippets/all.lua +0 -9
  143. package/dot_config/nvim/snippets/python.lua +0 -16
  144. package/dot_config/pip/pip.conf.tmpl +0 -32
  145. package/dot_config/pypoetry/config.toml.tmpl +0 -6
  146. package/dot_config/pyrightconfig.json.tmpl +0 -5
  147. package/dot_config/raycast/README.md +0 -13
  148. package/dot_config/redis/redisclirc +0 -41
  149. package/dot_config/shell/00-container-detect.sh +0 -53
  150. package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
  151. package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
  152. package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
  153. package/dot_config/shell/50-logic-functions.sh.tmpl +0 -10
  154. package/dot_config/shell/90-theme-switch.sh +0 -70
  155. package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
  156. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
  157. package/dot_config/shell/Brewfile +0 -207
  158. package/dot_config/shell/Brewfile.cask +0 -92
  159. package/dot_config/shell/Brewfile.cli +0 -119
  160. package/dot_config/shell/README.md +0 -267
  161. package/dot_config/shell/custom/context_suggest.zsh +0 -68
  162. package/dot_config/shell/custom/error_analysis.zsh +0 -45
  163. package/dot_config/sops/dot_sops.yaml +0 -23
  164. package/dot_config/starship.toml.tmpl +0 -124
  165. package/dot_config/task/Taskfile.yml +0 -86
  166. package/dot_config/tflint/tflint.hcl.tmpl +0 -9
  167. package/dot_config/tmux/tmux.conf.tmpl +0 -181
  168. package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
  169. package/dot_config/vscode/extensions.txt +0 -11
  170. package/dot_config/vscode/settings.json.tmpl +0 -123
  171. package/dot_config/waybar/style.css +0 -8
  172. package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
  173. package/dot_config/wget/wgetrc +0 -12
  174. package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
  175. package/dot_config/yazi/yazi.toml +0 -40
  176. package/dot_config/zellij/config.kdl +0 -79
  177. package/dot_config/zsh/dot_zprofile +0 -13
  178. package/dot_config/zsh/dot_zshenv +0 -6
  179. package/dot_config/zsh/dot_zshrc.tmpl +0 -199
  180. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
  181. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
  182. package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
  183. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
  184. package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
  185. package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
  186. package/dot_local/bin/executable_ai_core +0 -130
  187. package/dot_local/bin/executable_b64 +0 -59
  188. package/dot_local/bin/executable_dot +0 -178
  189. package/dot_local/bin/executable_dot_completion +0 -55
  190. package/dot_local/bin/executable_epoch +0 -62
  191. package/dot_local/bin/executable_extract +0 -108
  192. package/dot_local/bin/executable_git-ai-commit +0 -160
  193. package/dot_local/bin/executable_git-ai-diff +0 -154
  194. package/dot_local/bin/executable_hash +0 -123
  195. package/dot_local/bin/executable_hex +0 -79
  196. package/dot_local/bin/executable_ip +0 -37
  197. package/dot_local/bin/executable_jsonv +0 -54
  198. package/dot_local/bin/executable_jwt +0 -78
  199. package/dot_local/bin/executable_kill-port +0 -59
  200. package/dot_local/bin/executable_lorem +0 -103
  201. package/dot_local/bin/executable_regex +0 -96
  202. package/dot_local/bin/executable_tmux-sessionizer +0 -187
  203. package/dot_local/bin/executable_tour +0 -137
  204. package/dot_local/bin/executable_update +0 -108
  205. package/dot_local/bin/executable_uuid +0 -57
  206. package/dot_local/bin/executable_yamlv +0 -39
  207. package/dot_local/bin/executable_zig-install +0 -89
  208. package/dot_local/bin/voice_ops +0 -7
  209. package/dot_local/share/bash-completion/completions/dot +0 -54
  210. package/dot_local/share/zsh/completions/.keep +0 -0
  211. package/install.sh +0 -255
  212. package/scripts/ci/validate-ci-config.sh +0 -222
  213. package/scripts/demo/record.sh +0 -41
  214. package/scripts/diagnostics/benchmark.sh +0 -201
  215. package/scripts/diagnostics/doctor.sh +0 -115
  216. package/scripts/diagnostics/drift-dashboard.sh +0 -26
  217. package/scripts/diagnostics/health.sh +0 -356
  218. package/scripts/diagnostics/history-analysis.sh +0 -77
  219. package/scripts/diagnostics/security-score.sh +0 -392
  220. package/scripts/dot/commands/appearance.sh +0 -63
  221. package/scripts/dot/commands/core.sh +0 -130
  222. package/scripts/dot/commands/diagnostics.sh +0 -100
  223. package/scripts/dot/commands/meta.sh +0 -117
  224. package/scripts/dot/commands/restore.sh +0 -209
  225. package/scripts/dot/commands/secrets.sh +0 -81
  226. package/scripts/dot/commands/security.sh +0 -73
  227. package/scripts/dot/commands/tools.sh +0 -228
  228. package/scripts/dot/lib/utils.sh +0 -72
  229. package/scripts/fonts/install-nerd-fonts.sh +0 -59
  230. package/scripts/fonts/patch-fonts.sh +0 -34
  231. package/scripts/ops/chezmoi-apply.sh +0 -42
  232. package/scripts/ops/chezmoi-diff.sh +0 -14
  233. package/scripts/ops/chezmoi-remove.sh +0 -43
  234. package/scripts/ops/chezmoi-update.sh +0 -16
  235. package/scripts/ops/heal.sh +0 -466
  236. package/scripts/ops/health-check.sh +0 -380
  237. package/scripts/ops/rollback.sh +0 -531
  238. package/scripts/ops/teleport.sh +0 -32
  239. package/scripts/secrets/age-init.sh +0 -69
  240. package/scripts/secrets/create-secrets-file.sh +0 -44
  241. package/scripts/secrets/encrypt-ssh-key.sh +0 -42
  242. package/scripts/security/backup.sh +0 -17
  243. package/scripts/security/dns-doh.sh +0 -29
  244. package/scripts/security/encryption-check.sh +0 -39
  245. package/scripts/security/enforce-policies.sh +0 -339
  246. package/scripts/security/firewall.sh +0 -34
  247. package/scripts/security/lock-configs.sh +0 -57
  248. package/scripts/security/lock-screen.sh +0 -33
  249. package/scripts/security/manage-secrets.sh +0 -415
  250. package/scripts/security/telemetry-kill.sh +0 -28
  251. package/scripts/security/usb-safety.sh +0 -29
  252. package/scripts/tests/README.md +0 -241
  253. package/scripts/tests/benchmark.sh +0 -91
  254. package/scripts/tests/framework/assertions.sh +0 -283
  255. package/scripts/tests/framework/mocks.sh +0 -201
  256. package/scripts/tests/framework/test_runner.sh +0 -189
  257. package/scripts/tests/integration/test_install.sh +0 -237
  258. package/scripts/tests/performance/benchmark_runner.sh +0 -156
  259. package/scripts/tests/performance/regression_check.sh +0 -73
  260. package/scripts/tests/performance/stress_test.sh +0 -65
  261. package/scripts/tests/test-docker.sh +0 -48
  262. package/scripts/tests/unit/test_ai_aliases.sh +0 -158
  263. package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
  264. package/scripts/tests/unit/test_backup.sh +0 -227
  265. package/scripts/tests/unit/test_case_functions.sh +0 -238
  266. package/scripts/tests/unit/test_cd_aliases.sh +0 -367
  267. package/scripts/tests/unit/test_dot_cli.sh +0 -217
  268. package/scripts/tests/unit/test_encode64.sh +0 -67
  269. package/scripts/tests/unit/test_environment.sh +0 -78
  270. package/scripts/tests/unit/test_extract.sh +0 -163
  271. package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
  272. package/scripts/tests/unit/test_genpass.sh +0 -298
  273. package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
  274. package/scripts/tests/unit/test_installers.sh +0 -172
  275. package/scripts/tests/unit/test_keygen.sh +0 -68
  276. package/scripts/tests/unit/test_logging.sh +0 -96
  277. package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
  278. package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
  279. package/scripts/tests/unit/test_prependpath.sh +0 -66
  280. package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
  281. package/scripts/tests/unit/test_rd.sh +0 -230
  282. package/scripts/tests/unit/test_security_fixes.sh +0 -130
  283. package/scripts/tests/unit/test_security_scripts.sh +0 -87
  284. package/scripts/tests/unit/test_template_validation.sh +0 -238
  285. package/scripts/tests/unit/test_utility_functions.sh +0 -144
  286. package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
  287. package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
  288. package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
  289. package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
  290. package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
  291. package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
  292. package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
  293. package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
  294. package/scripts/tests/unit/test_zipf.sh +0 -76
  295. package/scripts/theme/apply-gnome-theme.sh +0 -297
  296. package/scripts/theme/install-boot-logo.sh +0 -61
  297. package/scripts/theme/install-catppuccin-themes.sh +0 -346
  298. package/scripts/theme/install-cursors.sh +0 -24
  299. package/scripts/theme/install-file-icons.sh +0 -25
  300. package/scripts/theme/install-grub-theme.sh +0 -51
  301. package/scripts/theme/install-lock-icon.sh +0 -29
  302. package/scripts/theme/switch.sh +0 -250
  303. package/scripts/theme/wallpaper-rotate.sh +0 -82
  304. package/scripts/theme/wallpaper-sync.sh +0 -42
  305. package/scripts/tools/cmatrix.sh +0 -20
  306. package/scripts/tools/emoji-picker.sh +0 -45
  307. package/scripts/tools/figlet-banner.sh +0 -17
  308. package/scripts/tools/log-rotate.sh +0 -29
  309. package/scripts/tools/lolcat-wrap.sh +0 -18
  310. package/scripts/tools/pipes.sh +0 -47
  311. package/scripts/tuning/linux.sh +0 -175
  312. package/scripts/tuning/macos.sh +0 -46
  313. package/templates/projects/molecule/README.md +0 -7
  314. package/templates/projects/molecule/converge.yml +0 -7
  315. package/templates/projects/molecule/molecule.yml +0 -16
  316. package/templates/projects/packer/README.md +0 -15
  317. package/templates/projects/packer/main.pkr.hcl +0 -15
package/install.sh DELETED
@@ -1,255 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Universal Dotfiles Installer (Zero-Dependency)
3
- # Usage: sh -c "$(curl -fsSL https://dotfiles.io/install.sh)"
4
- # (or ./install.sh locally)
5
- #
6
- # This installer uses modular libraries from install/lib/:
7
- # - os_detection.sh : OS and architecture detection
8
- # - package_managers.sh: Package manager bootstrapping
9
- # - backup.sh : Dotfile backup functionality
10
- # - chezmoi.sh : Chezmoi installation and configuration
11
-
12
- set -euo pipefail
13
-
14
- # =============================================================================
15
- # Configuration
16
- # =============================================================================
17
-
18
- VERSION="${1:-v0.2.480}"
19
- REPO_URL="https://github.com/sebastienrousseau/dotfiles.git"
20
- SOURCE_DIR="$HOME/.dotfiles"
21
- LEGACY_SOURCE_DIR="$HOME/.local/share/chezmoi"
22
-
23
- # =============================================================================
24
- # Colors and Output
25
- # =============================================================================
26
-
27
- if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
28
- RED='\033[0;31m'
29
- GREEN='\033[0;32m'
30
- BLUE='\033[0;34m'
31
- CYAN='\033[0;36m'
32
- BOLD='\033[1m'
33
- NC='\033[0m'
34
- else
35
- RED='' GREEN='' BLUE='' CYAN='' BOLD='' NC=''
36
- fi
37
-
38
- step() { echo -e "${BLUE}==>${NC} ${BOLD}$1${NC}"; }
39
- success() { echo -e "${GREEN}==> Done!${NC}"; }
40
- error() {
41
- echo -e "${RED}==> Error: $1${NC}"
42
- exit 1
43
- }
44
-
45
- # =============================================================================
46
- # Banner
47
- # =============================================================================
48
-
49
- echo -e "${CYAN}${BOLD}"
50
- cat <<"EOF"
51
- ___ _ _ _ _
52
- / _ \___ | |_ (_)| |(_) ___ ___
53
- / /_)/ _ \| __|| || || |/ _ \/ __|
54
- / ___/ (_) | |_ | || || | __/\__ \
55
- \/ \___/ \__||_||_||_|\___||___/
56
- Universal Installer
57
- EOF
58
- echo -e "${NC}"
59
-
60
- # =============================================================================
61
- # Library Loading
62
- # =============================================================================
63
-
64
- # Determine script directory for library loading
65
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" 2>/dev/null && pwd)" || SCRIPT_DIR=""
66
- LIB_DIR="${SCRIPT_DIR}/install/lib"
67
-
68
- # Source libraries if available (for local installs)
69
- if [ -d "$LIB_DIR" ]; then
70
- # shellcheck source=install/lib/os_detection.sh
71
- source "$LIB_DIR/os_detection.sh"
72
- # shellcheck source=install/lib/package_managers.sh
73
- source "$LIB_DIR/package_managers.sh"
74
- # shellcheck source=install/lib/backup.sh
75
- source "$LIB_DIR/backup.sh"
76
- # shellcheck source=install/lib/chezmoi.sh
77
- source "$LIB_DIR/chezmoi.sh"
78
- LIBS_LOADED=1
79
- else
80
- LIBS_LOADED=0
81
- fi
82
-
83
- # =============================================================================
84
- # Inline Functions (for remote install without libraries)
85
- # =============================================================================
86
-
87
- if [ "$LIBS_LOADED" = "0" ]; then
88
- # Minimal inline implementations when libraries aren't available
89
- detect_os() {
90
- OS="$(uname -s)"
91
- ARCH="$(uname -m)"
92
- target_os="unknown"
93
- case "$OS" in
94
- Darwin) target_os="macos" ;;
95
- Linux)
96
- if [ -f /proc/version ] && grep -qi 'microsoft\|WSL' /proc/version; then
97
- target_os="wsl2"
98
- elif [ -f /etc/os-release ]; then
99
- . /etc/os-release
100
- case "${ID:-}" in
101
- ubuntu | debian | pop | linuxmint | elementary) target_os="debian" ;;
102
- fedora | rhel | centos | rocky | alma) target_os="fedora" ;;
103
- arch | manjaro | endeavouros) target_os="arch" ;;
104
- *) target_os="linux" ;;
105
- esac
106
- else
107
- target_os="linux"
108
- fi
109
- ;;
110
- esac
111
- export OS ARCH target_os
112
- }
113
-
114
- print_os_info() {
115
- echo " OS: $OS"
116
- echo " Arch: $ARCH"
117
- echo " Target: $target_os"
118
- }
119
-
120
- bootstrap_package_manager() {
121
- if [ "$target_os" = "macos" ] && ! command -v brew >/dev/null; then
122
- echo " Homebrew not found."
123
- echo -e "${CYAN} SECURITY NOTE: This will download and execute code from brew.sh${NC}"
124
- if [ "${DOTFILES_NONINTERACTIVE:-0}" != "1" ]; then
125
- read -r -p " Continue with Homebrew installation? [y/N] " response
126
- case "$response" in
127
- [yY][eE][sS] | [yY]) ;;
128
- *) error "Homebrew installation cancelled." ;;
129
- esac
130
- fi
131
- /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
132
- [ -x /opt/homebrew/bin/brew ] && eval "$(/opt/homebrew/bin/brew shellenv)"
133
- [ -x /usr/local/bin/brew ] && eval "$(/usr/local/bin/brew shellenv)"
134
- fi
135
- case "$target_os" in
136
- debian | wsl2) command -v apt-get >/dev/null || error "apt-get required" ;;
137
- fedora) command -v dnf >/dev/null || error "dnf required" ;;
138
- arch) command -v pacman >/dev/null || error "pacman required" ;;
139
- esac
140
- }
141
-
142
- check_prerequisites() {
143
- command -v curl >/dev/null || error "curl is required"
144
- command -v git >/dev/null || error "git is required"
145
- }
146
-
147
- install_chezmoi() {
148
- if command -v chezmoi >/dev/null; then
149
- echo " chezmoi already installed: $(chezmoi --version)"
150
- elif command -v brew >/dev/null; then
151
- brew install chezmoi
152
- else
153
- local bin_dir="$HOME/.local/bin"
154
- mkdir -p "$bin_dir"
155
- local installer
156
- installer=$(mktemp)
157
- curl -fsSL -o "$installer" https://get.chezmoi.io || error "Failed to download chezmoi"
158
- [ "$(wc -c <"$installer")" -gt 102400 ] && {
159
- rm -f "$installer"
160
- error "Installer too large"
161
- }
162
- sh "$installer" -- -b "$bin_dir" 2>/dev/null || {
163
- rm -f "$installer"
164
- error "Failed to install chezmoi"
165
- }
166
- rm -f "$installer"
167
- export PATH="$bin_dir:$PATH"
168
- fi
169
- }
170
-
171
- ensure_chezmoi_source() {
172
- local dir="$1"
173
- local config_dir="$HOME/.config/chezmoi"
174
- mkdir -p "$config_dir"
175
- printf 'sourceDir = "%s"\n' "$dir" >"$config_dir/chezmoi.toml"
176
- }
177
-
178
- perform_backup() {
179
- local backup_dir
180
- backup_dir="$HOME/.dotfiles.bak.$(date +"%Y%m%d_%H%M%S")"
181
- local count=0
182
- if command -v chezmoi >/dev/null && [ -f "$HOME/.config/chezmoi/chezmoi.toml" ]; then
183
- while IFS= read -r file; do
184
- [ -z "$file" ] && continue
185
- if [ -e "$file" ]; then
186
- local rel="${file#"$HOME"/}"
187
- mkdir -p "$backup_dir/$(dirname "$rel")"
188
- cp -a "$file" "$backup_dir/$rel"
189
- count=$((count + 1))
190
- fi
191
- done < <(chezmoi managed --path-style=absolute 2>/dev/null || true)
192
- fi
193
- [ "$count" -gt 0 ] && echo " Backed up $count files to $backup_dir" || echo " No files to back up."
194
- }
195
- fi
196
-
197
- # =============================================================================
198
- # Main Installation Flow
199
- # =============================================================================
200
-
201
- # Step 1: Detect Environment
202
- step "Detecting Environment..."
203
- detect_os
204
- print_os_info
205
-
206
- # Step 2: Bootstrap Package Managers
207
- step "Checking Prerequisites..."
208
- bootstrap_package_manager
209
- check_prerequisites
210
-
211
- # Step 3: Install Chezmoi
212
- step "Installing Chezmoi..."
213
- install_chezmoi
214
-
215
- # Step 4: Backup Existing Dotfiles
216
- step "Backing up existing dotfiles..."
217
- if [ -d "$SOURCE_DIR/.git" ]; then
218
- ensure_chezmoi_source "$SOURCE_DIR"
219
- elif [ -d "$LEGACY_SOURCE_DIR/.git" ]; then
220
- ensure_chezmoi_source "$LEGACY_SOURCE_DIR"
221
- fi
222
- perform_backup
223
-
224
- # Step 5: Apply Configuration
225
- step "Applying Configuration..."
226
-
227
- APPLY_FLAGS=()
228
- [ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ] && APPLY_FLAGS=(--force --no-tty)
229
-
230
- if [ -d "$SOURCE_DIR/.git" ]; then
231
- echo " Applying from local source: $SOURCE_DIR"
232
- ensure_chezmoi_source "$SOURCE_DIR"
233
- chezmoi apply "${APPLY_FLAGS[@]}"
234
- elif [ -d "$LEGACY_SOURCE_DIR/.git" ]; then
235
- echo " Migrating from legacy source: $LEGACY_SOURCE_DIR"
236
- mv "$LEGACY_SOURCE_DIR" "$SOURCE_DIR"
237
- ensure_chezmoi_source "$SOURCE_DIR"
238
- chezmoi apply "${APPLY_FLAGS[@]}"
239
- else
240
- echo " Initializing from GitHub (Version: $VERSION)..."
241
- echo -e "${CYAN} SECURITY NOTE: Cloning pinned version $VERSION${NC}"
242
-
243
- git clone --depth 1 --branch "$VERSION" "$REPO_URL" "$SOURCE_DIR" 2>/dev/null ||
244
- { git clone "$REPO_URL" "$SOURCE_DIR" && (cd "$SOURCE_DIR" && git checkout "$VERSION"); }
245
-
246
- ensure_chezmoi_source "$SOURCE_DIR"
247
- chezmoi apply "${APPLY_FLAGS[@]}"
248
- fi
249
-
250
- # =============================================================================
251
- # Complete
252
- # =============================================================================
253
-
254
- success
255
- echo -e "${GREEN}Configuration loaded. Please restart your shell.${NC}"
@@ -1,222 +0,0 @@
1
- #!/usr/bin/env bash
2
- # CI Configuration Validation Script
3
- # Verifies that all zero-warning policy components are properly configured
4
-
5
- set -euo pipefail
6
-
7
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
8
- REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
9
-
10
- # Colors for output
11
- RED='\033[0;31m'
12
- GREEN='\033[0;32m'
13
- YELLOW='\033[0;33m'
14
- BLUE='\033[0;34m'
15
- NC='\033[0m'
16
-
17
- echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
18
- echo -e "${BLUE} CI CONFIGURATION VALIDATOR ${NC}"
19
- echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
20
- echo ""
21
-
22
- ERRORS=0
23
- WARNINGS=0
24
-
25
- # Helper functions
26
- check_file_exists() {
27
- local file="$1"
28
- local description="$2"
29
-
30
- if [[ -f "$file" ]]; then
31
- echo -e " ${GREEN}✓${NC} $description"
32
- return 0
33
- else
34
- echo -e " ${RED}✗${NC} $description"
35
- ((ERRORS++))
36
- return 1
37
- fi
38
- }
39
-
40
- check_pattern_in_file() {
41
- local file="$1"
42
- local pattern="$2"
43
- local description="$3"
44
-
45
- if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
46
- echo -e " ${GREEN}✓${NC} $description"
47
- return 0
48
- else
49
- echo -e " ${RED}✗${NC} $description"
50
- ((ERRORS++))
51
- return 1
52
- fi
53
- }
54
-
55
- warn_if_pattern() {
56
- local file="$1"
57
- local pattern="$2"
58
- local description="$3"
59
-
60
- if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
61
- echo -e " ${YELLOW}⚠${NC} $description"
62
- ((WARNINGS++))
63
- return 1
64
- else
65
- echo -e " ${GREEN}✓${NC} $description"
66
- return 0
67
- fi
68
- }
69
-
70
- # Check 1: Core CI files exist
71
- echo -e "${BLUE}1. Core CI Files${NC}"
72
- check_file_exists "$REPO_ROOT/.github/workflows/ci.yml" "Main CI workflow exists"
73
- check_file_exists "$REPO_ROOT/.github/workflows/nightly.yml" "Nightly workflow exists"
74
- check_file_exists "$REPO_ROOT/.github/workflows/security-enhanced.yml" "Security workflow exists"
75
- check_file_exists "$REPO_ROOT/config/pre-commit-config.yaml" "Pre-commit configuration exists"
76
- echo ""
77
-
78
- # Check 2: Zero-warning enforcement
79
- echo -e "${BLUE}2. Zero-Warning Policy Enforcement${NC}"
80
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "zero-warning" "Zero-warning policy documented"
81
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail on unformatted code" "Formatter failure enforced"
82
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "warnings-as-errors" "Warnings treated as errors"
83
-
84
- # Verify no || true patterns in security steps
85
- warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "gitleaks.*||.*true" "Gitleaks bypass detected"
86
- warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "shellcheck.*||.*true" "Shellcheck bypass detected"
87
- echo ""
88
-
89
- # Check 3: Test coverage requirements
90
- echo -e "${BLUE}3. Test Coverage Requirements${NC}"
91
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "100%" "100% coverage requirement"
92
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail-under" "Coverage threshold enforcement"
93
-
94
- if [[ -f "$REPO_ROOT/scripts/tests/framework/test_runner.sh" ]]; then
95
- echo -e " ${GREEN}✓${NC} Test framework exists"
96
- else
97
- echo -e " ${RED}✗${NC} Test framework missing"
98
- ((ERRORS++))
99
- fi
100
- echo ""
101
-
102
- # Check 4: Security scanning
103
- echo -e "${BLUE}4. Security Scanning Configuration${NC}"
104
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-secrets" "Secret scanning enabled"
105
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-dependencies" "Dependency audit enabled"
106
- check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "gitleaks" "Pre-commit secret scanning"
107
- check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "detect-secrets" "Advanced secret detection"
108
-
109
- # Verify no piped execution patterns
110
- warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "curl.*|.*sh" "Dangerous piped execution"
111
- warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "wget.*|.*bash" "Dangerous piped execution"
112
- echo ""
113
-
114
- # Check 5: Performance monitoring
115
- echo -e "${BLUE}5. Performance Monitoring${NC}"
116
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "benchmark" "Performance benchmarking enabled"
117
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "500ms" "Shell startup threshold defined"
118
- check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "performance-tracking" "Nightly performance tracking"
119
- echo ""
120
-
121
- # Check 6: Multi-OS support
122
- echo -e "${BLUE}6. Multi-OS Testing${NC}"
123
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "ubuntu-latest" "Linux testing enabled"
124
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "macos-latest" "macOS testing enabled"
125
- check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "matrix:" "OS matrix testing configured"
126
- echo ""
127
-
128
- # Check 7: Timeouts and efficiency
129
- echo -e "${BLUE}7. Timeout and Efficiency Settings${NC}"
130
- if grep -q "timeout-minutes: [0-9]" "$REPO_ROOT/.github/workflows/ci.yml"; then
131
- MAX_TIMEOUT=$(grep "timeout-minutes:" "$REPO_ROOT/.github/workflows/ci.yml" |
132
- awk '{print $2}' | sort -n | tail -1)
133
- if [[ $MAX_TIMEOUT -le 15 ]]; then
134
- echo -e " ${GREEN}✓${NC} Job timeouts properly configured (max: ${MAX_TIMEOUT}min)"
135
- else
136
- echo -e " ${YELLOW}⚠${NC} Some jobs have long timeouts (max: ${MAX_TIMEOUT}min)"
137
- ((WARNINGS++))
138
- fi
139
- else
140
- echo -e " ${RED}✗${NC} No timeout configuration found"
141
- ((ERRORS++))
142
- fi
143
-
144
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "cache" "Dependency caching enabled"
145
- echo ""
146
-
147
- # Check 8: Branch protection readiness
148
- echo -e "${BLUE}8. Branch Protection Readiness${NC}"
149
- check_file_exists "$REPO_ROOT/.github/BRANCH_PROTECTION.md" "Branch protection documentation"
150
- check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "quality-gate" "Quality gate job defined"
151
-
152
- # Check for required status check names
153
- REQUIRED_CHECKS=(
154
- "lint-shell"
155
- "security-secrets"
156
- "security-dependencies"
157
- "test-unit"
158
- "quality-gate"
159
- )
160
-
161
- for check in "${REQUIRED_CHECKS[@]}"; do
162
- if grep -q "name:.*$check" "$REPO_ROOT/.github/workflows/ci.yml"; then
163
- echo -e " ${GREEN}✓${NC} Required check '$check' defined"
164
- else
165
- echo -e " ${RED}✗${NC} Required check '$check' missing"
166
- ((ERRORS++))
167
- fi
168
- done
169
- echo ""
170
-
171
- # Check 9: Nightly extended testing
172
- echo -e "${BLUE}9. Nightly Extended Testing${NC}"
173
- if [[ -f "$REPO_ROOT/.github/workflows/nightly.yml" ]]; then
174
- check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "dependency-updates" "Dependency monitoring"
175
- check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "beta-tools-test" "Beta tool testing"
176
- check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "security-extended" "Extended security scanning"
177
- check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "cron:" "Scheduled execution"
178
- else
179
- echo -e " ${RED}✗${NC} Nightly workflow missing"
180
- ((ERRORS++))
181
- fi
182
- echo ""
183
-
184
- # Final summary
185
- echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
186
- echo -e "${BLUE} VALIDATION SUMMARY ${NC}"
187
- echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
188
-
189
- if [[ $ERRORS -eq 0 ]] && [[ $WARNINGS -eq 0 ]]; then
190
- echo -e "${GREEN}✅ PERFECT: CI configuration fully compliant${NC}"
191
- echo " - Zero-warning policy properly enforced"
192
- echo " - All security gates configured"
193
- echo " - Performance monitoring active"
194
- echo " - Ready for branch protection"
195
- elif [[ $ERRORS -eq 0 ]]; then
196
- echo -e "${YELLOW}⚠️ GOOD: CI mostly compliant with $WARNINGS warning(s)${NC}"
197
- echo " - Core functionality working"
198
- echo " - Minor improvements recommended"
199
- else
200
- echo -e "${RED}❌ ISSUES: CI configuration has $ERRORS error(s) and $WARNINGS warning(s)${NC}"
201
- echo " - Critical fixes required before deployment"
202
- fi
203
-
204
- echo ""
205
- echo "Configuration Details:"
206
- echo " - Repository: $REPO_ROOT"
207
- echo " - Main CI: .github/workflows/ci.yml"
208
- echo " - Nightly: .github/workflows/nightly.yml"
209
- echo " - Pre-commit: config/pre-commit-config.yaml"
210
- echo ""
211
- echo "Next Steps:"
212
- if [[ $ERRORS -gt 0 ]]; then
213
- echo " 1. Fix critical errors listed above"
214
- echo " 2. Re-run validation: $0"
215
- fi
216
- if [[ $WARNINGS -gt 0 ]]; then
217
- echo " 3. Address warnings for optimal configuration"
218
- fi
219
- echo " 4. Configure branch protection rules per BRANCH_PROTECTION.md"
220
- echo " 5. Test CI pipeline with a small PR"
221
-
222
- exit $ERRORS
@@ -1,41 +0,0 @@
1
- #!/bin/sh
2
- set -e
3
-
4
- OUT="${1:-$HOME/.dotfiles/docs/demo/demo.gif}"
5
- DURATION="${DURATION:-30}"
6
- FPS="${FPS:-15}"
7
-
8
- record_ffmpeg() {
9
- if command -v ffmpeg >/dev/null; then
10
- echo "Recording with ffmpeg for ${DURATION}s..."
11
- if [ "$(uname -s)" = "Darwin" ]; then
12
- # macOS (AVFoundation)
13
- ffmpeg -y -t "$DURATION" -f avfoundation -i "1:none" -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
14
- else
15
- # Linux (X11)
16
- ffmpeg -y -t "$DURATION" -f x11grab -i :0.0 -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
17
- fi
18
- else
19
- echo "ffmpeg not found. Install it and retry."
20
- exit 1
21
- fi
22
- }
23
-
24
- record_wf_recorder() {
25
- if command -v wf-recorder >/dev/null; then
26
- echo "Recording with wf-recorder for ${DURATION}s..."
27
- wf-recorder -f "$OUT" -t "$DURATION"
28
- else
29
- return 1
30
- fi
31
- }
32
-
33
- if [ "$(uname -s)" = "Linux" ]; then
34
- if record_wf_recorder; then
35
- exit 0
36
- fi
37
- fi
38
-
39
- record_ffmpeg
40
-
41
- printf "Saved demo to %s\n" "$OUT"