@sebastienrousseau/dotfiles 0.2.499 → 0.2.500
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 +375 -0
- package/LICENSE +1283 -0
- package/README.md +284 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
- package/docs/AI.md +102 -0
- package/docs/COPYRIGHT +4 -3
- package/docs/NAMING_CONVENTIONS.md +95 -0
- package/docs/README.md +78 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +101 -0
- package/docs/adr/ADR-002-shell-performance.md +121 -0
- package/docs/adr/ADR-003-security-first.md +140 -0
- package/docs/adr/ADR-004-cli-architecture.md +157 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +89 -0
- package/docs/adr/ADR-006-shell-selection.md +115 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +53 -0
- package/docs/adr/ADR-008-alias-system-architecture.md +85 -0
- package/docs/adr/README.md +32 -0
- package/docs/architecture/ARCHITECTURE.md +113 -0
- package/docs/architecture/INTEROP.md +36 -0
- package/docs/architecture/REPO_LAYOUT.md +237 -0
- package/docs/architecture/WALKTHROUGH.md +82 -0
- package/docs/architecture/fleet-deployment.md +73 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +119 -0
- package/docs/archive/LEGACY_ROADMAP.md +142 -0
- package/docs/archive/MILESTONE_v0.2.493.md +43 -0
- package/docs/{PLAN.md → archive/PLAN.md} +4 -4
- package/docs/archive/REPO_AUDIT.md +23 -0
- package/docs/guides/INSTALL.md +140 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +52 -0
- package/docs/guides/THEMING.md +222 -0
- package/docs/guides/TROUBLESHOOTING.md +148 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +723 -0
- package/docs/index.md +39 -0
- package/docs/interop/A2A.md +32 -0
- package/docs/manual/00-introduction.md +85 -0
- package/docs/manual/01-concepts/01-architecture.md +134 -0
- package/docs/manual/01-concepts/02-trust-model.md +178 -0
- package/docs/manual/01-concepts/03-theme-engine.md +182 -0
- package/docs/manual/01-concepts/04-fleet.md +142 -0
- package/docs/manual/01-concepts/05-self-healing.md +197 -0
- package/docs/manual/02-tutorials/01-first-install.md +192 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +211 -0
- package/docs/manual/02-tutorials/03-create-profile.md +238 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +275 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +279 -0
- package/docs/manual/03-reference/01-dot-cli.md +413 -0
- package/docs/manual/03-reference/02-config-files.md +259 -0
- package/docs/manual/03-reference/03-environment.md +120 -0
- package/docs/manual/03-reference/04-templates.md +184 -0
- package/docs/manual/03-reference/05-feature-flags.md +118 -0
- package/docs/manual/04-cookbook/01-recipes.md +281 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +319 -0
- package/docs/manual/04-cookbook/03-faq.md +167 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +97 -0
- package/docs/manual/05-appendices/B-security-checklist.md +78 -0
- package/docs/manual/05-appendices/C-glossary.md +36 -0
- package/docs/manual/05-appendices/D-bibliography.md +54 -0
- package/docs/manual/05-appendices/E-license.md +34 -0
- package/docs/manual/_toc.yml +58 -0
- package/docs/manual/command-index.md +58 -0
- package/docs/manual/concept-index.md +164 -0
- package/docs/operations/ATTESTATION.md +39 -0
- package/docs/operations/MAINTENANCE.md +59 -0
- package/docs/operations/MIGRATION.md +101 -0
- package/docs/operations/OPERATIONS.md +164 -0
- package/docs/operations/RELIABILITY.md +116 -0
- package/docs/{ROADMAP.md → operations/ROADMAP.md} +22 -22
- package/docs/operations/TESTING.md +195 -0
- package/docs/operations/TRACEABILITY.md +31 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +61 -0
- package/docs/operations/VERSION_SYNC.md +344 -0
- package/docs/reference/ALIASES.md +124 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +28 -0
- package/docs/reference/ALIASES_DEPRECATIONS.md +9 -0
- package/docs/reference/FEATURES.md +62 -0
- package/docs/reference/FONTS.md +108 -0
- package/docs/reference/PROFILES.md +65 -0
- package/docs/reference/SCREENSHOTS.md +117 -0
- package/docs/reference/SCRIPTS.md +67 -0
- package/docs/reference/SUPPORT_MATRIX.md +74 -0
- package/docs/reference/THEMES.md +113 -0
- package/docs/reference/TOOLS.md +105 -0
- package/docs/reference/UTILS.md +151 -0
- package/docs/security/AI_ACT_COMPLIANCE.md +90 -0
- package/docs/security/AUTOMATION_SECRETS.md +22 -0
- package/docs/security/COMPLIANCE.md +453 -0
- package/docs/security/ENCRYPTION.md +52 -0
- package/docs/security/FMEA.md +155 -0
- package/docs/security/INCIDENT_RESPONSE.md +575 -0
- package/docs/security/KEYS.md +45 -0
- package/docs/security/KEY_ROTATION.md +219 -0
- package/docs/security/MCP_POLICY.md +69 -0
- package/docs/security/POLICY_RELEASES.md +33 -0
- package/docs/security/README.md +24 -0
- package/docs/security/SECRETS.md +146 -0
- package/docs/security/SECURITY.md +41 -0
- package/docs/security/SECURITY_CHECKLIST.md +44 -0
- package/docs/security/SOUP_REGISTER.md +32 -0
- package/docs/security/THREAT_MODEL.md +120 -0
- package/docs/security/VERIFICATION_VALIDATION.md +224 -0
- package/docs/themes/README.md +6 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +26 -0
- package/docs/themes/hero-shot.svg +78 -0
- package/dot_config/.module-manifest.json +69 -0
- package/dot_config/ai/identity.md +20 -0
- package/dot_config/ai/patterns/architect.md +14 -0
- package/dot_config/ai/patterns/hardener.md +13 -0
- package/dot_config/ai/patterns/refactor.md +13 -0
- package/dot_config/aider/aider.conf.yml +32 -0
- package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
- package/dot_config/ansible/ansible.cfg +11 -0
- package/dot_config/atuin/config.toml +40 -0
- package/dot_config/bat/config +23 -0
- package/dot_config/brave-flags.conf.tmpl +7 -0
- package/dot_config/btop/btop.conf +16 -0
- package/dot_config/btop/themes/tokyonight.theme +34 -0
- package/dot_config/bun/bunfig.toml.tmpl +33 -0
- package/dot_config/claude/mcp_servers.json +20 -0
- package/dot_config/containers/containers.conf +14 -0
- package/dot_config/curl/dot_curlrc +18 -0
- package/dot_config/dlv/config.yml +39 -0
- package/dot_config/docker/config.json +15 -0
- package/dot_config/dotfiles/agent-card.json +29 -0
- package/dot_config/dotfiles/agent-profiles.json +92 -0
- package/dot_config/dotfiles/boot/README.md +11 -0
- package/dot_config/dotfiles/grub/README.md +11 -0
- package/dot_config/dotfiles/lock/README.md +11 -0
- package/dot_config/dotfiles/mcp-lock.json +33 -0
- package/dot_config/dotfiles/mcp-policy.json +52 -0
- package/dot_config/dotfiles/mcp-registry.json +47 -0
- package/dot_config/dotfiles/model-registry.json +20 -0
- package/dot_config/dotfiles/policy-bundles.json +38 -0
- package/dot_config/dotfiles/prompt-registry.json +16 -0
- package/dot_config/dotfiles/versions.env +18 -0
- package/dot_config/duf/duf.conf +6 -0
- package/dot_config/duti/defaults.duti +5 -0
- package/dot_config/emoji/emoji.txt +34 -0
- package/dot_config/environment.d/50-ssh-agent.conf +2 -0
- package/dot_config/environment.d/90-wayland.conf +19 -0
- package/dot_config/fastfetch/config.jsonc +28 -0
- package/dot_config/firefox/user.js.tmpl +58 -0
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
- package/dot_config/fish/completions/dot.fish.tmpl +115 -0
- package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
- package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
- package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
- package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
- package/dot_config/fish/conf.d/init.fish.tmpl +151 -0
- package/dot_config/fish/config.fish.tmpl +44 -0
- package/dot_config/fish/fish_plugins +1 -0
- package/dot_config/fish/functions/_.fish +3 -0
- package/dot_config/fish/functions/_cached_eval.fish +58 -0
- package/dot_config/fish/functions/als.fish +46 -0
- package/dot_config/fish/functions/bg-upgrade.fish +7 -0
- package/dot_config/fish/functions/c.fish +3 -0
- package/dot_config/fish/functions/cat.fish +9 -0
- package/dot_config/fish/functions/d.fish +7 -0
- package/dot_config/fish/functions/dot.fish +34 -0
- package/dot_config/fish/functions/h.fish +3 -0
- package/dot_config/fish/functions/l.fish +7 -0
- package/dot_config/fish/functions/la.fish +7 -0
- package/dot_config/fish/functions/ll.fish +7 -0
- package/dot_config/fish/functions/log_error.fish +13 -0
- package/dot_config/fish/functions/log_info.fish +13 -0
- package/dot_config/fish/functions/lr.fish +7 -0
- package/dot_config/fish/functions/lra.fish +7 -0
- package/dot_config/fish/functions/ls.fish +7 -0
- package/dot_config/fish/functions/lt.fish +7 -0
- package/dot_config/fish/functions/lta.fish +7 -0
- package/dot_config/fish/functions/notify-run.fish +11 -0
- package/dot_config/fish/functions/q.fish +3 -0
- package/dot_config/fish/functions/silent-run.fish +7 -0
- package/dot_config/fish/functions/yy.fish +8 -0
- package/dot_config/flatpak/flatpak.list +4 -0
- package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
- package/dot_config/foot/foot.ini.tmpl +33 -0
- package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
- package/dot_config/fzf/fzf.zsh +48 -0
- package/dot_config/gem/gemrc +9 -0
- package/dot_config/gh/config.yml +12 -0
- package/dot_config/ghostty/config.tmpl +165 -0
- package/dot_config/git/allowed_signers.tmpl +18 -0
- package/dot_config/git/attributes +12 -0
- package/dot_config/git/commit-template +10 -0
- package/dot_config/git/ignore +27 -0
- package/dot_config/gnupg/gpg-agent.conf +11 -0
- package/dot_config/go/golangci.yml +118 -0
- package/dot_config/go/gopls.json +30 -0
- package/dot_config/goose/config.yaml +29 -0
- package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
- package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
- package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
- package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
- package/dot_config/htop/htoprc +20 -0
- package/dot_config/inputrc +2 -0
- package/dot_config/ipython/profile_default/ipython_config.py +19 -0
- package/dot_config/just/justfile +122 -0
- package/dot_config/k9s/config.yaml +65 -0
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
- package/dot_config/kanshi/config.tmpl +22 -0
- package/dot_config/karabiner/karabiner.json +14 -0
- package/dot_config/kitty/kitty.conf.tmpl +53 -0
- package/dot_config/lazydocker/config.yml +186 -0
- package/dot_config/lazygit/config.yml +35 -0
- package/dot_config/mako/config +47 -0
- package/dot_config/mas/masapps.txt +5 -0
- package/dot_config/micro/settings.json +3 -0
- package/dot_config/mimeapps.list +77 -0
- package/dot_config/minikube/config.json +13 -0
- package/dot_config/mise/config.toml +99 -0
- package/dot_config/mongosh/mongoshrc.js +68 -0
- package/dot_config/mpv/input.conf +47 -0
- package/dot_config/mpv/mpv.conf +47 -0
- package/dot_config/mycli/myclirc +67 -0
- package/dot_config/nano/nanorc +28 -0
- package/dot_config/ncdu/config +12 -0
- package/dot_config/niri/config.kdl.tmpl +327 -0
- package/dot_config/nushell/aliases.nu +18 -0
- package/dot_config/nushell/completions.nu.tmpl +52 -0
- package/dot_config/nushell/config.nu.tmpl +86 -0
- package/dot_config/nushell/env.nu.tmpl +94 -0
- package/dot_config/nushell/functions.nu.tmpl +17 -0
- package/dot_config/nvim/init.lua +18 -0
- package/dot_config/nvim/lazy-lock.json +58 -0
- package/dot_config/nvim/lua/config/autocmds.lua +107 -0
- package/dot_config/nvim/lua/config/keymaps.lua +92 -0
- package/dot_config/nvim/lua/config/lazy.lua +44 -0
- package/dot_config/nvim/lua/config/options.lua +49 -0
- package/dot_config/nvim/lua/plugins/ai.lua +75 -0
- package/dot_config/nvim/lua/plugins/coding.lua +216 -0
- package/dot_config/nvim/lua/plugins/completion.lua +60 -0
- package/dot_config/nvim/lua/plugins/dap.lua +412 -0
- package/dot_config/nvim/lua/plugins/editor.lua +55 -0
- package/dot_config/nvim/lua/plugins/git.lua +10 -0
- package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
- package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
- package/dot_config/nvim/lua/plugins/rust.lua +34 -0
- package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
- package/dot_config/nvim/lua/plugins/ui.lua +509 -0
- package/dot_config/paru/paru.conf +10 -0
- package/dot_config/pip/pip.conf.tmpl +32 -0
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
- package/dot_config/pueue/pueue.yml +34 -0
- package/dot_config/pypoetry/config.toml +6 -0
- package/dot_config/pyrightconfig.json +5 -0
- package/dot_config/raycast/README.md +13 -0
- package/dot_config/redis/redisclirc +41 -0
- package/dot_config/ripgrep/ripgreprc +21 -0
- package/dot_config/shell/00-core-paths.sh.tmpl +133 -0
- package/dot_config/shell/05-core-safety.sh +47 -0
- package/dot_config/shell/10-secrets.sh +40 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +16 -0
- package/dot_config/shell/40-ls-colors.sh +48 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +10 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +10 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +64 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +120 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +54 -0
- package/dot_config/shell/Brewfile +207 -0
- package/dot_config/shell/Brewfile.cask +92 -0
- package/dot_config/shell/Brewfile.cli +127 -0
- package/dot_config/shell/README.md +267 -0
- package/dot_config/shell/als_data.txt.tmpl +65 -0
- package/dot_config/shell/custom/auto_ls.zsh +20 -0
- package/dot_config/shell/custom/context_suggest.zsh +68 -0
- package/dot_config/shell/custom/error_analysis.zsh +45 -0
- package/dot_config/sops/dot_sops.yaml +23 -0
- package/dot_config/starship.toml.tmpl +202 -0
- package/dot_config/swaylock/config +43 -0
- package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
- package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
- package/dot_config/systemd/user/pueued.service +12 -0
- package/dot_config/systemd/user/ssh-agent.service +12 -0
- package/dot_config/task/Taskfile.yml +86 -0
- package/dot_config/tflint/tflint.hcl +9 -0
- package/dot_config/tmux/tmux.conf.tmpl +223 -0
- package/dot_config/topgrade.toml.tmpl +54 -0
- package/dot_config/user-dirs.dirs +9 -0
- package/dot_config/vscode/extensions.txt +11 -0
- package/dot_config/vscode/settings.json.tmpl +82 -0
- package/dot_config/waybar/config.jsonc.tmpl +90 -0
- package/dot_config/waybar/style.css.tmpl +211 -0
- package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
- package/dot_config/wget/wgetrc +12 -0
- package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
- package/dot_config/yarn/yarnrc.yml +36 -0
- package/dot_config/yazi/keymap.toml +67 -0
- package/dot_config/yazi/theme.toml +102 -0
- package/dot_config/yazi/yazi.toml +40 -0
- package/dot_config/zathura/zathurarc +52 -0
- package/dot_config/zellij/config.kdl.tmpl +79 -0
- package/dot_config/zsh/dot_zprofile +7 -0
- package/dot_config/zsh/dot_zshenv +5 -0
- package/dot_config/zsh/dot_zshrc.tmpl +498 -0
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
- package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +194 -0
- package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
- package/dot_local/bin/__pycache__/executable_dot-load-benchmark-ptycpython-312.pyc +0 -0
- package/dot_local/bin/executable_ai-update +195 -0
- package/dot_local/bin/executable_ai_core +152 -0
- package/dot_local/bin/executable_antigravity +11 -0
- package/dot_local/bin/executable_b64 +84 -0
- package/dot_local/bin/executable_bm +77 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +589 -0
- package/dot_local/bin/executable_dot-ai +36 -0
- package/dot_local/bin/executable_dot-bootstrap +77 -0
- package/dot_local/bin/executable_dot-launch-or-focus +52 -0
- package/dot_local/bin/executable_dot-load-benchmark +31 -0
- package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
- package/dot_local/bin/executable_dot-theme-sync +952 -0
- package/dot_local/bin/executable_dot_completion +57 -0
- package/dot_local/bin/executable_dtags +28 -0
- package/dot_local/bin/executable_epoch +67 -0
- package/dot_local/bin/executable_extract +41 -0
- package/dot_local/bin/executable_gbd +52 -0
- package/dot_local/bin/executable_gd +42 -0
- package/dot_local/bin/executable_git-ai-commit +175 -0
- package/dot_local/bin/executable_git-ai-diff +169 -0
- package/dot_local/bin/executable_gl +101 -0
- package/dot_local/bin/executable_hash +161 -0
- package/dot_local/bin/executable_hashsum +160 -0
- package/dot_local/bin/executable_hex +115 -0
- package/dot_local/bin/executable_jsonv +78 -0
- package/dot_local/bin/executable_jwt +94 -0
- package/dot_local/bin/executable_kill-port +75 -0
- package/dot_local/bin/executable_lorem +118 -0
- package/dot_local/bin/executable_mkscript +35 -0
- package/dot_local/bin/executable_monitor +56 -0
- package/dot_local/bin/executable_myip +51 -0
- package/dot_local/bin/executable_notify +22 -0
- package/dot_local/bin/executable_open +36 -0
- package/dot_local/bin/executable_pw +27 -0
- package/dot_local/bin/executable_rec-start +46 -0
- package/dot_local/bin/executable_rec-stop +35 -0
- package/dot_local/bin/executable_regex +132 -0
- package/dot_local/bin/executable_start-niri +8 -0
- package/dot_local/bin/executable_tmux-sessionizer +314 -0
- package/dot_local/bin/executable_tour +175 -0
- package/dot_local/bin/executable_up +21 -0
- package/dot_local/bin/executable_update +142 -0
- package/dot_local/bin/executable_uuid +87 -0
- package/dot_local/bin/executable_win +32 -0
- package/dot_local/bin/executable_yamlv +57 -0
- package/dot_local/share/bash-completion/completions/dot +72 -0
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +149 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +283 -0
- package/install.sh +342 -0
- package/package.json +1 -1
- package/scripts/ci/check-copyright-headers.sh +96 -0
- package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
- package/scripts/ci/install-chezmoi-verified.sh +64 -0
- package/scripts/ci/validate-ci-config.sh +224 -0
- package/scripts/demo/record.sh +42 -0
- package/scripts/diagnostics/a2a-conformance.sh +162 -0
- package/scripts/diagnostics/alias-governance.sh +137 -0
- package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
- package/scripts/diagnostics/aliases-manifest.sh +31 -0
- package/scripts/diagnostics/benchmark.sh +381 -0
- package/scripts/diagnostics/conflicts.sh +72 -0
- package/scripts/diagnostics/doctor-unified.sh +38 -0
- package/scripts/diagnostics/doctor.sh +541 -0
- package/scripts/diagnostics/drift-dashboard.sh +37 -0
- package/scripts/diagnostics/health.sh +597 -0
- package/scripts/diagnostics/history-analysis.sh +85 -0
- package/scripts/diagnostics/mcp-doctor.sh +575 -0
- package/scripts/diagnostics/perf.sh +225 -0
- package/scripts/diagnostics/scorecard.sh +118 -0
- package/scripts/diagnostics/secret-governance.sh +58 -0
- package/scripts/diagnostics/security-score.sh +438 -0
- package/scripts/diagnostics/smoke-test.sh +87 -0
- package/scripts/diagnostics/snapshot.sh +89 -0
- package/scripts/diagnostics/verify.sh +107 -0
- package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
- package/scripts/diagnostics/version-locks.sh +79 -0
- package/scripts/diagnostics/workstation-attestation.sh +181 -0
- package/scripts/docs/build-manual.sh +883 -0
- package/scripts/docs/check-manual.sh +213 -0
- package/scripts/dot/commands/agent.sh +465 -0
- package/scripts/dot/commands/ai.sh +416 -0
- package/scripts/dot/commands/aliases.sh +250 -0
- package/scripts/dot/commands/appearance.sh +80 -0
- package/scripts/dot/commands/core.sh +185 -0
- package/scripts/dot/commands/diagnostics.sh +229 -0
- package/scripts/dot/commands/fleet.sh +399 -0
- package/scripts/dot/commands/lint.sh +177 -0
- package/scripts/dot/commands/manual.sh +168 -0
- package/scripts/dot/commands/meta.sh +248 -0
- package/scripts/dot/commands/patterns.sh +54 -0
- package/scripts/dot/commands/restore.sh +231 -0
- package/scripts/dot/commands/secrets.sh +223 -0
- package/scripts/dot/commands/security.sh +76 -0
- package/scripts/dot/commands/tools.sh +469 -0
- package/scripts/dot/data/alias-deprecations.tsv +2 -0
- package/scripts/dot/lib/bento.sh +49 -0
- package/scripts/dot/lib/log.sh +194 -0
- package/scripts/dot/lib/platform.sh +98 -0
- package/scripts/dot/lib/ui.sh +507 -0
- package/scripts/dot/lib/utils.sh +372 -0
- package/scripts/fonts/install-nerd-fonts.sh +68 -0
- package/scripts/fonts/patch-fonts.sh +35 -0
- package/scripts/git-hooks/install.sh +11 -0
- package/scripts/git-hooks/pre-commit +12 -0
- package/scripts/git-hooks/pre-commit-audit.sh +145 -0
- package/scripts/git-hooks/pre-push +29 -0
- package/scripts/git-hooks/prepare-commit-msg +29 -0
- package/scripts/lib/secrets_provider.sh +158 -0
- package/scripts/maintenance/check-updates.sh +131 -0
- package/scripts/ops/ai-setup.sh +55 -0
- package/scripts/ops/bundle.sh +77 -0
- package/scripts/ops/chaos.sh +49 -0
- package/scripts/ops/chezmoi-apply.sh +270 -0
- package/scripts/ops/chezmoi-diff.sh +15 -0
- package/scripts/ops/chezmoi-remove.sh +45 -0
- package/scripts/ops/chezmoi-update.sh +48 -0
- package/scripts/ops/heal-chezmoi.sh +51 -0
- package/scripts/ops/heal-system.sh +128 -0
- package/scripts/ops/heal-tools.sh +340 -0
- package/scripts/ops/heal.sh +222 -0
- package/scripts/ops/post-apply-repair.sh +106 -0
- package/scripts/ops/prewarm.sh +127 -0
- package/scripts/ops/release.sh +252 -0
- package/scripts/ops/rollback.sh +589 -0
- package/scripts/ops/setup.sh +137 -0
- package/scripts/ops/teleport.sh +33 -0
- package/scripts/qa/coverage-baseline.sh +60 -0
- package/scripts/qa/docs-coverage.sh +111 -0
- package/scripts/qa/reliability-audit.sh +138 -0
- package/scripts/qa/traceability-coverage.sh +116 -0
- package/scripts/qa/validate-examples.sh +26 -0
- package/scripts/qa/wsl-contract.sh +11 -0
- package/scripts/release/package-policy-bundles.sh +125 -0
- package/scripts/secrets/age-init.sh +70 -0
- package/scripts/secrets/create-secrets-file.sh +45 -0
- package/scripts/secrets/encrypt-ssh-key.sh +43 -0
- package/scripts/security/backup.sh +57 -0
- package/scripts/security/dns-doh.sh +51 -0
- package/scripts/security/encryption-check.sh +54 -0
- package/scripts/security/enforce-policies.sh +334 -0
- package/scripts/security/firewall.sh +90 -0
- package/scripts/security/lock-configs.sh +57 -0
- package/scripts/security/lock-screen.sh +55 -0
- package/scripts/security/manage-secrets.sh +428 -0
- package/scripts/security/ssh-cert.sh +203 -0
- package/scripts/security/telemetry-kill.sh +50 -0
- package/scripts/security/usb-safety.sh +51 -0
- package/scripts/theme/apply-gnome-theme.sh +328 -0
- package/scripts/theme/extract-theme.py +677 -0
- package/scripts/theme/install-boot-logo.sh +62 -0
- package/scripts/theme/install-catppuccin-themes.sh +370 -0
- package/scripts/theme/install-cursors.sh +25 -0
- package/scripts/theme/install-file-icons.sh +26 -0
- package/scripts/theme/install-grub-theme.sh +61 -0
- package/scripts/theme/install-lock-icon.sh +30 -0
- package/scripts/theme/merge-wallpaper.sh +141 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +421 -0
- package/scripts/theme/wallpaper-rotate.sh +136 -0
- package/scripts/theme/wallpaper-sync.sh +397 -0
- package/scripts/tools/cmatrix.sh +21 -0
- package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
- package/scripts/tools/emoji-picker.sh +48 -0
- package/scripts/tools/figlet-banner.sh +18 -0
- package/scripts/tools/log-rotate.sh +30 -0
- package/scripts/tools/lolcat-wrap.sh +19 -0
- package/scripts/tools/pipes.sh +48 -0
- package/scripts/tuning/linux.sh +185 -0
- package/scripts/tuning/macos.sh +55 -0
- package/scripts/uninstall.sh +85 -0
- package/scripts/version-sync.sh +487 -0
- package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
- package/templates/chezmoi-data/mac-m1.toml.example +16 -0
- package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
- package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
- package/templates/projects/go/.github/workflows/ci.yml +31 -0
- package/templates/projects/go/README.md +4 -0
- package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
- package/templates/projects/go/go.sum +0 -0
- package/templates/projects/molecule/README.md +7 -0
- package/templates/projects/molecule/converge.yml +7 -0
- package/templates/projects/molecule/molecule.yml +16 -0
- package/templates/projects/node/.github/workflows/ci.yml +30 -0
- package/templates/projects/node/README.md +4 -0
- package/templates/projects/node/package-lock.json +12 -0
- package/templates/projects/node/src/index.js +1 -0
- package/templates/projects/packer/README.md +15 -0
- package/templates/projects/packer/main.pkr.hcl +15 -0
- package/templates/projects/python/.github/workflows/ci.yml +34 -0
- package/templates/projects/python/README.md +4 -0
- package/templates/projects/python/pyproject.toml +15 -0
- package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
- package/templates/projects/python/tests/test_basic.py +1 -0
- package/docs/ARCHITECTURE.md +0 -62
- package/docs/COMPLIANCE.md +0 -47
- package/docs/OPERATIONS.md +0 -103
- package/docs/PR_DESCRIPTION.md +0 -150
- package/docs/ROADMAP_legacy.md +0 -556
- package/docs/SECURITY_CHECKLIST.md +0 -25
- package/docs/TASK.md +0 -99
- package/docs/WALKTHROUGH.md +0 -46
- package/scripts/backup.sh +0 -142
- package/scripts/banner.sh +0 -20
- package/scripts/benchmark.sh +0 -20
- package/scripts/build.sh +0 -41
- package/scripts/clean.sh +0 -31
- package/scripts/compile.sh +0 -54
- package/scripts/copy.sh +0 -108
- package/scripts/doctor.sh +0 -79
- package/scripts/dotfiles.sh +0 -63
- package/scripts/download.sh +0 -35
- package/scripts/help.sh +0 -57
- package/scripts/lock-configs.sh +0 -57
- package/scripts/package.sh +0 -46
- package/scripts/ssh.sh +0 -55
- package/scripts/teleport.sh +0 -23
- package/scripts/test-aliases.sh +0 -25
- package/scripts/test_smoke.sh +0 -88
- package/scripts/unpack.sh +0 -28
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# ADR-006: Zsh as Default Shell
|
|
2
|
+
|
|
3
|
+
**Status**: Accepted
|
|
4
|
+
**Date**: 2026-02-09
|
|
5
|
+
**Authors**: @sebastienrousseau
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
Choosing a default shell impacts:
|
|
10
|
+
- Developer productivity and workflow
|
|
11
|
+
- Plugin ecosystem and extensibility
|
|
12
|
+
- Cross-platform compatibility
|
|
13
|
+
- Startup performance
|
|
14
|
+
- Learning curve for new users
|
|
15
|
+
|
|
16
|
+
## Decision
|
|
17
|
+
|
|
18
|
+
Use **Zsh** as the default interactive shell with **Zinit** as the plugin manager.
|
|
19
|
+
|
|
20
|
+
### Alternatives Considered
|
|
21
|
+
|
|
22
|
+
| Shell | Pros | Cons |
|
|
23
|
+
|-------|------|------|
|
|
24
|
+
| **Bash** | Universal, stable, POSIX | Limited interactive features |
|
|
25
|
+
| **Zsh** | Rich features, great plugins | Slower than bash (mitigated) |
|
|
26
|
+
| **Fish** | Modern, user-friendly | Not POSIX, less portable |
|
|
27
|
+
| **Nushell** | Structured data, modern | Breaking changes, immature |
|
|
28
|
+
|
|
29
|
+
### Why Zsh
|
|
30
|
+
|
|
31
|
+
1. **Default on macOS**: Pre-installed since Catalina
|
|
32
|
+
2. **Plugin Ecosystem**: Massive library of plugins and themes
|
|
33
|
+
3. **Compatibility**: POSIX-compatible, smooth migration from bash
|
|
34
|
+
4. **Completion System**: Superior tab completion
|
|
35
|
+
5. **Customization**: Highly configurable prompt and behavior
|
|
36
|
+
6. **Community**: Large community, well-documented
|
|
37
|
+
|
|
38
|
+
### Why Zinit
|
|
39
|
+
|
|
40
|
+
| Plugin Manager | Load Time | Features |
|
|
41
|
+
|----------------|-----------|----------|
|
|
42
|
+
| Oh-My-Zsh | ~800ms | Monolithic, many plugins |
|
|
43
|
+
| Prezto | ~400ms | Faster, modular |
|
|
44
|
+
| **Zinit** | ~200ms | Turbo mode, fine control |
|
|
45
|
+
| Antibody | ~300ms | Simple, fast |
|
|
46
|
+
|
|
47
|
+
Zinit provides:
|
|
48
|
+
- **Turbo Mode**: Deferred loading after prompt
|
|
49
|
+
- **Ice Modifiers**: Fine-grained control over plugin loading
|
|
50
|
+
- **Binary Installation**: Install completions and binaries
|
|
51
|
+
- **Profiling**: Built-in load time profiling
|
|
52
|
+
|
|
53
|
+
## Implementation
|
|
54
|
+
|
|
55
|
+
### Shell Layer System
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
dot_config/zsh/rc.d/
|
|
59
|
+
├── 00-10: Core (env, history, options)
|
|
60
|
+
├── 20-49: Middleware (zinit, completions)
|
|
61
|
+
├── 50-89: Toolchain (languages, tools)
|
|
62
|
+
└── 90-99: UX (prompt, aliases, keybindings)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Zinit Configuration
|
|
66
|
+
|
|
67
|
+
```zsh
|
|
68
|
+
# Turbo mode: load after prompt displays
|
|
69
|
+
zinit ice wait lucid
|
|
70
|
+
zinit light zsh-users/zsh-autosuggestions
|
|
71
|
+
|
|
72
|
+
# Synchronous: needed immediately
|
|
73
|
+
zinit light zdharma-continuum/fast-syntax-highlighting
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Performance Targets
|
|
77
|
+
|
|
78
|
+
| Metric | Target | Achieved |
|
|
79
|
+
|--------|--------|----------|
|
|
80
|
+
| Cold Start | <500ms | ~300ms |
|
|
81
|
+
| Warm Start | <200ms | ~150ms |
|
|
82
|
+
| Plugin Load | Async | Yes |
|
|
83
|
+
|
|
84
|
+
## Consequences
|
|
85
|
+
|
|
86
|
+
### Positive
|
|
87
|
+
- Fast, responsive shell experience
|
|
88
|
+
- Rich plugin ecosystem (autosuggestions, syntax highlighting)
|
|
89
|
+
- Powerful completion system
|
|
90
|
+
- Compatible with existing bash scripts
|
|
91
|
+
- Modern prompt with Starship
|
|
92
|
+
|
|
93
|
+
### Negative
|
|
94
|
+
- Requires zsh installation on some Linux distros
|
|
95
|
+
- Plugin manager adds complexity
|
|
96
|
+
- Some bash-isms need adjustment
|
|
97
|
+
- Turbo mode can cause brief visual delay
|
|
98
|
+
|
|
99
|
+
### Neutral
|
|
100
|
+
- Users can still use bash for scripts
|
|
101
|
+
- Configuration more complex than vanilla shell
|
|
102
|
+
- Performance monitoring needed
|
|
103
|
+
|
|
104
|
+
## Performance Optimizations
|
|
105
|
+
|
|
106
|
+
1. **Caching**: Compile zsh files to `.zwc` bytecode
|
|
107
|
+
2. **Lazy Loading**: Defer heavy tools (nvm, rvm) until first use
|
|
108
|
+
3. **Turbo Mode**: Load plugins after prompt displays
|
|
109
|
+
4. **Conditional Loading**: Skip unused features
|
|
110
|
+
|
|
111
|
+
## References
|
|
112
|
+
|
|
113
|
+
- [Zsh Documentation](https://zsh.sourceforge.io/Doc/)
|
|
114
|
+
- [Zinit Wiki](https://zdharma-continuum.github.io/zinit/wiki/)
|
|
115
|
+
- [Starship Prompt](https://starship.rs/)
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# ADR-007: Multi-Shell Parity Strategy
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted
|
|
6
|
+
|
|
7
|
+
## Date
|
|
8
|
+
|
|
9
|
+
2026-03-08
|
|
10
|
+
|
|
11
|
+
## Context
|
|
12
|
+
|
|
13
|
+
The dotfiles distribution supports three shells: Zsh (default since macOS Catalina), Fish (modern interactive shell), and Nushell (structured data shell). The codebase has 98 alias files and 52+ functions written in POSIX/Bash. Without a parity strategy, each shell gets a fragmented subset of functionality.
|
|
14
|
+
|
|
15
|
+
**Problem:** Fish had zero access to the alias/function library until v0.2.500 added bridge templates. Nushell had only 6 hardcoded aliases and no function access.
|
|
16
|
+
|
|
17
|
+
**Constraints:**
|
|
18
|
+
- Nushell's `source` is parse-time evaluated (no dynamic sourcing)
|
|
19
|
+
- Fish syntax differs significantly from POSIX (no `$()`, different `if`, no `[[`)
|
|
20
|
+
- Maintaining N copies of every alias/function is unsustainable
|
|
21
|
+
|
|
22
|
+
## Decision
|
|
23
|
+
|
|
24
|
+
Adopt a **hub-and-spoke bridge architecture**:
|
|
25
|
+
|
|
26
|
+
1. **Hub:** Canonical definitions live in `.chezmoitemplates/aliases/` (Bash/POSIX) and `.chezmoitemplates/functions/` (Bash)
|
|
27
|
+
2. **Bash/Zsh spoke:** Direct inclusion via `90-ux-aliases.sh.tmpl` and `50-logic-functions.sh.tmpl`
|
|
28
|
+
3. **Fish spoke:** Runtime bash bridge with caching (`aliases.fish.tmpl`, `functions.fish.tmpl`)
|
|
29
|
+
4. **Nushell spoke:** Hybrid approach:
|
|
30
|
+
- Aliases: Runtime bash extraction cached to `~/.cache/nushell/bash-aliases.nu` (in `env.nu.tmpl`), sourced by `aliases.nu.tmpl`
|
|
31
|
+
- Functions: Chezmoi template-generated `def` wrappers delegating to bash (in `functions.nu.tmpl`)
|
|
32
|
+
|
|
33
|
+
**Parity tiers:**
|
|
34
|
+
- **Tier 1 (Full):** Zsh, Bash — all aliases, functions, lazy loading, cached eval
|
|
35
|
+
- **Tier 2 (Bridged):** Fish — all simple aliases, all functions via wrappers, `_cached_eval` caching
|
|
36
|
+
- **Tier 3 (Compatible):** Nushell — simple aliases (no complex bash syntax), all functions via bash delegation
|
|
37
|
+
|
|
38
|
+
## Consequences
|
|
39
|
+
|
|
40
|
+
### Positive
|
|
41
|
+
- Single source of truth for aliases and functions
|
|
42
|
+
- Adding a new alias/function automatically propagates to all shells
|
|
43
|
+
- Nushell users get access to 40+ functions that were previously unavailable
|
|
44
|
+
- Fish users get mtime-aware caching via `_cached_eval`
|
|
45
|
+
|
|
46
|
+
### Negative
|
|
47
|
+
- Complex bash aliases (pipes, conditionals) are skipped for Nushell
|
|
48
|
+
- Function calls in Fish/Nushell incur bash subprocess overhead (~5ms per call)
|
|
49
|
+
- Cache invalidation requires shell restart or manual cache clear
|
|
50
|
+
|
|
51
|
+
### Risks
|
|
52
|
+
- Nushell's rapid development may break bridge syntax in future versions
|
|
53
|
+
- Very large alias sets may slow Nushell startup during cache generation
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# ADR-008: Alias System Architecture
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted
|
|
6
|
+
|
|
7
|
+
## Date
|
|
8
|
+
|
|
9
|
+
2026-03-08
|
|
10
|
+
|
|
11
|
+
## Context
|
|
12
|
+
|
|
13
|
+
The dotfiles manage 98 alias files across 30+ categories (git, docker, kubernetes, python, security, etc.). These need to load fast, support per-machine toggling, and work across Zsh, Bash, Fish, and Nushell.
|
|
14
|
+
|
|
15
|
+
**Design questions:**
|
|
16
|
+
1. How to organize alias files for maintainability?
|
|
17
|
+
2. How to control which aliases load on which machines?
|
|
18
|
+
3. How to balance startup speed with alias availability?
|
|
19
|
+
4. How to bridge POSIX aliases to non-POSIX shells?
|
|
20
|
+
|
|
21
|
+
## Decision
|
|
22
|
+
|
|
23
|
+
### Organization
|
|
24
|
+
|
|
25
|
+
Aliases are organized by tool/domain in `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`:
|
|
26
|
+
|
|
27
|
+
```text
|
|
28
|
+
aliases/
|
|
29
|
+
git/git.aliases.sh, signing.aliases.sh
|
|
30
|
+
docker/docker.aliases.sh
|
|
31
|
+
kubernetes/kubernetes.aliases.sh
|
|
32
|
+
security/crypto-utils.aliases.sh, ssh-keys.aliases.sh, ...
|
|
33
|
+
default/default.aliases.sh
|
|
34
|
+
...
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Profile Tiers
|
|
38
|
+
|
|
39
|
+
Three profiles control alias scope (set in `.chezmoidata.toml`):
|
|
40
|
+
|
|
41
|
+
| Profile | Scope | Use Case |
|
|
42
|
+
|---------|-------|----------|
|
|
43
|
+
| `minimal` | Core only, excludes interactive/sudo | Servers, containers |
|
|
44
|
+
| `standard` | All core + selected ecosystem | Laptops, workstations |
|
|
45
|
+
| `full` | Everything including heavy/specialized | Dev machines |
|
|
46
|
+
|
|
47
|
+
### Bucket Toggles
|
|
48
|
+
|
|
49
|
+
Per-category flags in `.chezmoidata.toml` under `[aliases.buckets]`:
|
|
50
|
+
```toml
|
|
51
|
+
[aliases.buckets]
|
|
52
|
+
system = true
|
|
53
|
+
svn = false # disable on machines without SVN
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Two-Phase Loading
|
|
57
|
+
|
|
58
|
+
1. **Eager (90-ux-aliases.sh):** Core categories loaded at shell startup (~40KB). Includes: archives, cd, clear, configuration, default, diagnostics, disk-usage, editor, git, interactive, installer, mkdir, modern, ps, rsync, sudo, system.
|
|
59
|
+
|
|
60
|
+
2. **Lazy (91-ux-aliases-lazy.sh):** Ecosystem aliases deferred until first prompt via `precmd` hook. Includes: docker, kubernetes, terraform, gcloud, python, npm, rust, security, etc.
|
|
61
|
+
|
|
62
|
+
### Function Groups (groups.json)
|
|
63
|
+
|
|
64
|
+
Functions use a parallel system with `groups.json` as a registry:
|
|
65
|
+
- Groups: api, curl, text, system, files, interactive, nav, security, misc
|
|
66
|
+
- Lazy-loaded per group on first invocation
|
|
67
|
+
- Stub functions replaced with real implementations on first call
|
|
68
|
+
|
|
69
|
+
## Consequences
|
|
70
|
+
|
|
71
|
+
### Positive
|
|
72
|
+
- Adding aliases is self-service: create a file in the right category
|
|
73
|
+
- Per-machine customization without forking
|
|
74
|
+
- Lazy loading keeps startup under 200ms even with 98 alias files
|
|
75
|
+
- `groups.json` enables automated bridge generation for Fish/Nushell
|
|
76
|
+
|
|
77
|
+
### Negative
|
|
78
|
+
- Alias definitions wrap in functions (`set_default_aliases()`) for sourcing safety, adding complexity
|
|
79
|
+
- Two-phase loading means some aliases aren't available until after first prompt
|
|
80
|
+
- Profile/bucket system requires understanding .chezmoidata.toml
|
|
81
|
+
|
|
82
|
+
### Trade-offs
|
|
83
|
+
- Chose file-per-category over monolithic alias file for maintainability
|
|
84
|
+
- Chose runtime extraction for Fish/Nushell over maintaining parallel definitions
|
|
85
|
+
- Chose lazy loading over compile-time bundling for flexibility
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Architecture Decision Records
|
|
2
|
+
|
|
3
|
+
This directory contains Architecture Decision Records (ADRs) that document
|
|
4
|
+
significant architectural decisions made in this project.
|
|
5
|
+
|
|
6
|
+
## Index
|
|
7
|
+
|
|
8
|
+
| ADR | Title | Status |
|
|
9
|
+
|-----|-------|--------|
|
|
10
|
+
| [ADR-001](ADR-001-ci-cd-pipeline.md) | Multi-stage CI/CD Pipeline Design | Accepted |
|
|
11
|
+
| [ADR-002](ADR-002-shell-performance.md) | Shell Performance Optimization Strategy | Accepted |
|
|
12
|
+
| [ADR-003](ADR-003-security-first.md) | Security-First Approach | Accepted |
|
|
13
|
+
| [ADR-004](ADR-004-cli-architecture.md) | Chezmoi + Custom CLI Wrapper Architecture | Accepted |
|
|
14
|
+
| [ADR-005](ADR-005-chezmoi-choice.md) | Chezmoi as Dotfiles Manager | Accepted |
|
|
15
|
+
| [ADR-006](ADR-006-shell-selection.md) | Zsh as Default Shell | Accepted |
|
|
16
|
+
| [ADR-007](ADR-007-multi-shell-parity.md) | Multi-Shell Parity Strategy | Accepted |
|
|
17
|
+
| [ADR-008](ADR-008-alias-system-architecture.md) | Alias System Architecture | Accepted |
|
|
18
|
+
|
|
19
|
+
## ADR Format
|
|
20
|
+
|
|
21
|
+
Each ADR follows this structure:
|
|
22
|
+
|
|
23
|
+
- **Status**: Proposed, Accepted, Deprecated, Superseded
|
|
24
|
+
- **Context**: The situation and forces at play
|
|
25
|
+
- **Decision**: The change being made
|
|
26
|
+
- **Consequences**: The resulting context after applying the decision
|
|
27
|
+
|
|
28
|
+
## References
|
|
29
|
+
|
|
30
|
+
- [Documenting Architecture Decisions](https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions)
|
|
31
|
+
- [ADR Tools](https://github.com/npryce/adr-tools)
|
|
32
|
+
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Architecture
|
|
2
|
+
|
|
3
|
+
Core architectural decisions and system design of the dotfiles shell distribution.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Philosophy
|
|
8
|
+
|
|
9
|
+
- **XDG-First**: Configuration lives under `~/.config/` to keep the home directory clean.
|
|
10
|
+
- **Multi-Shell**: First-class support for Zsh, Fish, and Nushell with a shared logic core.
|
|
11
|
+
- **Fast Startup**: Heavy features are deferred or autoloaded to keep the first prompt under 50ms.
|
|
12
|
+
- **Deterministic**: Nix Flakes provide bit-for-bit identical environments across machines.
|
|
13
|
+
- **Non-Blocking**: Background daemons (Pueue) handle upgrades and builds without stalling the shell.
|
|
14
|
+
|
|
15
|
+
## System Layout
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
~/.dotfiles/
|
|
19
|
+
├── dot_config/ # Managed application configurations (~/.config/)
|
|
20
|
+
│ ├── zsh/ # Modular Zsh rc.d architecture
|
|
21
|
+
│ ├── fish/ # Autoloading Fish configuration
|
|
22
|
+
│ ├── nushell/ # Structured data shell config
|
|
23
|
+
│ ├── shell/ # Shared logic (aliases, paths, functions)
|
|
24
|
+
│ └── ... # 50+ tool configurations (nvim, tmux, ghostty, etc.)
|
|
25
|
+
├── dot_local/ # Local binaries and scripts (~/.local/bin/)
|
|
26
|
+
├── .chezmoitemplates/ # Unified source for aliases, functions, and paths
|
|
27
|
+
├── scripts/ # Internal libraries and diagnostics
|
|
28
|
+
├── nix/ # Nix Flake for deterministic toolchains
|
|
29
|
+
├── lib/wasm-tools/ # Rust source for Wasm utilities
|
|
30
|
+
└── install.sh # Universal bootstrap script (zero dependencies)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Shell Startup Strategies
|
|
36
|
+
|
|
37
|
+
### Shared: `_cached_eval`
|
|
38
|
+
|
|
39
|
+
Across Zsh, Fish, and Bash, an idempotent caching wrapper avoids redundant tool initialization (Starship, Zoxide, Atuin).
|
|
40
|
+
|
|
41
|
+
1. **Intercept** — check if a cached version of the tool's `eval` output exists in `~/.cache/shell/`.
|
|
42
|
+
2. **Validate** — compare the cache timestamp against the tool binary's mtime.
|
|
43
|
+
3. **Bypass** — if valid, `source` the cached text directly, saving 20-50ms per tool.
|
|
44
|
+
|
|
45
|
+
### Lazy-Hydration Model
|
|
46
|
+
|
|
47
|
+
To reach a fluid first-prompt target (< 50ms), the shell uses a three-phase startup:
|
|
48
|
+
|
|
49
|
+
1. **Phase 1 (Visual Paint)** — render the prompt immediately using static escape codes.
|
|
50
|
+
2. **Phase 2 (Async Hydration)** — dispatch tool initializations (mise, atuin, etc.) to background workers.
|
|
51
|
+
3. **Phase 3 (On-Demand Activation)** — environment hydration occurs on first user interaction or after 500ms of idle time.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Artifact Mode
|
|
56
|
+
|
|
57
|
+
A minimal environment triggered by `DOTFILES_ARTIFACT_MODE=1`.
|
|
58
|
+
|
|
59
|
+
- **Minimalist UI** — strips prompt complexity, leaving only a green `->`.
|
|
60
|
+
- **Intelligence Surface** — an async Bento-style dashboard rendered via `bento.sh` that provides environment context (Node version, cloud status, Git health) without blocking the main thread.
|
|
61
|
+
- **Redraw Signaling** — uses `SIGWINCH` to return control after background hydration completes.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Ultra-Fast Mode
|
|
66
|
+
|
|
67
|
+
Set `DOTFILES_ULTRA_FAST=1` to skip all non-essential initialization. Only core paths, aliases, and the prompt are loaded. Useful for:
|
|
68
|
+
|
|
69
|
+
- CI/CD pipelines where full shell setup is unnecessary
|
|
70
|
+
- Rapid scripting sessions where startup latency matters
|
|
71
|
+
- Benchmarking baseline shell performance
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Debug and Trace Modes
|
|
76
|
+
|
|
77
|
+
### DOTFILES_DEBUG=1
|
|
78
|
+
|
|
79
|
+
Enables verbose diagnostic output during shell startup. Prints which files are sourced and their load times.
|
|
80
|
+
|
|
81
|
+
### DOTFILES_TRACE=1
|
|
82
|
+
|
|
83
|
+
Enables `set -x` tracing for the entire shell startup sequence. Output is written to `~/.local/state/dotfiles/debug.log` for post-mortem analysis.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Function Groups (groups.json)
|
|
88
|
+
|
|
89
|
+
Functions are organized into groups defined in `.chezmoitemplates/functions/groups.json`:
|
|
90
|
+
|
|
91
|
+
| Group | Functions | Description |
|
|
92
|
+
|-------|-----------|-------------|
|
|
93
|
+
| `api` | apihealth, apilatency, apiload | API testing utilities |
|
|
94
|
+
| `curl` | curlheader, curlstatus, curltime, httpdebug | HTTP debugging |
|
|
95
|
+
| `text` | encode64, kebabcase, lowercase, titlecase, ... | Text transformation |
|
|
96
|
+
| `system` | environment, freespace, hostinfo, myproc, sysinfo | System introspection |
|
|
97
|
+
| `files` | backup, extract, hexdump, hiddenfiles, size, zipf | File operations |
|
|
98
|
+
| `interactive` | banner, emoji, matrix, rainbow, stopwatch | Terminal fun |
|
|
99
|
+
| `nav` | cdls, goto, ql | Navigation shortcuts |
|
|
100
|
+
| `security` | genpass, keygen, mount_read_only | Security utilities |
|
|
101
|
+
| `misc` | dothelp, view-source, prependpath, caffeine | Miscellaneous |
|
|
102
|
+
|
|
103
|
+
Groups are lazy-loaded: stub functions are defined at startup, and the real implementation is loaded on first invocation. This keeps startup fast while providing 52+ functions on demand.
|
|
104
|
+
|
|
105
|
+
The `groups.json` schema maps group names to arrays of relative paths (including subdirectory):
|
|
106
|
+
|
|
107
|
+
```json
|
|
108
|
+
{
|
|
109
|
+
"group_name": ["group_name/function1.sh", "group_name/function2.sh"]
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Each `.sh` file lives in a subdirectory matching its group and defines a single function with the same name as the file (minus `.sh` extension).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Cross-Platform Interoperability
|
|
2
|
+
|
|
3
|
+
How dotfiles commands and shims map across macOS, Linux, and WSL2.
|
|
4
|
+
|
|
5
|
+
## Command Mapping
|
|
6
|
+
|
|
7
|
+
| Alias / Command | macOS | Linux (Debian/Arch) | WSL2 (Windows Host) |
|
|
8
|
+
| :--- | :--- | :--- | :--- |
|
|
9
|
+
| `cb` (Clipboard) | `pbcopy` / `pbpaste` | `xclip` / `wl-copy` | `clip.exe` / `powershell.exe` |
|
|
10
|
+
| `open` | `open` | `xdg-open` | `wslview` / `explorer.exe` |
|
|
11
|
+
| `notify` | `osascript` (AppleScript) | `notify-send` / `gum log` | `powershell.exe` (Toast) / `gum` |
|
|
12
|
+
| `win` (Paths) | N/A | N/A | `wslpath` |
|
|
13
|
+
| `browser` | `open` | `xdg-open` | `powershell.exe Start-Process` |
|
|
14
|
+
|
|
15
|
+
## Infrastructure Parity
|
|
16
|
+
|
|
17
|
+
| Feature | macOS | Linux | WSL2 |
|
|
18
|
+
| :--- | :--- | :--- | :--- |
|
|
19
|
+
| **Package Manager** | Homebrew (`brew`) | `apt` / `pacman` / `nix` | `apt` + Windows binaries |
|
|
20
|
+
| **Shell Startup** | Async lazy-hydration | Async lazy-hydration | Async (optimized for IO) |
|
|
21
|
+
| **Environment** | native plist / launchctl | systemd / dbus | systemd (if enabled) / init |
|
|
22
|
+
| **Hardware** | Secure Enclave | TPM 2.0 / LUKS | Windows Hello bridge |
|
|
23
|
+
|
|
24
|
+
## Troubleshooting
|
|
25
|
+
|
|
26
|
+
### WSL2 IO Latency
|
|
27
|
+
Keep projects in the Linux filesystem (`~/...`), not under `/mnt/c/`.
|
|
28
|
+
|
|
29
|
+
### WSL2 Windows Binary Path
|
|
30
|
+
If you've disabled WSL path sharing, make sure Windows-side binaries like `clip.exe` and `explorer.exe` are still reachable in `$PATH`.
|
|
31
|
+
|
|
32
|
+
### macOS Permissions
|
|
33
|
+
Grant your terminal "Full Disk Access" in System Settings so dotfiles can manage all configurations.
|
|
34
|
+
|
|
35
|
+
### Linux GUI Fallbacks
|
|
36
|
+
In headless environments, GUI commands like `cb` and `open` fall back to `gum log` or terminal bell instead of hanging.
|