@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,283 @@
|
|
|
1
|
+
#compdef dot
|
|
2
|
+
|
|
3
|
+
# Zsh completion for the dot CLI (dotfiles manager)
|
|
4
|
+
# Installed to: ~/.local/share/zsh/completions/_dot
|
|
5
|
+
|
|
6
|
+
_dot() {
|
|
7
|
+
local -a commands
|
|
8
|
+
|
|
9
|
+
commands=(
|
|
10
|
+
# Core
|
|
11
|
+
'apply:Apply dotfiles via chezmoi'
|
|
12
|
+
'sync:Apply dotfiles (alias of apply)'
|
|
13
|
+
'update:Pull latest changes and apply them'
|
|
14
|
+
'clean-cache:Clear shell initialization caches'
|
|
15
|
+
'prewarm:Regenerate shell caches for ultra-fast startup'
|
|
16
|
+
'cl:Claude CLI with context patterns'
|
|
17
|
+
'copilot:GitHub Copilot CLI with context patterns'
|
|
18
|
+
'gemini:Gemini CLI with context patterns'
|
|
19
|
+
'kiro:Kiro CLI with context patterns'
|
|
20
|
+
'sgpt:Shell-GPT with context patterns'
|
|
21
|
+
'ollama:Ollama with context patterns'
|
|
22
|
+
'opencode:OpenCode with context patterns'
|
|
23
|
+
'aider:Aider with context patterns'
|
|
24
|
+
'add:Add a file to chezmoi source'
|
|
25
|
+
'diff:Show chezmoi diff with exclusions'
|
|
26
|
+
'status:Show configuration drift'
|
|
27
|
+
'remove:Safely remove a managed file'
|
|
28
|
+
'cd:Print source directory path'
|
|
29
|
+
'edit:Open chezmoi source in \$EDITOR'
|
|
30
|
+
'commit:AI-powered conventional commit'
|
|
31
|
+
'patterns:Manage AI steering patterns'
|
|
32
|
+
|
|
33
|
+
# Diagnostics
|
|
34
|
+
'doctor:Check system health and configuration'
|
|
35
|
+
'heal:Auto-repair common dotfiles issues'
|
|
36
|
+
'health:Run comprehensive health check'
|
|
37
|
+
'smoke-test:Run automated toolchain verification'
|
|
38
|
+
'chaos:Simulate config corruption to test self-healing'
|
|
39
|
+
'scorecard:Unified health/security/performance scorecard'
|
|
40
|
+
'security-score:Analyze infrastructure security score'
|
|
41
|
+
'intelligence:Show Dotfiles Intelligence Surface'
|
|
42
|
+
'rollback:Rollback dotfiles to a previous state'
|
|
43
|
+
'drift:Drift dashboard (detailed chezmoi status)'
|
|
44
|
+
'history:Shell history analysis'
|
|
45
|
+
'benchmark:Run shell startup benchmark'
|
|
46
|
+
'perf:Show performance mode and timing'
|
|
47
|
+
'load:Preload heavy shell layers'
|
|
48
|
+
'load-bench:Measure time to heavy-layer readiness'
|
|
49
|
+
'load-bench-pty:Measure background prewarm via PTY'
|
|
50
|
+
'ai:Show AI helper status'
|
|
51
|
+
'ai-setup:Interactive setup for all AI CLI tools'
|
|
52
|
+
'ai-query:Context-aware RAG query over your dotfiles'
|
|
53
|
+
'conflicts:Report alias/command conflicts'
|
|
54
|
+
'locks:Show version locks for key tools'
|
|
55
|
+
'snapshot:Capture baseline system snapshot'
|
|
56
|
+
'verify:Run post-merge verification checks'
|
|
57
|
+
|
|
58
|
+
# Tools
|
|
59
|
+
'tools:Show or install nix packages'
|
|
60
|
+
'new:Create a new project from a template'
|
|
61
|
+
'sandbox:Launch a safe sandbox preview'
|
|
62
|
+
'keys:Show keybindings catalog'
|
|
63
|
+
'aliases:List/search/explain aliases and tiers'
|
|
64
|
+
'learn:Start the interactive tour'
|
|
65
|
+
'docs:Show repo README'
|
|
66
|
+
'log-rotate:Rotate dotfiles log'
|
|
67
|
+
'setup:Interactive setup (profile, features, secrets)'
|
|
68
|
+
|
|
69
|
+
# Appearance
|
|
70
|
+
'theme:Switch terminal theme'
|
|
71
|
+
'wallpaper:Apply a wallpaper'
|
|
72
|
+
'fonts:Install Nerd Fonts'
|
|
73
|
+
'tune:Apply OS tuning'
|
|
74
|
+
|
|
75
|
+
# Secrets
|
|
76
|
+
'secrets-init:Initialize age key for secrets'
|
|
77
|
+
'secrets:Manage secrets (edit|set|get|list|load|provider)'
|
|
78
|
+
'secrets-create:Create an encrypted secrets file'
|
|
79
|
+
'ssh-key:Encrypt an SSH key with age'
|
|
80
|
+
'ssh-cert:Manage short-lived SSH certificates'
|
|
81
|
+
'env:Load environment buckets from managed secrets'
|
|
82
|
+
|
|
83
|
+
# Security
|
|
84
|
+
'backup:Create a compressed backup of home'
|
|
85
|
+
'bundle:Create offline archive of dotfiles environment'
|
|
86
|
+
'encrypt-check:Check disk encryption status'
|
|
87
|
+
'firewall:Apply firewall hardening'
|
|
88
|
+
'telemetry:Disable OS telemetry'
|
|
89
|
+
'dns-doh:Enable DNS-over-HTTPS'
|
|
90
|
+
'lock-screen:Enforce lock screen idle settings'
|
|
91
|
+
'usb-safety:Disable automount for removable media'
|
|
92
|
+
|
|
93
|
+
# Meta
|
|
94
|
+
'upgrade:Update flake, plugins, and dotfiles'
|
|
95
|
+
'packages:List installed packages'
|
|
96
|
+
'version:Show version information'
|
|
97
|
+
'--version:Show version information'
|
|
98
|
+
'help:Show help message'
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
_arguments -C \
|
|
102
|
+
'1:command:->cmds' \
|
|
103
|
+
'*::arg:->args'
|
|
104
|
+
|
|
105
|
+
case "$state" in
|
|
106
|
+
cmds)
|
|
107
|
+
_describe -t commands 'dot command' commands
|
|
108
|
+
;;
|
|
109
|
+
args)
|
|
110
|
+
case "$words[1]" in
|
|
111
|
+
new)
|
|
112
|
+
if ((CURRENT == 2)); then
|
|
113
|
+
local -a templates=(python go node packer molecule)
|
|
114
|
+
_describe -t templates 'project template' templates
|
|
115
|
+
else
|
|
116
|
+
_files
|
|
117
|
+
fi
|
|
118
|
+
;;
|
|
119
|
+
add | remove)
|
|
120
|
+
_files
|
|
121
|
+
;;
|
|
122
|
+
keys)
|
|
123
|
+
_message 'search pattern (optional)'
|
|
124
|
+
;;
|
|
125
|
+
perf)
|
|
126
|
+
local -a perf_opts=(
|
|
127
|
+
'--json:Output as JSON'
|
|
128
|
+
'-j:Output as JSON'
|
|
129
|
+
'--profile:Include profile output'
|
|
130
|
+
'-p:Include profile output'
|
|
131
|
+
'--runs:Set the number of runs'
|
|
132
|
+
'-r:Set the number of runs'
|
|
133
|
+
'--target:Set the timing target in milliseconds'
|
|
134
|
+
'-t:Set the timing target in milliseconds'
|
|
135
|
+
)
|
|
136
|
+
_describe -t options 'perf option' perf_opts
|
|
137
|
+
;;
|
|
138
|
+
doctor)
|
|
139
|
+
local -a doctor_opts=(
|
|
140
|
+
'--heal:Auto-repair common issues'
|
|
141
|
+
'-H:Auto-repair common issues'
|
|
142
|
+
'--score:Show score output'
|
|
143
|
+
'-s:Show score output'
|
|
144
|
+
'--json:Emit JSON summary'
|
|
145
|
+
'-j:Emit JSON summary'
|
|
146
|
+
'--ai:Include AI diagnostics'
|
|
147
|
+
'-A:Include AI diagnostics'
|
|
148
|
+
)
|
|
149
|
+
_describe -t options 'doctor option' doctor_opts
|
|
150
|
+
;;
|
|
151
|
+
attest)
|
|
152
|
+
local -a attest_opts=(
|
|
153
|
+
'--json:Emit JSON output'
|
|
154
|
+
'-j:Emit JSON output'
|
|
155
|
+
'--write:Write attestation to a file'
|
|
156
|
+
'-w:Write attestation to a file'
|
|
157
|
+
)
|
|
158
|
+
_describe -t options 'attest option' attest_opts
|
|
159
|
+
;;
|
|
160
|
+
lint)
|
|
161
|
+
local -a lint_opts=(
|
|
162
|
+
'--check:Run check-only mode'
|
|
163
|
+
'-c:Run check-only mode'
|
|
164
|
+
'--fix:Apply safe fixes'
|
|
165
|
+
'-f:Apply safe fixes'
|
|
166
|
+
)
|
|
167
|
+
_describe -t options 'lint option' lint_opts
|
|
168
|
+
;;
|
|
169
|
+
mcp)
|
|
170
|
+
local -a mcp_opts=(
|
|
171
|
+
'registry:Show the MCP registry'
|
|
172
|
+
'--strict:Treat policy warnings as errors'
|
|
173
|
+
'-s:Treat policy warnings as errors'
|
|
174
|
+
'--json:Emit JSON summary'
|
|
175
|
+
'-j:Emit JSON summary'
|
|
176
|
+
)
|
|
177
|
+
_describe -t options 'mcp option' mcp_opts
|
|
178
|
+
;;
|
|
179
|
+
health)
|
|
180
|
+
local -a health_opts=(
|
|
181
|
+
'--verbose:Show detailed checks'
|
|
182
|
+
'-v:Show detailed checks'
|
|
183
|
+
'--json:Emit JSON summary'
|
|
184
|
+
'-j:Emit JSON summary'
|
|
185
|
+
'--fix:Apply common fixes'
|
|
186
|
+
'-f:Apply common fixes'
|
|
187
|
+
'--force:Apply fixes without prompts'
|
|
188
|
+
'-F:Apply fixes without prompts'
|
|
189
|
+
)
|
|
190
|
+
_describe -t options 'health option' health_opts
|
|
191
|
+
;;
|
|
192
|
+
security-score)
|
|
193
|
+
local -a security_opts=(
|
|
194
|
+
'--verbose:Show detailed scoring'
|
|
195
|
+
'-v:Show detailed scoring'
|
|
196
|
+
'--quiet:Reduce output noise'
|
|
197
|
+
'-q:Reduce output noise'
|
|
198
|
+
'--json:Emit JSON summary'
|
|
199
|
+
'-j:Emit JSON summary'
|
|
200
|
+
)
|
|
201
|
+
_describe -t options 'security-score option' security_opts
|
|
202
|
+
;;
|
|
203
|
+
snapshot)
|
|
204
|
+
local -a snapshot_opts=(
|
|
205
|
+
'--baseline:Capture the baseline snapshot'
|
|
206
|
+
'-b:Capture the baseline snapshot'
|
|
207
|
+
'--force:Overwrite an existing snapshot'
|
|
208
|
+
'-f:Overwrite an existing snapshot'
|
|
209
|
+
)
|
|
210
|
+
_describe -t options 'snapshot option' snapshot_opts
|
|
211
|
+
;;
|
|
212
|
+
verify)
|
|
213
|
+
local -a verify_opts=(
|
|
214
|
+
'--security:Run security verification'
|
|
215
|
+
'-s:Run security verification'
|
|
216
|
+
)
|
|
217
|
+
_describe -t options 'verify option' verify_opts
|
|
218
|
+
;;
|
|
219
|
+
restore)
|
|
220
|
+
local -a restore_opts=(
|
|
221
|
+
'--list:List available backups'
|
|
222
|
+
'-l:List available backups'
|
|
223
|
+
'--latest:Restore the latest backup'
|
|
224
|
+
'-L:Restore the latest backup'
|
|
225
|
+
'--git:Restore from a git ref'
|
|
226
|
+
'-g:Restore from a git ref'
|
|
227
|
+
'--diff:Show a diff for a git ref'
|
|
228
|
+
'-d:Show a diff for a git ref'
|
|
229
|
+
'--dry-run:Preview the restore'
|
|
230
|
+
'-n:Preview the restore'
|
|
231
|
+
)
|
|
232
|
+
_describe -t options 'restore option' restore_opts
|
|
233
|
+
;;
|
|
234
|
+
load)
|
|
235
|
+
local -a load_opts=('--background:Load in background' '--status:Show load status')
|
|
236
|
+
_describe -t options 'load option' load_opts
|
|
237
|
+
;;
|
|
238
|
+
tools)
|
|
239
|
+
local -a tool_cmds=('install:Enter Nix development shell')
|
|
240
|
+
_describe -t subcommands 'tools subcommand' tool_cmds
|
|
241
|
+
;;
|
|
242
|
+
theme)
|
|
243
|
+
local -a themes=(dark light)
|
|
244
|
+
_describe -t themes 'theme mode' themes
|
|
245
|
+
;;
|
|
246
|
+
ssh-cert)
|
|
247
|
+
local -a cert_cmds=(
|
|
248
|
+
'issue:Request a short-lived SSH certificate'
|
|
249
|
+
'status:Show current certificate status'
|
|
250
|
+
'revoke:Revoke an active certificate'
|
|
251
|
+
)
|
|
252
|
+
_describe -t subcommands 'ssh-cert subcommand' cert_cmds
|
|
253
|
+
;;
|
|
254
|
+
secrets)
|
|
255
|
+
local -a secrets_cmds=(
|
|
256
|
+
'edit:Edit encrypted secrets'
|
|
257
|
+
'set:Set a secret value'
|
|
258
|
+
'get:Get a secret value'
|
|
259
|
+
'list:List secret keys'
|
|
260
|
+
'load:Load secrets into environment'
|
|
261
|
+
'provider:Show/switch secrets provider'
|
|
262
|
+
)
|
|
263
|
+
_describe -t subcommands 'secrets subcommand' secrets_cmds
|
|
264
|
+
;;
|
|
265
|
+
cl | copilot | gemini | kiro | sgpt | ollama | opencode | aider)
|
|
266
|
+
_arguments -C \
|
|
267
|
+
'(--pattern -p)'{--pattern,-p}'[Specify steering pattern]:pattern:->patterns' \
|
|
268
|
+
'*:prompt: '
|
|
269
|
+
if [[ "$state" == "patterns" ]]; then
|
|
270
|
+
local -a patterns
|
|
271
|
+
patterns=($(ls -1 "${XDG_CONFIG_HOME:-$HOME/.config}/ai/patterns" 2>/dev/null | sed 's/\.md$//'))
|
|
272
|
+
_describe -t patterns 'AI pattern' patterns
|
|
273
|
+
fi
|
|
274
|
+
;;
|
|
275
|
+
*)
|
|
276
|
+
_default
|
|
277
|
+
;;
|
|
278
|
+
esac
|
|
279
|
+
;;
|
|
280
|
+
esac
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
_dot "$@"
|
package/install.sh
ADDED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# Universal Dotfiles Installer (Zero-Dependency)
|
|
4
|
+
# Usage: bash -c "$(curl -fsSL https://raw.githubusercontent.com/sebastienrousseau/dotfiles/master/install.sh)"
|
|
5
|
+
# (or ./install.sh locally)
|
|
6
|
+
|
|
7
|
+
set -euo pipefail
|
|
8
|
+
|
|
9
|
+
# ANSI Colors
|
|
10
|
+
RED='\033[0;31m'
|
|
11
|
+
GREEN='\033[0;32m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
CYAN='\033[0;36m'
|
|
14
|
+
BOLD='\033[1m'
|
|
15
|
+
NC='\033[0m'
|
|
16
|
+
|
|
17
|
+
# Paths
|
|
18
|
+
SOURCE_DIR="${SOURCE_DIR:-$HOME/.dotfiles}"
|
|
19
|
+
LEGACY_SOURCE_DIR="$HOME/.local/share/chezmoi"
|
|
20
|
+
CHEZMOI_CONFIG_DIR="$HOME/.config/chezmoi"
|
|
21
|
+
CHEZMOI_CONFIG_FILE="$CHEZMOI_CONFIG_DIR/chezmoi.toml"
|
|
22
|
+
|
|
23
|
+
# Utility Functions
|
|
24
|
+
step() {
|
|
25
|
+
if [[ "${DOTFILES_SILENT:-0}" != "1" ]]; then
|
|
26
|
+
printf '%b\n' "${BOLD}${BLUE}==>${NC} ${BOLD}$1${NC}"
|
|
27
|
+
fi
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
error() {
|
|
31
|
+
printf '%b\n' "${RED}Error:${NC} $1" >&2
|
|
32
|
+
exit 1
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
success() {
|
|
36
|
+
if [[ "${DOTFILES_SILENT:-0}" != "1" ]]; then
|
|
37
|
+
printf '%b\n' "${GREEN}Success!${NC} $1"
|
|
38
|
+
fi
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
# Cross-platform sed in-place (BSD vs GNU)
|
|
42
|
+
sed_in_place() {
|
|
43
|
+
if sed --version >/dev/null 2>&1; then
|
|
44
|
+
sed -i "$@" # GNU
|
|
45
|
+
else
|
|
46
|
+
sed -i '' "$@" # BSD (macOS)
|
|
47
|
+
fi
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
show_help() {
|
|
51
|
+
cat <<EOF
|
|
52
|
+
Usage: install.sh [version] [options]
|
|
53
|
+
|
|
54
|
+
Arguments:
|
|
55
|
+
version The version (tag or branch) to install (default: v0.2.500)
|
|
56
|
+
|
|
57
|
+
Options:
|
|
58
|
+
--help Show this help message
|
|
59
|
+
--force Non-interactive mode (sets DOTFILES_NONINTERACTIVE=1)
|
|
60
|
+
--silent Quiet mode (sets DOTFILES_SILENT=1)
|
|
61
|
+
--minimal Minimal profile (disable nvim, tmux, zellij)
|
|
62
|
+
|
|
63
|
+
EOF
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
main() {
|
|
67
|
+
local version="v0.2.500"
|
|
68
|
+
local version_set=0
|
|
69
|
+
local minimal=0
|
|
70
|
+
local _cleanup_files=()
|
|
71
|
+
trap 'set +u; rm -f "${_cleanup_files[@]}" 2>/dev/null; set -u' EXIT
|
|
72
|
+
|
|
73
|
+
for arg in "$@"; do
|
|
74
|
+
case "$arg" in
|
|
75
|
+
--help)
|
|
76
|
+
show_help
|
|
77
|
+
exit 0
|
|
78
|
+
;;
|
|
79
|
+
--silent) export DOTFILES_SILENT=1 ;;
|
|
80
|
+
--force) export DOTFILES_NONINTERACTIVE=1 ;;
|
|
81
|
+
--minimal) minimal=1 ;;
|
|
82
|
+
--*)
|
|
83
|
+
error "Unknown option: $arg"
|
|
84
|
+
;;
|
|
85
|
+
*)
|
|
86
|
+
if [[ $version_set -eq 1 ]]; then
|
|
87
|
+
error "Multiple versions specified: $version and $arg"
|
|
88
|
+
fi
|
|
89
|
+
version="$arg"
|
|
90
|
+
version_set=1
|
|
91
|
+
;;
|
|
92
|
+
esac
|
|
93
|
+
done
|
|
94
|
+
|
|
95
|
+
# 2. Check Prerequisites & Bootstrap Package Managers
|
|
96
|
+
step "Checking Prerequisites..."
|
|
97
|
+
|
|
98
|
+
# Detect Operating System
|
|
99
|
+
OS="$(uname -s)"
|
|
100
|
+
case "$OS" in
|
|
101
|
+
Darwin) target_os="macos" ;;
|
|
102
|
+
Linux)
|
|
103
|
+
if grep -qi microsoft /proc/version 2>/dev/null; then
|
|
104
|
+
target_os="wsl2"
|
|
105
|
+
elif [ -f /etc/debian_version ]; then
|
|
106
|
+
target_os="debian"
|
|
107
|
+
elif [ -f /etc/fedora-release ]; then
|
|
108
|
+
target_os="fedora"
|
|
109
|
+
elif [ -f /etc/arch-release ]; then
|
|
110
|
+
target_os="arch"
|
|
111
|
+
else
|
|
112
|
+
target_os="linux"
|
|
113
|
+
fi
|
|
114
|
+
;;
|
|
115
|
+
*) target_os="unknown" ;;
|
|
116
|
+
esac
|
|
117
|
+
|
|
118
|
+
# Bootstrap gum for a better UI if available or install it
|
|
119
|
+
bootstrap_gum() {
|
|
120
|
+
if command -v gum >/dev/null 2>&1; then return 0; fi
|
|
121
|
+
if [[ "${DOTFILES_SILENT:-0}" == "1" ]]; then return 0; fi
|
|
122
|
+
|
|
123
|
+
echo " Bootstrapping UI components (gum)..."
|
|
124
|
+
if [[ "$OS" == "Darwin" ]] && command -v brew >/dev/null; then
|
|
125
|
+
brew install gum >/dev/null 2>&1
|
|
126
|
+
elif [[ "$target_os" == "debian" || "$target_os" == "wsl2" ]]; then
|
|
127
|
+
sudo mkdir -p /etc/apt/keyrings
|
|
128
|
+
curl -fsSL https://repo.charm.sh/apt/gpg.key |
|
|
129
|
+
sudo gpg --batch --yes --dearmor -o /etc/apt/keyrings/charm.gpg
|
|
130
|
+
# Verify Charm GPG key fingerprint
|
|
131
|
+
if ! gpg --no-default-keyring --keyring /etc/apt/keyrings/charm.gpg \
|
|
132
|
+
--list-keys --with-colons 2>/dev/null | grep -q "fid:"; then
|
|
133
|
+
echo "Warning: Could not verify Charm GPG key" >&2
|
|
134
|
+
fi
|
|
135
|
+
echo "deb [signed-by=/etc/apt/keyrings/charm.gpg] https://repo.charm.sh/apt/ * *" | sudo tee /etc/apt/sources.list.d/charm.list
|
|
136
|
+
sudo apt-get update && sudo apt-get install gum -y >/dev/null 2>&1
|
|
137
|
+
fi
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
# 3. Install Chezmoi (in parallel with other checks where possible)
|
|
141
|
+
install_chezmoi() {
|
|
142
|
+
if command -v chezmoi >/dev/null; then
|
|
143
|
+
echo " chezmoi already installed: $(chezmoi --version)"
|
|
144
|
+
return 0
|
|
145
|
+
fi
|
|
146
|
+
|
|
147
|
+
if command -v brew >/dev/null; then
|
|
148
|
+
echo " Installing chezmoi via Homebrew..."
|
|
149
|
+
brew install chezmoi >/dev/null 2>&1
|
|
150
|
+
else
|
|
151
|
+
bin_dir="$HOME/.local/bin"
|
|
152
|
+
mkdir -p "$bin_dir"
|
|
153
|
+
echo " Installing chezmoi via binary download..."
|
|
154
|
+
|
|
155
|
+
# Prefer verified installer with SHA256 checksum when available
|
|
156
|
+
local verified_installer
|
|
157
|
+
verified_installer="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/scripts/ci/install-chezmoi-verified.sh"
|
|
158
|
+
if [[ -x "$verified_installer" ]] || [[ -f "$verified_installer" ]]; then
|
|
159
|
+
echo " Using checksum-verified installer..."
|
|
160
|
+
if ! bash "$verified_installer" "${CHEZMOI_VERSION:-2.47.1}" "$bin_dir"; then
|
|
161
|
+
echo " Verified installer failed, falling back to get.chezmoi.io" >&2
|
|
162
|
+
else
|
|
163
|
+
return 0
|
|
164
|
+
fi
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
# Fallback: download installer with size/shebang validation
|
|
168
|
+
local installer
|
|
169
|
+
installer=$(umask 077 && mktemp)
|
|
170
|
+
if ! curl -fsSL -o "$installer" https://get.chezmoi.io; then
|
|
171
|
+
rm -f "$installer"
|
|
172
|
+
echo " Failed to download chezmoi installer" >&2
|
|
173
|
+
return 1
|
|
174
|
+
fi
|
|
175
|
+
# Validate: must be a shell script and not suspiciously large
|
|
176
|
+
if [[ "$(wc -c <"$installer")" -gt 102400 ]]; then
|
|
177
|
+
rm -f "$installer"
|
|
178
|
+
echo " Chezmoi installer suspiciously large. Aborting." >&2
|
|
179
|
+
return 1
|
|
180
|
+
fi
|
|
181
|
+
if ! head -1 "$installer" | grep -q '^#!/'; then
|
|
182
|
+
rm -f "$installer"
|
|
183
|
+
echo " Chezmoi installer doesn't look like a shell script. Aborting." >&2
|
|
184
|
+
return 1
|
|
185
|
+
fi
|
|
186
|
+
if ! BINDIR="$bin_dir" sh "$installer"; then
|
|
187
|
+
rm -f "$installer"
|
|
188
|
+
echo " chezmoi binary installer failed" >&2
|
|
189
|
+
return 1
|
|
190
|
+
fi
|
|
191
|
+
rm -f "$installer"
|
|
192
|
+
fi
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
# Parallel execution of bootstrapping components
|
|
196
|
+
local pid_gum pid_cm
|
|
197
|
+
(bootstrap_gum) &
|
|
198
|
+
pid_gum=$!
|
|
199
|
+
(install_chezmoi) &
|
|
200
|
+
pid_cm=$!
|
|
201
|
+
|
|
202
|
+
# Wait and check exit codes
|
|
203
|
+
wait "$pid_gum" || true # gum is optional
|
|
204
|
+
wait "$pid_cm" || error "chezmoi installation failed"
|
|
205
|
+
|
|
206
|
+
# Critical: Add to PATH for the rest of the script to see it
|
|
207
|
+
bin_dir="$HOME/.local/bin"
|
|
208
|
+
export PATH="$bin_dir:$PATH"
|
|
209
|
+
|
|
210
|
+
# 4. Prepare source directory
|
|
211
|
+
step "Preparing source directory..."
|
|
212
|
+
|
|
213
|
+
# VERSION pinning for supply-chain security
|
|
214
|
+
VERSION="$version"
|
|
215
|
+
|
|
216
|
+
ensure_chezmoi_source() {
|
|
217
|
+
local dir="$1"
|
|
218
|
+
mkdir -p "$CHEZMOI_CONFIG_DIR"
|
|
219
|
+
# Escape sed metacharacters in replacement string
|
|
220
|
+
local escaped_dir
|
|
221
|
+
escaped_dir=$(printf '%s\n' "$dir" | sed -e 's/[\/&]/\\&/g')
|
|
222
|
+
if [[ -f "$CHEZMOI_CONFIG_FILE" ]] && grep -q '^sourceDir' "$CHEZMOI_CONFIG_FILE"; then
|
|
223
|
+
sed_in_place "s,^sourceDir.*$,sourceDir = \"$escaped_dir\"," "$CHEZMOI_CONFIG_FILE"
|
|
224
|
+
else
|
|
225
|
+
printf 'sourceDir = "%s"\n' "$dir" >"$CHEZMOI_CONFIG_FILE"
|
|
226
|
+
fi
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
apply_minimal_profile_overrides() {
|
|
230
|
+
local data_file="$1"
|
|
231
|
+
[[ -f "$data_file" ]] || return 0
|
|
232
|
+
sed_in_place 's/^profile = ".*"/profile = "minimal"/' "$data_file"
|
|
233
|
+
sed_in_place 's/^nvim = true/nvim = false/' "$data_file"
|
|
234
|
+
sed_in_place 's/^tmux = true/tmux = false/' "$data_file"
|
|
235
|
+
sed_in_place 's/^zellij = true/zellij = false/' "$data_file"
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
# 5. Backup existing dotfiles that chezmoi will overwrite
|
|
239
|
+
step "Backing up existing dotfiles..."
|
|
240
|
+
BACKUP_DIR="$HOME/.dotfiles.bak.$(date +"%Y%m%d_%H%M%S")"
|
|
241
|
+
backup_count=0
|
|
242
|
+
|
|
243
|
+
# Determine the source directory for chezmoi to diff against
|
|
244
|
+
if [[ -d "$SOURCE_DIR/.git" ]]; then
|
|
245
|
+
ensure_chezmoi_source "$SOURCE_DIR"
|
|
246
|
+
elif [[ -d "$LEGACY_SOURCE_DIR/.git" ]]; then
|
|
247
|
+
ensure_chezmoi_source "$LEGACY_SOURCE_DIR"
|
|
248
|
+
fi
|
|
249
|
+
|
|
250
|
+
# Back up any existing files that chezmoi would overwrite
|
|
251
|
+
if command -v chezmoi >/dev/null && [[ -f "$CHEZMOI_CONFIG_FILE" ]]; then
|
|
252
|
+
while IFS= read -r file; do
|
|
253
|
+
[[ -z "$file" ]] && continue
|
|
254
|
+
if [[ -e "$file" ]]; then
|
|
255
|
+
rel="${file#"$HOME"/}"
|
|
256
|
+
mkdir -p "$BACKUP_DIR/$(dirname "$rel")"
|
|
257
|
+
cp -a "$file" "$BACKUP_DIR/$rel"
|
|
258
|
+
backup_count=$((backup_count + 1))
|
|
259
|
+
fi
|
|
260
|
+
done < <(chezmoi managed --path-style=absolute 2>/dev/null || true)
|
|
261
|
+
fi
|
|
262
|
+
|
|
263
|
+
if [[ "$backup_count" -gt 0 ]]; then
|
|
264
|
+
echo " Backed up $backup_count files to $BACKUP_DIR"
|
|
265
|
+
else
|
|
266
|
+
echo " No existing dotfiles to back up."
|
|
267
|
+
rm -rf "$BACKUP_DIR" 2>/dev/null || true
|
|
268
|
+
fi
|
|
269
|
+
|
|
270
|
+
# Detect devcontainer/Codespaces environment
|
|
271
|
+
if [[ -f /.dockerenv ]] || [[ -n "${CODESPACES:-}" ]] || [[ -n "${REMOTE_CONTAINERS:-}" ]]; then
|
|
272
|
+
DOTFILES_MINIMAL=1
|
|
273
|
+
step "Detected container environment — using minimal profile"
|
|
274
|
+
fi
|
|
275
|
+
|
|
276
|
+
# Apply --minimal overrides if requested
|
|
277
|
+
if [[ $minimal -eq 1 ]] || [[ "${DOTFILES_MINIMAL:-0}" = "1" ]]; then
|
|
278
|
+
step "Applying minimal profile overrides..."
|
|
279
|
+
apply_minimal_profile_overrides "$SOURCE_DIR/.chezmoidata.toml"
|
|
280
|
+
fi
|
|
281
|
+
|
|
282
|
+
# 6. Initialize & Apply
|
|
283
|
+
step "Applying Configuration..."
|
|
284
|
+
|
|
285
|
+
# If we are running from a local source, just apply
|
|
286
|
+
if [[ -d "$SOURCE_DIR/.git" ]]; then
|
|
287
|
+
echo " Applying from local source: $SOURCE_DIR"
|
|
288
|
+
ensure_chezmoi_source "$SOURCE_DIR"
|
|
289
|
+
APPLY_FLAGS=()
|
|
290
|
+
if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
|
|
291
|
+
APPLY_FLAGS=(--force --no-tty)
|
|
292
|
+
fi
|
|
293
|
+
chezmoi apply "${APPLY_FLAGS[@]}"
|
|
294
|
+
elif [[ -d "$LEGACY_SOURCE_DIR/.git" ]]; then
|
|
295
|
+
echo " Migrating from legacy source: $LEGACY_SOURCE_DIR"
|
|
296
|
+
mv "$LEGACY_SOURCE_DIR" "$SOURCE_DIR"
|
|
297
|
+
ensure_chezmoi_source "$SOURCE_DIR"
|
|
298
|
+
APPLY_FLAGS=()
|
|
299
|
+
if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
|
|
300
|
+
APPLY_FLAGS=(--force --no-tty)
|
|
301
|
+
fi
|
|
302
|
+
chezmoi apply "${APPLY_FLAGS[@]}"
|
|
303
|
+
else
|
|
304
|
+
echo " Initializing from GitHub (Branch/Tag: $VERSION)..."
|
|
305
|
+
printf '%b\n' "${CYAN} SECURITY NOTE: Cloning pinned version $VERSION for supply-chain safety${NC}"
|
|
306
|
+
|
|
307
|
+
# STRICT MODE: We pin to the specific tag to avoid 'main' branch drift
|
|
308
|
+
git clone --depth 1 --branch "$VERSION" https://github.com/sebastienrousseau/dotfiles.git "$SOURCE_DIR" 2>/dev/null ||
|
|
309
|
+
{ git clone https://github.com/sebastienrousseau/dotfiles.git "$SOURCE_DIR" && (cd "$SOURCE_DIR" && git checkout "$VERSION"); }
|
|
310
|
+
|
|
311
|
+
# Verify the checkout succeeded and we're on the expected version
|
|
312
|
+
ACTUAL_REF=$(
|
|
313
|
+
cd "$SOURCE_DIR" || exit 1
|
|
314
|
+
if ! git describe --tags --exact-match 2>/dev/null; then
|
|
315
|
+
git rev-parse --short HEAD
|
|
316
|
+
fi
|
|
317
|
+
)
|
|
318
|
+
if [[ "$ACTUAL_REF" != "$VERSION" ]] && [[ "${ACTUAL_REF#v}" != "${VERSION#v}" ]]; then
|
|
319
|
+
printf '%b\n' "${RED} WARNING: Checked out ref $ACTUAL_REF (requested: $VERSION) — version mismatch${NC}" >&2
|
|
320
|
+
fi
|
|
321
|
+
|
|
322
|
+
if [[ $minimal -eq 1 ]]; then
|
|
323
|
+
step "Applying minimal profile overrides..."
|
|
324
|
+
apply_minimal_profile_overrides "$SOURCE_DIR/.chezmoidata.toml"
|
|
325
|
+
fi
|
|
326
|
+
|
|
327
|
+
ensure_chezmoi_source "$SOURCE_DIR"
|
|
328
|
+
APPLY_FLAGS=()
|
|
329
|
+
if [[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ]]; then
|
|
330
|
+
APPLY_FLAGS=(--force --no-tty)
|
|
331
|
+
fi
|
|
332
|
+
chezmoi apply "${APPLY_FLAGS[@]}"
|
|
333
|
+
fi
|
|
334
|
+
|
|
335
|
+
success "Configuration loaded. Please restart your shell."
|
|
336
|
+
step "Run 'dot learn' for an interactive tour of your new dotfiles."
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
# Run main if executed directly (or via bash -c where BASH_SOURCE is unset)
|
|
340
|
+
if [[ "${BASH_SOURCE[0]:-}" == "${0:-}" ]] || [[ -z "${BASH_SOURCE[0]:-}" ]]; then
|
|
341
|
+
main "$@"
|
|
342
|
+
fi
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebastienrousseau/dotfiles",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.500",
|
|
4
4
|
"description": "The Trusted Shell Platform — Universal dotfiles managed by Chezmoi. Features Bash & Zsh for macOS, Linux & WSL. Rust modern tooling & enterprise-grade security.",
|
|
5
5
|
"main": "install.sh",
|
|
6
6
|
"bin": {
|