@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.
- package/CHANGELOG.md +77 -0
- package/README.md +82 -44
- package/docs/.vitepress/reports/localization-readability-audit.md +4 -0
- package/docs/AI.md +8 -2
- package/docs/CNAME +1 -0
- package/docs/COPYRIGHT +1 -1
- package/docs/NAMING_CONVENTIONS.md +7 -0
- package/docs/README.md +4 -0
- package/docs/_config.yml +59 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +17 -0
- package/docs/adr/ADR-002-shell-performance.md +9 -0
- package/docs/adr/ADR-003-security-first.md +18 -0
- package/docs/adr/ADR-004-cli-architecture.md +14 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +10 -0
- package/docs/adr/ADR-006-shell-selection.md +9 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +10 -1
- package/docs/adr/ADR-008-alias-system-architecture.md +10 -0
- package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
- package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
- package/docs/adr/README.md +7 -0
- package/docs/architecture/ARCHITECTURE.md +4 -0
- package/docs/architecture/INTEROP.md +8 -0
- package/docs/architecture/REPO_LAYOUT.md +5 -1
- package/docs/architecture/WALKTHROUGH.md +4 -0
- package/docs/architecture/fleet-deployment.md +4 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +11 -3
- package/docs/archive/LEGACY_ROADMAP.md +45 -27
- package/docs/archive/MILESTONE_v0.2.493.md +4 -0
- package/docs/archive/PLAN.md +46 -8
- package/docs/archive/REPO_AUDIT.md +8 -0
- package/docs/guides/INSTALL.md +4 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +9 -0
- package/docs/guides/THEMING.md +8 -0
- package/docs/guides/TROUBLESHOOTING.md +28 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +70 -1
- package/docs/index.md +6 -2
- package/docs/interop/A2A.md +7 -0
- package/docs/interop/POWERSHELL.md +102 -0
- package/docs/manual/00-introduction.md +5 -1
- package/docs/manual/01-concepts/01-architecture.md +4 -0
- package/docs/manual/01-concepts/02-trust-model.md +6 -2
- package/docs/manual/01-concepts/03-theme-engine.md +4 -0
- package/docs/manual/01-concepts/04-fleet.md +7 -1
- package/docs/manual/01-concepts/05-self-healing.md +8 -1
- package/docs/manual/02-tutorials/01-first-install.md +5 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +5 -0
- package/docs/manual/02-tutorials/03-create-profile.md +6 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +6 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +5 -1
- package/docs/manual/03-reference/01-dot-cli.md +4 -0
- package/docs/manual/03-reference/02-config-files.md +8 -2
- package/docs/manual/03-reference/03-environment.md +4 -0
- package/docs/manual/03-reference/04-templates.md +7 -1
- package/docs/manual/03-reference/05-feature-flags.md +10 -0
- package/docs/manual/04-cookbook/01-recipes.md +4 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +32 -0
- package/docs/manual/04-cookbook/03-faq.md +8 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +4 -0
- package/docs/manual/05-appendices/B-security-checklist.md +6 -0
- package/docs/manual/05-appendices/C-glossary.md +4 -0
- package/docs/manual/05-appendices/D-bibliography.md +5 -1
- package/docs/manual/05-appendices/E-license.md +4 -0
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +4 -0
- package/docs/manual/concept-index.md +4 -0
- package/docs/operations/ATTESTATION.md +5 -0
- package/docs/operations/CI_CADENCE.md +107 -0
- package/docs/operations/CI_COMPOSITES.md +156 -0
- package/docs/operations/COMPLETIONS.md +123 -0
- package/docs/operations/COVERAGE.md +148 -0
- package/docs/operations/DRIFT.md +107 -0
- package/docs/operations/MAINTENANCE.md +5 -1
- package/docs/operations/MIGRATION.md +14 -6
- package/docs/operations/OPERATIONS.md +24 -0
- package/docs/operations/PERFORMANCE.md +133 -0
- package/docs/operations/RELIABILITY.md +6 -0
- package/docs/operations/ROADMAP.md +36 -18
- package/docs/operations/TESTING.md +4 -0
- package/docs/operations/TRACEABILITY.md +4 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +4 -0
- package/docs/operations/VERSION_SYNC.md +54 -5
- package/docs/reference/ALIASES.md +7 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +5 -1
- package/docs/reference/ALIASES_DEPRECATIONS.md +5 -1
- package/docs/reference/FEATURES.md +4 -0
- package/docs/reference/FONTS.md +4 -0
- package/docs/reference/PROFILES.md +4 -0
- package/docs/reference/SCREENSHOTS.md +4 -0
- package/docs/reference/SCRIPTS.md +4 -0
- package/docs/reference/SUPPORT_MATRIX.md +10 -4
- package/docs/reference/THEMES.md +4 -0
- package/docs/reference/TOOLS.md +4 -0
- package/docs/reference/UTILS.md +16 -12
- package/docs/security/AI_ACT_COMPLIANCE.md +4 -0
- package/docs/security/AUDIT_BYPASS.md +103 -0
- package/docs/security/AUTOMATION_SECRETS.md +4 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
- package/docs/security/COMPLIANCE.md +5 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
- package/docs/security/ENCRYPTION.md +5 -0
- package/docs/security/FMEA.md +4 -0
- package/docs/security/HISTORY_FILTERING.md +132 -0
- package/docs/security/INCIDENT_RESPONSE.md +4 -0
- package/docs/security/INSTALL_VERIFICATION.md +122 -0
- package/docs/security/KEYS.md +4 -0
- package/docs/security/KEY_ROTATION.md +4 -0
- package/docs/security/MCP_POLICY.md +9 -0
- package/docs/security/POLICY_RELEASES.md +4 -0
- package/docs/security/README.md +4 -0
- package/docs/security/SCORECARD.md +80 -0
- package/docs/security/SECRETS.md +12 -0
- package/docs/security/SECURITY.md +4 -0
- package/docs/security/SECURITY_CHECKLIST.md +11 -0
- package/docs/security/SHELL_EXEMPTIONS.md +145 -0
- package/docs/security/SOUP_REGISTER.md +4 -0
- package/docs/security/THREAT_MODEL.md +10 -0
- package/docs/security/VERIFICATION_VALIDATION.md +5 -1
- package/docs/themes/README.md +4 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +4 -0
- package/dot_config/ai/identity.md +3 -0
- package/dot_config/ai/patterns/architect.md +2 -0
- package/dot_config/ai/patterns/hardener.md +2 -0
- package/dot_config/ai/patterns/refactor.md +2 -0
- package/dot_config/alacritty/alacritty.toml.tmpl +3 -3
- package/dot_config/atuin/config.toml.tmpl +47 -0
- package/dot_config/dotfiles/agent-card.json +1 -1
- package/dot_config/dotfiles/boot/README.md +2 -0
- package/dot_config/dotfiles/grub/README.md +2 -0
- package/dot_config/dotfiles/lock/README.md +2 -0
- package/dot_config/fish/conf.d/init.fish.tmpl +21 -0
- package/dot_config/fish/functions/_cached_eval.fish +84 -11
- package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
- package/dot_config/foot/foot.ini.tmpl +3 -3
- package/dot_config/fuzzel/fuzzel.ini.tmpl +2 -2
- package/dot_config/ghostty/config.tmpl +3 -3
- package/dot_config/git/hooks/executable_commit-msg +146 -0
- package/dot_config/goose/config.yaml +2 -2
- package/dot_config/gtk-3.0/gtk.css.tmpl +2 -2
- package/dot_config/gtk-3.0/settings.ini.tmpl +2 -2
- package/dot_config/gtk-4.0/gtk.css.tmpl +2 -2
- package/dot_config/gtk-4.0/settings.ini.tmpl +2 -2
- package/dot_config/kitty/kitty.conf.tmpl +3 -3
- package/dot_config/mise/config.toml +1 -1
- package/dot_config/niri/config.kdl.tmpl +2 -2
- package/dot_config/nushell/cached_eval.nu +80 -0
- package/dot_config/nushell/env.nu.tmpl +21 -13
- package/dot_config/shell/00-core-paths.sh.tmpl +1 -0
- package/dot_config/shell/05-core-safety.sh +1 -0
- package/dot_config/shell/10-secrets.sh +1 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +1 -0
- package/dot_config/shell/40-ls-colors.sh +1 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +1 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +1 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +1 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +1 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +1 -0
- package/dot_config/shell/README.md +25 -8
- package/dot_config/starship.toml.tmpl +2 -2
- package/dot_config/tmux/tmux.conf.tmpl +3 -3
- package/dot_config/user-dirs.dirs +1 -0
- package/dot_config/vscode/settings.json.tmpl +2 -2
- package/dot_config/waybar/config.jsonc.tmpl +2 -2
- package/dot_config/waybar/style.css.tmpl +2 -2
- package/dot_config/wezterm/wezterm.lua.tmpl +3 -3
- package/dot_config/zsh/dot_zshrc.tmpl +154 -17
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +28 -6
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +26 -6
- package/dot_local/bin/executable_bm +2 -0
- package/dot_local/bin/executable_dot +9 -2
- package/dot_local/bin/executable_dot-load-benchmark +1 -1
- package/dot_local/bin/executable_notify +2 -0
- package/dot_local/bin/executable_open +2 -0
- package/dot_local/bin/executable_tour +4 -2
- package/dot_local/bin/executable_up +3 -1
- package/install.sh +12 -4
- package/package.json +1 -1
- package/scripts/ci/check-dangerous-chmod.sh +19 -0
- package/scripts/ci/check-deps-dev.sh +236 -0
- package/scripts/ci/check-insecure-tls.sh +61 -0
- package/scripts/ci/check-regression-traceability.sh +67 -0
- package/scripts/ci/check-shell-preamble.sh +106 -0
- package/scripts/ci/run-coverage.sh +362 -0
- package/scripts/ci/validate-chezmoidata.sh +25 -0
- package/scripts/diagnostics/doctor.sh +173 -5
- package/scripts/diagnostics/drift-dashboard.sh +177 -13
- package/scripts/diagnostics/health.sh +21 -4
- package/scripts/diagnostics/perf.sh +304 -77
- package/scripts/diagnostics/workstation-attestation.sh +6 -1
- package/scripts/dot/commands/agent.sh +14 -5
- package/scripts/dot/commands/ai.sh +75 -10
- package/scripts/dot/lib/bento.sh +2 -1
- package/scripts/dot/lib/log.sh +6 -0
- package/scripts/dot/lib/platform.sh +1 -0
- package/scripts/dot/lib/ui.sh +11 -0
- package/scripts/dot/lib/utils.sh +5 -0
- package/scripts/git-hooks/pre-commit-audit.sh +1 -1
- package/scripts/git-hooks/pre-push +66 -3
- package/scripts/ops/heal-chezmoi.sh +41 -6
- package/scripts/qa/powershell-contract.ps1 +95 -0
- package/scripts/theme/merge-wallpaper.sh +4 -0
- package/scripts/theme/switch.sh +20 -10
- package/dot_config/atuin/config.toml +0 -40
- package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-010: Enable Starship Transient Prompt in Zsh and Fish
|
|
6
|
+
|
|
7
|
+
## Status
|
|
8
|
+
|
|
9
|
+
Accepted
|
|
10
|
+
|
|
11
|
+
## Date
|
|
12
|
+
|
|
13
|
+
2026-05-12
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
Starship is the prompt renderer for both zsh and fish in this
|
|
18
|
+
distribution (pinned via `mise.toml`: `starship = "1.24.2"`).
|
|
19
|
+
A typical Starship prompt for this project renders 4–6 lines including
|
|
20
|
+
the directory, git branch + dirty markers, language toolchain version,
|
|
21
|
+
duration of the previous command, and a final `❯` line.
|
|
22
|
+
|
|
23
|
+
By default Starship emits this multi-line prompt on **every** previous
|
|
24
|
+
command as well as the current one. After 50 commands in a session, the
|
|
25
|
+
terminal scrollback contains 200–300 lines of historical prompts — most
|
|
26
|
+
of which only convey context that was relevant at the time the command
|
|
27
|
+
ran. Search through scrollback (Ctrl-r history, copy-paste, screenshots,
|
|
28
|
+
asciinema replay) is noisy.
|
|
29
|
+
|
|
30
|
+
Starship 1.24+ supports a **transient prompt** feature: when a command
|
|
31
|
+
finishes, the prompt that produced it is rewritten to a compact form
|
|
32
|
+
(e.g., `❯`) and the full prompt is re-emitted only at the live editing
|
|
33
|
+
line. The current command always shows the full prompt; history shows
|
|
34
|
+
only the compact form.
|
|
35
|
+
|
|
36
|
+
**Problem:** Reduce scrollback noise without sacrificing the live prompt's
|
|
37
|
+
rich context, and apply it consistently across the two interactive
|
|
38
|
+
shells we support as first-class.
|
|
39
|
+
|
|
40
|
+
**Constraints:**
|
|
41
|
+
|
|
42
|
+
- Must work in zsh and fish (the two Tier-1 shells per ADR-007).
|
|
43
|
+
- Must not interfere with `_cached_eval`'s startup-cost optimization
|
|
44
|
+
(the transient hook fires per-prompt, not per-shell-start).
|
|
45
|
+
- Must not break copy-paste of previous commands: the compact line
|
|
46
|
+
must still be `❯` (or similar) so `<Ctrl-shift-c>` over scrollback
|
|
47
|
+
yields runnable shell content if the user includes the prompt.
|
|
48
|
+
|
|
49
|
+
## Decision
|
|
50
|
+
|
|
51
|
+
Call Starship's `enable_transience` shell function after the cached
|
|
52
|
+
`starship init` runs in each shell. We share one `starship.toml.tmpl`
|
|
53
|
+
across both shells; the transient prompt content is the existing
|
|
54
|
+
`[character]` block (no separate `[transient_*]` section needed).
|
|
55
|
+
|
|
56
|
+
- **Fish**: `dot_config/fish/conf.d/init.fish.tmpl` calls
|
|
57
|
+
`enable_transience` once the function is defined. `starship init
|
|
58
|
+
fish` defines it via `--print-full-init`. Result: `$fish_transient_prompt`
|
|
59
|
+
flips to `1` and the Enter handler is bound to
|
|
60
|
+
`__starship_transient_execute`. The compact prompt collapses past
|
|
61
|
+
scrollback as soon as the next command runs.
|
|
62
|
+
|
|
63
|
+
- **Zsh**: `dot_config/zsh/dot_zshrc.tmpl` carries the same
|
|
64
|
+
`enable_transience` call, guarded by
|
|
65
|
+
`(( ${+functions[enable_transience]} ))`. **Upstream Starship does
|
|
66
|
+
not ship a zsh-side `enable_transience` function yet** (tracked by
|
|
67
|
+
[starship/starship#3522](https://github.com/starship/starship/issues/3522)).
|
|
68
|
+
The guard returns 0, the block no-ops, and zsh keeps its full multi-
|
|
69
|
+
line prompt in scrollback for now. The code is a forward-compatibility
|
|
70
|
+
hook: when upstream ships the zsh function, the feature activates
|
|
71
|
+
automatically on the next `mise upgrade starship` with no zshrc edit.
|
|
72
|
+
|
|
73
|
+
Alternatives we rejected for zsh:
|
|
74
|
+
|
|
75
|
+
- **Roll our own `zle` widget that rewrites `$PROMPT` on Enter.**
|
|
76
|
+
Possible (the standard recipe overrides `accept-line` with a
|
|
77
|
+
transient widget). Rejected because:
|
|
78
|
+
(a) any hand-rolled implementation will conflict with upstream
|
|
79
|
+
once they ship the official function, forcing a removal,
|
|
80
|
+
(b) Starship's prompt is multi-line and ANSI-coloured; correctly
|
|
81
|
+
rewriting it from a custom widget requires duplicating
|
|
82
|
+
Starship's escape-code generation, which drifts with every
|
|
83
|
+
Starship release,
|
|
84
|
+
(c) it'd run inside `_cached_eval`'s eager-init path, complicating
|
|
85
|
+
the cache-invalidation semantics we documented in ADR-002.
|
|
86
|
+
- **Third-party zsh plugin (e.g. zsh-autocomplete's transient mode).**
|
|
87
|
+
Rejected because the upstream Starship fix is in active discussion
|
|
88
|
+
and a plugin adds a permanent dependency we'd then have to remove.
|
|
89
|
+
- **Disable zsh transient until upstream lands.** The current state.
|
|
90
|
+
Zsh users see the same scrollback density they had before this PR;
|
|
91
|
+
the visible improvement is fish-only. Honest trade-off.
|
|
92
|
+
|
|
93
|
+
- **Transient prompt content**: `❯` plus optional exit-code dot
|
|
94
|
+
(red dot if `$status != 0`). Keep it 1–3 characters so scrollback
|
|
95
|
+
density actually improves.
|
|
96
|
+
|
|
97
|
+
The toggle is exposed in `.chezmoidata.toml` as
|
|
98
|
+
`features.starship_transient = true`. Users on bandwidth-constrained
|
|
99
|
+
terminals (slow SSH, serial console) can flip it off without editing
|
|
100
|
+
the canonical config.
|
|
101
|
+
|
|
102
|
+
## Consequences
|
|
103
|
+
|
|
104
|
+
### Positive (fish only, until upstream lands zsh support)
|
|
105
|
+
|
|
106
|
+
- Scrollback is 4–5× denser **in fish**. A 100-command session that previously
|
|
107
|
+
filled the screen 20× over now fills it ~4×.
|
|
108
|
+
- Asciinema recordings (relevant for the showcase commits in #874)
|
|
109
|
+
read much more naturally — fewer screens of historical prompts
|
|
110
|
+
between actions.
|
|
111
|
+
- The live prompt still surfaces all the rich context Starship was
|
|
112
|
+
configured for; only history is compacted.
|
|
113
|
+
|
|
114
|
+
### Negative
|
|
115
|
+
|
|
116
|
+
- Slightly more complex Starship config; the maintainer must remember
|
|
117
|
+
that `[character]` and `[transient_*]` are distinct modules.
|
|
118
|
+
- Users who rely on visual scanning of historical prompts (e.g., "what
|
|
119
|
+
branch was I on when I ran that?") lose that signal. Mitigation: the
|
|
120
|
+
feature flag.
|
|
121
|
+
|
|
122
|
+
### Risks
|
|
123
|
+
|
|
124
|
+
- Starship's transient API is stable since 1.16 (2023) but the exact
|
|
125
|
+
config surface evolves. If Starship breaks the schema in a future
|
|
126
|
+
major, the pinned version in `mise.toml` insulates us; we vet new
|
|
127
|
+
releases through `dot upgrade --dry-run` before bumping.
|
|
128
|
+
|
|
129
|
+
## Alternatives Considered
|
|
130
|
+
|
|
131
|
+
| Alternative | Why rejected |
|
|
132
|
+
|---|---|
|
|
133
|
+
| Single-line Starship prompt | Sacrifices live-prompt richness for the same scrollback-density goal. The transient feature gives both. |
|
|
134
|
+
| Custom zsh `precmd` rewriter | Would have to be reimplemented in fish. Starship already solved it. |
|
|
135
|
+
| Disable Starship entirely on history | Loses the whole reason we use Starship. |
|
|
136
|
+
|
|
137
|
+
## References
|
|
138
|
+
|
|
139
|
+
- Starship transient prompt docs:
|
|
140
|
+
<https://starship.rs/advanced-config/#transientprompt-and-transientrightprompt-in-zsh>
|
|
141
|
+
- ADR-002 (Shell Performance Optimization) — establishes the
|
|
142
|
+
`_cached_eval` constraint this ADR respects.
|
|
143
|
+
- ADR-007 (Multi-Shell Parity) — establishes zsh + fish as Tier-1.
|
|
144
|
+
- Issue #873 — captures this ADR alongside `llms.txt`.
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-011: Keep Nushell as Tier-3 Reference with Minimum-Viable Caching
|
|
6
|
+
|
|
7
|
+
## Status
|
|
8
|
+
|
|
9
|
+
Accepted
|
|
10
|
+
|
|
11
|
+
## Date
|
|
12
|
+
|
|
13
|
+
2026-05-13
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
ADR-007 (Multi-Shell Parity Strategy) classified the three supported
|
|
18
|
+
shells:
|
|
19
|
+
|
|
20
|
+
| Tier | Shells | Definition |
|
|
21
|
+
|---|---|---|
|
|
22
|
+
| Tier 1 (Full) | zsh, bash | Native aliases, functions, lazy loading, `_cached_eval` |
|
|
23
|
+
| Tier 2 (Bridged) | fish | Aliases + functions via bridge, `_cached_eval` |
|
|
24
|
+
| Tier 3 (Compatible) | nushell | Simple aliases only, functions via bash delegation |
|
|
25
|
+
|
|
26
|
+
The 2026 audit (slice 3 of #880's deep-dive) flagged Nushell as a
|
|
27
|
+
maintenance candidate:
|
|
28
|
+
|
|
29
|
+
- < 5% feature parity with zsh.
|
|
30
|
+
- No async / deferred-load support.
|
|
31
|
+
- No equivalent of `_cached_eval` — meaning every Nushell start spawns
|
|
32
|
+
`starship init nu`, `mise activate nu`, `zoxide init nushell`,
|
|
33
|
+
`atuin init nu` as fresh subprocesses, costing 100–200 ms aggregated.
|
|
34
|
+
- 5 config files (`config.nu.tmpl`, `env.nu.tmpl`, `aliases.nu`,
|
|
35
|
+
`completions.nu.tmpl`, `functions.nu.tmpl`) totalling ~270 lines —
|
|
36
|
+
enough to be meaningful, not enough to be self-sustaining.
|
|
37
|
+
|
|
38
|
+
Three paths were proposed:
|
|
39
|
+
|
|
40
|
+
1. **Keep as-is** — accept the gap, defer maintenance.
|
|
41
|
+
2. **Reduce to a stub** — leave the config but stop investing.
|
|
42
|
+
3. **Remove entirely** — delete all references.
|
|
43
|
+
|
|
44
|
+
## Decision
|
|
45
|
+
|
|
46
|
+
**Keep Nushell as Tier-3 with explicit limitations + a minimum-viable
|
|
47
|
+
`_cached_eval` equivalent.**
|
|
48
|
+
|
|
49
|
+
Specifically:
|
|
50
|
+
|
|
51
|
+
- Ship `dot_config/nushell/cached_eval.nu` — a Nushell module that
|
|
52
|
+
ports the binary-mtime-based init caching pattern from zsh/fish.
|
|
53
|
+
It handles the four tools that matter most for shell start:
|
|
54
|
+
starship, mise, zoxide, atuin. See the Nushell-specific tradeoffs
|
|
55
|
+
in the "Consequences" section below.
|
|
56
|
+
- Wire `env.nu.tmpl` to use the new module so subsequent shells skip
|
|
57
|
+
the subprocess spawns when binaries haven't moved.
|
|
58
|
+
- Continue maintaining the existing `aliases.nu` (hand-curated simple
|
|
59
|
+
aliases — `l`, `ll`, `la`, etc.) but accept that the bash-bridge
|
|
60
|
+
approach for full alias parity isn't worth the complexity.
|
|
61
|
+
- Update `README.md`'s shell list to call Nushell out as "best-effort
|
|
62
|
+
/ Tier-3" so users have correct expectations.
|
|
63
|
+
- Reject the "remove entirely" option for now (see Rationale below).
|
|
64
|
+
|
|
65
|
+
## Rationale
|
|
66
|
+
|
|
67
|
+
**Why not remove**: Nushell is shipped with the canonical `mise`
|
|
68
|
+
toolchain in this repo (it's installable via `mise install nushell`)
|
|
69
|
+
and is gaining adoption in the Rust + data-engineering communities
|
|
70
|
+
that overlap with this distribution's audience. Removing it would
|
|
71
|
+
break promises to a small-but-vocal segment of users. The maintenance
|
|
72
|
+
cost of the current 270-line surface is low.
|
|
73
|
+
|
|
74
|
+
**Why not reduce to a stub**: A stub config is worse than the current
|
|
75
|
+
moderate config — users who type `nu` and get a featureless shell
|
|
76
|
+
without any of the integrations the README promised would feel
|
|
77
|
+
betrayed. Either we keep the shell working well enough to use, or we
|
|
78
|
+
delete it.
|
|
79
|
+
|
|
80
|
+
**Why the minimum-viable cache layer**: The biggest waste on every
|
|
81
|
+
Nushell start was the four uncached subprocess spawns
|
|
82
|
+
(`starship init nu` etc.). Adding mtime-based caching for those costs
|
|
83
|
+
~50 lines of Nushell code and saves 100–200 ms per shell. That's the
|
|
84
|
+
cheapest meaningful improvement; deeper investments (async hydration,
|
|
85
|
+
plugin system, bash bridge for aliases) await an actual user request.
|
|
86
|
+
|
|
87
|
+
## Consequences
|
|
88
|
+
|
|
89
|
+
### Positive
|
|
90
|
+
|
|
91
|
+
- Nushell starts substantially faster than before (TBD — needs
|
|
92
|
+
measurement on a host with all four tools installed). The
|
|
93
|
+
subprocess elimination saves ~50–80 ms per cached tool, per cold
|
|
94
|
+
shell after the cache is populated.
|
|
95
|
+
- The mtime-invalidation pattern matches what zsh / fish do, so a
|
|
96
|
+
contributor familiar with one of the other shells can read the
|
|
97
|
+
Nushell code without learning a new mental model.
|
|
98
|
+
- Explicit Tier-3 documentation avoids the "wait, this is supposed to
|
|
99
|
+
be at parity" surprise.
|
|
100
|
+
|
|
101
|
+
### Negative
|
|
102
|
+
|
|
103
|
+
- Nushell's parse-time evaluator means we can't wrap source calls in
|
|
104
|
+
the cache function — the caller has to `source <path>` directly.
|
|
105
|
+
Slightly more boilerplate than the zsh/fish APIs.
|
|
106
|
+
- No malware-pattern screening in the cached output. The zsh / fish
|
|
107
|
+
implementations grep for `curl ... | sh`, `nc -e`, etc. before
|
|
108
|
+
sourcing; the Nushell version trusts its inputs. For the four tools
|
|
109
|
+
we ship (`starship`, `mise`, `zoxide`, `atuin`) this is acceptable
|
|
110
|
+
— they're official binaries pinned via `mise.toml`. Future tools
|
|
111
|
+
added to the cache must be similarly trusted.
|
|
112
|
+
- No per-tool timing telemetry. The `EVALCACHE_TIMING` infrastructure
|
|
113
|
+
zsh has (#863) isn't ported. If Nushell perf becomes a sustained
|
|
114
|
+
user concern, this is the next layer to add.
|
|
115
|
+
|
|
116
|
+
### Risks
|
|
117
|
+
|
|
118
|
+
- Nushell's syntax evolves quickly between 0.x releases. The
|
|
119
|
+
`cached_eval.nu` module uses `path exists`, `ls | get -i modified`,
|
|
120
|
+
and `run-external` which have been stable since 0.86 (Q3 2024).
|
|
121
|
+
If a future Nushell release breaks the API, the module fails fast
|
|
122
|
+
(saving an empty cache file) rather than corrupting state.
|
|
123
|
+
- Cache invalidation by mtime is fragile when the user installs a
|
|
124
|
+
tool via a non-mtime-respecting method (e.g. unpacking a tarball
|
|
125
|
+
with `--no-touch-mtimes`). The fallback is the user running
|
|
126
|
+
`dot prewarm` or deleting `~/.cache/nushell/*.nu`. Documented in
|
|
127
|
+
`docs/operations/PERFORMANCE.md`.
|
|
128
|
+
|
|
129
|
+
## Alternatives Considered
|
|
130
|
+
|
|
131
|
+
| Alternative | Why rejected |
|
|
132
|
+
|---|---|
|
|
133
|
+
| **Bash bridge for full alias parity** | Adds a `bash --norc --noprofile -c '...'` subprocess on every Nushell start (~30 ms). Defeats the perf gain from the cache layer. |
|
|
134
|
+
| **Port `_cached_eval` 1:1 (malware screen + JSONL telemetry)** | The full zsh implementation is 100+ lines. The Nushell version covers the 80% case at 50 lines; the remaining 20% (advanced features) aren't load-bearing for Tier-3 status. |
|
|
135
|
+
| **Delete Nushell entirely** | See "Why not remove" above. |
|
|
136
|
+
| **Reduce to a stub** | See "Why not reduce to a stub" above. |
|
|
137
|
+
|
|
138
|
+
## References
|
|
139
|
+
|
|
140
|
+
- [`dot_config/nushell/cached_eval.nu`](../../dot_config/nushell/cached_eval.nu) — the new module.
|
|
141
|
+
- [`dot_config/nushell/env.nu.tmpl`](../../dot_config/nushell/env.nu.tmpl) — adopter.
|
|
142
|
+
- ADR-007 (Multi-Shell Parity Strategy) — establishes the tier definitions.
|
|
143
|
+
- ADR-002 (Shell Performance Optimization Strategy) — establishes `_cached_eval` semantics this module ports.
|
|
144
|
+
- Issue [#880](https://github.com/sebastienrousseau/dotfiles/issues/880).
|
package/docs/adr/README.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Architecture Decision Records
|
|
2
6
|
|
|
3
7
|
This directory contains Architecture Decision Records (ADRs) that document
|
|
@@ -15,6 +19,9 @@ significant architectural decisions made in this project.
|
|
|
15
19
|
| [ADR-006](ADR-006-shell-selection.md) | Zsh as Default Shell | Accepted |
|
|
16
20
|
| [ADR-007](ADR-007-multi-shell-parity.md) | Multi-Shell Parity Strategy | Accepted |
|
|
17
21
|
| [ADR-008](ADR-008-alias-system-architecture.md) | Alias System Architecture | Accepted |
|
|
22
|
+
| [ADR-009](ADR-009-wallpaper-driven-theming.md) | Wallpaper-Driven Theming Engine | Accepted |
|
|
23
|
+
| [ADR-010](ADR-010-starship-transient-prompt.md) | Enable Starship Transient Prompt in Zsh and Fish | Accepted |
|
|
24
|
+
| [ADR-011](ADR-011-nushell-tier3-keep.md) | Keep Nushell as Tier-3 Reference with Minimum-Viable Caching | Accepted |
|
|
18
25
|
|
|
19
26
|
## ADR Format
|
|
20
27
|
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Cross-Platform Interoperability
|
|
2
6
|
|
|
3
7
|
How dotfiles commands and shims map across macOS, Linux, and WSL2.
|
|
@@ -24,13 +28,17 @@ How dotfiles commands and shims map across macOS, Linux, and WSL2.
|
|
|
24
28
|
## Troubleshooting
|
|
25
29
|
|
|
26
30
|
### WSL2 IO Latency
|
|
31
|
+
|
|
27
32
|
Keep projects in the Linux filesystem (`~/...`), not under `/mnt/c/`.
|
|
28
33
|
|
|
29
34
|
### WSL2 Windows Binary Path
|
|
35
|
+
|
|
30
36
|
If you've disabled WSL path sharing, make sure Windows-side binaries like `clip.exe` and `explorer.exe` are still reachable in `$PATH`.
|
|
31
37
|
|
|
32
38
|
### macOS Permissions
|
|
39
|
+
|
|
33
40
|
Grant your terminal "Full Disk Access" in System Settings so dotfiles can manage all configurations.
|
|
34
41
|
|
|
35
42
|
### Linux GUI Fallbacks
|
|
43
|
+
|
|
36
44
|
In headless environments, GUI commands like `cb` and `open` fall back to `gum log` or terminal bell instead of hanging.
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
<!-- Copyright (c) 2015-2026 Dotfiles. All rights reserved. -->
|
|
2
6
|
|
|
3
7
|
# Repository Layout
|
|
@@ -154,7 +158,7 @@ the repo itself.
|
|
|
154
158
|
|
|
155
159
|
| Path | Purpose |
|
|
156
160
|
|---------------------------------------|----------------------------------------------------------------------------|
|
|
157
|
-
| `docs/manual/` | 26-page GNU-Stow-style reference manual (the v0.2.
|
|
161
|
+
| `docs/manual/` | 26-page GNU-Stow-style reference manual (the v0.2.501 feature) |
|
|
158
162
|
| `docs/architecture/` | This file + core architecture docs (ARCHITECTURE, INTEROP, fleet, walkthrough) |
|
|
159
163
|
| `docs/operations/` | Runbooks, traceability matrix, migration notes |
|
|
160
164
|
| `docs/reference/` | Command/config reference material |
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# Euxis 2026 Architecture & Product Review
|
|
2
6
|
|
|
3
7
|
This review translates the current dotfiles CLI stack into an Apple-tier product strategy:
|
|
@@ -76,18 +80,22 @@ Added `scripts/tests/unit/test_dot_lib_platform.sh`:
|
|
|
76
80
|
## File-by-file next refactors (high ROI)
|
|
77
81
|
|
|
78
82
|
1. `scripts/dot/commands/tools.sh`
|
|
83
|
+
|
|
79
84
|
- Split `cmd_aliases` into submodule file.
|
|
80
85
|
- Replace repeated `command -v` checks with cached capability map.
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
1. `dot_config/zsh/dot_zshrc.tmpl`
|
|
88
|
+
|
|
83
89
|
- Add startup budget guard (record startup time; warn >400ms).
|
|
84
90
|
- Move optional integrations behind capability checks generated once/session.
|
|
85
91
|
|
|
86
|
-
|
|
92
|
+
1. `scripts/ops/health-check.sh`
|
|
93
|
+
|
|
87
94
|
- Import `platform.sh`, unify WSL/macOS/Linux branch logic.
|
|
88
95
|
- Emit machine-readable JSON summary for UI frontends.
|
|
89
96
|
|
|
90
|
-
|
|
97
|
+
1. `scripts/diagnostics/perf.sh`
|
|
98
|
+
|
|
91
99
|
- Add percentile reporting (P50/P95 over 10 runs).
|
|
92
100
|
- Add regression threshold with actionable remediation hints.
|
|
93
101
|
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
1
5
|
# The Ultimate Developer Environment Roadmap
|
|
2
6
|
|
|
3
7
|
This roadmap outlines the path to a high-performance, super-efficient development machine designed for Rust, Python, and AI on Linux (Zorin OS / T2 Mac hardware).
|
|
4
8
|
|
|
5
9
|
## Phase 1: Foundation (Completed)
|
|
10
|
+
|
|
6
11
|
- **Core Shell**: Zsh + Oh My Zsh.
|
|
7
12
|
- **Modern Prompt**: Starship (hooked & active).
|
|
8
13
|
- **Language Managers**: `rustup` (Rust) and `fnm` (Node.js).
|
|
@@ -16,28 +21,34 @@ This roadmap outlines the path to a high-performance, super-efficient developmen
|
|
|
16
21
|
---
|
|
17
22
|
|
|
18
23
|
## Phase 2: Speed & Navigation (Completed)
|
|
24
|
+
|
|
19
25
|
Focus: Reduce friction in filesystem navigation and build times.
|
|
20
26
|
|
|
21
27
|
### 1. Navigation
|
|
28
|
+
|
|
22
29
|
- [x] **Zoxide**: Smarter `cd` command that learns your habits (`z directory`).
|
|
23
30
|
- [x] **FZF**: Command-line fuzzy finder. Essential for search history, files, and replacing standard completion.
|
|
24
31
|
- [x] **Yazi**: Blazing fast terminal file manager (Rust-based).
|
|
25
32
|
|
|
26
33
|
### 2. Rust Optimization
|
|
34
|
+
|
|
27
35
|
- [x] **Mold**: Use the `mold` linker to speed up Rust compile times by 3x-10x.
|
|
28
36
|
- [x] **Sccache**: Shared compilation cache to speed up recompilations across projects.
|
|
29
37
|
- [x] **Bacon**: Background rust compiler that gives instant feedback on errors.
|
|
30
38
|
|
|
31
39
|
### 3. Python Optimization
|
|
40
|
+
|
|
32
41
|
- [x] **Ruff**: Extremely fast Python linter and formatter (replace flake8/black).
|
|
33
42
|
- [x] **Global Config**: Set `uv` to use system Python or managed Python preferences.
|
|
34
43
|
|
|
35
44
|
### 4. Code Search
|
|
45
|
+
|
|
36
46
|
- [x] **Ripgrep-all (rga)**: Search inside PDFs, E-Books, zip files, etc.
|
|
37
47
|
|
|
38
48
|
---
|
|
39
49
|
|
|
40
50
|
## Phase 3: AI Power User (Completed)
|
|
51
|
+
|
|
41
52
|
Focus: Integrate AI deeply into the workflow.
|
|
42
53
|
|
|
43
54
|
- [x] **Fabric**: Open-source framework for augmenting humans using AI (installed via `cmd` path).
|
|
@@ -48,6 +59,7 @@ Focus: Integrate AI deeply into the workflow.
|
|
|
48
59
|
---
|
|
49
60
|
|
|
50
61
|
## Phase 4: System Tuning & Hardening (Completed)
|
|
62
|
+
|
|
51
63
|
Focus: Squeeze every ounce of performance and security from the hardware.
|
|
52
64
|
|
|
53
65
|
- [x] **Kernel Tuning**: Increase file descriptor limits and optimize TCP stack for lower latency.
|
|
@@ -58,12 +70,14 @@ Focus: Squeeze every ounce of performance and security from the hardware.
|
|
|
58
70
|
---
|
|
59
71
|
|
|
60
72
|
## Phase 5: Final Polish (Completed)
|
|
61
|
-
|
|
73
|
+
|
|
74
|
+
- [x] **Global UV Config**: Created `~/.config/uv/uv.toml` for managed python preference.
|
|
62
75
|
- [x] **Roadmap Completion**: Verified all items are 100% complete.
|
|
63
76
|
|
|
64
77
|
---
|
|
65
78
|
|
|
66
79
|
## Maintenance & Updates
|
|
80
|
+
|
|
67
81
|
- **Update System**: `sudo apt update && sudo apt upgrade`
|
|
68
82
|
- **Update Rust**: `rustup update`
|
|
69
83
|
- **Update Node**: `fnm install --lts`
|
|
@@ -73,20 +87,22 @@ Focus: Squeeze every ounce of performance and security from the hardware.
|
|
|
73
87
|
---
|
|
74
88
|
|
|
75
89
|
## Phase 6: Desktop Environment (Completed)
|
|
90
|
+
|
|
76
91
|
Focus: Clean, bloat-free, and supercharged GNOME/Zorin experience.
|
|
77
92
|
|
|
78
93
|
- [x] **Bloatware Removal**: Removed games (`aisleriot`, `mines`, etc.) and media apps (`rhythmbox`, `totem`).
|
|
79
94
|
- [x] **Menu Cleanup**: Created `hide_menu_entries.sh` to deduplicate and hide unwanted entries.
|
|
80
95
|
- [x] **GNOME Extensions**: Installed productivity boosters via `gnome-extensions-cli`:
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
96
|
+
- [x] `Clipboard Indicator`: History management.
|
|
97
|
+
- [x] `Caffeine`: Prevent auto-suspend.
|
|
98
|
+
- [x] `Impatience`: Speed up animations.
|
|
99
|
+
- [x] `Vitals`: System monitoring in top bar.
|
|
85
100
|
- [x] **Memory Tuning**: Optimize GNOME Shell performance.
|
|
86
101
|
|
|
87
102
|
---
|
|
88
103
|
|
|
89
104
|
## Phase 7: Browser Optimization (Completed)
|
|
105
|
+
|
|
90
106
|
Focus: Chrome tuned for development and memory efficiency.
|
|
91
107
|
|
|
92
108
|
- [x] **Settings**: Enable "Memory Saver" and "Energy Saver" via Managed Policies.
|
|
@@ -96,47 +112,49 @@ Focus: Chrome tuned for development and memory efficiency.
|
|
|
96
112
|
---
|
|
97
113
|
|
|
98
114
|
## Phase 8: Neovim IDE (Completed)
|
|
115
|
+
|
|
99
116
|
Focus: Building a terminal-based IDE that rivals VS Code for Rust, Python, and AI.
|
|
100
117
|
|
|
101
118
|
- [x] **Latest Version**: Installed Neovim v0.12.0-dev (Nightly) to resolve plugin stability issues.
|
|
102
119
|
- [x] **Plugin Manager**: Setup `lazy.nvim` with modular config (Restored from **PR #62**).
|
|
103
120
|
- [x] **Core Plugins**:
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
121
|
+
- [x] `Telescope`: Fuzzy finding.
|
|
122
|
+
- [x] `Treesitter`: Syntax highlighting.
|
|
123
|
+
- [x] `Harpoon`: Fast file switching.
|
|
124
|
+
- [x] `Neo-tree`: File explorer.
|
|
108
125
|
- [x] **UI/UX Menus**: Added `dressing.nvim` and `telescope-ui-select.nvim` for modern, searchable selection lists and floating inputs.
|
|
109
126
|
- [x] **LSP & Autocomplete**:
|
|
110
|
-
|
|
111
|
-
|
|
127
|
+
- [x] `Mason`: Managing LSPs (rust-analyzer, pyright, ruff).
|
|
128
|
+
- [x] `Cmp`: Autocompletion engine.
|
|
112
129
|
- [x] **Language Specifics**:
|
|
113
|
-
|
|
114
|
-
|
|
130
|
+
- [x] **Rust**: `rustaceanvim` configured.
|
|
131
|
+
- [x] **Python**: `pyright` + `ruff`.
|
|
115
132
|
- [x] **AI Integration**:
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
133
|
+
- [x] `Copilot.lua`: Enabled (needs `:Copilot auth`).
|
|
134
|
+
- [x] `CopilotChat.nvim`: Sidebar chat (VS Code style).
|
|
135
|
+
- [ ] `Avante.nvim`: Skipped (Removed due to complexity/instability).
|
|
119
136
|
- [x] **VS Code Parity Pack**:
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
137
|
+
- [x] `Trouble`: Problems panel.
|
|
138
|
+
- [x] `Spectre`: Search/Replace.
|
|
139
|
+
- [x] `Autopairs`: Auto-close brackets.
|
|
140
|
+
- [x] `Todo-Comments`: TODO/FIXME highlighting.
|
|
141
|
+
- [x] `Persistence`: Session management.
|
|
125
142
|
|
|
126
143
|
---
|
|
127
144
|
|
|
128
145
|
## Phase 9: Repository Polish & PR #62 (In Progress)
|
|
146
|
+
|
|
129
147
|
Focus: Finalize the `dotfiles` repository for public consumption and sync the local "Gold Standard" environment.
|
|
130
148
|
|
|
131
149
|
- [x] **Repository Sync**:
|
|
132
|
-
|
|
133
|
-
|
|
150
|
+
- [x] Clone official repo to `~/dotfiles`.
|
|
151
|
+
- [ ] Sync validated configuration (Neovim, scripts, tuning) into repository.
|
|
134
152
|
- [ ] **Documentation Update**:
|
|
135
|
-
|
|
136
|
-
|
|
153
|
+
- [ ] Refactor `README.md` for the modern architecture.
|
|
154
|
+
- [ ] Add "Easy Setup" and "Troubleshooting" guides.
|
|
137
155
|
- [ ] **Final PR Submission**:
|
|
138
|
-
|
|
139
|
-
|
|
156
|
+
- [ ] Verify clean diff against original PR #62.
|
|
157
|
+
- [ ] Push updates to PR #62 branch.
|
|
140
158
|
|
|
141
159
|
|
|
142
160
|
|