@sebastienrousseau/dotfiles 0.2.481 → 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 +122 -32
- package/LICENSE +1 -1
- package/README.md +211 -242
- package/docs/.vitepress/reports/localization-readability-audit.md +69 -0
- package/docs/AI.md +102 -0
- package/docs/COPYRIGHT +2 -2
- package/docs/NAMING_CONVENTIONS.md +95 -0
- package/docs/README.md +58 -249
- package/docs/adr/ADR-004-cli-architecture.md +2 -2
- package/docs/adr/ADR-006-shell-selection.md +2 -2
- 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 +2 -3
- 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/MILESTONE_v0.2.493.md +43 -0
- package/docs/{PLAN.md → archive/PLAN.md} +1 -1
- package/docs/guides/INSTALL.md +140 -0
- package/docs/{NEOVIM_IDE_GUIDE.md → guides/NEOVIM_IDE_GUIDE.md} +12 -12
- package/docs/guides/THEMING.md +222 -0
- package/docs/{TROUBLESHOOTING.md → guides/TROUBLESHOOTING.md} +36 -0
- package/docs/{WSL2_NIX_TROUBLESHOOTING.md → guides/WSL2_NIX_TROUBLESHOOTING.md} +8 -8
- 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} +11 -11
- 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/{ALIASES.md → reference/ALIASES.md} +2 -6
- 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/{SCREENSHOTS.md → reference/SCREENSHOTS.md} +26 -25
- 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/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 +3 -17
- 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 +1 -1
- package/dot_config/alacritty/alacritty.toml.tmpl +41 -469
- package/dot_config/atuin/config.toml +18 -1
- package/dot_config/bat/config +16 -1
- package/dot_config/claude/mcp_servers.json +3 -32
- 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 +1 -1
- package/dot_config/dotfiles/grub/README.md +1 -1
- package/dot_config/dotfiles/lock/README.md +1 -1
- 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/environment.d/50-ssh-agent.conf +2 -0
- package/dot_config/environment.d/90-wayland.conf +19 -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/fontconfig/fonts.conf.tmpl +13 -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/ghostty/config.tmpl +69 -565
- package/dot_config/git/allowed_signers.tmpl +18 -0
- package/dot_config/git/commit-template +10 -0
- package/dot_config/gnupg/{gpg-agent.conf.tmpl → gpg-agent.conf} +3 -3
- package/dot_config/goose/config.yaml +2 -2
- package/dot_config/gtk-3.0/gtk.css.tmpl +59 -180
- package/dot_config/gtk-3.0/settings.ini.tmpl +5 -44
- package/dot_config/gtk-4.0/gtk.css.tmpl +79 -136
- package/dot_config/gtk-4.0/settings.ini.tmpl +5 -8
- package/dot_config/ipython/profile_default/ipython_config.py +19 -0
- package/dot_config/just/justfile +18 -0
- package/dot_config/kanshi/config.tmpl +22 -0
- package/dot_config/kitty/kitty.conf.tmpl +44 -508
- package/dot_config/lazygit/config.yml +18 -6
- package/dot_config/mako/config +47 -0
- package/dot_config/micro/settings.json +3 -0
- package/dot_config/mimeapps.list +77 -0
- package/dot_config/mise/config.toml +63 -5
- package/dot_config/mongosh/mongoshrc.js +1 -0
- package/dot_config/mpv/input.conf +47 -0
- package/dot_config/mpv/mpv.conf +47 -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 +14 -0
- package/dot_config/nvim/lazy-lock.json +45 -14
- package/dot_config/nvim/lua/config/autocmds.lua +45 -1
- package/dot_config/nvim/lua/config/keymaps.lua +13 -8
- package/dot_config/nvim/lua/config/lazy.lua +22 -12
- package/dot_config/nvim/lua/config/options.lua +1 -0
- package/dot_config/nvim/lua/plugins/ai.lua +75 -0
- package/dot_config/nvim/lua/plugins/coding.lua +11 -29
- package/dot_config/nvim/lua/plugins/completion.lua +60 -0
- package/dot_config/nvim/lua/plugins/dap.lua +215 -4
- package/dot_config/nvim/lua/plugins/editor.lua +6 -10
- package/dot_config/nvim/lua/plugins/git.lua +1 -0
- package/dot_config/nvim/lua/plugins/lsp.lua +16 -81
- package/dot_config/nvim/lua/plugins/markdown.lua +1 -0
- package/dot_config/nvim/lua/plugins/rust.lua +1 -0
- package/dot_config/nvim/lua/plugins/sessions.lua +1 -0
- package/dot_config/nvim/lua/plugins/ui.lua +23 -51
- package/dot_config/paru/paru.conf +10 -0
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
- package/dot_config/pueue/pueue.yml +34 -0
- package/dot_config/raycast/README.md +1 -1
- package/dot_config/ripgrep/ripgreprc +21 -0
- package/dot_config/shell/00-core-paths.sh.tmpl +62 -24
- 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/51-logic-functions-extra.sh.tmpl +64 -0
- package/dot_config/shell/90-ux-aliases.sh.tmpl +90 -5
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +33 -2
- package/dot_config/shell/Brewfile.cli +8 -0
- package/dot_config/shell/README.md +9 -9
- 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 +50 -50
- package/dot_config/shell/custom/error_analysis.zsh +29 -29
- package/dot_config/starship.toml.tmpl +85 -7
- 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/tmux/tmux.conf.tmpl +80 -38
- package/dot_config/topgrade.toml.tmpl +54 -0
- package/dot_config/user-dirs.dirs +9 -0
- package/dot_config/vscode/settings.json.tmpl +9 -50
- 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 +31 -203
- package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
- package/dot_config/yazi/keymap.toml +67 -0
- package/dot_config/yazi/theme.toml +102 -0
- package/dot_config/zathura/zathurarc +52 -0
- package/dot_config/zellij/{config.kdl → config.kdl.tmpl} +1 -1
- package/dot_config/zsh/dot_zprofile +1 -7
- package/dot_config/zsh/dot_zshenv +2 -3
- package/dot_config/zsh/dot_zshrc.tmpl +368 -69
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +77 -0
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +17 -4
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +4 -4
- package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +101 -30
- 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 +113 -91
- package/dot_local/bin/executable_antigravity +11 -0
- package/dot_local/bin/executable_b64 +61 -36
- package/dot_local/bin/executable_bm +77 -0
- package/dot_local/bin/executable_cb +39 -0
- package/dot_local/bin/executable_dot +543 -132
- 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 +2 -0
- package/dot_local/bin/executable_dtags +28 -0
- package/dot_local/bin/executable_epoch +43 -38
- package/dot_local/bin/executable_extract +32 -99
- package/dot_local/bin/executable_gbd +52 -0
- package/dot_local/bin/executable_gd +42 -0
- package/dot_local/bin/executable_git-ai-commit +35 -20
- package/dot_local/bin/executable_git-ai-diff +33 -18
- package/dot_local/bin/executable_gl +101 -0
- package/dot_local/bin/executable_hash +56 -18
- package/dot_local/bin/executable_hashsum +160 -0
- package/dot_local/bin/executable_hex +44 -8
- package/dot_local/bin/executable_jsonv +34 -10
- package/dot_local/bin/executable_jwt +22 -6
- package/dot_local/bin/executable_kill-port +18 -2
- package/dot_local/bin/executable_lorem +21 -6
- package/dot_local/bin/executable_mkscript +35 -0
- package/dot_local/bin/executable_monitor +56 -0
- package/dot_local/bin/{executable_ip → executable_myip} +16 -2
- 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 +49 -13
- package/dot_local/bin/executable_start-niri +8 -0
- package/dot_local/bin/executable_tmux-sessionizer +276 -149
- package/dot_local/bin/executable_tour +112 -74
- package/dot_local/bin/executable_up +21 -0
- package/dot_local/bin/executable_update +45 -11
- package/dot_local/bin/executable_uuid +37 -7
- package/dot_local/bin/executable_win +32 -0
- package/dot_local/bin/executable_yamlv +25 -7
- package/dot_local/share/bash-completion/completions/dot +62 -44
- 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/_dot +283 -0
- package/install.sh +297 -210
- package/package.json +17 -5
- 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 +41 -39
- package/scripts/demo/record.sh +3 -2
- 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 +209 -29
- package/scripts/diagnostics/conflicts.sh +72 -0
- package/scripts/diagnostics/doctor-unified.sh +38 -0
- package/scripts/diagnostics/doctor.sh +491 -65
- package/scripts/diagnostics/drift-dashboard.sh +17 -6
- package/scripts/diagnostics/health.sh +351 -110
- package/scripts/diagnostics/history-analysis.sh +12 -4
- 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 +139 -93
- package/scripts/diagnostics/smoke-test.sh +87 -0
- package/scripts/diagnostics/snapshot.sh +89 -0
- package/scripts/diagnostics/verify.sh +107 -0
- package/scripts/diagnostics/verify_state.sh +2 -2
- 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 +21 -4
- package/scripts/dot/commands/core.sh +59 -4
- package/scripts/dot/commands/diagnostics.sh +132 -3
- 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 +148 -17
- package/scripts/dot/commands/patterns.sh +54 -0
- package/scripts/dot/commands/restore.sh +57 -35
- package/scripts/dot/commands/secrets.sh +151 -9
- package/scripts/dot/commands/security.sh +3 -0
- package/scripts/dot/commands/tools.sh +268 -27
- 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 +318 -18
- package/scripts/fonts/install-nerd-fonts.sh +19 -10
- package/scripts/fonts/patch-fonts.sh +1 -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 +245 -17
- package/scripts/ops/chezmoi-diff.sh +1 -0
- package/scripts/ops/chezmoi-remove.sh +2 -0
- package/scripts/ops/chezmoi-update.sh +34 -2
- 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 +98 -342
- 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 +86 -28
- package/scripts/ops/setup.sh +137 -0
- package/scripts/ops/teleport.sh +2 -1
- 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 +1 -0
- package/scripts/secrets/create-secrets-file.sh +1 -0
- package/scripts/secrets/encrypt-ssh-key.sh +1 -0
- package/scripts/security/backup.sh +44 -4
- package/scripts/security/dns-doh.sh +36 -14
- package/scripts/security/encryption-check.sh +27 -12
- package/scripts/security/enforce-policies.sh +11 -16
- package/scripts/security/firewall.sh +76 -20
- package/scripts/security/lock-configs.sh +2 -2
- package/scripts/security/lock-screen.sh +40 -18
- package/scripts/security/manage-secrets.sh +42 -29
- package/scripts/security/ssh-cert.sh +203 -0
- package/scripts/security/telemetry-kill.sh +40 -18
- package/scripts/security/usb-safety.sh +37 -15
- package/scripts/theme/apply-gnome-theme.sh +87 -56
- package/scripts/theme/extract-theme.py +677 -0
- package/scripts/theme/install-boot-logo.sh +1 -0
- package/scripts/theme/install-catppuccin-themes.sh +57 -33
- package/scripts/theme/install-cursors.sh +1 -0
- package/scripts/theme/install-file-icons.sh +1 -0
- package/scripts/theme/install-grub-theme.sh +11 -1
- package/scripts/theme/install-lock-icon.sh +1 -0
- package/scripts/theme/merge-wallpaper.sh +141 -0
- package/scripts/theme/rebuild-themes.sh +309 -0
- package/scripts/theme/switch.sh +308 -137
- package/scripts/theme/wallpaper-rotate.sh +66 -12
- package/scripts/theme/wallpaper-sync.sh +386 -31
- package/scripts/tools/cmatrix.sh +1 -0
- package/scripts/tools/detect-collisions.py +1 -1
- package/scripts/tools/emoji-picker.sh +4 -1
- package/scripts/tools/figlet-banner.sh +1 -0
- package/scripts/tools/log-rotate.sh +2 -1
- package/scripts/tools/lolcat-wrap.sh +1 -0
- package/scripts/tools/pipes.sh +1 -0
- package/scripts/tuning/linux.sh +23 -13
- package/scripts/tuning/macos.sh +13 -4
- 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 +1 -1
- 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 +1 -1
- package/templates/projects/node/.github/workflows/ci.yml +30 -0
- package/templates/projects/node/README.md +1 -1
- package/templates/projects/node/package-lock.json +12 -0
- package/templates/projects/node/src/index.js +1 -0
- package/templates/projects/packer/README.md +1 -1
- package/templates/projects/python/.github/workflows/ci.yml +34 -0
- package/templates/projects/python/README.md +1 -1
- 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 -229
- package/docs/COMPLIANCE.md +0 -47
- package/docs/FEATURES.md +0 -166
- package/docs/FONTS.md +0 -147
- package/docs/INSTALL.md +0 -119
- package/docs/KEYS.md +0 -40
- package/docs/OPERATIONS.md +0 -130
- package/docs/PR_DESCRIPTION.md +0 -149
- package/docs/SECRETS.md +0 -76
- package/docs/SECURITY.md +0 -30
- package/docs/SECURITY_CHECKLIST.md +0 -25
- package/docs/TASK.md +0 -99
- package/docs/TESTING.md +0 -190
- package/docs/TOOLS.md +0 -146
- package/docs/UTILS.md +0 -105
- package/docs/WALKTHROUGH.md +0 -165
- package/dot_config/clippy.toml +0 -55
- package/dot_config/dotfiles/versions.env.tmpl +0 -19
- package/dot_config/firefox/user.js +0 -8
- package/dot_config/git/config.tmpl +0 -77
- package/dot_config/go/aliases.sh +0 -61
- package/dot_config/go/env.sh +0 -24
- package/dot_config/ice/README.md +0 -13
- package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
- package/dot_config/lsd/config.yaml +0 -19
- package/dot_config/nvim/snippets/all.lua +0 -9
- package/dot_config/nvim/snippets/python.lua +0 -16
- package/dot_config/shell/00-container-detect.sh +0 -53
- package/dot_config/shell/05-core-safety.sh.tmpl +0 -13
- package/dot_config/shell/40-ls-colors.sh.tmpl +0 -31
- package/dot_config/shell/90-theme-switch.sh +0 -70
- package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
- package/dot_config/waybar/style.css +0 -8
- package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
- package/dot_local/bin/executable_zig-install +0 -89
- package/dot_local/bin/voice_ops +0 -7
- package/scripts/ops/health-check.sh +0 -380
- package/scripts/tests/README.md +0 -241
- package/scripts/tests/benchmark.sh +0 -91
- package/scripts/tests/framework/assertions.sh +0 -283
- package/scripts/tests/framework/mocks.sh +0 -201
- package/scripts/tests/framework/test_runner.sh +0 -189
- package/scripts/tests/integration/test_install.sh +0 -237
- package/scripts/tests/performance/benchmark_runner.sh +0 -156
- package/scripts/tests/performance/regression_check.sh +0 -73
- package/scripts/tests/performance/stress_test.sh +0 -65
- package/scripts/tests/test-aliases.sh +0 -25
- package/scripts/tests/test-docker.sh +0 -48
- package/scripts/tests/unit/test_ai_aliases.sh +0 -158
- package/scripts/tests/unit/test_ai_cli_checks.sh +0 -47
- package/scripts/tests/unit/test_backup.sh +0 -227
- package/scripts/tests/unit/test_case_functions.sh +0 -238
- package/scripts/tests/unit/test_cd_aliases.sh +0 -367
- package/scripts/tests/unit/test_dot_cli.sh +0 -217
- package/scripts/tests/unit/test_encode64.sh +0 -67
- package/scripts/tests/unit/test_environment.sh +0 -78
- package/scripts/tests/unit/test_extract.sh +0 -163
- package/scripts/tests/unit/test_framework_edge_cases.sh +0 -113
- package/scripts/tests/unit/test_genpass.sh +0 -298
- package/scripts/tests/unit/test_install_edge_cases.sh +0 -167
- package/scripts/tests/unit/test_installers.sh +0 -172
- package/scripts/tests/unit/test_keygen.sh +0 -68
- package/scripts/tests/unit/test_logging.sh +0 -96
- package/scripts/tests/unit/test_os_detection_comprehensive.sh +0 -388
- package/scripts/tests/unit/test_package_managers_comprehensive.sh +0 -321
- package/scripts/tests/unit/test_prependpath.sh +0 -66
- package/scripts/tests/unit/test_prependpath_refactored.sh +0 -89
- package/scripts/tests/unit/test_rd.sh +0 -230
- package/scripts/tests/unit/test_security_fixes.sh +0 -130
- package/scripts/tests/unit/test_security_scripts.sh +0 -87
- package/scripts/tests/unit/test_template_validation.sh +0 -238
- package/scripts/tests/unit/test_utility_functions.sh +0 -144
- package/scripts/tests/unit/test_wave1_alias_split.sh +0 -132
- package/scripts/tests/unit/test_wave1_ci_pinning.sh +0 -61
- package/scripts/tests/unit/test_wave1_gitleaks_config.sh +0 -52
- package/scripts/tests/unit/test_wave1_heal_fixes.sh +0 -97
- package/scripts/tests/unit/test_wave1_install_gpg.sh +0 -35
- package/scripts/tests/unit/test_wave1_zshenv_path.sh +0 -89
- package/scripts/tests/unit/test_wave1_zshrc_lazy_hook.sh +0 -115
- package/scripts/tests/unit/test_wave2_dot_new_guard.sh +0 -75
- package/scripts/tests/unit/test_zipf.sh +0 -76
- /package/docs/{LEGACY_ROADMAP.md → archive/LEGACY_ROADMAP.md} +0 -0
- /package/docs/{REPO_AUDIT.md → archive/REPO_AUDIT.md} +0 -0
- /package/docs/{KEY_ROTATION.md → security/KEY_ROTATION.md} +0 -0
- /package/dot_config/ansible/{ansible.cfg.tmpl → ansible.cfg} +0 -0
- /package/dot_config/docker/{config.json.tmpl → config.json} +0 -0
- /package/dot_config/k9s/{config.yaml.tmpl → config.yaml} +0 -0
- /package/dot_config/pypoetry/{config.toml.tmpl → config.toml} +0 -0
- /package/dot_config/{pyrightconfig.json.tmpl → pyrightconfig.json} +0 -0
- /package/dot_config/tflint/{tflint.hcl.tmpl → tflint.hcl} +0 -0
- /package/dot_config/yarn/{yarnrc.yml.tmpl → yarnrc.yml} +0 -0
- /package/dot_config/zsh/rc.d/{40-bell.zsh.tmpl → 40-bell.zsh} +0 -0
- /package/dot_config/zsh/rc.d/{50-login-fortune.zsh.tmpl → 50-login-fortune.zsh} +0 -0
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC2015,SC2034,SC2155
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# Performance benchmark runner for shell functions
|
|
6
|
-
# Measures execution time and memory usage
|
|
7
|
-
|
|
8
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
REPO_ROOT="$(dirname "$(dirname "$(dirname "$SCRIPT_DIR")")")"
|
|
10
|
-
|
|
11
|
-
# Results storage for regression tracking
|
|
12
|
-
RESULTS_DIR="${RESULTS_DIR:-$HOME/.local/share/dotfiles/benchmarks}"
|
|
13
|
-
RESULTS_FILE="$RESULTS_DIR/benchmark_$(date +%Y%m%d_%H%M%S).json"
|
|
14
|
-
|
|
15
|
-
# Thresholds (in milliseconds)
|
|
16
|
-
# Note: CI environments may be slower, so thresholds are set conservatively
|
|
17
|
-
SHELL_STARTUP_THRESHOLD_MS=500
|
|
18
|
-
FUNCTION_LOAD_THRESHOLD_MS=200 # Increased for CI compatibility
|
|
19
|
-
CD_OPERATION_THRESHOLD_MS=50
|
|
20
|
-
|
|
21
|
-
RED='\033[0;31m'
|
|
22
|
-
GREEN='\033[0;32m'
|
|
23
|
-
YELLOW='\033[0;33m'
|
|
24
|
-
NC='\033[0m'
|
|
25
|
-
|
|
26
|
-
# Store benchmark result in JSON format for regression tracking
|
|
27
|
-
store_result() {
|
|
28
|
-
local metric="$1" value="$2" threshold="$3" status="$4"
|
|
29
|
-
mkdir -p "$RESULTS_DIR"
|
|
30
|
-
|
|
31
|
-
# Append to JSON results
|
|
32
|
-
cat >>"$RESULTS_FILE" <<EOF
|
|
33
|
-
{"timestamp": "$(date -Iseconds)", "metric": "$metric", "value": $value, "threshold": $threshold, "status": "$status"}
|
|
34
|
-
EOF
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
measure_time_ms() {
|
|
38
|
-
local start end
|
|
39
|
-
# Use perl for portable millisecond timing (works on macOS and Linux)
|
|
40
|
-
if command -v perl >/dev/null 2>&1; then
|
|
41
|
-
start=$(perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000')
|
|
42
|
-
"$@" >/dev/null 2>&1 || true
|
|
43
|
-
end=$(perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000')
|
|
44
|
-
echo $((end - start))
|
|
45
|
-
else
|
|
46
|
-
# Fallback: use seconds only (less precise but portable)
|
|
47
|
-
start=$(date +%s)
|
|
48
|
-
"$@" >/dev/null 2>&1 || true
|
|
49
|
-
end=$(date +%s)
|
|
50
|
-
echo $(((end - start) * 1000))
|
|
51
|
-
fi
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
benchmark_shell_startup() {
|
|
55
|
-
echo "Benchmarking shell startup time..."
|
|
56
|
-
local total=0
|
|
57
|
-
local iterations=5
|
|
58
|
-
|
|
59
|
-
for ((i = 1; i <= iterations; i++)); do
|
|
60
|
-
local time_ms
|
|
61
|
-
time_ms=$(measure_time_ms "zsh -i -c 'exit' 2>/dev/null || bash -i -c 'exit'")
|
|
62
|
-
total=$((total + time_ms))
|
|
63
|
-
done
|
|
64
|
-
|
|
65
|
-
local avg=$((total / iterations))
|
|
66
|
-
local status
|
|
67
|
-
|
|
68
|
-
if [[ $avg -gt $SHELL_STARTUP_THRESHOLD_MS ]]; then
|
|
69
|
-
status="FAIL"
|
|
70
|
-
echo -e "${RED}✗ FAIL${NC}: Shell startup ${avg}ms exceeds threshold ${SHELL_STARTUP_THRESHOLD_MS}ms"
|
|
71
|
-
store_result "shell_startup" "$avg" "$SHELL_STARTUP_THRESHOLD_MS" "$status"
|
|
72
|
-
return 1
|
|
73
|
-
else
|
|
74
|
-
status="PASS"
|
|
75
|
-
echo -e "${GREEN}✓ PASS${NC}: Shell startup ${avg}ms (threshold: ${SHELL_STARTUP_THRESHOLD_MS}ms)"
|
|
76
|
-
store_result "shell_startup" "$avg" "$SHELL_STARTUP_THRESHOLD_MS" "$status"
|
|
77
|
-
return 0
|
|
78
|
-
fi
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
benchmark_function_sourcing() {
|
|
82
|
-
echo "Benchmarking function file sourcing..."
|
|
83
|
-
local failures=0
|
|
84
|
-
|
|
85
|
-
for func_file in "$REPO_ROOT"/.chezmoitemplates/functions/*.sh; do
|
|
86
|
-
[[ -f "$func_file" ]] || continue
|
|
87
|
-
local name=$(basename "$func_file")
|
|
88
|
-
local time_ms
|
|
89
|
-
time_ms=$(measure_time_ms "source '$func_file'")
|
|
90
|
-
|
|
91
|
-
if [[ $time_ms -gt $FUNCTION_LOAD_THRESHOLD_MS ]]; then
|
|
92
|
-
echo -e "${YELLOW}⚠ WARN${NC}: $name took ${time_ms}ms to source"
|
|
93
|
-
((failures++))
|
|
94
|
-
fi
|
|
95
|
-
done
|
|
96
|
-
|
|
97
|
-
if [[ $failures -eq 0 ]]; then
|
|
98
|
-
echo -e "${GREEN}✓ PASS${NC}: All functions load within threshold"
|
|
99
|
-
fi
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
benchmark_memory_usage() {
|
|
103
|
-
echo "Benchmarking memory usage..."
|
|
104
|
-
|
|
105
|
-
# Get baseline memory
|
|
106
|
-
local baseline
|
|
107
|
-
baseline=$(ps -o rss= -p $$ | tr -d ' ')
|
|
108
|
-
|
|
109
|
-
# Source all functions
|
|
110
|
-
for func_file in "$REPO_ROOT"/.chezmoitemplates/functions/*.sh; do
|
|
111
|
-
[[ -f "$func_file" ]] && source "$func_file" 2>/dev/null || true
|
|
112
|
-
done
|
|
113
|
-
|
|
114
|
-
# Get memory after loading
|
|
115
|
-
local after
|
|
116
|
-
after=$(ps -o rss= -p $$ | tr -d ' ')
|
|
117
|
-
|
|
118
|
-
local diff_kb=$((after - baseline))
|
|
119
|
-
local diff_mb=$((diff_kb / 1024))
|
|
120
|
-
local status
|
|
121
|
-
|
|
122
|
-
echo "Memory increase after loading functions: ${diff_mb}MB (${diff_kb}KB)"
|
|
123
|
-
|
|
124
|
-
# Fail if memory usage exceeds 50MB
|
|
125
|
-
if [[ $diff_mb -gt 50 ]]; then
|
|
126
|
-
status="FAIL"
|
|
127
|
-
echo -e "${RED}✗ FAIL${NC}: Memory usage ${diff_mb}MB exceeds 50MB threshold"
|
|
128
|
-
store_result "memory_usage_kb" "$diff_kb" "51200" "$status"
|
|
129
|
-
return 1
|
|
130
|
-
else
|
|
131
|
-
status="PASS"
|
|
132
|
-
echo -e "${GREEN}✓ PASS${NC}: Memory usage within acceptable limits"
|
|
133
|
-
store_result "memory_usage_kb" "$diff_kb" "51200" "$status"
|
|
134
|
-
return 0
|
|
135
|
-
fi
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
generate_report() {
|
|
139
|
-
echo ""
|
|
140
|
-
echo "╔═══════════════════════════════════════╗"
|
|
141
|
-
echo "║ Performance Benchmark Report ║"
|
|
142
|
-
echo "╚═══════════════════════════════════════╝"
|
|
143
|
-
echo ""
|
|
144
|
-
|
|
145
|
-
benchmark_shell_startup
|
|
146
|
-
echo ""
|
|
147
|
-
benchmark_function_sourcing
|
|
148
|
-
echo ""
|
|
149
|
-
benchmark_memory_usage
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
main() {
|
|
153
|
-
generate_report
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
main "$@"
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC2012
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# Compare current benchmark with historical baseline
|
|
6
|
-
RESULTS_DIR="${RESULTS_DIR:-$HOME/.local/share/dotfiles/benchmarks}"
|
|
7
|
-
BASELINE_FILE="$RESULTS_DIR/baseline.json"
|
|
8
|
-
REGRESSION_THRESHOLD=20 # Percentage increase to flag as regression
|
|
9
|
-
|
|
10
|
-
check_regression() {
|
|
11
|
-
local metric="$1" current="$2"
|
|
12
|
-
|
|
13
|
-
if [[ ! -f "$BASELINE_FILE" ]]; then
|
|
14
|
-
echo "No baseline found. Creating baseline..."
|
|
15
|
-
return 0
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
local baseline
|
|
19
|
-
baseline=$(jq -r "select(.metric == \"$metric\") | .value" "$BASELINE_FILE" | tail -1)
|
|
20
|
-
|
|
21
|
-
if [[ -n "$baseline" && "$baseline" != "null" ]]; then
|
|
22
|
-
local pct_change=$(((current - baseline) * 100 / baseline))
|
|
23
|
-
if [[ $pct_change -gt $REGRESSION_THRESHOLD ]]; then
|
|
24
|
-
echo "REGRESSION: $metric increased by ${pct_change}% (baseline: ${baseline}ms, current: ${current}ms)"
|
|
25
|
-
return 1
|
|
26
|
-
fi
|
|
27
|
-
echo "OK: $metric within threshold (baseline: ${baseline}, current: ${current}, change: ${pct_change}%)"
|
|
28
|
-
fi
|
|
29
|
-
return 0
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
main() {
|
|
33
|
-
echo "Checking for performance regressions..."
|
|
34
|
-
echo ""
|
|
35
|
-
|
|
36
|
-
# Find latest results file
|
|
37
|
-
local latest
|
|
38
|
-
latest=$(ls -t "$RESULTS_DIR"/benchmark_*.json 2>/dev/null | head -1 || true)
|
|
39
|
-
|
|
40
|
-
if [[ -z "$latest" ]]; then
|
|
41
|
-
echo "No benchmark results found. Run benchmark_runner.sh first."
|
|
42
|
-
exit 0
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
echo "Comparing against baseline: $BASELINE_FILE"
|
|
46
|
-
echo "Latest results: $latest"
|
|
47
|
-
echo ""
|
|
48
|
-
|
|
49
|
-
local regressions=0
|
|
50
|
-
|
|
51
|
-
# Check each metric in the latest results
|
|
52
|
-
while IFS= read -r line; do
|
|
53
|
-
[[ -z "$line" ]] && continue
|
|
54
|
-
local metric value
|
|
55
|
-
metric=$(echo "$line" | jq -r '.metric')
|
|
56
|
-
value=$(echo "$line" | jq -r '.value')
|
|
57
|
-
|
|
58
|
-
if ! check_regression "$metric" "$value"; then
|
|
59
|
-
((regressions++))
|
|
60
|
-
fi
|
|
61
|
-
done <"$latest"
|
|
62
|
-
|
|
63
|
-
echo ""
|
|
64
|
-
if [[ $regressions -gt 0 ]]; then
|
|
65
|
-
echo "Found $regressions regression(s)!"
|
|
66
|
-
exit 1
|
|
67
|
-
else
|
|
68
|
-
echo "No regressions detected."
|
|
69
|
-
exit 0
|
|
70
|
-
fi
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
main "$@"
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1091
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
# Stress test for shell functions
|
|
6
|
-
# Tests behavior under repeated rapid invocation
|
|
7
|
-
|
|
8
|
-
ITERATIONS="${1:-100}"
|
|
9
|
-
|
|
10
|
-
# Portable millisecond timing function
|
|
11
|
-
get_time_ms() {
|
|
12
|
-
if command -v perl >/dev/null 2>&1; then
|
|
13
|
-
perl -MTime::HiRes=time -e 'printf "%.0f\n", time * 1000'
|
|
14
|
-
else
|
|
15
|
-
# Fallback: seconds * 1000 (less precise)
|
|
16
|
-
echo $(($(date +%s) * 1000))
|
|
17
|
-
fi
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
# Note: This is test-only code. The eval below is necessary to execute
|
|
21
|
-
# dynamically constructed test commands. Do not use with untrusted input.
|
|
22
|
-
stress_test_function() {
|
|
23
|
-
local func_name="$1"
|
|
24
|
-
local test_cmd="$2"
|
|
25
|
-
local start end elapsed
|
|
26
|
-
|
|
27
|
-
# Validate test_cmd is not empty
|
|
28
|
-
if [[ -z "$test_cmd" ]]; then
|
|
29
|
-
echo " ERROR: empty test command for $func_name"
|
|
30
|
-
return 1
|
|
31
|
-
fi
|
|
32
|
-
|
|
33
|
-
echo "Stress testing $func_name ($ITERATIONS iterations)..."
|
|
34
|
-
|
|
35
|
-
start=$(get_time_ms)
|
|
36
|
-
for ((i = 1; i <= ITERATIONS; i++)); do
|
|
37
|
-
# shellcheck disable=SC2086
|
|
38
|
-
eval "$test_cmd" >/dev/null 2>&1 || true
|
|
39
|
-
done
|
|
40
|
-
end=$(get_time_ms)
|
|
41
|
-
|
|
42
|
-
elapsed=$((end - start))
|
|
43
|
-
local per_call=$((elapsed / ITERATIONS))
|
|
44
|
-
|
|
45
|
-
echo " Total: ${elapsed}ms, Per call: ${per_call}ms"
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
main() {
|
|
49
|
-
echo "Starting stress tests..."
|
|
50
|
-
echo ""
|
|
51
|
-
|
|
52
|
-
# Test genpass under load
|
|
53
|
-
source "$HOME/.dotfiles/.chezmoitemplates/functions/genpass.sh" 2>/dev/null || true
|
|
54
|
-
if type genpass &>/dev/null; then
|
|
55
|
-
stress_test_function "genpass" "genpass 16"
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
# Test extract help (no actual extraction)
|
|
59
|
-
source "$HOME/.dotfiles/.chezmoitemplates/functions/extract.sh" 2>/dev/null || true
|
|
60
|
-
if type extract &>/dev/null; then
|
|
61
|
-
stress_test_function "extract --help" "extract --help"
|
|
62
|
-
fi
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
main "$@"
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# MIT License
|
|
3
|
-
# Copyright (c) 2026 Sebastien Rousseau
|
|
4
|
-
# See LICENSE file for details.
|
|
5
|
-
|
|
6
|
-
# Script: test-aliases.sh
|
|
7
|
-
# Description: Verifies disjoint alias files for syntax errors.
|
|
8
|
-
|
|
9
|
-
set -e
|
|
10
|
-
|
|
11
|
-
echo "Testing alias syntax..."
|
|
12
|
-
|
|
13
|
-
ALIAS_DIR="$HOME/.dotfiles/.chezmoitemplates/aliases"
|
|
14
|
-
|
|
15
|
-
find "$ALIAS_DIR" -name "*.aliases.sh" | while read -r file; do
|
|
16
|
-
# Check for syntax errors using bash -n
|
|
17
|
-
if bash -n "$file"; then
|
|
18
|
-
echo " Checked: $(basename "$file")"
|
|
19
|
-
else
|
|
20
|
-
echo " Syntax Error: $(basename "$file")"
|
|
21
|
-
exit 1
|
|
22
|
-
fi
|
|
23
|
-
done
|
|
24
|
-
|
|
25
|
-
echo "All alias files passed syntax check."
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Test dotfiles README instructions across all environments using Docker
|
|
3
|
-
# Usage: ./scripts/tests/test-docker.sh [target...]
|
|
4
|
-
# Examples:
|
|
5
|
-
# ./scripts/tests/test-docker.sh # Run all tests
|
|
6
|
-
# ./scripts/tests/test-docker.sh ubuntu-test # Run only Ubuntu test
|
|
7
|
-
# ./scripts/tests/test-docker.sh arch-test # Run only Arch test
|
|
8
|
-
|
|
9
|
-
set -euo pipefail
|
|
10
|
-
|
|
11
|
-
RED='\033[0;31m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
BLUE='\033[0;34m'
|
|
14
|
-
BOLD='\033[1m'
|
|
15
|
-
NC='\033[0m'
|
|
16
|
-
|
|
17
|
-
TARGETS=(ubuntu-test debian-test arch-test ubuntu-eza-test)
|
|
18
|
-
PASSED=0
|
|
19
|
-
FAILED=0
|
|
20
|
-
FAILURES=()
|
|
21
|
-
|
|
22
|
-
# Use specified targets or all
|
|
23
|
-
if [ $# -gt 0 ]; then
|
|
24
|
-
TARGETS=("$@")
|
|
25
|
-
fi
|
|
26
|
-
|
|
27
|
-
echo -e "${BLUE}${BOLD}Testing dotfiles across ${#TARGETS[@]} environment(s)${NC}"
|
|
28
|
-
echo ""
|
|
29
|
-
|
|
30
|
-
for target in "${TARGETS[@]}"; do
|
|
31
|
-
echo -e "${BLUE}==> Building: ${BOLD}${target}${NC}"
|
|
32
|
-
if docker build --target "$target" -f Dockerfile.test -t "dotfiles-test:${target}" . 2>&1; then
|
|
33
|
-
echo -e "${GREEN}==> PASSED: ${target}${NC}"
|
|
34
|
-
PASSED=$((PASSED + 1))
|
|
35
|
-
else
|
|
36
|
-
echo -e "${RED}==> FAILED: ${target}${NC}"
|
|
37
|
-
FAILED=$((FAILED + 1))
|
|
38
|
-
FAILURES+=("$target")
|
|
39
|
-
fi
|
|
40
|
-
echo ""
|
|
41
|
-
done
|
|
42
|
-
|
|
43
|
-
echo -e "${BOLD}Results: ${GREEN}${PASSED} passed${NC}, ${RED}${FAILED} failed${NC} (${#TARGETS[@]} total)"
|
|
44
|
-
|
|
45
|
-
if [ ${FAILED} -gt 0 ]; then
|
|
46
|
-
echo -e "${RED}Failed targets: ${FAILURES[*]}${NC}"
|
|
47
|
-
exit 1
|
|
48
|
-
fi
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# shellcheck disable=SC1090,SC1091,SC2034,SC2030,SC2031
|
|
3
|
-
# Test AI aliases functionality
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
-
source "$SCRIPT_DIR/../framework/assertions.sh"
|
|
7
|
-
source "$SCRIPT_DIR/../framework/mocks.sh"
|
|
8
|
-
|
|
9
|
-
# Test setup
|
|
10
|
-
ALIASES_FILE="$REPO_ROOT/.chezmoitemplates/aliases/ai/ai.aliases.sh"
|
|
11
|
-
|
|
12
|
-
test_start "ai_aliases_file_exists"
|
|
13
|
-
assert_file_exists "$ALIASES_FILE" "AI aliases file should exist"
|
|
14
|
-
|
|
15
|
-
test_start "github_copilot_aliases_when_gh_available"
|
|
16
|
-
mock_init
|
|
17
|
-
# Mock gh command as available
|
|
18
|
-
mock_command "gh" "gh 2.42.0" 0
|
|
19
|
-
|
|
20
|
-
# Source aliases in a subshell with expand_aliases enabled
|
|
21
|
-
(
|
|
22
|
-
shopt -s expand_aliases
|
|
23
|
-
export PATH="$MOCK_BIN_DIR:$PATH"
|
|
24
|
-
source "$ALIASES_FILE"
|
|
25
|
-
|
|
26
|
-
# Check aliases are defined using alias command
|
|
27
|
-
alias ghcp >/dev/null 2>&1 && echo "ghcp_defined"
|
|
28
|
-
alias ghs >/dev/null 2>&1 && echo "ghs_defined"
|
|
29
|
-
alias ghe >/dev/null 2>&1 && echo "ghe_defined"
|
|
30
|
-
) >/tmp/test_output
|
|
31
|
-
|
|
32
|
-
assert_file_contains "/tmp/test_output" "ghcp_defined" "ghcp alias should be defined when gh available"
|
|
33
|
-
assert_file_contains "/tmp/test_output" "ghs_defined" "ghs alias should be defined when gh available"
|
|
34
|
-
assert_file_contains "/tmp/test_output" "ghe_defined" "ghe alias should be defined when gh available"
|
|
35
|
-
|
|
36
|
-
rm -f /tmp/test_output
|
|
37
|
-
mock_cleanup
|
|
38
|
-
|
|
39
|
-
test_start "github_copilot_aliases_when_gh_unavailable"
|
|
40
|
-
mock_init
|
|
41
|
-
# Use empty mock dir as PATH to ensure real gh isn't found
|
|
42
|
-
# (command -v, source, alias are builtins - don't need PATH)
|
|
43
|
-
|
|
44
|
-
(
|
|
45
|
-
shopt -s expand_aliases
|
|
46
|
-
export PATH="$MOCK_BIN_DIR"
|
|
47
|
-
source "$ALIASES_FILE"
|
|
48
|
-
|
|
49
|
-
# Check aliases are NOT defined
|
|
50
|
-
alias ghcp >/dev/null 2>&1 || echo "ghcp_not_defined"
|
|
51
|
-
alias ghs >/dev/null 2>&1 || echo "ghs_not_defined"
|
|
52
|
-
alias ghe >/dev/null 2>&1 || echo "ghe_not_defined"
|
|
53
|
-
) >/tmp/test_output
|
|
54
|
-
|
|
55
|
-
assert_file_contains "/tmp/test_output" "ghcp_not_defined" "ghcp alias should not be defined when gh unavailable"
|
|
56
|
-
assert_file_contains "/tmp/test_output" "ghs_not_defined" "ghs alias should not be defined when gh unavailable"
|
|
57
|
-
assert_file_contains "/tmp/test_output" "ghe_not_defined" "ghe alias should not be defined when gh unavailable"
|
|
58
|
-
|
|
59
|
-
rm -f /tmp/test_output
|
|
60
|
-
mock_cleanup
|
|
61
|
-
|
|
62
|
-
test_start "fabric_alias_when_fabric_available"
|
|
63
|
-
mock_init
|
|
64
|
-
mock_command "fabric" "fabric v1.0.0" 0
|
|
65
|
-
|
|
66
|
-
(
|
|
67
|
-
shopt -s expand_aliases
|
|
68
|
-
export PATH="$MOCK_BIN_DIR:$PATH"
|
|
69
|
-
source "$ALIASES_FILE"
|
|
70
|
-
|
|
71
|
-
alias fab >/dev/null 2>&1 && echo "fab_defined"
|
|
72
|
-
) >/tmp/test_output
|
|
73
|
-
|
|
74
|
-
assert_file_contains "/tmp/test_output" "fab_defined" "fab alias should be defined when fabric available"
|
|
75
|
-
|
|
76
|
-
rm -f /tmp/test_output
|
|
77
|
-
mock_cleanup
|
|
78
|
-
|
|
79
|
-
test_start "fabric_alias_when_fabric_unavailable"
|
|
80
|
-
mock_init
|
|
81
|
-
# Use empty mock dir as PATH to ensure real fabric isn't found
|
|
82
|
-
|
|
83
|
-
(
|
|
84
|
-
shopt -s expand_aliases
|
|
85
|
-
export PATH="$MOCK_BIN_DIR"
|
|
86
|
-
source "$ALIASES_FILE"
|
|
87
|
-
|
|
88
|
-
alias fab >/dev/null 2>&1 || echo "fab_not_defined"
|
|
89
|
-
) >/tmp/test_output
|
|
90
|
-
|
|
91
|
-
assert_file_contains "/tmp/test_output" "fab_not_defined" "fab alias should not be defined when fabric unavailable"
|
|
92
|
-
|
|
93
|
-
rm -f /tmp/test_output
|
|
94
|
-
mock_cleanup
|
|
95
|
-
|
|
96
|
-
test_start "ollama_aliases_when_ollama_available"
|
|
97
|
-
mock_init
|
|
98
|
-
mock_command "ollama" "ollama version 1.0.0" 0
|
|
99
|
-
|
|
100
|
-
(
|
|
101
|
-
shopt -s expand_aliases
|
|
102
|
-
export PATH="$MOCK_BIN_DIR:$PATH"
|
|
103
|
-
source "$ALIASES_FILE"
|
|
104
|
-
|
|
105
|
-
alias ol >/dev/null 2>&1 && echo "ol_defined"
|
|
106
|
-
alias olr >/dev/null 2>&1 && echo "olr_defined"
|
|
107
|
-
alias oll >/dev/null 2>&1 && echo "oll_defined"
|
|
108
|
-
alias olp >/dev/null 2>&1 && echo "olp_defined"
|
|
109
|
-
alias ollama-status >/dev/null 2>&1 && echo "ollama_status_defined"
|
|
110
|
-
alias ollama-show >/dev/null 2>&1 && echo "ollama_show_defined"
|
|
111
|
-
) >/tmp/test_output
|
|
112
|
-
|
|
113
|
-
assert_file_contains "/tmp/test_output" "ol_defined" "ol alias should be defined when ollama available"
|
|
114
|
-
assert_file_contains "/tmp/test_output" "olr_defined" "olr alias should be defined when ollama available"
|
|
115
|
-
assert_file_contains "/tmp/test_output" "oll_defined" "oll alias should be defined when ollama available"
|
|
116
|
-
assert_file_contains "/tmp/test_output" "olp_defined" "olp alias should be defined when ollama available"
|
|
117
|
-
assert_file_contains "/tmp/test_output" "ollama_status_defined" "ollama-status alias should be defined when ollama available"
|
|
118
|
-
assert_file_contains "/tmp/test_output" "ollama_show_defined" "ollama-show alias should be defined when ollama available"
|
|
119
|
-
|
|
120
|
-
rm -f /tmp/test_output
|
|
121
|
-
mock_cleanup
|
|
122
|
-
|
|
123
|
-
test_start "ollama_aliases_when_ollama_unavailable"
|
|
124
|
-
mock_init
|
|
125
|
-
# Use empty mock dir as PATH to ensure real ollama isn't found
|
|
126
|
-
|
|
127
|
-
(
|
|
128
|
-
shopt -s expand_aliases
|
|
129
|
-
export PATH="$MOCK_BIN_DIR"
|
|
130
|
-
source "$ALIASES_FILE"
|
|
131
|
-
|
|
132
|
-
alias ol >/dev/null 2>&1 || echo "ol_not_defined"
|
|
133
|
-
alias olr >/dev/null 2>&1 || echo "olr_not_defined"
|
|
134
|
-
alias oll >/dev/null 2>&1 || echo "oll_not_defined"
|
|
135
|
-
alias olp >/dev/null 2>&1 || echo "olp_not_defined"
|
|
136
|
-
alias ollama-status >/dev/null 2>&1 || echo "ollama_status_not_defined"
|
|
137
|
-
alias ollama-show >/dev/null 2>&1 || echo "ollama_show_not_defined"
|
|
138
|
-
) >/tmp/test_output
|
|
139
|
-
|
|
140
|
-
assert_file_contains "/tmp/test_output" "ol_not_defined" "ol alias should not be defined when ollama unavailable"
|
|
141
|
-
assert_file_contains "/tmp/test_output" "olr_not_defined" "olr alias should not be defined when ollama unavailable"
|
|
142
|
-
assert_file_contains "/tmp/test_output" "oll_not_defined" "oll alias should not be defined when ollama unavailable"
|
|
143
|
-
assert_file_contains "/tmp/test_output" "olp_not_defined" "olp alias should not be defined when ollama unavailable"
|
|
144
|
-
assert_file_contains "/tmp/test_output" "ollama_status_not_defined" "ollama-status alias should not be defined when ollama unavailable"
|
|
145
|
-
assert_file_contains "/tmp/test_output" "ollama_show_not_defined" "ollama-show alias should not be defined when ollama unavailable"
|
|
146
|
-
|
|
147
|
-
rm -f /tmp/test_output
|
|
148
|
-
mock_cleanup
|
|
149
|
-
|
|
150
|
-
test_start "aliases_syntax_check"
|
|
151
|
-
assert_exit_code 0 "bash -n '$ALIASES_FILE'"
|
|
152
|
-
|
|
153
|
-
test_start "aliases_shellcheck"
|
|
154
|
-
if command -v shellcheck >/dev/null 2>&1; then
|
|
155
|
-
assert_exit_code 0 "shellcheck '$ALIASES_FILE'"
|
|
156
|
-
else
|
|
157
|
-
echo "SKIP: shellcheck not available"
|
|
158
|
-
fi
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
set -euo pipefail
|
|
3
|
-
|
|
4
|
-
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
|
5
|
-
|
|
6
|
-
fail() {
|
|
7
|
-
echo "FAIL: $1" >&2
|
|
8
|
-
exit 1
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
pass() {
|
|
12
|
-
echo "PASS: $1"
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
check_contains() {
|
|
16
|
-
local file="$1"
|
|
17
|
-
local pattern="$2"
|
|
18
|
-
if command -v rg >/dev/null 2>&1; then
|
|
19
|
-
rg -n --fixed-strings "$pattern" "$file" >/dev/null || fail "Missing pattern in $file: $pattern"
|
|
20
|
-
else
|
|
21
|
-
grep -nF "$pattern" "$file" >/dev/null || fail "Missing pattern in $file: $pattern"
|
|
22
|
-
fi
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
HC_FILE="$REPO_ROOT/scripts/ops/health-check.sh"
|
|
26
|
-
APPLY_FILE="$REPO_ROOT/scripts/ops/chezmoi-apply.sh"
|
|
27
|
-
DOC_FILE="$REPO_ROOT/docs/TOOLS.md"
|
|
28
|
-
PYTOOLS_FILE="$REPO_ROOT/install/provision/run_onchange_25-python-tools.sh.tmpl"
|
|
29
|
-
|
|
30
|
-
# Health check should include AI CLIs in optional deps
|
|
31
|
-
check_contains "$HC_FILE" "optional_deps=(ripgrep fd bat fzf eza jq claude gemini sgpt ollama opencode aider)"
|
|
32
|
-
|
|
33
|
-
# Chezmoi apply should emit AI CLI checks
|
|
34
|
-
check_contains "$APPLY_FILE" "AI provider CLI checks (optional):"
|
|
35
|
-
check_contains "$APPLY_FILE" "check_ai_cli \"sgpt\""
|
|
36
|
-
check_contains "$APPLY_FILE" "check_ai_cli \"ollama\""
|
|
37
|
-
|
|
38
|
-
# Tools catalog should list sgpt and ollama
|
|
39
|
-
check_contains "$DOC_FILE" "| sgpt | shell-gpt |"
|
|
40
|
-
check_contains "$DOC_FILE" "| ollama | ollama |"
|
|
41
|
-
|
|
42
|
-
# Python tools should include key dev tools
|
|
43
|
-
check_contains "$PYTOOLS_FILE" "install_python_tool \"pytest\""
|
|
44
|
-
check_contains "$PYTOOLS_FILE" "install_python_tool \"bandit\""
|
|
45
|
-
check_contains "$PYTOOLS_FILE" "install_python_tool \"mypy\""
|
|
46
|
-
|
|
47
|
-
pass "AI CLI dependency checks and docs are wired"
|