@sebastienrousseau/dotfiles 0.2.499 → 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 +452 -0
- package/LICENSE +1283 -0
- package/README.md +322 -0
- package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
- package/docs/AI.md +108 -0
- package/docs/CNAME +1 -0
- package/docs/COPYRIGHT +4 -3
- package/docs/NAMING_CONVENTIONS.md +102 -0
- package/docs/README.md +82 -0
- package/docs/_config.yml +59 -0
- package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
- package/docs/adr/ADR-002-shell-performance.md +130 -0
- package/docs/adr/ADR-003-security-first.md +158 -0
- package/docs/adr/ADR-004-cli-architecture.md +171 -0
- package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
- package/docs/adr/ADR-006-shell-selection.md +124 -0
- package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
- package/docs/adr/ADR-008-alias-system-architecture.md +95 -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 +39 -0
- package/docs/architecture/ARCHITECTURE.md +117 -0
- package/docs/architecture/INTEROP.md +44 -0
- package/docs/architecture/REPO_LAYOUT.md +241 -0
- package/docs/architecture/WALKTHROUGH.md +86 -0
- package/docs/architecture/fleet-deployment.md +77 -0
- package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
- package/docs/archive/LEGACY_ROADMAP.md +160 -0
- package/docs/archive/MILESTONE_v0.2.493.md +47 -0
- package/docs/{PLAN.md → archive/PLAN.md} +50 -12
- package/docs/archive/REPO_AUDIT.md +31 -0
- package/docs/guides/INSTALL.md +144 -0
- package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
- package/docs/guides/THEMING.md +230 -0
- package/docs/guides/TROUBLESHOOTING.md +176 -0
- package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
- package/docs/index.md +43 -0
- package/docs/interop/A2A.md +39 -0
- package/docs/interop/POWERSHELL.md +102 -0
- package/docs/manual/00-introduction.md +89 -0
- package/docs/manual/01-concepts/01-architecture.md +138 -0
- package/docs/manual/01-concepts/02-trust-model.md +182 -0
- package/docs/manual/01-concepts/03-theme-engine.md +186 -0
- package/docs/manual/01-concepts/04-fleet.md +148 -0
- package/docs/manual/01-concepts/05-self-healing.md +204 -0
- package/docs/manual/02-tutorials/01-first-install.md +197 -0
- package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
- package/docs/manual/02-tutorials/03-create-profile.md +244 -0
- package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
- package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
- package/docs/manual/03-reference/01-dot-cli.md +417 -0
- package/docs/manual/03-reference/02-config-files.md +265 -0
- package/docs/manual/03-reference/03-environment.md +124 -0
- package/docs/manual/03-reference/04-templates.md +190 -0
- package/docs/manual/03-reference/05-feature-flags.md +128 -0
- package/docs/manual/04-cookbook/01-recipes.md +285 -0
- package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
- package/docs/manual/04-cookbook/03-faq.md +175 -0
- package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
- package/docs/manual/05-appendices/B-security-checklist.md +84 -0
- package/docs/manual/05-appendices/C-glossary.md +40 -0
- package/docs/manual/05-appendices/D-bibliography.md +58 -0
- package/docs/manual/05-appendices/E-license.md +38 -0
- package/docs/manual/_toc.yml +58 -0
- package/docs/manual/command-index.md +62 -0
- package/docs/manual/concept-index.md +168 -0
- package/docs/operations/ATTESTATION.md +44 -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 +63 -0
- package/docs/operations/MIGRATION.md +109 -0
- package/docs/operations/OPERATIONS.md +188 -0
- package/docs/operations/PERFORMANCE.md +133 -0
- package/docs/operations/RELIABILITY.md +122 -0
- package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
- package/docs/operations/TESTING.md +199 -0
- package/docs/operations/TRACEABILITY.md +35 -0
- package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
- package/docs/operations/VERSION_SYNC.md +393 -0
- package/docs/reference/ALIASES.md +131 -0
- package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
- package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
- package/docs/reference/FEATURES.md +66 -0
- package/docs/reference/FONTS.md +112 -0
- package/docs/reference/PROFILES.md +69 -0
- package/docs/reference/SCREENSHOTS.md +121 -0
- package/docs/reference/SCRIPTS.md +71 -0
- package/docs/reference/SUPPORT_MATRIX.md +80 -0
- package/docs/reference/THEMES.md +117 -0
- package/docs/reference/TOOLS.md +109 -0
- package/docs/reference/UTILS.md +155 -0
- package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
- package/docs/security/AUDIT_BYPASS.md +103 -0
- package/docs/security/AUTOMATION_SECRETS.md +26 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
- package/docs/security/COMPLIANCE.md +458 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
- package/docs/security/ENCRYPTION.md +57 -0
- package/docs/security/FMEA.md +159 -0
- package/docs/security/HISTORY_FILTERING.md +132 -0
- package/docs/security/INCIDENT_RESPONSE.md +579 -0
- package/docs/security/INSTALL_VERIFICATION.md +122 -0
- package/docs/security/KEYS.md +49 -0
- package/docs/security/KEY_ROTATION.md +223 -0
- package/docs/security/MCP_POLICY.md +78 -0
- package/docs/security/POLICY_RELEASES.md +37 -0
- package/docs/security/README.md +28 -0
- package/docs/security/SCORECARD.md +80 -0
- package/docs/security/SECRETS.md +158 -0
- package/docs/security/SECURITY.md +45 -0
- package/docs/security/SECURITY_CHECKLIST.md +55 -0
- package/docs/security/SHELL_EXEMPTIONS.md +145 -0
- package/docs/security/SOUP_REGISTER.md +36 -0
- package/docs/security/THREAT_MODEL.md +130 -0
- package/docs/security/VERIFICATION_VALIDATION.md +228 -0
- package/docs/themes/README.md +10 -0
- package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
- package/docs/themes/hero-shot.svg +78 -0
- package/dot_config/.module-manifest.json +69 -0
- package/dot_config/ai/identity.md +23 -0
- package/dot_config/ai/patterns/architect.md +16 -0
- package/dot_config/ai/patterns/hardener.md +15 -0
- package/dot_config/ai/patterns/refactor.md +15 -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.tmpl +47 -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 +13 -0
- package/dot_config/dotfiles/grub/README.md +13 -0
- package/dot_config/dotfiles/lock/README.md +13 -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 +172 -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 +131 -0
- package/dot_config/fish/functions/_cached_eval_clear.fish +17 -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/hooks/executable_commit-msg +146 -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/cached_eval.nu +80 -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 +102 -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 +134 -0
- package/dot_config/shell/05-core-safety.sh +48 -0
- package/dot_config/shell/10-secrets.sh +41 -0
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
- package/dot_config/shell/40-ls-colors.sh +49 -0
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
- package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -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 +284 -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 +10 -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 +635 -0
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -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 +214 -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/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 +79 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +596 -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 +24 -0
- package/dot_local/bin/executable_open +38 -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 +177 -0
- package/dot_local/bin/executable_up +23 -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 +350 -0
- package/package.json +1 -1
- package/scripts/ci/check-copyright-headers.sh +96 -0
- 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/guard-gitleaks-checkout.sh +57 -0
- package/scripts/ci/install-chezmoi-verified.sh +64 -0
- package/scripts/ci/run-coverage.sh +362 -0
- package/scripts/ci/validate-chezmoidata.sh +25 -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 +709 -0
- package/scripts/diagnostics/drift-dashboard.sh +201 -0
- package/scripts/diagnostics/health.sh +614 -0
- package/scripts/diagnostics/history-analysis.sh +85 -0
- package/scripts/diagnostics/mcp-doctor.sh +575 -0
- package/scripts/diagnostics/perf.sh +452 -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 +186 -0
- package/scripts/docs/build-manual.sh +883 -0
- package/scripts/docs/check-manual.sh +213 -0
- package/scripts/dot/commands/agent.sh +474 -0
- package/scripts/dot/commands/ai.sh +481 -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 +50 -0
- package/scripts/dot/lib/log.sh +200 -0
- package/scripts/dot/lib/platform.sh +99 -0
- package/scripts/dot/lib/ui.sh +518 -0
- package/scripts/dot/lib/utils.sh +377 -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 +92 -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 +86 -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/powershell-contract.ps1 +95 -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 +145 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +431 -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,171 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-004: Chezmoi + Custom CLI Wrapper Architecture
|
|
6
|
+
|
|
7
|
+
**Status**: Accepted
|
|
8
|
+
**Date**: 2026-02-09
|
|
9
|
+
**Authors**: @sebastienrousseau
|
|
10
|
+
|
|
11
|
+
## Context
|
|
12
|
+
|
|
13
|
+
Managing dotfiles requires:
|
|
14
|
+
|
|
15
|
+
- Tracking file changes and applying them consistently
|
|
16
|
+
- Handling platform-specific configurations
|
|
17
|
+
- Supporting encrypted secrets
|
|
18
|
+
- Providing a good developer experience
|
|
19
|
+
|
|
20
|
+
Options considered:
|
|
21
|
+
|
|
22
|
+
1. **Bare git repository**: Simple but poor UX, no templating
|
|
23
|
+
2. **GNU Stow**: Symlink-based, limited features
|
|
24
|
+
3. **Chezmoi only**: Powerful but complex CLI
|
|
25
|
+
4. **Custom from scratch**: High maintenance burden
|
|
26
|
+
5. **Chezmoi + wrapper**: Best of both worlds
|
|
27
|
+
|
|
28
|
+
## Decision
|
|
29
|
+
|
|
30
|
+
Use **Chezmoi as the core engine** with a **custom `dot` CLI wrapper** that:
|
|
31
|
+
|
|
32
|
+
### Architecture
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
┌─────────────────────────────────────────────┐
|
|
36
|
+
│ dot CLI │
|
|
37
|
+
│ (User-friendly interface, custom commands) │
|
|
38
|
+
├─────────────────────────────────────────────┤
|
|
39
|
+
│ Command Modules │
|
|
40
|
+
│ core │ diagnostics │ tools │ appearance │
|
|
41
|
+
│ secrets │ security │ meta │
|
|
42
|
+
├─────────────────────────────────────────────┤
|
|
43
|
+
│ Shared Library │
|
|
44
|
+
│ utils.sh (resolve_source_dir, run_script) │
|
|
45
|
+
├─────────────────────────────────────────────┤
|
|
46
|
+
│ Chezmoi │
|
|
47
|
+
│ (Template engine, state management, apply) │
|
|
48
|
+
└─────────────────────────────────────────────┘
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Core Principles
|
|
52
|
+
|
|
53
|
+
**1. Chezmoi handles complexity:**
|
|
54
|
+
|
|
55
|
+
- Template rendering with Go text/template
|
|
56
|
+
- Encrypted secrets with age
|
|
57
|
+
- State tracking (what's applied vs source)
|
|
58
|
+
- Cross-platform path handling
|
|
59
|
+
|
|
60
|
+
**2. dot CLI handles UX:**
|
|
61
|
+
|
|
62
|
+
- Memorable command names (`dot sync` vs `chezmoi apply`)
|
|
63
|
+
- Domain-specific commands (`dot doctor`, `dot theme`)
|
|
64
|
+
- Integration with external tools (Nix, Docker, Neovim)
|
|
65
|
+
- Consistent help and error messages
|
|
66
|
+
|
|
67
|
+
**3. Modular command structure:**
|
|
68
|
+
|
|
69
|
+
```text
|
|
70
|
+
scripts/dot/
|
|
71
|
+
├── lib/
|
|
72
|
+
│ └── utils.sh # Shared functions
|
|
73
|
+
└── commands/
|
|
74
|
+
├── core.sh # apply, sync, update, add, diff
|
|
75
|
+
├── diagnostics.sh # doctor, heal, health, benchmark
|
|
76
|
+
├── tools.sh # tools, new, packages
|
|
77
|
+
├── appearance.sh # theme, wallpaper, fonts
|
|
78
|
+
├── secrets.sh # secrets-init, secrets
|
|
79
|
+
├── security.sh # firewall, backup, encrypt-check
|
|
80
|
+
└── meta.sh # upgrade, docs, learn
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**4. Delegation pattern:**
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Main dispatcher in dot CLI
|
|
87
|
+
dispatch() {
|
|
88
|
+
local module="$1" cmd="$2"
|
|
89
|
+
shift 2
|
|
90
|
+
exec bash "$src_dir/scripts/dot/commands/$module.sh" "$cmd" "$@"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Chezmoi Integration Points
|
|
95
|
+
|
|
96
|
+
| Feature | Chezmoi | dot CLI |
|
|
97
|
+
|---------|---------|---------|
|
|
98
|
+
| Apply changes | `chezmoi apply` | `dot sync` |
|
|
99
|
+
| View diff | `chezmoi diff` | `dot diff` |
|
|
100
|
+
| Edit secrets | `chezmoi edit --encrypted` | `dot secrets` |
|
|
101
|
+
| Source directory | `chezmoi source-path` | `dot cd` |
|
|
102
|
+
| Health check | `chezmoi doctor` | `dot doctor` (extended) |
|
|
103
|
+
|
|
104
|
+
### Extension Points
|
|
105
|
+
|
|
106
|
+
Custom commands can:
|
|
107
|
+
|
|
108
|
+
1. Wrap chezmoi commands with better defaults
|
|
109
|
+
2. Add entirely new functionality (benchmarks, themes)
|
|
110
|
+
3. Integrate with system tools (nix, docker, brew)
|
|
111
|
+
4. Provide interactive experiences (tour, learn)
|
|
112
|
+
|
|
113
|
+
## Consequences
|
|
114
|
+
|
|
115
|
+
### Positive
|
|
116
|
+
|
|
117
|
+
- Leverage Chezmoi's battle-tested engine
|
|
118
|
+
- User-friendly interface for common tasks
|
|
119
|
+
- Easy to add domain-specific commands
|
|
120
|
+
- Modular structure enables testing and maintenance
|
|
121
|
+
- Single entry point (`dot`) for all operations
|
|
122
|
+
|
|
123
|
+
### Negative
|
|
124
|
+
|
|
125
|
+
- Two layers to understand (chezmoi + dot)
|
|
126
|
+
- Version coupling between chezmoi and scripts
|
|
127
|
+
- Some chezmoi features not exposed via dot
|
|
128
|
+
|
|
129
|
+
### Neutral
|
|
130
|
+
|
|
131
|
+
- Advanced users can still use chezmoi directly
|
|
132
|
+
- Documentation needed for both layers
|
|
133
|
+
- Upgrade path when chezmoi adds new features
|
|
134
|
+
|
|
135
|
+
## Implementation Notes
|
|
136
|
+
|
|
137
|
+
### Adding a New Command
|
|
138
|
+
|
|
139
|
+
1. Identify the appropriate module (or create new one)
|
|
140
|
+
2. Add function `cmd_<name>()` to module
|
|
141
|
+
3. Add case to module's dispatch
|
|
142
|
+
4. Add case to main dot CLI dispatcher
|
|
143
|
+
5. Update help text
|
|
144
|
+
6. Add tests if complex
|
|
145
|
+
|
|
146
|
+
### Module Template
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
#!/usr/bin/env bash
|
|
150
|
+
# Dotfiles CLI - <Category> Commands
|
|
151
|
+
|
|
152
|
+
set -e
|
|
153
|
+
|
|
154
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
155
|
+
source "$SCRIPT_DIR/../lib/utils.sh"
|
|
156
|
+
|
|
157
|
+
cmd_example() {
|
|
158
|
+
# Implementation
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
case "${1:-}" in
|
|
162
|
+
example) shift; cmd_example "$@" ;;
|
|
163
|
+
*) echo "Unknown command: ${1:-}" >&2; exit 1 ;;
|
|
164
|
+
esac
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
## References
|
|
168
|
+
|
|
169
|
+
- [Chezmoi Documentation](https://www.chezmoi.io/)
|
|
170
|
+
- [Command Pattern](https://refactoring.guru/design-patterns/command)
|
|
171
|
+
- [Unix Philosophy](https://en.wikipedia.org/wiki/Unix_philosophy)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
{% raw %}
|
|
5
|
+
|
|
6
|
+
# ADR-005: Chezmoi as Dotfiles Manager
|
|
7
|
+
|
|
8
|
+
**Status**: Accepted
|
|
9
|
+
**Date**: 2026-02-09
|
|
10
|
+
**Authors**: @sebastienrousseau
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
Managing dotfiles across multiple machines requires:
|
|
15
|
+
|
|
16
|
+
- Version control for configuration files
|
|
17
|
+
- Template support for machine-specific values
|
|
18
|
+
- Cross-platform compatibility (macOS, Linux, WSL)
|
|
19
|
+
- Encrypted secrets management
|
|
20
|
+
- Easy installation and updates
|
|
21
|
+
|
|
22
|
+
Several approaches were considered for dotfiles management.
|
|
23
|
+
|
|
24
|
+
## Decision
|
|
25
|
+
|
|
26
|
+
Use **chezmoi** as the primary dotfiles management tool.
|
|
27
|
+
|
|
28
|
+
### Alternatives Considered
|
|
29
|
+
|
|
30
|
+
| Tool | Pros | Cons |
|
|
31
|
+
|------|------|------|
|
|
32
|
+
| **GNU Stow** | Simple, no dependencies | No templating, symlink-only |
|
|
33
|
+
| **yadm** | Git-based, encryption | Limited templating |
|
|
34
|
+
| **Bare Git** | Simple, no tools | No templating, manual management |
|
|
35
|
+
| **Ansible** | Powerful, idempotent | Heavy, complex for dotfiles |
|
|
36
|
+
| **Nix Home Manager** | Declarative, reproducible | Steep learning curve, Nix dependency |
|
|
37
|
+
|
|
38
|
+
### Why Chezmoi
|
|
39
|
+
|
|
40
|
+
1. **Template Support**: Go text/template for machine-specific configuration
|
|
41
|
+
2. **Encryption**: Built-in age/gpg encryption for secrets
|
|
42
|
+
3. **Cross-Platform**: Native support for macOS, Linux, Windows
|
|
43
|
+
4. **Single Binary**: No runtime dependencies
|
|
44
|
+
5. **Git Integration**: Works with any Git host
|
|
45
|
+
6. **Dry-Run**: Preview changes before applying
|
|
46
|
+
7. **Active Development**: Well-maintained with responsive maintainer
|
|
47
|
+
|
|
48
|
+
## Implementation
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Installation
|
|
52
|
+
sh -c "$(curl -fsLS get.chezmoi.io)"
|
|
53
|
+
|
|
54
|
+
# Initialize from repository
|
|
55
|
+
chezmoi init https://github.com/user/dotfiles.git
|
|
56
|
+
|
|
57
|
+
# Apply configuration
|
|
58
|
+
chezmoi apply
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Template Example
|
|
62
|
+
|
|
63
|
+
```go
|
|
64
|
+
{{- if eq .chezmoi.os "darwin" }}
|
|
65
|
+
# macOS-specific configuration
|
|
66
|
+
{{- else if eq .chezmoi.os "linux" }}
|
|
67
|
+
# Linux-specific configuration
|
|
68
|
+
{{- end }}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Consequences
|
|
72
|
+
|
|
73
|
+
### Positive
|
|
74
|
+
|
|
75
|
+
- Consistent configuration across all machines
|
|
76
|
+
- Secure secrets management with age encryption
|
|
77
|
+
- Easy to add new machines to the fleet
|
|
78
|
+
- Template-driven configuration reduces duplication
|
|
79
|
+
- Built-in diff and dry-run for safe updates
|
|
80
|
+
|
|
81
|
+
### Negative
|
|
82
|
+
|
|
83
|
+
- Learning curve for Go templates
|
|
84
|
+
- Additional abstraction layer over raw Git
|
|
85
|
+
- Requires chezmoi binary installation
|
|
86
|
+
- Some features (scripts) require careful ordering
|
|
87
|
+
|
|
88
|
+
### Neutral
|
|
89
|
+
|
|
90
|
+
- Configuration stored in `~/.local/share/chezmoi` by default
|
|
91
|
+
- Custom wrapper CLI (`dot`) provides simpler interface
|
|
92
|
+
- Regular `git` commands still work in source directory
|
|
93
|
+
|
|
94
|
+
## References
|
|
95
|
+
|
|
96
|
+
- [Chezmoi Documentation](https://www.chezmoi.io/)
|
|
97
|
+
- [Chezmoi Quick Start](https://www.chezmoi.io/quick-start/)
|
|
98
|
+
- [Comparison with Other Tools](https://www.chezmoi.io/comparison-table/)
|
|
99
|
+
{% endraw %}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-006: Zsh as Default Shell
|
|
6
|
+
|
|
7
|
+
**Status**: Accepted
|
|
8
|
+
**Date**: 2026-02-09
|
|
9
|
+
**Authors**: @sebastienrousseau
|
|
10
|
+
|
|
11
|
+
## Context
|
|
12
|
+
|
|
13
|
+
Choosing a default shell impacts:
|
|
14
|
+
|
|
15
|
+
- Developer productivity and workflow
|
|
16
|
+
- Plugin ecosystem and extensibility
|
|
17
|
+
- Cross-platform compatibility
|
|
18
|
+
- Startup performance
|
|
19
|
+
- Learning curve for new users
|
|
20
|
+
|
|
21
|
+
## Decision
|
|
22
|
+
|
|
23
|
+
Use **Zsh** as the default interactive shell with **Zinit** as the plugin manager.
|
|
24
|
+
|
|
25
|
+
### Alternatives Considered
|
|
26
|
+
|
|
27
|
+
| Shell | Pros | Cons |
|
|
28
|
+
|-------|------|------|
|
|
29
|
+
| **Bash** | Universal, stable, POSIX | Limited interactive features |
|
|
30
|
+
| **Zsh** | Rich features, great plugins | Slower than bash (mitigated) |
|
|
31
|
+
| **Fish** | Modern, user-friendly | Not POSIX, less portable |
|
|
32
|
+
| **Nushell** | Structured data, modern | Breaking changes, immature |
|
|
33
|
+
|
|
34
|
+
### Why Zsh
|
|
35
|
+
|
|
36
|
+
1. **Default on macOS**: Pre-installed since Catalina
|
|
37
|
+
2. **Plugin Ecosystem**: Massive library of plugins and themes
|
|
38
|
+
3. **Compatibility**: POSIX-compatible, smooth migration from bash
|
|
39
|
+
4. **Completion System**: Superior tab completion
|
|
40
|
+
5. **Customization**: Highly configurable prompt and behavior
|
|
41
|
+
6. **Community**: Large community, well-documented
|
|
42
|
+
|
|
43
|
+
### Why Zinit
|
|
44
|
+
|
|
45
|
+
| Plugin Manager | Load Time | Features |
|
|
46
|
+
|----------------|-----------|----------|
|
|
47
|
+
| Oh-My-Zsh | ~800ms | Monolithic, many plugins |
|
|
48
|
+
| Prezto | ~400ms | Faster, modular |
|
|
49
|
+
| **Zinit** | ~200ms | Turbo mode, fine control |
|
|
50
|
+
| Antibody | ~300ms | Simple, fast |
|
|
51
|
+
|
|
52
|
+
Zinit provides:
|
|
53
|
+
|
|
54
|
+
- **Turbo Mode**: Deferred loading after prompt
|
|
55
|
+
- **Ice Modifiers**: Fine-grained control over plugin loading
|
|
56
|
+
- **Binary Installation**: Install completions and binaries
|
|
57
|
+
- **Profiling**: Built-in load time profiling
|
|
58
|
+
|
|
59
|
+
## Implementation
|
|
60
|
+
|
|
61
|
+
### Shell Layer System
|
|
62
|
+
|
|
63
|
+
```text
|
|
64
|
+
dot_config/zsh/rc.d/
|
|
65
|
+
├── 00-10: Core (env, history, options)
|
|
66
|
+
├── 20-49: Middleware (zinit, completions)
|
|
67
|
+
├── 50-89: Toolchain (languages, tools)
|
|
68
|
+
└── 90-99: UX (prompt, aliases, keybindings)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Zinit Configuration
|
|
72
|
+
|
|
73
|
+
```zsh
|
|
74
|
+
# Turbo mode: load after prompt displays
|
|
75
|
+
zinit ice wait lucid
|
|
76
|
+
zinit light zsh-users/zsh-autosuggestions
|
|
77
|
+
|
|
78
|
+
# Synchronous: needed immediately
|
|
79
|
+
zinit light zdharma-continuum/fast-syntax-highlighting
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Performance Targets
|
|
83
|
+
|
|
84
|
+
| Metric | Target | Achieved |
|
|
85
|
+
|--------|--------|----------|
|
|
86
|
+
| Cold Start | <500ms | ~300ms |
|
|
87
|
+
| Warm Start | <200ms | ~150ms |
|
|
88
|
+
| Plugin Load | Async | Yes |
|
|
89
|
+
|
|
90
|
+
## Consequences
|
|
91
|
+
|
|
92
|
+
### Positive
|
|
93
|
+
|
|
94
|
+
- Fast, responsive shell experience
|
|
95
|
+
- Rich plugin ecosystem (autosuggestions, syntax highlighting)
|
|
96
|
+
- Powerful completion system
|
|
97
|
+
- Compatible with existing bash scripts
|
|
98
|
+
- Modern prompt with Starship
|
|
99
|
+
|
|
100
|
+
### Negative
|
|
101
|
+
|
|
102
|
+
- Requires zsh installation on some Linux distros
|
|
103
|
+
- Plugin manager adds complexity
|
|
104
|
+
- Some bash-isms need adjustment
|
|
105
|
+
- Turbo mode can cause brief visual delay
|
|
106
|
+
|
|
107
|
+
### Neutral
|
|
108
|
+
|
|
109
|
+
- Users can still use bash for scripts
|
|
110
|
+
- Configuration more complex than vanilla shell
|
|
111
|
+
- Performance monitoring needed
|
|
112
|
+
|
|
113
|
+
## Performance Optimizations
|
|
114
|
+
|
|
115
|
+
1. **Caching**: Compile zsh files to `.zwc` bytecode
|
|
116
|
+
2. **Lazy Loading**: Defer heavy tools (nvm, rvm) until first use
|
|
117
|
+
3. **Turbo Mode**: Load plugins after prompt displays
|
|
118
|
+
4. **Conditional Loading**: Skip unused features
|
|
119
|
+
|
|
120
|
+
## References
|
|
121
|
+
|
|
122
|
+
- [Zsh Documentation](https://zsh.sourceforge.io/Doc/)
|
|
123
|
+
- [Zinit Wiki](https://zdharma-continuum.github.io/zinit/wiki/)
|
|
124
|
+
- [Starship Prompt](https://starship.rs/)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-007: Multi-Shell Parity Strategy
|
|
6
|
+
|
|
7
|
+
## Status
|
|
8
|
+
|
|
9
|
+
Accepted
|
|
10
|
+
|
|
11
|
+
## Date
|
|
12
|
+
|
|
13
|
+
2026-03-08
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
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.
|
|
18
|
+
|
|
19
|
+
**Problem:** Fish had zero access to the alias/function library until v0.2.501 added bridge templates. Nushell had only 6 hardcoded aliases and no function access.
|
|
20
|
+
|
|
21
|
+
**Constraints:**
|
|
22
|
+
|
|
23
|
+
- Nushell's `source` is parse-time evaluated (no dynamic sourcing)
|
|
24
|
+
- Fish syntax differs significantly from POSIX (no `$()`, different `if`, no `[[`)
|
|
25
|
+
- Maintaining N copies of every alias/function is unsustainable
|
|
26
|
+
|
|
27
|
+
## Decision
|
|
28
|
+
|
|
29
|
+
Adopt a **hub-and-spoke bridge architecture**:
|
|
30
|
+
|
|
31
|
+
1. **Hub:** Canonical definitions live in `.chezmoitemplates/aliases/` (Bash/POSIX) and `.chezmoitemplates/functions/` (Bash)
|
|
32
|
+
2. **Bash/Zsh spoke:** Direct inclusion via `90-ux-aliases.sh.tmpl` and `50-logic-functions.sh.tmpl`
|
|
33
|
+
3. **Fish spoke:** Runtime bash bridge with caching (`aliases.fish.tmpl`, `functions.fish.tmpl`)
|
|
34
|
+
4. **Nushell spoke:** Hybrid approach:
|
|
35
|
+
- Aliases: Runtime bash extraction cached to `~/.cache/nushell/bash-aliases.nu` (in `env.nu.tmpl`), sourced by `aliases.nu.tmpl`
|
|
36
|
+
- Functions: Chezmoi template-generated `def` wrappers delegating to bash (in `functions.nu.tmpl`)
|
|
37
|
+
|
|
38
|
+
**Parity tiers:**
|
|
39
|
+
|
|
40
|
+
- **Tier 1 (Full):** Zsh, Bash — all aliases, functions, lazy loading, cached eval
|
|
41
|
+
- **Tier 2 (Bridged):** Fish — all simple aliases, all functions via wrappers, `_cached_eval` caching
|
|
42
|
+
- **Tier 3 (Compatible):** Nushell — simple aliases (no complex bash syntax), all functions via bash delegation
|
|
43
|
+
|
|
44
|
+
## Consequences
|
|
45
|
+
|
|
46
|
+
### Positive
|
|
47
|
+
|
|
48
|
+
- Single source of truth for aliases and functions
|
|
49
|
+
- Adding a new alias/function automatically propagates to all shells
|
|
50
|
+
- Nushell users get access to 40+ functions that were previously unavailable
|
|
51
|
+
- Fish users get mtime-aware caching via `_cached_eval`
|
|
52
|
+
|
|
53
|
+
### Negative
|
|
54
|
+
|
|
55
|
+
- Complex bash aliases (pipes, conditionals) are skipped for Nushell
|
|
56
|
+
- Function calls in Fish/Nushell incur bash subprocess overhead (~5ms per call)
|
|
57
|
+
- Cache invalidation requires shell restart or manual cache clear
|
|
58
|
+
|
|
59
|
+
### Risks
|
|
60
|
+
|
|
61
|
+
- Nushell's rapid development may break bridge syntax in future versions
|
|
62
|
+
- Very large alias sets may slow Nushell startup during cache generation
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-008: Alias System Architecture
|
|
6
|
+
|
|
7
|
+
## Status
|
|
8
|
+
|
|
9
|
+
Accepted
|
|
10
|
+
|
|
11
|
+
## Date
|
|
12
|
+
|
|
13
|
+
2026-03-08
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
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.
|
|
18
|
+
|
|
19
|
+
**Design questions:**
|
|
20
|
+
|
|
21
|
+
1. How to organize alias files for maintainability?
|
|
22
|
+
2. How to control which aliases load on which machines?
|
|
23
|
+
3. How to balance startup speed with alias availability?
|
|
24
|
+
4. How to bridge POSIX aliases to non-POSIX shells?
|
|
25
|
+
|
|
26
|
+
## Decision
|
|
27
|
+
|
|
28
|
+
### Organization
|
|
29
|
+
|
|
30
|
+
Aliases are organized by tool/domain in `.chezmoitemplates/aliases/<category>/<name>.aliases.sh`:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
aliases/
|
|
34
|
+
git/git.aliases.sh, signing.aliases.sh
|
|
35
|
+
docker/docker.aliases.sh
|
|
36
|
+
kubernetes/kubernetes.aliases.sh
|
|
37
|
+
security/crypto-utils.aliases.sh, ssh-keys.aliases.sh, ...
|
|
38
|
+
default/default.aliases.sh
|
|
39
|
+
...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Profile Tiers
|
|
43
|
+
|
|
44
|
+
Three profiles control alias scope (set in `.chezmoidata.toml`):
|
|
45
|
+
|
|
46
|
+
| Profile | Scope | Use Case |
|
|
47
|
+
|---------|-------|----------|
|
|
48
|
+
| `minimal` | Core only, excludes interactive/sudo | Servers, containers |
|
|
49
|
+
| `standard` | All core + selected ecosystem | Laptops, workstations |
|
|
50
|
+
| `full` | Everything including heavy/specialized | Dev machines |
|
|
51
|
+
|
|
52
|
+
### Bucket Toggles
|
|
53
|
+
|
|
54
|
+
Per-category flags in `.chezmoidata.toml` under `[aliases.buckets]`:
|
|
55
|
+
|
|
56
|
+
```toml
|
|
57
|
+
[aliases.buckets]
|
|
58
|
+
system = true
|
|
59
|
+
svn = false # disable on machines without SVN
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Two-Phase Loading
|
|
63
|
+
|
|
64
|
+
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.
|
|
65
|
+
|
|
66
|
+
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.
|
|
67
|
+
|
|
68
|
+
### Function Groups (groups.json)
|
|
69
|
+
|
|
70
|
+
Functions use a parallel system with `groups.json` as a registry:
|
|
71
|
+
|
|
72
|
+
- Groups: api, curl, text, system, files, interactive, nav, security, misc
|
|
73
|
+
- Lazy-loaded per group on first invocation
|
|
74
|
+
- Stub functions replaced with real implementations on first call
|
|
75
|
+
|
|
76
|
+
## Consequences
|
|
77
|
+
|
|
78
|
+
### Positive
|
|
79
|
+
|
|
80
|
+
- Adding aliases is self-service: create a file in the right category
|
|
81
|
+
- Per-machine customization without forking
|
|
82
|
+
- Lazy loading keeps startup under 200ms even with 98 alias files
|
|
83
|
+
- `groups.json` enables automated bridge generation for Fish/Nushell
|
|
84
|
+
|
|
85
|
+
### Negative
|
|
86
|
+
|
|
87
|
+
- Alias definitions wrap in functions (`set_default_aliases()`) for sourcing safety, adding complexity
|
|
88
|
+
- Two-phase loading means some aliases aren't available until after first prompt
|
|
89
|
+
- Profile/bucket system requires understanding .chezmoidata.toml
|
|
90
|
+
|
|
91
|
+
### Trade-offs
|
|
92
|
+
|
|
93
|
+
- Chose file-per-category over monolithic alias file for maintainability
|
|
94
|
+
- Chose runtime extraction for Fish/Nushell over maintaining parallel definitions
|
|
95
|
+
- Chose lazy loading over compile-time bundling for flexibility
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
render_with_liquid: false
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# ADR-009: Wallpaper-Driven Theming Engine
|
|
6
|
+
|
|
7
|
+
## Status
|
|
8
|
+
|
|
9
|
+
Accepted
|
|
10
|
+
|
|
11
|
+
## Date
|
|
12
|
+
|
|
13
|
+
2026-05-12
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
Most dotfiles distributions ship a small fixed palette (Solarized, Gruvbox,
|
|
18
|
+
Tokyo Night) chosen once and recycled across every terminal, editor, and
|
|
19
|
+
status bar. When the user changes wallpapers — a daily occurrence on macOS
|
|
20
|
+
with HEIC dark/light variants and on Linux with `swww`/`hyprpaper` —
|
|
21
|
+
terminal chrome stays static, creating visual incoherence between the
|
|
22
|
+
chosen wallpaper and the surrounding tooling.
|
|
23
|
+
|
|
24
|
+
Manual palette switching solves coherence but adds friction: it requires
|
|
25
|
+
the user to (a) generate a palette, (b) regenerate config for every tool
|
|
26
|
+
(`alacritty.toml`, `kitty.conf`, `wezterm.lua`, neovim themes, …), and
|
|
27
|
+
(c) reload each tool. Tools like pywal/wal automate (a) and (b), but
|
|
28
|
+
pywal palettes routinely fail WCAG contrast thresholds (especially for
|
|
29
|
+
bright wallpapers) and lack support for many of the format files this
|
|
30
|
+
project ships.
|
|
31
|
+
|
|
32
|
+
**Problem:** Reuse the user's chosen wallpaper as the single source of
|
|
33
|
+
truth for terminal + status-bar colors, with accessibility guaranteed and
|
|
34
|
+
no manual regeneration step.
|
|
35
|
+
|
|
36
|
+
**Constraints:**
|
|
37
|
+
|
|
38
|
+
- Output must satisfy **WCAG 2.2 AAA contrast** (≥ 7:1 for normal text,
|
|
39
|
+
≥ 4.5:1 for large text) — non-negotiable, the dotfiles ship as
|
|
40
|
+
workstation infrastructure.
|
|
41
|
+
- Palette extraction must work offline on both macOS (HEIC, dynamic
|
|
42
|
+
wallpapers with embedded dark/light variants) and Linux (PNG/JPEG via
|
|
43
|
+
`swww`, `hyprpaper`, `feh`, GNOME).
|
|
44
|
+
- Total time from "user changes wallpaper" → "all terminals retinted"
|
|
45
|
+
must be ≤ 3 seconds (rebuild trigger + write of templated configs).
|
|
46
|
+
- Targets include Warp, iTerm2, Alacritty, Ghostty, Kitty, Wezterm,
|
|
47
|
+
Tmux, Neovim (multiple themes), VS Code, Firefox theme JSON, Niri
|
|
48
|
+
borders, Waybar, GTK/Qt (matugen pipeline).
|
|
49
|
+
|
|
50
|
+
## Decision
|
|
51
|
+
|
|
52
|
+
Build a self-contained theming engine — `dot theme rebuild` —
|
|
53
|
+
implemented in `scripts/theme/` with the following pipeline:
|
|
54
|
+
|
|
55
|
+
1. **Source detection** — locate the active wallpaper across macOS
|
|
56
|
+
(`defaults read … wallpaper`), GNOME/dconf, KDE, Niri, swww,
|
|
57
|
+
hyprpaper. HEIC dynamic wallpapers decompose into dark and light
|
|
58
|
+
variants; both feed the engine.
|
|
59
|
+
|
|
60
|
+
2. **Color extraction** — **K-Means clustering in CIELAB** (not RGB).
|
|
61
|
+
CIELAB is perceptually uniform, so distances correlate with the way
|
|
62
|
+
humans see color similarity. 8-cluster K-Means yields a 16-color
|
|
63
|
+
ANSI palette (8 normal + 8 bright) plus 4 accent slots.
|
|
64
|
+
|
|
65
|
+
3. **Contrast enforcement** — compute WCAG 2.2 contrast against the
|
|
66
|
+
chosen background; nudge each foreground hue along the lightness
|
|
67
|
+
axis until the ratio passes AAA. The nudge stays within the cluster
|
|
68
|
+
to preserve aesthetic intent. If AAA cannot be reached, fall back to
|
|
69
|
+
AA with a logged warning (never silently regress).
|
|
70
|
+
|
|
71
|
+
4. **Format generation** — emit one canonical TOML palette to
|
|
72
|
+
`.chezmoidata/themes.toml`, then run `chezmoi apply` so every
|
|
73
|
+
theme-aware template (terminals, editors, status bars, browsers)
|
|
74
|
+
regenerates from a single declarative source.
|
|
75
|
+
|
|
76
|
+
5. **Companion pipelines** — `dot-theme-sync` feeds the same accent
|
|
77
|
+
colors to **matugen** for Material You-style GTK/Qt theming on
|
|
78
|
+
Linux, keeping desktop chrome in lockstep with the terminal.
|
|
79
|
+
|
|
80
|
+
The whole flow is idempotent (`chezmoi apply` is no-op if nothing
|
|
81
|
+
changed), repeatable, and tested under `tests/unit/theme/`.
|
|
82
|
+
|
|
83
|
+
## Consequences
|
|
84
|
+
|
|
85
|
+
### Positive
|
|
86
|
+
|
|
87
|
+
- Single source of truth: change the wallpaper, every tool retints in
|
|
88
|
+
one keystroke.
|
|
89
|
+
- Accessibility is structural, not opt-in — every shipped palette
|
|
90
|
+
passes WCAG AAA before it touches a config file.
|
|
91
|
+
- No competing "premium" dotfiles distribution (mathiasbynens, holman,
|
|
92
|
+
paulirish, omakub) ships anything similar. The engine is a defining
|
|
93
|
+
differentiator and surfaced in the README hero.
|
|
94
|
+
- Reuses chezmoi's templating — no new templating layer to maintain.
|
|
95
|
+
|
|
96
|
+
### Negative
|
|
97
|
+
|
|
98
|
+
- K-Means on a 4K wallpaper takes ~500–800 ms; cached after first run,
|
|
99
|
+
but the cold path is non-trivial.
|
|
100
|
+
- HEIC handling on Linux requires `libheif` (extra dep on Debian/Ubuntu
|
|
101
|
+
before 24.04).
|
|
102
|
+
- Contrast enforcement can produce slightly different palettes from the
|
|
103
|
+
same wallpaper across major OS versions when system color profiles
|
|
104
|
+
differ (mitigated by snapshot tests).
|
|
105
|
+
|
|
106
|
+
### Risks
|
|
107
|
+
|
|
108
|
+
- Wallpapers with extreme dynamic range (pure-white backgrounds, deep
|
|
109
|
+
monochrome) may fail to produce an aesthetically pleasing 16-color
|
|
110
|
+
palette even when WCAG AAA is satisfied. Mitigation: maintainer
|
|
111
|
+
curation of a fallback theme set in `.chezmoidata/themes.toml`.
|
|
112
|
+
- Future Wayland compositors may not expose a stable wallpaper-detection
|
|
113
|
+
API. The engine isolates source detection in a single module so the
|
|
114
|
+
blast radius of compositor churn is one file.
|
|
115
|
+
|
|
116
|
+
## Alternatives Considered
|
|
117
|
+
|
|
118
|
+
| Alternative | Why rejected |
|
|
119
|
+
|---|---|
|
|
120
|
+
| pywal/wal | RGB K-Means, no WCAG enforcement, limited target list. |
|
|
121
|
+
| matugen alone | Excellent for GTK/Qt; not terminal-aware. We use it *in addition*, not instead. |
|
|
122
|
+
| Static curated themes (Tokyo Night et al.) | Loses the "wallpaper coherence" property that motivates the whole project. |
|
|
123
|
+
| Hand-roll per-terminal scripts | Doesn't compose with chezmoi; loses the single-source-of-truth invariant. |
|
|
124
|
+
|
|
125
|
+
## References
|
|
126
|
+
|
|
127
|
+
- WCAG 2.2 contrast: <https://www.w3.org/TR/WCAG22/#contrast-minimum>
|
|
128
|
+
- CIELAB color space: <https://en.wikipedia.org/wiki/CIELAB_color_space>
|
|
129
|
+
- `scripts/theme/` — engine source
|
|
130
|
+
- `.chezmoidata/themes.toml` — output palette schema
|
|
131
|
+
- Issue #873 — captures this ADR alongside `llms.txt`
|