@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,372 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# Dotfiles CLI Utilities
|
|
4
|
+
# Shared functions for dot command modules
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
# shellcheck source=ui.sh
|
|
8
|
+
source "$SCRIPT_DIR/ui.sh"
|
|
9
|
+
# shellcheck source=platform.sh
|
|
10
|
+
source "$SCRIPT_DIR/platform.sh"
|
|
11
|
+
|
|
12
|
+
_DOT_SOURCE_DIR_CACHE=""
|
|
13
|
+
|
|
14
|
+
## resolve_source_dir — Locate the dotfiles source tree.
|
|
15
|
+
## Checks (in order): relative to this script, $CHEZMOI_SOURCE_DIR,
|
|
16
|
+
## ~/.dotfiles, ~/.local/share/chezmoi. Caches the result for the process.
|
|
17
|
+
## Prints the absolute path (or empty string if not found). Exit: always 0.
|
|
18
|
+
resolve_source_dir() {
|
|
19
|
+
if [[ -n "${_DOT_SOURCE_DIR_CACHE:-}" ]] && [[ -d "$_DOT_SOURCE_DIR_CACHE" ]]; then
|
|
20
|
+
printf "%s\n" "$_DOT_SOURCE_DIR_CACHE"
|
|
21
|
+
return
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
local dir=""
|
|
25
|
+
local repo_candidate=""
|
|
26
|
+
|
|
27
|
+
if repo_candidate="$(cd "$SCRIPT_DIR/../../.." && pwd 2>/dev/null)"; then
|
|
28
|
+
:
|
|
29
|
+
else
|
|
30
|
+
repo_candidate=""
|
|
31
|
+
fi
|
|
32
|
+
if [[ -n "$repo_candidate" && -f "$repo_candidate/scripts/dot/lib/ui.sh" ]]; then
|
|
33
|
+
dir="$repo_candidate"
|
|
34
|
+
elif [ -n "${CHEZMOI_SOURCE_DIR:-}" ] && [ -d "$CHEZMOI_SOURCE_DIR" ]; then
|
|
35
|
+
dir="$CHEZMOI_SOURCE_DIR"
|
|
36
|
+
elif [ -d "$HOME/.dotfiles" ]; then
|
|
37
|
+
dir="$HOME/.dotfiles"
|
|
38
|
+
elif [ -d "$HOME/.local/share/chezmoi" ]; then
|
|
39
|
+
dir="$HOME/.local/share/chezmoi"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
if [ -n "$dir" ]; then
|
|
43
|
+
# Resolve symlinks for consistent path handling
|
|
44
|
+
if command -v realpath >/dev/null 2>&1; then
|
|
45
|
+
dir="$(realpath "$dir")"
|
|
46
|
+
elif command -v readlink >/dev/null 2>&1; then
|
|
47
|
+
dir="$(readlink -f "$dir" 2>/dev/null || echo "$dir")"
|
|
48
|
+
fi
|
|
49
|
+
_DOT_SOURCE_DIR_CACHE="$dir"
|
|
50
|
+
printf "%s\n" "$dir"
|
|
51
|
+
else
|
|
52
|
+
printf "%s\n" ""
|
|
53
|
+
fi
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
## run_script — Resolve source dir, find a script, exec it (never returns).
|
|
57
|
+
## Usage: run_script <relative-script-path> <not-found-label> [args...]
|
|
58
|
+
## Exit: 1 if source dir or script not found; otherwise execs into the script.
|
|
59
|
+
run_script() {
|
|
60
|
+
local script_rel="$1"
|
|
61
|
+
local label="$2"
|
|
62
|
+
shift 2
|
|
63
|
+
local src_dir
|
|
64
|
+
src_dir="$(resolve_source_dir)"
|
|
65
|
+
if [ -z "$src_dir" ]; then
|
|
66
|
+
echo "Dotfiles source not found." >&2
|
|
67
|
+
exit 1
|
|
68
|
+
fi
|
|
69
|
+
if [ -f "$src_dir/$script_rel" ]; then
|
|
70
|
+
exec bash "$src_dir/$script_rel" "$@"
|
|
71
|
+
else
|
|
72
|
+
echo "$label not found." >&2
|
|
73
|
+
exit 1
|
|
74
|
+
fi
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
## require_source_dir — Print source dir path or exit 1 if not found.
|
|
78
|
+
require_source_dir() {
|
|
79
|
+
local src_dir
|
|
80
|
+
src_dir="$(resolve_source_dir)"
|
|
81
|
+
if [ -z "$src_dir" ]; then
|
|
82
|
+
echo "Dotfiles source not found." >&2
|
|
83
|
+
exit 1
|
|
84
|
+
fi
|
|
85
|
+
echo "$src_dir"
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
## has_command <name> — Return 0 if <name> is on PATH, 1 otherwise.
|
|
89
|
+
has_command() {
|
|
90
|
+
command -v "$1" >/dev/null 2>&1
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
## validate_name <name> [label] — Die if name contains unsafe characters.
|
|
94
|
+
## Allowed: [a-zA-Z0-9._-]. This prevents shell injection when names appear
|
|
95
|
+
## in paths or eval contexts. Exit: 0 if valid, calls die() if invalid.
|
|
96
|
+
validate_name() {
|
|
97
|
+
local name="$1" label="${2:-name}"
|
|
98
|
+
if [[ ! "$name" =~ ^[a-zA-Z0-9._-]+$ ]]; then
|
|
99
|
+
die "Invalid $label: $name (only alphanumeric, dash, underscore, dot allowed)"
|
|
100
|
+
fi
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
## validate_xdg_path <var_name> <path> — Warn and return 1 if path is not absolute.
|
|
104
|
+
validate_xdg_path() {
|
|
105
|
+
local var_name="$1" path="$2"
|
|
106
|
+
if [[ -n "$path" ]] && [[ "$path" != /* ]]; then
|
|
107
|
+
ui_warn "$var_name" "Not an absolute path: $path (ignoring, using default)"
|
|
108
|
+
return 1
|
|
109
|
+
fi
|
|
110
|
+
return 0
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
## die <message> [code] — Print error to stderr and exit (default code 1).
|
|
114
|
+
die() {
|
|
115
|
+
ui_err "$1" >&2
|
|
116
|
+
exit "${2:-1}"
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
# Print warning message
|
|
120
|
+
warn() {
|
|
121
|
+
ui_warn "$1" >&2
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
# Print info message
|
|
125
|
+
info() {
|
|
126
|
+
ui_info "$1"
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
# Print the dot logo once per process for interactive sessions.
|
|
130
|
+
ui_logo_once() {
|
|
131
|
+
local title="${1:-Dot}"
|
|
132
|
+
ui_init
|
|
133
|
+
if [[ "${DOTFILES_SHOW_LOGO:-1}" != "1" ]]; then
|
|
134
|
+
return
|
|
135
|
+
fi
|
|
136
|
+
if [[ ! -t 1 ]]; then
|
|
137
|
+
return
|
|
138
|
+
fi
|
|
139
|
+
if [[ "${DOTFILES_LOGO_PRINTED:-0}" = "1" ]]; then
|
|
140
|
+
return
|
|
141
|
+
fi
|
|
142
|
+
ui_product_banner "$title"
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
dotfiles_version() {
|
|
146
|
+
local src_dir version=""
|
|
147
|
+
src_dir="$(resolve_source_dir)"
|
|
148
|
+
|
|
149
|
+
if [[ -n "$src_dir" ]] && [[ -f "$src_dir/package.json" ]]; then
|
|
150
|
+
version="$(sed -n 's/^[[:space:]]*"version"[[:space:]]*:[[:space:]]*"\([0-9][0-9.]*\)".*/\1/p' "$src_dir/package.json" | head -1)"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
if [[ -z "$version" ]] && [[ -n "${DOTFILES_VERSION:-}" ]]; then
|
|
154
|
+
version="$DOTFILES_VERSION"
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
if [[ -z "$version" ]]; then
|
|
158
|
+
version="unknown"
|
|
159
|
+
fi
|
|
160
|
+
|
|
161
|
+
printf "%s\n" "$version"
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
dot_command_summary() {
|
|
165
|
+
case "${1:-}" in
|
|
166
|
+
apply | sync)
|
|
167
|
+
echo "Apply dotfiles changes (sync is an alias for apply)."
|
|
168
|
+
;;
|
|
169
|
+
update)
|
|
170
|
+
echo "Pull latest changes from remote, then apply."
|
|
171
|
+
;;
|
|
172
|
+
add)
|
|
173
|
+
echo "Add a file into chezmoi source management."
|
|
174
|
+
;;
|
|
175
|
+
diff)
|
|
176
|
+
echo "Show pending managed-file differences."
|
|
177
|
+
;;
|
|
178
|
+
status)
|
|
179
|
+
echo "Show current configuration drift status."
|
|
180
|
+
;;
|
|
181
|
+
remove)
|
|
182
|
+
echo "Safely remove a managed file from source."
|
|
183
|
+
;;
|
|
184
|
+
cd)
|
|
185
|
+
echo "Print the dotfiles source directory path."
|
|
186
|
+
;;
|
|
187
|
+
edit)
|
|
188
|
+
echo "Open dotfiles source in your editor."
|
|
189
|
+
;;
|
|
190
|
+
doctor)
|
|
191
|
+
echo "Deep audit: tools, paths, portability, AI analysis."
|
|
192
|
+
;;
|
|
193
|
+
heal)
|
|
194
|
+
echo "Auto-repair broken symlinks, missing tools, and drift."
|
|
195
|
+
;;
|
|
196
|
+
health | health-check)
|
|
197
|
+
echo "Dashboard with health score, checks, and auto-fix (--fix)."
|
|
198
|
+
;;
|
|
199
|
+
security-score)
|
|
200
|
+
echo "Calculate and print security posture score."
|
|
201
|
+
;;
|
|
202
|
+
scorecard)
|
|
203
|
+
echo "Show unified health, security, and performance scorecard."
|
|
204
|
+
;;
|
|
205
|
+
perf)
|
|
206
|
+
echo "Profile shell startup performance (3-run average)."
|
|
207
|
+
;;
|
|
208
|
+
conflicts)
|
|
209
|
+
echo "Report alias and command conflicts."
|
|
210
|
+
;;
|
|
211
|
+
locks)
|
|
212
|
+
echo "Show version locks for key tools."
|
|
213
|
+
;;
|
|
214
|
+
snapshot)
|
|
215
|
+
echo "Capture a baseline system snapshot."
|
|
216
|
+
;;
|
|
217
|
+
rollback)
|
|
218
|
+
echo "Rollback dotfiles state to a prior point."
|
|
219
|
+
;;
|
|
220
|
+
restore)
|
|
221
|
+
echo "Restore files from backup or git reference."
|
|
222
|
+
;;
|
|
223
|
+
drift)
|
|
224
|
+
echo "Display detailed drift information."
|
|
225
|
+
;;
|
|
226
|
+
history)
|
|
227
|
+
echo "Analyze shell command history."
|
|
228
|
+
;;
|
|
229
|
+
benchmark)
|
|
230
|
+
echo "Measure shell startup performance."
|
|
231
|
+
;;
|
|
232
|
+
verify)
|
|
233
|
+
echo "Run post-merge verification checks."
|
|
234
|
+
;;
|
|
235
|
+
tools)
|
|
236
|
+
echo "Browse or install toolchain components."
|
|
237
|
+
;;
|
|
238
|
+
aliases)
|
|
239
|
+
echo "List, search, and explain configured aliases."
|
|
240
|
+
;;
|
|
241
|
+
new)
|
|
242
|
+
echo "Create a new project from templates."
|
|
243
|
+
;;
|
|
244
|
+
packages)
|
|
245
|
+
echo "List package managers and package stats."
|
|
246
|
+
;;
|
|
247
|
+
log-rotate)
|
|
248
|
+
echo "Rotate dotfiles local log files."
|
|
249
|
+
;;
|
|
250
|
+
setup)
|
|
251
|
+
echo "Interactive setup for profiles, features, and secrets."
|
|
252
|
+
;;
|
|
253
|
+
theme)
|
|
254
|
+
echo "Switch terminal appearance theme."
|
|
255
|
+
;;
|
|
256
|
+
wallpaper)
|
|
257
|
+
echo "Apply or sync wallpapers."
|
|
258
|
+
;;
|
|
259
|
+
fonts)
|
|
260
|
+
echo "Install Nerd Fonts for terminal tooling."
|
|
261
|
+
;;
|
|
262
|
+
tune)
|
|
263
|
+
echo "Apply OS-level tuning defaults."
|
|
264
|
+
;;
|
|
265
|
+
secrets-init)
|
|
266
|
+
echo "Initialize age key for encrypted secrets."
|
|
267
|
+
;;
|
|
268
|
+
secrets)
|
|
269
|
+
echo "Manage secrets (set/get/list/load/provider)."
|
|
270
|
+
;;
|
|
271
|
+
env)
|
|
272
|
+
echo "Load secret buckets into shell exports."
|
|
273
|
+
;;
|
|
274
|
+
secrets-create)
|
|
275
|
+
echo "Create a new encrypted secrets file."
|
|
276
|
+
;;
|
|
277
|
+
ssh-key)
|
|
278
|
+
echo "Encrypt an SSH key using age."
|
|
279
|
+
;;
|
|
280
|
+
backup)
|
|
281
|
+
echo "Create a compressed backup."
|
|
282
|
+
;;
|
|
283
|
+
encrypt-check)
|
|
284
|
+
echo "Check disk encryption status."
|
|
285
|
+
;;
|
|
286
|
+
firewall)
|
|
287
|
+
echo "Apply firewall hardening settings."
|
|
288
|
+
;;
|
|
289
|
+
telemetry)
|
|
290
|
+
echo "Disable telemetry where supported."
|
|
291
|
+
;;
|
|
292
|
+
dns-doh)
|
|
293
|
+
echo "Enable DNS-over-HTTPS."
|
|
294
|
+
;;
|
|
295
|
+
lock-screen)
|
|
296
|
+
echo "Harden lock-screen idle policy."
|
|
297
|
+
;;
|
|
298
|
+
usb-safety)
|
|
299
|
+
echo "Disable risky removable-media automount."
|
|
300
|
+
;;
|
|
301
|
+
fleet)
|
|
302
|
+
echo "Show fleet node status, drift, and namespace."
|
|
303
|
+
;;
|
|
304
|
+
upgrade)
|
|
305
|
+
echo "Update system toolchains, plugins, and dotfiles."
|
|
306
|
+
;;
|
|
307
|
+
docs)
|
|
308
|
+
echo "Show dotfiles documentation."
|
|
309
|
+
;;
|
|
310
|
+
learn)
|
|
311
|
+
echo "Start the interactive onboarding tour."
|
|
312
|
+
;;
|
|
313
|
+
keys)
|
|
314
|
+
echo "Show keybindings catalog."
|
|
315
|
+
;;
|
|
316
|
+
sandbox)
|
|
317
|
+
echo "Start isolated sandbox environment."
|
|
318
|
+
;;
|
|
319
|
+
mcp)
|
|
320
|
+
echo "Run MCP configuration diagnostics."
|
|
321
|
+
;;
|
|
322
|
+
metrics)
|
|
323
|
+
echo "Show recent observability metrics from JSONL."
|
|
324
|
+
;;
|
|
325
|
+
cache-refresh | prewarm)
|
|
326
|
+
echo "Regenerate shell caches for ultra-fast startup."
|
|
327
|
+
;;
|
|
328
|
+
search)
|
|
329
|
+
echo "Find commands by keyword."
|
|
330
|
+
;;
|
|
331
|
+
help | --help | -h)
|
|
332
|
+
echo "Show command usage and reference."
|
|
333
|
+
;;
|
|
334
|
+
--version | -v | version)
|
|
335
|
+
echo "Show dotfiles and environment versions."
|
|
336
|
+
;;
|
|
337
|
+
*)
|
|
338
|
+
echo "Run a dotfiles command."
|
|
339
|
+
;;
|
|
340
|
+
esac
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
dot_ui_command_banner() {
|
|
344
|
+
local section="${1:-Dot}"
|
|
345
|
+
local cmd="${2:-}"
|
|
346
|
+
shift 2 || true
|
|
347
|
+
local version summary
|
|
348
|
+
|
|
349
|
+
for arg in "$@"; do
|
|
350
|
+
case "$arg" in
|
|
351
|
+
--json | -j)
|
|
352
|
+
return
|
|
353
|
+
;;
|
|
354
|
+
esac
|
|
355
|
+
done
|
|
356
|
+
|
|
357
|
+
ui_logo_once "Dot • $section"
|
|
358
|
+
|
|
359
|
+
if [[ "${DOTFILES_SHOW_LOGO:-1}" != "1" ]] || [[ ! -t 1 ]]; then
|
|
360
|
+
return
|
|
361
|
+
fi
|
|
362
|
+
|
|
363
|
+
version="$(dotfiles_version)"
|
|
364
|
+
summary="$(dot_command_summary "$cmd")"
|
|
365
|
+
|
|
366
|
+
ui_key_value "Version" "v${version}"
|
|
367
|
+
if [[ -n "$cmd" ]]; then
|
|
368
|
+
ui_key_value "Command" "dot ${cmd}"
|
|
369
|
+
fi
|
|
370
|
+
ui_key_value "Summary" "$summary"
|
|
371
|
+
printf "\n"
|
|
372
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
7
|
+
# shellcheck disable=SC1091
|
|
8
|
+
source "$SCRIPT_DIR/../dot/lib/ui.sh"
|
|
9
|
+
|
|
10
|
+
ui_init
|
|
11
|
+
ui_header "Nerd Fonts"
|
|
12
|
+
|
|
13
|
+
DEFAULT_FONTS="JetBrainsMono FiraCode Iosevka"
|
|
14
|
+
FONT_LIST="${*:-$DEFAULT_FONTS}"
|
|
15
|
+
|
|
16
|
+
install_linux() {
|
|
17
|
+
font_name="$1"
|
|
18
|
+
target_dir="$HOME/.local/share/fonts/${font_name}NerdFont"
|
|
19
|
+
mkdir -p "$target_dir"
|
|
20
|
+
tmp_dir="$(umask 077 && mktemp -d)"
|
|
21
|
+
# shellcheck disable=SC2064
|
|
22
|
+
trap "rm -rf '$tmp_dir'" RETURN
|
|
23
|
+
url="https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${font_name}.zip"
|
|
24
|
+
ui_info "Downloading" "$font_name Nerd Font"
|
|
25
|
+
curl -fL --connect-timeout 10 --max-time 300 "$url" -o "$tmp_dir/${font_name}.zip"
|
|
26
|
+
if ! unzip -o "$tmp_dir/${font_name}.zip" -d "$target_dir" >/dev/null; then
|
|
27
|
+
ui_err "Unzip failed" "${font_name}.zip" >&2
|
|
28
|
+
return 1
|
|
29
|
+
fi
|
|
30
|
+
if command -v fc-cache >/dev/null; then
|
|
31
|
+
fc-cache -f "$target_dir"
|
|
32
|
+
fi
|
|
33
|
+
ui_ok "Installed" "$target_dir"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
install_macos() {
|
|
37
|
+
font_name="$1"
|
|
38
|
+
if command -v brew >/dev/null; then
|
|
39
|
+
brew tap homebrew/cask-fonts >/dev/null 2>&1 || true
|
|
40
|
+
cask_name="$(printf "%s" "$font_name" | tr '[:upper:]' '[:lower:]')"
|
|
41
|
+
case "$cask_name" in
|
|
42
|
+
jetbrainsmono) cask_name="jetbrains-mono" ;;
|
|
43
|
+
firacode) cask_name="fira-code" ;;
|
|
44
|
+
iosevka) cask_name="iosevka" ;;
|
|
45
|
+
esac
|
|
46
|
+
brew install --cask "font-${cask_name}-nerd-font" || true
|
|
47
|
+
else
|
|
48
|
+
ui_err "Homebrew" "not found. Install font manually."
|
|
49
|
+
exit 1
|
|
50
|
+
fi
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
case "$(uname -s)" in
|
|
54
|
+
Linux)
|
|
55
|
+
for font in $FONT_LIST; do
|
|
56
|
+
install_linux "$font"
|
|
57
|
+
done
|
|
58
|
+
;;
|
|
59
|
+
Darwin)
|
|
60
|
+
for font in $FONT_LIST; do
|
|
61
|
+
install_macos "$font"
|
|
62
|
+
done
|
|
63
|
+
;;
|
|
64
|
+
*)
|
|
65
|
+
ui_err "Unsupported OS" "font install"
|
|
66
|
+
exit 1
|
|
67
|
+
;;
|
|
68
|
+
esac
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
if [[ $# -lt 1 ]]; then
|
|
6
|
+
echo "Usage: patch-fonts.sh <font-file> [output-dir]" >&2
|
|
7
|
+
exit 1
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
font_file="$1"
|
|
11
|
+
out_dir="${2:-$PWD/patched-fonts}"
|
|
12
|
+
|
|
13
|
+
if [[ ! -f "$font_file" ]]; then
|
|
14
|
+
echo "Font not found: $font_file" >&2
|
|
15
|
+
exit 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if ! command -v fontforge >/dev/null; then
|
|
19
|
+
echo "fontforge not found. Install it first (brew install fontforge / apt install fontforge)." >&2
|
|
20
|
+
exit 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
patcher="${NERD_FONTS_PATCHER:-$HOME/.local/share/nerd-fonts/font-patcher}"
|
|
24
|
+
|
|
25
|
+
if [[ ! -x "$patcher" ]]; then
|
|
26
|
+
echo "Nerd Fonts patcher not found: $patcher" >&2
|
|
27
|
+
echo "Set NERD_FONTS_PATCHER to the font-patcher path or clone nerd-fonts." >&2
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
mkdir -p "$out_dir"
|
|
32
|
+
|
|
33
|
+
fontforge -script "$patcher" --complete --outputdir "$out_dir" "$font_file"
|
|
34
|
+
|
|
35
|
+
echo "Patched font written to: $out_dir"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
6
|
+
install -m 0755 "${repo_root}/scripts/git-hooks/pre-commit" "${repo_root}/.git/hooks/pre-commit"
|
|
7
|
+
install -m 0755 "${repo_root}/scripts/git-hooks/pre-push" "${repo_root}/.git/hooks/pre-push"
|
|
8
|
+
install -m 0755 "${repo_root}/scripts/git-hooks/prepare-commit-msg" "${repo_root}/.git/hooks/prepare-commit-msg"
|
|
9
|
+
echo "Installed pre-commit hook at ${repo_root}/.git/hooks/pre-commit"
|
|
10
|
+
echo "Installed pre-push hook at ${repo_root}/.git/hooks/pre-push"
|
|
11
|
+
echo "Installed prepare-commit-msg hook at ${repo_root}/.git/hooks/prepare-commit-msg"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
5
|
+
|
|
6
|
+
if [[ -x "${repo_root}/scripts/diagnostics/secret-governance.sh" ]]; then
|
|
7
|
+
"${repo_root}/scripts/diagnostics/secret-governance.sh"
|
|
8
|
+
fi
|
|
9
|
+
|
|
10
|
+
if [[ -x "${repo_root}/scripts/git-hooks/pre-commit-audit.sh" ]]; then
|
|
11
|
+
"${repo_root}/scripts/git-hooks/pre-commit-audit.sh"
|
|
12
|
+
fi
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# Dotfiles Pre-Commit Sentinel (Audit Hook)
|
|
4
|
+
# Prevents secrets, hardcoded paths, and shell hygiene violations.
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
_cleanup_files=()
|
|
9
|
+
trap 'rm -f "${_cleanup_files[@]}"' EXIT
|
|
10
|
+
|
|
11
|
+
# ANSI Colors
|
|
12
|
+
RED='\033[0;31m'
|
|
13
|
+
GREEN='\033[0;32m'
|
|
14
|
+
YELLOW='\033[0;33m'
|
|
15
|
+
BOLD='\033[1m'
|
|
16
|
+
NC='\033[0m'
|
|
17
|
+
|
|
18
|
+
printf '%b\\n' "${BOLD}🕵️ Running Pre-Commit Audit...${NC}"
|
|
19
|
+
|
|
20
|
+
# Get list of staged files
|
|
21
|
+
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)
|
|
22
|
+
|
|
23
|
+
if [[ -z "$STAGED_FILES" ]]; then
|
|
24
|
+
printf '%b\\n' "${GREEN}✓ No files staged. Skipping.${NC}"
|
|
25
|
+
exit 0
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
FAILED=0
|
|
29
|
+
|
|
30
|
+
# --- 🔐 1. Secret Scanning ---
|
|
31
|
+
echo -n " 🔍 Scanning for secrets... "
|
|
32
|
+
# Refined patterns: require assignment-like syntax to reduce false positives on documentation
|
|
33
|
+
# Exclude assignments to values containing common placeholder strings or within template expressions
|
|
34
|
+
SENSITIVE_PATTERNS="(GITHUB_TOKEN|API_KEY|SECRET|password|private_key|AKIA[0-9A-Z]{16})[[:space:]]*[:=]"
|
|
35
|
+
# Exclusions list for legitimate variable checks or documentation
|
|
36
|
+
SECRET_EXCLUDES="test_|assertions.sh|.pre-commit|README|CHANGELOG|FEATURES.md|CONFIG_STRATEGY.md|docs/|install/lib/|.chezmoitemplates/|mcp-doctor.sh|\.github/workflows/"
|
|
37
|
+
# Also exclude .tmpl files from secret scanning as they contain many false positive markers
|
|
38
|
+
if echo "$STAGED_FILES" | grep -v "\.tmpl" | xargs grep -EiE "$SENSITIVE_PATTERNS" /dev/null | grep -vE "$SECRET_EXCLUDES" | grep -viE "dummy|placeholder|example|test|sk-placeholder|\\{\\{" >/dev/null 2>&1; then
|
|
39
|
+
printf '%b\\n' "${RED}FAILED${NC}"
|
|
40
|
+
printf '%b\\n' " ${YELLOW}⚠ Potential secret detected in staged files:${NC}"
|
|
41
|
+
echo "$STAGED_FILES" | grep -v "\.tmpl" | xargs grep -EiE "$SENSITIVE_PATTERNS" /dev/null | grep -vE "$SECRET_EXCLUDES" | grep -viE "dummy|placeholder|example|test|sk-placeholder|\\{\\{" | sed 's/^/ /'
|
|
42
|
+
FAILED=1
|
|
43
|
+
else
|
|
44
|
+
printf '%b\\n' "${GREEN}PASSED${NC}"
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
# --- 👻 2. Ghost Path Linter ---
|
|
48
|
+
echo -n " 👻 Checking for hardcoded paths... "
|
|
49
|
+
# Exclude test files, documentation, the hook itself, Nix files, and template backups
|
|
50
|
+
GHOST_EXCLUDES="test_|assertions.sh|pre-commit|INTEROP.md|WSL2_NIX_TROUBLESHOOTING.md|\.nix|\.backup|\.github/workflows/"
|
|
51
|
+
if echo "$STAGED_FILES" | xargs grep -rIE '"/home/(linuxbrew)?[^$]|/Users/[^$]' /dev/null | grep -v "linuxbrew" | grep -vE "$GHOST_EXCLUDES" >/dev/null 2>&1; then
|
|
52
|
+
printf '%b\\n' "${RED}FAILED${NC}"
|
|
53
|
+
printf '%b\\n' " ${YELLOW}⚠ Literal home paths detected (use \$HOME or ~ instead):${NC}"
|
|
54
|
+
echo "$STAGED_FILES" | xargs grep -rIE '"/home/(linuxbrew)?[^$]|/Users/[^$]' /dev/null | grep -v "linuxbrew" | grep -vE "$GHOST_EXCLUDES" | sed 's/^/ /'
|
|
55
|
+
FAILED=1
|
|
56
|
+
else
|
|
57
|
+
printf '%b\\n' "${GREEN}PASSED${NC}"
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
# --- 🐚 3. ShellCheck Hygiene ---
|
|
61
|
+
if command -v shellcheck >/dev/null 2>&1; then
|
|
62
|
+
echo -n " 🐚 Running ShellCheck... "
|
|
63
|
+
# ONLY run on actual .sh files, NOT .tmpl files (Go templates break shellcheck)
|
|
64
|
+
# Also exclude files that contain Zsh-specific syntax that might trigger false positives in sh mode
|
|
65
|
+
SHELL_FILES=$(echo "$STAGED_FILES" | grep -E '\.sh$' | grep -v "\.tmpl" || true)
|
|
66
|
+
if [[ -n "$SHELL_FILES" ]]; then
|
|
67
|
+
if ! echo "$SHELL_FILES" | xargs shellcheck -x --severity=error -e SC1091,SC2296,SC2142 >/dev/null 2>&1; then
|
|
68
|
+
printf '%b\\n' "${RED}FAILED${NC}"
|
|
69
|
+
printf '%b\\n' " ${YELLOW}⚠ Shell syntax errors detected:${NC}"
|
|
70
|
+
echo "$SHELL_FILES" | xargs shellcheck -x --severity=error -e SC1091,SC2296,SC2142 | sed 's/^/ /'
|
|
71
|
+
FAILED=1
|
|
72
|
+
else
|
|
73
|
+
printf '%b\\n' "${GREEN}PASSED${NC}"
|
|
74
|
+
fi
|
|
75
|
+
else
|
|
76
|
+
printf '%b\\n' "${YELLOW}SKIPPED${NC} (no .sh files)"
|
|
77
|
+
fi
|
|
78
|
+
fi
|
|
79
|
+
# --- 🧹 4. Formatting Audit ---
|
|
80
|
+
echo -n " 🧹 Checking formatting... "
|
|
81
|
+
# Find files with trailing whitespace, excluding SVGs and other formats where it might be intentional or harmless
|
|
82
|
+
OFFENDING_WHITESPACE=$(echo "$STAGED_FILES" | grep -vE '\.(svg|md)$' | xargs grep -l '[[:space:]]$' /dev/null || true)
|
|
83
|
+
# Use defused patterns to avoid self-detection
|
|
84
|
+
MERGE_START="^<<<<<<< "
|
|
85
|
+
MERGE_END="^>>>>>>> "
|
|
86
|
+
MERGE_DIV="^=======$"
|
|
87
|
+
if [[ -n "$OFFENDING_WHITESPACE" ]]; then
|
|
88
|
+
printf '%b\\n' "${RED}FAILED${NC}"
|
|
89
|
+
printf '%b\\n' " ${YELLOW}⚠ Trailing whitespace found in staged files:${NC}"
|
|
90
|
+
echo " ${OFFENDING_WHITESPACE//$'\n'/$'\n' }"
|
|
91
|
+
FAILED=1
|
|
92
|
+
elif echo "$STAGED_FILES" | xargs grep -lE "$MERGE_START|$MERGE_END|$MERGE_DIV" /dev/null >/dev/null 2>&1; then
|
|
93
|
+
printf '%b\\n' "${RED}FAILED${NC}"
|
|
94
|
+
printf '%b\\n' " ${YELLOW}⚠ Unresolved merge markers found in staged files:${NC}"
|
|
95
|
+
echo "$STAGED_FILES" | xargs grep -lE "$MERGE_START|$MERGE_END|$MERGE_DIV" /dev/null | sed 's/^/ /'
|
|
96
|
+
FAILED=1
|
|
97
|
+
else
|
|
98
|
+
printf '%b\\n' "${GREEN}PASSED${NC}"
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
# --- 🏛️ 5. Signature Guard ---
|
|
102
|
+
if echo "$STAGED_FILES" | grep -q "^README.md$"; then
|
|
103
|
+
echo -n " 🏛️ Checking README signature... "
|
|
104
|
+
EXPECTED_ARCHITECT='**THE ARCHITECT** ᛫ [Sebastien Rousseau](https://sebastienrousseau.com)'
|
|
105
|
+
EXPECTED_ENGINE='**THE ENGINE** ᛞ [EUXIS](https://euxis.co) ᛫ Enterprise Unified Execution Intelligence System'
|
|
106
|
+
README_CONTENT=$(git show :README.md 2>/dev/null || cat README.md)
|
|
107
|
+
if echo "$README_CONTENT" | grep -qF "$EXPECTED_ARCHITECT" && echo "$README_CONTENT" | grep -qF "$EXPECTED_ENGINE"; then
|
|
108
|
+
printf '%b\\n' "${GREEN}PASSED${NC}"
|
|
109
|
+
else
|
|
110
|
+
# Auto-add the signature footer before ## License (or at EOF)
|
|
111
|
+
tmp_footer=$(mktemp)
|
|
112
|
+
_cleanup_files+=("$tmp_footer")
|
|
113
|
+
if grep -qF '## License' README.md; then
|
|
114
|
+
awk -v arch="$EXPECTED_ARCHITECT" -v eng="$EXPECTED_ENGINE" '
|
|
115
|
+
/^## License/ {
|
|
116
|
+
print "---"
|
|
117
|
+
print ""
|
|
118
|
+
print arch
|
|
119
|
+
print eng
|
|
120
|
+
print ""
|
|
121
|
+
print "---"
|
|
122
|
+
print ""
|
|
123
|
+
}
|
|
124
|
+
{ print }
|
|
125
|
+
' README.md >"$tmp_footer" && mv "$tmp_footer" README.md
|
|
126
|
+
else
|
|
127
|
+
{
|
|
128
|
+
printf '\n---\n\n%s\n%s\n\n---\n' "$EXPECTED_ARCHITECT" "$EXPECTED_ENGINE"
|
|
129
|
+
} >>README.md
|
|
130
|
+
fi
|
|
131
|
+
rm -f "$tmp_footer"
|
|
132
|
+
git add README.md
|
|
133
|
+
printf '%b\\n' "${GREEN}FIXED${NC} (auto-added)"
|
|
134
|
+
fi
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
echo ""
|
|
138
|
+
if [[ $FAILED -eq 1 ]]; then
|
|
139
|
+
printf '%b\\n' "${RED}${BOLD}❌ Audit failed.${NC} Please fix the issues above before committing."
|
|
140
|
+
printf '%b\\n' " (Use --no-verify to bypass if absolutely necessary)"
|
|
141
|
+
exit 1
|
|
142
|
+
else
|
|
143
|
+
printf '%b\n' "${GREEN}${BOLD}✅ Audit passed.${NC} v0.2.500 standards maintained."
|
|
144
|
+
exit 0
|
|
145
|
+
fi
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
repo_root="$(git rev-parse --show-toplevel)"
|
|
5
|
+
|
|
6
|
+
while read -r local_ref local_sha remote_ref remote_sha; do
|
|
7
|
+
[ "$local_sha" = "0000000000000000000000000000000000000000" ] && continue
|
|
8
|
+
|
|
9
|
+
if [ "$remote_sha" = "0000000000000000000000000000000000000000" ]; then
|
|
10
|
+
range="$local_sha"
|
|
11
|
+
elif git cat-file -e "${remote_sha}^{commit}" 2>/dev/null; then
|
|
12
|
+
range="$remote_sha..$local_sha"
|
|
13
|
+
else
|
|
14
|
+
# Remote tip is not in the local object store yet (push without prior fetch).
|
|
15
|
+
# Fall back to checking commits reachable from local tip.
|
|
16
|
+
range="$local_sha"
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
for c in $(git rev-list "$range"); do
|
|
20
|
+
if ! git verify-commit "$c" >/dev/null 2>&1; then
|
|
21
|
+
echo "Blocked: unsigned commit $c"
|
|
22
|
+
exit 1
|
|
23
|
+
fi
|
|
24
|
+
done
|
|
25
|
+
done
|
|
26
|
+
|
|
27
|
+
if [ "${DOTFILES_SKIP_PRE_PUSH_AUDIT:-0}" != "1" ]; then
|
|
28
|
+
bash "$repo_root/scripts/qa/reliability-audit.sh" --quick
|
|
29
|
+
fi
|