@sebastienrousseau/dotfiles 0.2.500 → 0.2.501

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 (204) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/README.md +82 -44
  3. package/docs/.vitepress/reports/localization-readability-audit.md +4 -0
  4. package/docs/AI.md +8 -2
  5. package/docs/CNAME +1 -0
  6. package/docs/COPYRIGHT +1 -1
  7. package/docs/NAMING_CONVENTIONS.md +7 -0
  8. package/docs/README.md +4 -0
  9. package/docs/_config.yml +59 -0
  10. package/docs/adr/ADR-001-ci-cd-pipeline.md +17 -0
  11. package/docs/adr/ADR-002-shell-performance.md +9 -0
  12. package/docs/adr/ADR-003-security-first.md +18 -0
  13. package/docs/adr/ADR-004-cli-architecture.md +14 -0
  14. package/docs/adr/ADR-005-chezmoi-choice.md +10 -0
  15. package/docs/adr/ADR-006-shell-selection.md +9 -0
  16. package/docs/adr/ADR-007-multi-shell-parity.md +10 -1
  17. package/docs/adr/ADR-008-alias-system-architecture.md +10 -0
  18. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  19. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  20. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  21. package/docs/adr/README.md +7 -0
  22. package/docs/architecture/ARCHITECTURE.md +4 -0
  23. package/docs/architecture/INTEROP.md +8 -0
  24. package/docs/architecture/REPO_LAYOUT.md +5 -1
  25. package/docs/architecture/WALKTHROUGH.md +4 -0
  26. package/docs/architecture/fleet-deployment.md +4 -0
  27. package/docs/archive/EUXIS_2026_REVIEW.md +11 -3
  28. package/docs/archive/LEGACY_ROADMAP.md +45 -27
  29. package/docs/archive/MILESTONE_v0.2.493.md +4 -0
  30. package/docs/archive/PLAN.md +46 -8
  31. package/docs/archive/REPO_AUDIT.md +8 -0
  32. package/docs/guides/INSTALL.md +4 -0
  33. package/docs/guides/NEOVIM_IDE_GUIDE.md +9 -0
  34. package/docs/guides/THEMING.md +8 -0
  35. package/docs/guides/TROUBLESHOOTING.md +28 -0
  36. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +70 -1
  37. package/docs/index.md +6 -2
  38. package/docs/interop/A2A.md +7 -0
  39. package/docs/interop/POWERSHELL.md +102 -0
  40. package/docs/manual/00-introduction.md +5 -1
  41. package/docs/manual/01-concepts/01-architecture.md +4 -0
  42. package/docs/manual/01-concepts/02-trust-model.md +6 -2
  43. package/docs/manual/01-concepts/03-theme-engine.md +4 -0
  44. package/docs/manual/01-concepts/04-fleet.md +7 -1
  45. package/docs/manual/01-concepts/05-self-healing.md +8 -1
  46. package/docs/manual/02-tutorials/01-first-install.md +5 -0
  47. package/docs/manual/02-tutorials/02-add-wallpaper.md +5 -0
  48. package/docs/manual/02-tutorials/03-create-profile.md +6 -0
  49. package/docs/manual/02-tutorials/04-encrypt-secret.md +6 -0
  50. package/docs/manual/02-tutorials/05-deploy-fleet.md +5 -1
  51. package/docs/manual/03-reference/01-dot-cli.md +4 -0
  52. package/docs/manual/03-reference/02-config-files.md +8 -2
  53. package/docs/manual/03-reference/03-environment.md +4 -0
  54. package/docs/manual/03-reference/04-templates.md +7 -1
  55. package/docs/manual/03-reference/05-feature-flags.md +10 -0
  56. package/docs/manual/04-cookbook/01-recipes.md +4 -0
  57. package/docs/manual/04-cookbook/02-troubleshooting.md +32 -0
  58. package/docs/manual/04-cookbook/03-faq.md +8 -0
  59. package/docs/manual/05-appendices/A-platform-matrix.md +4 -0
  60. package/docs/manual/05-appendices/B-security-checklist.md +6 -0
  61. package/docs/manual/05-appendices/C-glossary.md +4 -0
  62. package/docs/manual/05-appendices/D-bibliography.md +5 -1
  63. package/docs/manual/05-appendices/E-license.md +4 -0
  64. package/docs/manual/_toc.yml +1 -1
  65. package/docs/manual/command-index.md +4 -0
  66. package/docs/manual/concept-index.md +4 -0
  67. package/docs/operations/ATTESTATION.md +5 -0
  68. package/docs/operations/CI_CADENCE.md +107 -0
  69. package/docs/operations/CI_COMPOSITES.md +156 -0
  70. package/docs/operations/COMPLETIONS.md +123 -0
  71. package/docs/operations/COVERAGE.md +148 -0
  72. package/docs/operations/DRIFT.md +107 -0
  73. package/docs/operations/MAINTENANCE.md +5 -1
  74. package/docs/operations/MIGRATION.md +14 -6
  75. package/docs/operations/OPERATIONS.md +24 -0
  76. package/docs/operations/PERFORMANCE.md +133 -0
  77. package/docs/operations/RELIABILITY.md +6 -0
  78. package/docs/operations/ROADMAP.md +36 -18
  79. package/docs/operations/TESTING.md +4 -0
  80. package/docs/operations/TRACEABILITY.md +4 -0
  81. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +4 -0
  82. package/docs/operations/VERSION_SYNC.md +54 -5
  83. package/docs/reference/ALIASES.md +7 -0
  84. package/docs/reference/ALIASES_CHEATSHEET.md +5 -1
  85. package/docs/reference/ALIASES_DEPRECATIONS.md +5 -1
  86. package/docs/reference/FEATURES.md +4 -0
  87. package/docs/reference/FONTS.md +4 -0
  88. package/docs/reference/PROFILES.md +4 -0
  89. package/docs/reference/SCREENSHOTS.md +4 -0
  90. package/docs/reference/SCRIPTS.md +4 -0
  91. package/docs/reference/SUPPORT_MATRIX.md +10 -4
  92. package/docs/reference/THEMES.md +4 -0
  93. package/docs/reference/TOOLS.md +4 -0
  94. package/docs/reference/UTILS.md +16 -12
  95. package/docs/security/AI_ACT_COMPLIANCE.md +4 -0
  96. package/docs/security/AUDIT_BYPASS.md +103 -0
  97. package/docs/security/AUTOMATION_SECRETS.md +4 -0
  98. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  99. package/docs/security/COMPLIANCE.md +5 -0
  100. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  101. package/docs/security/ENCRYPTION.md +5 -0
  102. package/docs/security/FMEA.md +4 -0
  103. package/docs/security/HISTORY_FILTERING.md +132 -0
  104. package/docs/security/INCIDENT_RESPONSE.md +4 -0
  105. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  106. package/docs/security/KEYS.md +4 -0
  107. package/docs/security/KEY_ROTATION.md +4 -0
  108. package/docs/security/MCP_POLICY.md +9 -0
  109. package/docs/security/POLICY_RELEASES.md +4 -0
  110. package/docs/security/README.md +4 -0
  111. package/docs/security/SCORECARD.md +80 -0
  112. package/docs/security/SECRETS.md +12 -0
  113. package/docs/security/SECURITY.md +4 -0
  114. package/docs/security/SECURITY_CHECKLIST.md +11 -0
  115. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  116. package/docs/security/SOUP_REGISTER.md +4 -0
  117. package/docs/security/THREAT_MODEL.md +10 -0
  118. package/docs/security/VERIFICATION_VALIDATION.md +5 -1
  119. package/docs/themes/README.md +4 -0
  120. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +4 -0
  121. package/dot_config/ai/identity.md +3 -0
  122. package/dot_config/ai/patterns/architect.md +2 -0
  123. package/dot_config/ai/patterns/hardener.md +2 -0
  124. package/dot_config/ai/patterns/refactor.md +2 -0
  125. package/dot_config/alacritty/alacritty.toml.tmpl +3 -3
  126. package/dot_config/atuin/config.toml.tmpl +47 -0
  127. package/dot_config/dotfiles/agent-card.json +1 -1
  128. package/dot_config/dotfiles/boot/README.md +2 -0
  129. package/dot_config/dotfiles/grub/README.md +2 -0
  130. package/dot_config/dotfiles/lock/README.md +2 -0
  131. package/dot_config/fish/conf.d/init.fish.tmpl +21 -0
  132. package/dot_config/fish/functions/_cached_eval.fish +84 -11
  133. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  134. package/dot_config/foot/foot.ini.tmpl +3 -3
  135. package/dot_config/fuzzel/fuzzel.ini.tmpl +2 -2
  136. package/dot_config/ghostty/config.tmpl +3 -3
  137. package/dot_config/git/hooks/executable_commit-msg +146 -0
  138. package/dot_config/goose/config.yaml +2 -2
  139. package/dot_config/gtk-3.0/gtk.css.tmpl +2 -2
  140. package/dot_config/gtk-3.0/settings.ini.tmpl +2 -2
  141. package/dot_config/gtk-4.0/gtk.css.tmpl +2 -2
  142. package/dot_config/gtk-4.0/settings.ini.tmpl +2 -2
  143. package/dot_config/kitty/kitty.conf.tmpl +3 -3
  144. package/dot_config/mise/config.toml +1 -1
  145. package/dot_config/niri/config.kdl.tmpl +2 -2
  146. package/dot_config/nushell/cached_eval.nu +80 -0
  147. package/dot_config/nushell/env.nu.tmpl +21 -13
  148. package/dot_config/shell/00-core-paths.sh.tmpl +1 -0
  149. package/dot_config/shell/05-core-safety.sh +1 -0
  150. package/dot_config/shell/10-secrets.sh +1 -0
  151. package/dot_config/shell/40-fzf-defaults.sh.tmpl +1 -0
  152. package/dot_config/shell/40-ls-colors.sh +1 -0
  153. package/dot_config/shell/50-logic-functions-core.sh.tmpl +1 -0
  154. package/dot_config/shell/50-logic-functions.sh.tmpl +1 -0
  155. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +1 -0
  156. package/dot_config/shell/90-ux-aliases.sh.tmpl +1 -0
  157. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +1 -0
  158. package/dot_config/shell/README.md +25 -8
  159. package/dot_config/starship.toml.tmpl +2 -2
  160. package/dot_config/tmux/tmux.conf.tmpl +3 -3
  161. package/dot_config/user-dirs.dirs +1 -0
  162. package/dot_config/vscode/settings.json.tmpl +2 -2
  163. package/dot_config/waybar/config.jsonc.tmpl +2 -2
  164. package/dot_config/waybar/style.css.tmpl +2 -2
  165. package/dot_config/wezterm/wezterm.lua.tmpl +3 -3
  166. package/dot_config/zsh/dot_zshrc.tmpl +154 -17
  167. package/dot_config/zsh/rc.d/00-alias-shims.zsh +28 -6
  168. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +26 -6
  169. package/dot_local/bin/executable_bm +2 -0
  170. package/dot_local/bin/executable_dot +9 -2
  171. package/dot_local/bin/executable_dot-load-benchmark +1 -1
  172. package/dot_local/bin/executable_notify +2 -0
  173. package/dot_local/bin/executable_open +2 -0
  174. package/dot_local/bin/executable_tour +4 -2
  175. package/dot_local/bin/executable_up +3 -1
  176. package/install.sh +12 -4
  177. package/package.json +1 -1
  178. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  179. package/scripts/ci/check-deps-dev.sh +236 -0
  180. package/scripts/ci/check-insecure-tls.sh +61 -0
  181. package/scripts/ci/check-regression-traceability.sh +67 -0
  182. package/scripts/ci/check-shell-preamble.sh +106 -0
  183. package/scripts/ci/run-coverage.sh +362 -0
  184. package/scripts/ci/validate-chezmoidata.sh +25 -0
  185. package/scripts/diagnostics/doctor.sh +173 -5
  186. package/scripts/diagnostics/drift-dashboard.sh +177 -13
  187. package/scripts/diagnostics/health.sh +21 -4
  188. package/scripts/diagnostics/perf.sh +304 -77
  189. package/scripts/diagnostics/workstation-attestation.sh +6 -1
  190. package/scripts/dot/commands/agent.sh +14 -5
  191. package/scripts/dot/commands/ai.sh +75 -10
  192. package/scripts/dot/lib/bento.sh +2 -1
  193. package/scripts/dot/lib/log.sh +6 -0
  194. package/scripts/dot/lib/platform.sh +1 -0
  195. package/scripts/dot/lib/ui.sh +11 -0
  196. package/scripts/dot/lib/utils.sh +5 -0
  197. package/scripts/git-hooks/pre-commit-audit.sh +1 -1
  198. package/scripts/git-hooks/pre-push +66 -3
  199. package/scripts/ops/heal-chezmoi.sh +41 -6
  200. package/scripts/qa/powershell-contract.ps1 +95 -0
  201. package/scripts/theme/merge-wallpaper.sh +4 -0
  202. package/scripts/theme/switch.sh +20 -10
  203. package/dot_config/atuin/config.toml +0 -40
  204. package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
@@ -7,13 +7,13 @@ Welcome to your universally compatible, high-performance dotfiles configuration,
7
7
  - **Universal Support**: Works seamlessly on macOS, Linux (Ubuntu/Debian), and Windows (WSL).
8
8
  - **Fast Startup**: Optimized with `zcompile` and lazy-loading. Benchmarks vary by machine; use `DOTFILES_FAST=1` for the quickest first prompt.
9
9
  - **Modern Core**: Replaces legacy Unix tools with Rust-based alternatives:
10
- - `eza` (ls)
11
- - `bat` (cat)
12
- - `ripgrep` (grep)
13
- - `zoxide` (cd)
14
- - `atuin` (history)
15
- - `yazi` (files)
16
- - `zellij` (multiplexer)
10
+ - `eza` (ls)
11
+ - `bat` (cat)
12
+ - `ripgrep` (grep)
13
+ - `zoxide` (cd)
14
+ - `atuin` (history)
15
+ - `yazi` (files)
16
+ - `zellij` (multiplexer)
17
17
  - **Starship Prompt**: A fast, customizable, cross-shell prompt.
18
18
  - **Optimized Vim**: Vim settings are kept minimal and fast by default.
19
19
  - **Modular Design**: Configuration is split into small, manageable templates.
@@ -23,13 +23,15 @@ Welcome to your universally compatible, high-performance dotfiles configuration,
23
23
  ## Get started
24
24
 
25
25
  ### Install
26
+
26
27
  To install these dotfiles on a new machine, run:
27
28
 
28
29
  ```bash
29
- sh -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/v0.2.500/install.sh)"
30
+ sh -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/v0.2.501/install.sh)"
30
31
  ```
31
32
 
32
33
  This command will:
34
+
33
35
  1. Install `chezmoi`.
34
36
  2. Clone this repository.
35
37
  3. Install required packages (Homebrew/Apt).
@@ -40,7 +42,9 @@ This command will:
40
42
  ## Keep it current
41
43
 
42
44
  ### macOS
45
+
43
46
  Updates are handled via [Homebrew](https://brew.sh/).
47
+
44
48
  1. Edit `~/.dotfiles/dot_config/shell/Brewfile.cli` and `~/.dotfiles/dot_config/shell/Brewfile.cask`.
45
49
  2. Run `chezmoi apply`.
46
50
  - This triggers `run_onchange_darwin_install-packages.sh.tmpl`, which runs `brew bundle` for CLI and GUI packages.
@@ -48,16 +52,20 @@ Updates are handled via [Homebrew](https://brew.sh/).
48
52
  - Optional: `duti` applies default app bindings from `~/.config/duti/defaults.duti`.
49
53
 
50
54
  ### VS Code extensions
55
+
51
56
  1. Edit `~/.config/vscode/extensions.txt`.
52
57
  2. Run `chezmoi apply` to install missing extensions (if `code` is available).
53
58
 
54
59
  ### Linux and WSL
60
+
55
61
  Updates are handled via `apt-get` (Ubuntu/Debian).
62
+
56
63
  1. Run `chezmoi apply`.
57
64
  - This checks for package updates defined in `run_onchange_linux_install-packages.sh.tmpl`.
58
65
  - Optional Flatpak list is read from `~/.config/flatpak/flatpak.list`.
59
66
 
60
67
  ### Vim plugins
68
+
61
69
  1. Edit `~/.dotfiles/dot_vimrc`.
62
70
  2. Run `chezmoi apply`.
63
71
  - This automatically runs `vim +PlugInstall +PlugClean +qa`.
@@ -69,12 +77,14 @@ Updates are handled via `apt-get` (Ubuntu/Debian).
69
77
  If you are migrating from an old `~/.dotfiles` setup:
70
78
 
71
79
  1. **Backup**:
80
+
72
81
  ```bash
73
82
  mv ~/.dotfiles ~/.dotfiles.legacy
74
83
  cp ~/.zshrc ~/.zshrc.bak
75
84
  ```
76
85
 
77
86
  2. **Initialize Chezmoi**:
87
+
78
88
  ```bash
79
89
  git clone https://github.com/sebastienrousseau/dotfiles.git ~/.dotfiles
80
90
  chezmoi apply
@@ -115,6 +125,7 @@ The configuration is managed in `~/.dotfiles`.
115
125
  ## Use it
116
126
 
117
127
  ### Apply changes
128
+
118
129
  After editing any file in `~/.dotfiles`, apply the changes to your home directory:
119
130
 
120
131
  ```bash
@@ -195,6 +206,7 @@ ${EDITOR:-nano} ~/.config/chezmoi/chezmoi.toml
195
206
  ```
196
207
 
197
208
  Fields:
209
+
198
210
  - `git_name`
199
211
  - `git_email`
200
212
  - `git_signingkey`
@@ -211,6 +223,7 @@ terminal_font_size = 12
211
223
  ```
212
224
 
213
225
  Available themes:
226
+
214
227
  - `tokyonight-night` (best dark default)
215
228
  - `tokyonight-day` (best light default)
216
229
  - `tokyonight-storm`
@@ -242,6 +255,7 @@ Available themes:
242
255
  ```
243
256
 
244
257
  ### Add aliases
258
+
245
259
  1. Navigate to `~/.dotfiles/.chezmoitemplates/aliases/`.
246
260
  2. Create a new file (e.g., `mytool/mytool.aliases.sh`) or edit an existing one.
247
261
  3. Add your aliases.
@@ -250,12 +264,14 @@ Available themes:
250
264
  **Note:** Files in `macOS/` are only included on macOS systems.
251
265
 
252
266
  ### Add functions
267
+
253
268
  1. Navigate to `~/.dotfiles/.chezmoitemplates/functions/`.
254
269
  2. Create a new `.sh` file.
255
270
  3. Define your function with a usage comment.
256
271
  4. Run `chezmoi apply`.
257
272
 
258
273
  ## Performance
274
+
259
275
  - **Lazy Loading**: Heavy tools (like `nvm`, `rbenv`) are lazy-loaded. They only initialize when you type the command.
260
276
  - **Zcompile**: Your `.zshrc` and generated config files are automatically compiled to `.zwc` bytecode for faster parsing.
261
277
  - **Fast Mode**: Set `DOTFILES_FAST=1` to skip heavy startup work (plugins, completions, prompt tooling, AI helpers) for the quickest possible first prompt.
@@ -264,4 +280,5 @@ Available themes:
264
280
  - **Deferred Hooks**: Use `DOTFILES_DEFER_COMPINIT=1`, `DOTFILES_DEFER_TOOLS=1`, and `DOTFILES_DEFER_ZINIT_MODE=preexec` to move work after the first command.
265
281
 
266
282
  ## Test
283
+
267
284
  This repository includes GitHub Actions CI to test the configuration on macOS, Ubuntu, and Windows for every Pull Request.
@@ -5,8 +5,8 @@
5
5
  # Raise timeout to avoid spurious prompt warnings.
6
6
  command_timeout = 5000
7
7
  add_newline = true
8
- {{- $t := index .themes (default "macos-monterey-dark" .theme) -}}
9
- {{- if not $t -}}{{- $t = index .themes "macos-monterey-dark" -}}{{- end }}
8
+ {{- $t := index .themes (default "big-sur-dark" .theme) -}}
9
+ {{- if not $t -}}{{- $t = index .themes "big-sur-dark" -}}{{- end }}
10
10
  # Palette driven by starship_palette in .chezmoidata/themes.toml
11
11
  palette = "{{ $t.app.starship_palette }}"
12
12
 
@@ -1,5 +1,5 @@
1
- {{- $t := index .themes (default "macos-monterey-dark" .theme) -}}
2
- {{- if not $t -}}{{- $t = index .themes "macos-monterey-dark" -}}{{- end -}}
1
+ {{- $t := index .themes (default "big-sur-dark" .theme) -}}
2
+ {{- if not $t -}}{{- $t = index .themes "big-sur-dark" -}}{{- end -}}
3
3
  {{- $bg := $t.term.bg -}}
4
4
  {{- $fg := $t.term.fg -}}
5
5
  {{- $accent := $t.ui.accent -}}
@@ -141,7 +141,7 @@ bind K confirm-before -p "kill all sessions? (y/n)" kill-server
141
141
 
142
142
  # ╔══════════════════════════════════════════════════════════════════════════╗
143
143
  # ║ THEME — Powerline Status Bar ║
144
- # ║ Colors from .chezmoidata/themes.toml ({{ default "macos-monterey-dark" .theme }}) ║
144
+ # ║ Colors from .chezmoidata/themes.toml ({{ default "big-sur-dark" .theme }}) ║
145
145
  # ╚══════════════════════════════════════════════════════════════════════════╝
146
146
 
147
147
  # --- Status Bar ---
@@ -7,3 +7,4 @@ XDG_PICTURES_DIR="$HOME/Pictures"
7
7
  XDG_VIDEOS_DIR="$HOME/Videos"
8
8
  XDG_TEMPLATES_DIR="$HOME/Templates"
9
9
  XDG_PUBLICSHARE_DIR="$HOME/Public"
10
+ XDG_PROJECTS_DIR="$HOME/Projects"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  // Theme Configuration - Dynamically set based on chezmoi theme variable
3
- {{- $t := index .themes (default "macos-monterey-dark" .theme) -}}
4
- {{- if not $t -}}{{- $t = index .themes "macos-monterey-dark" -}}{{- end }}
3
+ {{- $t := index .themes (default "big-sur-dark" .theme) -}}
4
+ {{- if not $t -}}{{- $t = index .themes "big-sur-dark" -}}{{- end }}
5
5
  "workbench.colorTheme": "{{ $t.app.vscode }}",
6
6
  "workbench.preferredDarkColorTheme": "{{ $t.app.vscode_dark }}",
7
7
  "workbench.preferredLightColorTheme": "{{ $t.app.vscode_light }}",
@@ -1,5 +1,5 @@
1
- {{- $t := index .themes (default "macos-monterey-dark" .theme) -}}
2
- {{- if not $t -}}{{- $t = index .themes "macos-monterey-dark" -}}{{- end -}}
1
+ {{- $t := index .themes (default "big-sur-dark" .theme) -}}
2
+ {{- if not $t -}}{{- $t = index .themes "big-sur-dark" -}}{{- end -}}
3
3
  {{- /* Copyright (c) 2015-2026 Dotfiles. All rights reserved. */ -}}
4
4
  // Waybar configuration for niri — {{ .theme }}
5
5
  // Generated by chezmoi · dotfiles v{{ .dotfiles_version }}
@@ -1,5 +1,5 @@
1
- {{- $t := index .themes (default "macos-monterey-dark" .theme) -}}
2
- {{- if not $t -}}{{- $t = index .themes "macos-monterey-dark" -}}{{- end -}}
1
+ {{- $t := index .themes (default "big-sur-dark" .theme) -}}
2
+ {{- if not $t -}}{{- $t = index .themes "big-sur-dark" -}}{{- end -}}
3
3
  {{- /* Copyright (c) 2015-2026 Dotfiles. All rights reserved. */ -}}
4
4
  {{- $bg := $t.term.bg -}}
5
5
  {{- $fg := $t.term.fg -}}
@@ -7,10 +7,10 @@ end
7
7
 
8
8
  {{- $fontFamily := default "JetBrainsMono Nerd Font" .terminal_font_family -}}
9
9
  {{- $fontSize := default 12 .terminal_font_size -}}
10
- {{- $t := index .themes (default "macos-monterey-dark" .theme) -}}
11
- {{- if not $t -}}{{- $t = index .themes "macos-monterey-dark" -}}{{- end }}
10
+ {{- $t := index .themes (default "big-sur-dark" .theme) -}}
11
+ {{- if not $t -}}{{- $t = index .themes "big-sur-dark" -}}{{- end }}
12
12
  {{- $tt := $t -}}
13
- {{- $themeName := default "macos-monterey-dark" .theme -}}
13
+ {{- $themeName := default "big-sur-dark" .theme -}}
14
14
  {{- if hasSuffix "-light" $themeName -}}
15
15
  {{- $darkTheme := index .themes (printf "%s-dark" (trimSuffix "-light" $themeName)) -}}
16
16
  {{- if $darkTheme -}}{{- $tt = $darkTheme -}}{{- end -}}
@@ -28,7 +28,7 @@ export FORCE_COLOR_OS="Windows"
28
28
 
29
29
  {{- $profile := default "laptop" .profile -}}
30
30
  {{- $features := default (dict "zsh" true "nvim" true "tmux" true "gui" true "secrets" true) .features -}}
31
- {{- $theme := default "macos-monterey-dark" .theme -}}
31
+ {{- $theme := default "big-sur-dark" .theme -}}
32
32
  {{- $strict_mode := default false (index . "strict_mode") -}}
33
33
  {{- $enabled := list -}}
34
34
  {{- range $k, $v := $features }}{{- if $v }}{{- $enabled = append $enabled $k }}{{- end }}{{- end }}
@@ -108,27 +108,141 @@ fi
108
108
  _SHELL_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh"
109
109
  [[ -d "$_SHELL_CACHE" ]] || mkdir -p "$_SHELL_CACHE"
110
110
 
111
+ # Append a timing event to ${XDG_STATE_HOME:-~/.local/state}/dotfiles/eval-timings.jsonl.
112
+ # Read by `dot perf --by-tool` to attribute startup time per tool.
113
+ _cached_eval_log_timing() {
114
+ emulate -L zsh
115
+ setopt no_clobber 2>/dev/null && unsetopt no_clobber
116
+ local label="$1" t0="$2" t1="$3" rc="${4:-0}" shell="${5:-zsh}"
117
+ local log_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles"
118
+ [[ -d "$log_dir" ]] || mkdir -p "$log_dir" 2>/dev/null || return 0
119
+ local logfile="$log_dir/eval-timings.jsonl"
120
+ [[ -f "$logfile" ]] || touch "$logfile" 2>/dev/null || return 0
121
+ local ms_int=0
122
+ if [[ -n "$t0" && -n "$t1" ]]; then
123
+ ms_int=$(printf '%.0f' "$(( (t1 - t0) * 1000 ))" 2>/dev/null) || ms_int=0
124
+ fi
125
+ printf '{"ts":"%s","shell":"%s","label":"%s","ms":%s,"rc":%s}\n' \
126
+ "$(date -u +%Y-%m-%dT%H:%M:%SZ)" "$shell" "$label" "$ms_int" "$rc" \
127
+ >> "$logfile" 2>/dev/null || true
128
+ }
129
+
130
+ # Cache and source a tool's init output, with mtime/realpath/file-arg invalidation.
131
+ #
132
+ # Runs <cmd args...> on cache miss, vets the output for shell-injection
133
+ # patterns, writes atomically, sources, and precompiles via zcompile in
134
+ # the background. Cache invalidates when the binary's mtime is newer,
135
+ # its realpath has changed (PATH-shadow swap), or a file-path argument
136
+ # is newer than the cache.
137
+ #
138
+ # @arg $1 string Cache label (cache file: $_SHELL_CACHE/<label>.zsh)
139
+ # @arg $2..N string Command and args to run on cache miss
140
+ # @env EVALCACHE_DISABLE Set to "true" to bypass cache read AND write
141
+ # @env EVALCACHE_TIMING Set to "1" to log per-call timing for `dot perf --by-tool`
142
+ # @stdout Sourced cache content
143
+ # @stderr Warning on init failure or suspicious-output rejection
144
+ # @exitcode 0 Cache hit, successful regeneration, or successful bypass
145
+ # @exitcode 1 Suspicious pattern detected in init output
146
+ # @exitcode * Init command's exit code on non-zero return
111
147
  _cached_eval() {
148
+ if [[ "$EVALCACHE_TIMING" != "1" ]]; then
149
+ _cached_eval_impl "$@"
150
+ return
151
+ fi
152
+ zmodload zsh/datetime 2>/dev/null
153
+ local _ce_t0="${EPOCHREALTIME:-$(date +%s.%N 2>/dev/null || echo 0)}"
154
+ _cached_eval_impl "$@"
155
+ local _ce_rc=$?
156
+ local _ce_t1="${EPOCHREALTIME:-$(date +%s.%N 2>/dev/null || echo 0)}"
157
+ _cached_eval_log_timing "${1:-unknown}" "$_ce_t0" "$_ce_t1" "$_ce_rc" "zsh"
158
+ return $_ce_rc
159
+ }
160
+
161
+ _cached_eval_impl() {
112
162
  local label=$1; shift
163
+
164
+ # Debug bypass: skip cache read AND write entirely.
165
+ # Set EVALCACHE_DISABLE=true to eval directly without touching cache files.
166
+ if [[ "$EVALCACHE_DISABLE" == "true" ]]; then
167
+ eval "$("$@" 2>/dev/null)"
168
+ return $?
169
+ fi
170
+
113
171
  local cache="$_SHELL_CACHE/${label}.zsh"
172
+ local pin="${cache}.bin"
114
173
  local bin="${commands[$1]}"
115
- if [[ -f "$cache" ]] && [[ -z "$bin" || "$cache" -nt "$bin" ]]; then
116
- source "$cache"
117
- else
118
- local init_output
119
- local suspicious_re
120
- init_output=$("$@" 2>/dev/null)
121
- suspicious_re='(curl[[:space:]].*\|[[:space:]]*(ba)?sh|wget[[:space:]].*\|[[:space:]]*(ba)?sh|nc[[:space:]]+-e|/dev/tcp/|base64[[:space:]]+-d[[:space:]]*\|)'
122
- # Reject suspicious patterns indicating malicious payloads
123
- if printf '%s\n' "$init_output" | LC_ALL=C grep -Eqs -- "$suspicious_re"; then
124
- print -u2 "[WARN] Suspicious output from $label init, skipping"
125
- return 1
126
- fi
127
- print -r -- "$init_output" > "${cache}.tmp.$$"
128
- mv "${cache}.tmp.$$" "$cache"
174
+ local real_bin=""
175
+ [[ -n "$bin" ]] && real_bin=${bin:A}
176
+
177
+ # Cache is valid when: it exists non-empty, the binary is not newer than it,
178
+ # the recorded realpath (if any) still matches the current realpath, and no
179
+ # file-path argument has been modified since cache write.
180
+ local cache_valid=1
181
+ if [[ ! -s "$cache" ]]; then
182
+ cache_valid=0
183
+ elif [[ -n "$bin" && "$bin" -nt "$cache" ]]; then
184
+ cache_valid=0
185
+ elif [[ -f "$pin" && -n "$real_bin" ]]; then
186
+ local pinned_real
187
+ pinned_real=$(<"$pin")
188
+ [[ -n "$pinned_real" && "$pinned_real" != "$real_bin" ]] && cache_valid=0
189
+ fi
190
+ if (( cache_valid )); then
191
+ local arg
192
+ for arg in "${@:2}"; do
193
+ if [[ -f "$arg" && "$arg" -nt "$cache" ]]; then
194
+ cache_valid=0
195
+ break
196
+ fi
197
+ done
198
+ fi
199
+
200
+ if (( cache_valid )); then
129
201
  source "$cache"
130
- { zcompile "$cache" } &!
202
+ return
203
+ fi
204
+
205
+ local init_output rc
206
+ init_output=$("$@" 2>/dev/null)
207
+ rc=$?
208
+ if (( rc != 0 )); then
209
+ print -u2 "[WARN] $label init exited $rc; not caching"
210
+ return $rc
211
+ fi
212
+
213
+ # Reject suspicious patterns indicating malicious payloads
214
+ local suspicious_re='(curl[[:space:]].*\|[[:space:]]*(ba)?sh|wget[[:space:]].*\|[[:space:]]*(ba)?sh|nc[[:space:]]+-e|/dev/tcp/|base64[[:space:]]+-d[[:space:]]*\|)'
215
+ if printf '%s\n' "$init_output" | LC_ALL=C grep -Eqs -- "$suspicious_re"; then
216
+ print -u2 "[WARN] Suspicious output from $label init, skipping"
217
+ return 1
218
+ fi
219
+
220
+ print -r -- "$init_output" > "${cache}.tmp.$$"
221
+ mv "${cache}.tmp.$$" "$cache"
222
+ if [[ -n "$real_bin" ]]; then
223
+ print -r -- "$real_bin" > "${pin}.tmp.$$"
224
+ mv "${pin}.tmp.$$" "$pin"
131
225
  fi
226
+ source "$cache"
227
+ { zcompile "$cache" } &!
228
+ }
229
+
230
+ # Clear cache files written by _cached_eval.
231
+ #
232
+ # Safe by design: only deletes *.zsh / *.zsh.bin / *.zwc files in
233
+ # $_SHELL_CACHE, leaving any unrelated content untouched.
234
+ #
235
+ # @noargs
236
+ # @stdout Single-line summary: "Cleared N cached eval file(s) from <dir>"
237
+ # @exitcode 0 Always (no-op when cache dir doesn't exist)
238
+ _cached_eval_clear() {
239
+ local cache_dir="$_SHELL_CACHE"
240
+ [[ -d "$cache_dir" ]] || return 0
241
+ local count=0 f
242
+ for f in "$cache_dir"/*.zsh(N) "$cache_dir"/*.zsh.bin(N) "$cache_dir"/*.zwc(N); do
243
+ rm -f -- "$f" && (( count++ ))
244
+ done
245
+ printf 'Cleared %d cached eval file(s) from %s\n' "$count" "$cache_dir"
132
246
  }
133
247
 
134
248
  # Lightweight precmd hook manager (faster than add-zsh-hook)
@@ -259,6 +373,23 @@ unset _core_layers
259
373
  # Starship prompt (eager — must survive cache clears for consistent UI)
260
374
  if [[ "$DOTFILES_ARTIFACT_MODE" != "1" ]] && (( ${+commands[starship]} )); then
261
375
  _cached_eval starship-init starship init zsh
376
+ # Transient Prompt: collapse the prompt of past commands to the
377
+ # [character] glyph after Enter, reducing scrollback noise.
378
+ #
379
+ # Forward-compatibility hook. Starship's `enable_transience` function
380
+ # is currently defined only by `starship init fish` (upstream issue
381
+ # starship/starship#3522 tracks the zsh equivalent). On zsh the
382
+ # `${+functions[enable_transience]}` guard evaluates to 0, so the
383
+ # block silently no-ops. When upstream ships the zsh-side function,
384
+ # this code activates automatically — no zshrc change needed.
385
+ #
386
+ # The `_DOTFILES_STARSHIP_TRANSIENT` flag prevents the lazy-hydration
387
+ # path below (which also re-runs starship init) from binding the
388
+ # widgets twice.
389
+ if [[ -z "${_DOTFILES_STARSHIP_TRANSIENT:-}" ]] && (( ${+functions[enable_transience]} )); then
390
+ enable_transience
391
+ _DOTFILES_STARSHIP_TRANSIENT=1
392
+ fi
262
393
  fi
263
394
 
264
395
  # User-local modules (aliases, functions — not managed by chezmoi)
@@ -458,7 +589,13 @@ _dotfiles_async_init() {
458
589
  _cached_eval atuin-init atuin init zsh
459
590
  ;;
460
591
  starship)
461
- [[ "$DOTFILES_ARTIFACT_MODE" == "0" ]] && _cached_eval starship-init starship init zsh
592
+ if [[ "$DOTFILES_ARTIFACT_MODE" == "0" ]]; then
593
+ _cached_eval starship-init starship init zsh
594
+ if [[ -z "${_DOTFILES_STARSHIP_TRANSIENT:-}" ]] && (( ${+functions[enable_transience]} )); then
595
+ enable_transience
596
+ _DOTFILES_STARSHIP_TRANSIENT=1
597
+ fi
598
+ fi
462
599
  ;;
463
600
  zoxide)
464
601
  _cached_eval zoxide-init zoxide init zsh
@@ -1,13 +1,35 @@
1
1
  # shellcheck shell=bash
2
2
  # Cognitive Shell Enhancements
3
+ #
4
+ # Carapace is deferred to first `preexec` (closes #862). The eager
5
+ # `_cached_eval carapace ...` call previously cost ~15ms on every
6
+ # interactive shell start even with the cache warm — that work is
7
+ # only needed when the user invokes tab-completion, which happens
8
+ # after the first command at the earliest. Opt out by setting
9
+ # `DOTFILES_DEFER_CARAPACE=0` (rarely useful).
3
10
  if [[ -o interactive ]]; then
4
- # Carapace completions — cached to avoid subshell on every startup
5
- if command -v carapace >/dev/null 2>&1; then
6
- if typeset -f _cached_eval >/dev/null 2>&1; then
7
- _cached_eval carapace carapace _carapace zsh
8
- else
9
- source <(carapace _zsh)
11
+ : ${DOTFILES_DEFER_CARAPACE:=1}
12
+
13
+ _dotfiles_carapace_init() {
14
+ if command -v carapace >/dev/null 2>&1; then
15
+ if typeset -f _cached_eval >/dev/null 2>&1; then
16
+ _cached_eval carapace carapace _carapace zsh
17
+ else
18
+ source <(carapace _zsh)
19
+ fi
10
20
  fi
21
+ }
22
+
23
+ if [[ "${DOTFILES_DEFER_CARAPACE}" == "1" ]] && typeset -f _dotfiles_add_preexec >/dev/null 2>&1; then
24
+ _dotfiles_carapace_deferred() {
25
+ _dotfiles_del_preexec _dotfiles_carapace_deferred
26
+ _dotfiles_carapace_init
27
+ }
28
+ _dotfiles_add_preexec _dotfiles_carapace_deferred
29
+ else
30
+ # Fallback to eager init when preexec helpers aren't available
31
+ # (e.g., DOTFILES_FAST=1 paths that skip the zshrc helper block).
32
+ _dotfiles_carapace_init
11
33
  fi
12
34
 
13
35
  # thefuck — lazy-loaded to avoid ~200ms startup penalty
@@ -112,24 +112,44 @@ if [[ "${DOTFILES_FAST:-0}" != "1" ]] && [[ "${DOTFILES_ULTRA_FAST:-0}" != "1" ]
112
112
  }
113
113
  sdk() { _lazy_load_sdkman; sdk "$@"; }
114
114
  fi
115
- # Defer compinit to first prompt — opt-in for max performance
115
+ # Defer compinit to first prompt — opt-in for max performance.
116
+ #
117
+ # Cache lifecycle (closes #864):
118
+ # * dump path lives at $XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION so
119
+ # the user-state directory is clean (and zsh's own search picks up
120
+ # `.zwc` siblings automatically — non-laptop profiles get the
121
+ # benefit even without re-running compinit).
122
+ # * `compinit -C` (skip security-check, use the cached dump) is used
123
+ # when the dump is fresh (< 24 h); full `compinit` rebuilds when
124
+ # the dump is older.
125
+ # * The dump is `zcompile`d in the background after each rebuild so
126
+ # subsequent shells load the bytecode form directly.
127
+ # * The fpath corpus itself is precompiled at chezmoi-apply time by
128
+ # `run_onchange_after_zcompile-completions.sh.tmpl` — that runs
129
+ # once per fpath change, not per shell start.
116
130
  : ${DOTFILES_ENABLE_COMPINIT:=0}
117
131
  : ${DOTFILES_DEFER_COMPINIT:=1}
132
+
133
+ _DOTFILES_ZCOMPDUMP="${XDG_CACHE_HOME:-${HOME}/.cache}/zsh/zcompdump-${ZSH_VERSION:-${ZSH_NAME:-unknown}}"
134
+
118
135
  if [[ "${DOTFILES_ENABLE_COMPINIT}" == "1" ]] && [[ "${DOTFILES_FAST:-0}" != "1" ]] && [[ "${DOTFILES_ULTRA_FAST:-0}" != "1" ]]; then
119
136
  autoload -Uz compinit
137
+ [[ -d "${_DOTFILES_ZCOMPDUMP:h}" ]] || mkdir -p "${_DOTFILES_ZCOMPDUMP:h}"
138
+
120
139
  _deferred_compinit() {
121
140
  if [[ "${DOTFILES_DEFER_COMPINIT}" == "1" ]]; then
122
141
  _dotfiles_del_preexec _deferred_compinit
123
142
  else
124
143
  _dotfiles_del_precmd _deferred_compinit
125
144
  fi
126
- if [[ -n ${ZDOTDIR}/.zcompdump(#qN.mh+24) ]]; then
127
- compinit
145
+ # Fresh dump (< 24 h) → use cached fast path; otherwise rebuild.
146
+ if [[ -n ${_DOTFILES_ZCOMPDUMP}(#qN.mh+24) ]]; then
147
+ compinit -d "${_DOTFILES_ZCOMPDUMP}"
128
148
  else
129
- compinit -C
149
+ compinit -C -d "${_DOTFILES_ZCOMPDUMP}"
130
150
  fi
131
- # Compile zcompdump to bytecode in background for faster subsequent loads
132
- { [[ ! -f "${ZDOTDIR}/.zcompdump.zwc" || "${ZDOTDIR}/.zcompdump" -nt "${ZDOTDIR}/.zcompdump.zwc" ]] && zcompile "${ZDOTDIR}/.zcompdump" } &!
151
+ # Compile to bytecode in background for faster subsequent loads
152
+ { [[ ! -f "${_DOTFILES_ZCOMPDUMP}.zwc" || "${_DOTFILES_ZCOMPDUMP}" -nt "${_DOTFILES_ZCOMPDUMP}.zwc" ]] && zcompile "${_DOTFILES_ZCOMPDUMP}" } &!
133
153
  }
134
154
  if [[ "${DOTFILES_DEFER_COMPINIT}" == "1" ]]; then
135
155
  _dotfiles_add_preexec _deferred_compinit
@@ -2,6 +2,8 @@
2
2
  # Universal directory bookmarking with history support
3
3
  # Works across Bash, Zsh, and Fish
4
4
 
5
+ set -eu
6
+
5
7
  # Cross-platform sed in-place (BSD vs GNU)
6
8
  _sed_i() {
7
9
  if sed --version >/dev/null 2>&1; then
@@ -3,7 +3,7 @@
3
3
  # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
4
4
  set -euo pipefail
5
5
 
6
- # Dotfiles CLI Entry Point - v0.2.500
6
+ # Dotfiles CLI Entry Point - v0.2.501
7
7
 
8
8
  # Ensure XDG Base Directory variables are set
9
9
  export XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-$HOME/.config}"
@@ -21,7 +21,7 @@ if [ -e "${HOME}/.nix-profile/etc/profile.d/nix.sh" ]; then
21
21
  . "${HOME}/.nix-profile/etc/profile.d/nix.sh"
22
22
  fi
23
23
 
24
- VERSION="0.2.500"
24
+ VERSION="0.2.501"
25
25
 
26
26
  COMMAND="${1:-}"
27
27
  if [ -n "${1:-}" ]; then
@@ -344,12 +344,19 @@ ai-setup|ai
344
344
  ai-query|ai
345
345
  cl|ai
346
346
  claude|ai
347
+ codex|ai
348
+ copilot|ai
347
349
  gemini|ai
350
+ goose|ai
348
351
  kiro|ai
349
352
  sgpt|ai
350
353
  ollama|ai
351
354
  opencode|ai
352
355
  aider|ai
356
+ autohand|ai
357
+ vibe|ai
358
+ qwen|ai
359
+ zai|ai
353
360
  env|tools
354
361
  profile|tools
355
362
  tools|tools
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env bash
2
- set -e
2
+ set -euo pipefail
3
3
 
4
4
  # Measure time to load heavy layers in a fresh interactive shell
5
5
  # Usage: dot-load-benchmark [runs]
@@ -2,6 +2,8 @@
2
2
  # Universal desktop notification (notify)
3
3
  # Supports macOS (osascript), Linux (notify-send), and WSL (powershell)
4
4
 
5
+ set -eu
6
+
5
7
  title="${1:-Notification}"
6
8
  message="${2:-}"
7
9
 
@@ -2,6 +2,8 @@
2
2
  # Universal file opener (open)
3
3
  # Maps to open (macOS), xdg-open (Linux), and explorer.exe (WSL)
4
4
 
5
+ set -eu
6
+
5
7
  target="${1:-.}"
6
8
 
7
9
  # Helper for rich feedback if TTY is present
@@ -1,6 +1,8 @@
1
1
  #!/bin/sh
2
2
  # Interactive Tour using Gum
3
- # Part of Dotfiles v0.2.500
3
+ # Part of Dotfiles v0.2.501
4
+
5
+ set -eu
4
6
 
5
7
  if ! command -v gum >/dev/null; then
6
8
  echo "Error: 'gum' is not installed."
@@ -37,7 +39,7 @@ banner='██████╗ ██████╗ ████████╗
37
39
  ██████╔╝╚██████╔╝ ██║ ██║ ██║███████╗███████╗███████║
38
40
  ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚══════╝
39
41
 
40
- v0.2.500 · Infrastructure‑grade shell environment'
42
+ v0.2.501 · Infrastructure‑grade shell environment'
41
43
 
42
44
  gum style \
43
45
  --foreground 212 --border-foreground 212 --border double \
@@ -2,7 +2,9 @@
2
2
  # Universal directory navigation with history support
3
3
  # Works across Bash, Zsh, and Fish
4
4
 
5
- levels=$1
5
+ set -eu
6
+
7
+ levels=${1:-1}
6
8
  target=".."
7
9
 
8
10
  case "$levels" in