@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,498 @@
|
|
|
1
|
+
# .dotfiles (v{{ .dotfiles_version }}) - <https://dotfiles.io>
|
|
2
|
+
# Made With ❤️ in London, United Kingdom
|
|
3
|
+
# Designed by
|
|
4
|
+
# Copyright (c) 2015-2026. All rights reserved.
|
|
5
|
+
# License: MIT
|
|
6
|
+
|
|
7
|
+
# Performance optimization - skip if not interactive
|
|
8
|
+
[[ -o interactive ]] || return
|
|
9
|
+
|
|
10
|
+
# Only source once if being re-sourced (in the same shell scope)
|
|
11
|
+
if [[ -v DOTFILES_SOURCED ]]; then
|
|
12
|
+
return
|
|
13
|
+
fi
|
|
14
|
+
DOTFILES_SOURCED=1
|
|
15
|
+
|
|
16
|
+
{{- /* Input Validation: Ensure crucial variables are set */ -}}
|
|
17
|
+
{{- if not .chezmoi.homeDir -}}
|
|
18
|
+
{{- fail "Critical Error: .chezmoi.homeDir is not set!" -}}
|
|
19
|
+
{{- end -}}
|
|
20
|
+
|
|
21
|
+
{{- if eq .chezmoi.os "darwin" }}
|
|
22
|
+
export FORCE_COLOR_OS="macOS"
|
|
23
|
+
{{- else if eq .chezmoi.os "linux" }}
|
|
24
|
+
export FORCE_COLOR_OS="Linux"
|
|
25
|
+
{{- else if eq .chezmoi.os "windows" }}
|
|
26
|
+
export FORCE_COLOR_OS="Windows"
|
|
27
|
+
{{- end }}
|
|
28
|
+
|
|
29
|
+
{{- $profile := default "laptop" .profile -}}
|
|
30
|
+
{{- $features := default (dict "zsh" true "nvim" true "tmux" true "gui" true "secrets" true) .features -}}
|
|
31
|
+
{{- $theme := default "macos-monterey-dark" .theme -}}
|
|
32
|
+
{{- $strict_mode := default false (index . "strict_mode") -}}
|
|
33
|
+
{{- $enabled := list -}}
|
|
34
|
+
{{- range $k, $v := $features }}{{- if $v }}{{- $enabled = append $enabled $k }}{{- end }}{{- end }}
|
|
35
|
+
|
|
36
|
+
export DOTFILES_PROFILE="{{ $profile }}"
|
|
37
|
+
export DOTFILES_FEATURES="{{ join "," $enabled }}"
|
|
38
|
+
export DOTFILES_THEME="{{ $theme }}"
|
|
39
|
+
: ${DOTFILES_STARTUP_MODE:=full}
|
|
40
|
+
: ${DOTFILES_FAST:=0}
|
|
41
|
+
: ${DOTFILES_ULTRA_FAST:=0}
|
|
42
|
+
: ${DOTFILES_AI:=0}
|
|
43
|
+
: ${DOTFILES_ALIAS_STRICT_MODE:={{ if $strict_mode }}1{{ else }}0{{ end }}}
|
|
44
|
+
: ${DOTFILES_ULTRA_FAST_PROMPT:=1}
|
|
45
|
+
: ${DOTFILES_LAYERS_LOAD:=ondemand}
|
|
46
|
+
: ${DOTFILES_LAYERS_PREWARM:=system,text,api}
|
|
47
|
+
: ${DOTFILES_ALIAS_WRAPPER:={{ if .features.alias_wrapper }}1{{ else }}0{{ end }}}
|
|
48
|
+
|
|
49
|
+
# Default compinit based on profile (can be overridden by env)
|
|
50
|
+
if [[ -z "${DOTFILES_ENABLE_COMPINIT+x}" ]]; then
|
|
51
|
+
case "${DOTFILES_PROFILE}" in
|
|
52
|
+
laptop|desktop) DOTFILES_ENABLE_COMPINIT=1 ;;
|
|
53
|
+
*) DOTFILES_ENABLE_COMPINIT=0 ;;
|
|
54
|
+
esac
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# Startup mode override (if explicit mode set and flags not already set)
|
|
58
|
+
if [[ "${DOTFILES_FAST}" == "0" ]] && [[ "${DOTFILES_ULTRA_FAST}" == "0" ]]; then
|
|
59
|
+
if [[ "${DOTFILES_STARTUP_MODE}" == "fast" ]]; then
|
|
60
|
+
DOTFILES_FAST=1
|
|
61
|
+
elif [[ "${DOTFILES_STARTUP_MODE}" == "ultra" ]]; then
|
|
62
|
+
DOTFILES_ULTRA_FAST=1
|
|
63
|
+
DOTFILES_FAST=1
|
|
64
|
+
fi
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Ultra-fast mode: minimal init (skip rc.d, plugins, prompts, AI, completions)
|
|
68
|
+
if [[ "${DOTFILES_ULTRA_FAST}" == "1" ]]; then
|
|
69
|
+
export DOTFILES_FAST=1
|
|
70
|
+
if [[ "${DOTFILES_ULTRA_FAST_PROMPT}" == "1" ]]; then
|
|
71
|
+
PROMPT='%n@%m:%~%# '
|
|
72
|
+
RPROMPT=''
|
|
73
|
+
fi
|
|
74
|
+
# Ensure no precmd/preexec hooks run in ultra-fast mode
|
|
75
|
+
precmd_functions=()
|
|
76
|
+
preexec_functions=()
|
|
77
|
+
unset -f precmd preexec
|
|
78
|
+
typeset -aU path
|
|
79
|
+
return
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Cached eval helper â sources cached init scripts, regenerates when stale
|
|
83
|
+
# Debug/Trace modes — observability for shell startup
|
|
84
|
+
: ${DOTFILES_DEBUG:=0}
|
|
85
|
+
: ${DOTFILES_TRACE:=0}
|
|
86
|
+
|
|
87
|
+
if [[ "${DOTFILES_TRACE}" == "1" ]]; then
|
|
88
|
+
_dotfiles_trace_dir="${XDG_STATE_HOME:-$HOME/.local/state}/dotfiles"
|
|
89
|
+
mkdir -p "$_dotfiles_trace_dir"
|
|
90
|
+
exec 3>&2 2>"$_dotfiles_trace_dir/debug.log"
|
|
91
|
+
PS4='+%D{%s.%6.} %N:%i> '
|
|
92
|
+
set -x
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
if [[ "${DOTFILES_DEBUG}" == "1" ]]; then
|
|
96
|
+
_dotfiles_debug_start=${EPOCHREALTIME:-$(date +%s.%N)}
|
|
97
|
+
_dotfiles_debug() {
|
|
98
|
+
local now=${EPOCHREALTIME:-$(date +%s.%N)}
|
|
99
|
+
local elapsed
|
|
100
|
+
elapsed=$(printf '%.0f' "$(( (now - _dotfiles_debug_start) * 1000 ))")
|
|
101
|
+
printf '[debug %4dms] %s\n' "$elapsed" "$1" >&2
|
|
102
|
+
}
|
|
103
|
+
_dotfiles_debug "startup begins"
|
|
104
|
+
else
|
|
105
|
+
_dotfiles_debug() { :; }
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
_SHELL_CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh"
|
|
109
|
+
[[ -d "$_SHELL_CACHE" ]] || mkdir -p "$_SHELL_CACHE"
|
|
110
|
+
|
|
111
|
+
_cached_eval() {
|
|
112
|
+
local label=$1; shift
|
|
113
|
+
local cache="$_SHELL_CACHE/${label}.zsh"
|
|
114
|
+
local bin="${commands[$1]}"
|
|
115
|
+
if [[ -f "$cache" ]] && [[ -z "$bin" || "$cache" -nt "$bin" ]]; then
|
|
116
|
+
source "$cache"
|
|
117
|
+
else
|
|
118
|
+
local init_output
|
|
119
|
+
local suspicious_re
|
|
120
|
+
init_output=$("$@" 2>/dev/null)
|
|
121
|
+
suspicious_re='(curl[[:space:]].*\|[[:space:]]*(ba)?sh|wget[[:space:]].*\|[[:space:]]*(ba)?sh|nc[[:space:]]+-e|/dev/tcp/|base64[[:space:]]+-d[[:space:]]*\|)'
|
|
122
|
+
# Reject suspicious patterns indicating malicious payloads
|
|
123
|
+
if printf '%s\n' "$init_output" | LC_ALL=C grep -Eqs -- "$suspicious_re"; then
|
|
124
|
+
print -u2 "[WARN] Suspicious output from $label init, skipping"
|
|
125
|
+
return 1
|
|
126
|
+
fi
|
|
127
|
+
print -r -- "$init_output" > "${cache}.tmp.$$"
|
|
128
|
+
mv "${cache}.tmp.$$" "$cache"
|
|
129
|
+
source "$cache"
|
|
130
|
+
{ zcompile "$cache" } &!
|
|
131
|
+
fi
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# Lightweight precmd hook manager (faster than add-zsh-hook)
|
|
135
|
+
_dotfiles_add_precmd() {
|
|
136
|
+
local fn="$1"
|
|
137
|
+
[[ -z "$fn" ]] && return 0
|
|
138
|
+
precmd_functions=(${precmd_functions:#$fn} "$fn")
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
_dotfiles_del_precmd() {
|
|
142
|
+
local fn="$1"
|
|
143
|
+
[[ -z "$fn" ]] && return 0
|
|
144
|
+
precmd_functions=(${precmd_functions:#$fn})
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# ==============================================================================
|
|
148
|
+
# Dotfiles 2026: Zero-Jank & Artifact-Only Mode Foundation
|
|
149
|
+
# ==============================================================================
|
|
150
|
+
export DOTFILES_ARTIFACT_MODE="${DOTFILES_ARTIFACT_MODE:-0}"
|
|
151
|
+
|
|
152
|
+
if [[ "$DOTFILES_ARTIFACT_MODE" == "1" ]]; then
|
|
153
|
+
# The Canvas: Strip away all visual noise.
|
|
154
|
+
export PROMPT="%F{green}➜ %f"
|
|
155
|
+
export RPROMPT=""
|
|
156
|
+
# Suppress all background job notifications
|
|
157
|
+
setopt NO_NOTIFY
|
|
158
|
+
setopt NO_MONITOR
|
|
159
|
+
fi
|
|
160
|
+
# ==============================================================================
|
|
161
|
+
|
|
162
|
+
# Lightweight preexec hook manager
|
|
163
|
+
_dotfiles_add_preexec() {
|
|
164
|
+
local fn="$1"
|
|
165
|
+
[[ -z "$fn" ]] && return 0
|
|
166
|
+
preexec_functions=(${preexec_functions:#$fn} "$fn")
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
_dotfiles_del_preexec() {
|
|
170
|
+
local fn="$1"
|
|
171
|
+
[[ -z "$fn" ]] && return 0
|
|
172
|
+
preexec_functions=(${preexec_functions:#$fn})
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
## ð
ð
°ðð
¸ð
°ðð
¸ð
°ð
±ð
»ð
´ð - Core variables, plugins, and options
|
|
176
|
+
ZSH_RC_DIR="${HOME}/.config/zsh/rc.d"
|
|
177
|
+
if [[ -d "${ZSH_RC_DIR}" ]]; then
|
|
178
|
+
for rc_file in "${ZSH_RC_DIR}"/**/*.zsh(N); do
|
|
179
|
+
source "${rc_file}"
|
|
180
|
+
done
|
|
181
|
+
fi
|
|
182
|
+
|
|
183
|
+
# User-local rc.d extensions (not managed by chezmoi)
|
|
184
|
+
if [[ -d "${ZDOTDIR:-$HOME/.config/zsh}/rc.d.local" ]]; then
|
|
185
|
+
for _rc_local in "${ZDOTDIR:-$HOME/.config/zsh}"/rc.d.local/*.zsh(N); do
|
|
186
|
+
source "$_rc_local"
|
|
187
|
+
done
|
|
188
|
+
unset _rc_local
|
|
189
|
+
fi
|
|
190
|
+
|
|
191
|
+
###############################
|
|
192
|
+
# Performance: Auto-Zcompile #
|
|
193
|
+
###############################
|
|
194
|
+
zcompile_many() {
|
|
195
|
+
local f
|
|
196
|
+
for f; do
|
|
197
|
+
# Compile if source is newer than .zwc or .zwc doesn't exist
|
|
198
|
+
if [[ -f "$f" ]]; then
|
|
199
|
+
if [[ ! -f "${f}.zwc" || "$f" -nt "${f}.zwc" ]]; then
|
|
200
|
+
zcompile "$f"
|
|
201
|
+
fi
|
|
202
|
+
fi
|
|
203
|
+
done
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
# Compile main config and generated files in background
|
|
207
|
+
if [[ -o interactive ]]; then
|
|
208
|
+
(
|
|
209
|
+
zcompile_many "${HOME}/.zshrc" \
|
|
210
|
+
"${HOME}/.config/shell/aliases.sh" \
|
|
211
|
+
"${HOME}/.config/shell/paths.sh" \
|
|
212
|
+
"${HOME}/.config/shell/functions.sh" \
|
|
213
|
+
"${HOME}/.config/shell/00-core-paths.sh" \
|
|
214
|
+
"${HOME}/.config/shell/05-core-safety.sh" \
|
|
215
|
+
"${HOME}/.config/shell/40-ls-colors.sh" \
|
|
216
|
+
"${HOME}/.config/shell/50-logic-functions-core.sh" \
|
|
217
|
+
"${HOME}/.config/shell/90-ux-aliases.sh" \
|
|
218
|
+
/opt/homebrew/opt/fzf/shell/completion.zsh \
|
|
219
|
+
/opt/homebrew/opt/fzf/shell/key-bindings.zsh &
|
|
220
|
+
)
|
|
221
|
+
fi
|
|
222
|
+
|
|
223
|
+
# Legacy Loader (Disabled in favor of Chezmoi Universal Config)
|
|
224
|
+
# _DOTFILES_CACHE="${HOME}/.zsh_dotfiles_cache"
|
|
225
|
+
# load_dotfiles() { ... }
|
|
226
|
+
# load_dotfiles
|
|
227
|
+
|
|
228
|
+
# Remove duplicates in zsh $PATH
|
|
229
|
+
typeset -aU path
|
|
230
|
+
|
|
231
|
+
# Load local customizations if they exist
|
|
232
|
+
[[ -f "${HOME}/.zshrc.local" ]] && source "${HOME}/.zshrc.local"
|
|
233
|
+
|
|
234
|
+
# Vendor / Enterprise Hooks (Site-local overrides)
|
|
235
|
+
# Supports drop-in configs from system management tools
|
|
236
|
+
if [[ -d "/etc/dotfiles/defaults.d" ]]; then
|
|
237
|
+
for hook in /etc/dotfiles/defaults.d/*.sh(N); do
|
|
238
|
+
source "$hook"
|
|
239
|
+
done
|
|
240
|
+
fi
|
|
241
|
+
|
|
242
|
+
# Load Chezmoi-managed Universal Configuration Layers (Lexical Order)
|
|
243
|
+
# 00-19: Core (Paths, Safety)
|
|
244
|
+
# 20-49: Middleware (Exports, Options)
|
|
245
|
+
# 50-89: Toolchain & Logic (Functions, Rust tools)
|
|
246
|
+
# 90-99: UX (Aliases, Prompts)
|
|
247
|
+
#
|
|
248
|
+
# Optimized loading of core configurations + eager aliases
|
|
249
|
+
if [[ "${DOTFILES_FAST}" == "1" ]]; then
|
|
250
|
+
_core_layers=(00-core-paths 05-core-safety)
|
|
251
|
+
else
|
|
252
|
+
_core_layers=(00-core-paths 05-core-safety 90-ux-aliases)
|
|
253
|
+
fi
|
|
254
|
+
for core_layer in "${_core_layers[@]}"; do
|
|
255
|
+
[[ -f "${HOME}/.config/shell/${core_layer}.sh" ]] && source "${HOME}/.config/shell/${core_layer}.sh"
|
|
256
|
+
done
|
|
257
|
+
unset _core_layers
|
|
258
|
+
|
|
259
|
+
# Starship prompt (eager — must survive cache clears for consistent UI)
|
|
260
|
+
if [[ "$DOTFILES_ARTIFACT_MODE" != "1" ]] && (( ${+commands[starship]} )); then
|
|
261
|
+
_cached_eval starship-init starship init zsh
|
|
262
|
+
fi
|
|
263
|
+
|
|
264
|
+
# User-local modules (aliases, functions — not managed by chezmoi)
|
|
265
|
+
for _mod_dir in "${XDG_CONFIG_HOME:-$HOME/.config}/dotfiles/modules.d"/*(N/); do
|
|
266
|
+
for _mod_file in "$_mod_dir"/*.sh(N); do
|
|
267
|
+
source "$_mod_file"
|
|
268
|
+
done
|
|
269
|
+
done
|
|
270
|
+
unset _mod_dir _mod_file
|
|
271
|
+
|
|
272
|
+
if [[ "${DOTFILES_FAST}" != "1" ]]; then
|
|
273
|
+
# On-demand loading of heavy layers (functions + aliases only when needed)
|
|
274
|
+
DOTFILES_LAYERS_LOADED=0
|
|
275
|
+
DOTFILES_LAYERS_LOAD_STATE=idle
|
|
276
|
+
unset DOTFILES_LAYERS_LOAD_STATUS
|
|
277
|
+
_dotfiles_load_heavy_layers_stage1() {
|
|
278
|
+
[[ "${DOTFILES_LAYERS_LOAD_STATE}" == "stage1" || "${DOTFILES_LAYERS_LOAD_STATE}" == "ready" ]] && return 0
|
|
279
|
+
DOTFILES_LAYERS_LOAD_STATE=loading
|
|
280
|
+
unset DOTFILES_LAYERS_LOAD_STATUS
|
|
281
|
+
[[ -f "${HOME}/.config/shell/10-secrets.sh" ]] && source "${HOME}/.config/shell/10-secrets.sh"
|
|
282
|
+
[[ -f "${HOME}/.config/shell/40-ls-colors.sh" ]] && source "${HOME}/.config/shell/40-ls-colors.sh"
|
|
283
|
+
[[ -f "${HOME}/.config/shell/50-logic-functions-core.sh" ]] && source "${HOME}/.config/shell/50-logic-functions-core.sh"
|
|
284
|
+
[[ -f "${HOME}/.config/shell/91-ux-aliases-lazy.sh" ]] && source "${HOME}/.config/shell/91-ux-aliases-lazy.sh"
|
|
285
|
+
DOTFILES_LAYERS_LOAD_STATE=stage1
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
_dotfiles_load_heavy_layers_stage2() {
|
|
289
|
+
[[ "${DOTFILES_LAYERS_LOAD_STATE}" == "ready" ]] && return 0
|
|
290
|
+
[[ -f "${HOME}/.config/shell/51-logic-functions-extra.sh" ]] && source "${HOME}/.config/shell/51-logic-functions-extra.sh"
|
|
291
|
+
# Compile extra functions for faster future loads
|
|
292
|
+
if command -v zcompile >/dev/null 2>&1; then
|
|
293
|
+
{ [[ ! -f "${HOME}/.config/shell/51-logic-functions-extra.sh.zwc" || "${HOME}/.config/shell/51-logic-functions-extra.sh" -nt "${HOME}/.config/shell/51-logic-functions-extra.sh.zwc" ]] && zcompile "${HOME}/.config/shell/51-logic-functions-extra.sh" } &!
|
|
294
|
+
fi
|
|
295
|
+
DOTFILES_LAYERS_LOAD_STATE=ready
|
|
296
|
+
DOTFILES_LAYERS_LOAD_STATUS=ready
|
|
297
|
+
export DOTFILES_LAYERS_LOAD_STATUS
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
_dotfiles_prewarm_groups() {
|
|
301
|
+
local -a _groups
|
|
302
|
+
_groups=(${(s:,:)DOTFILES_LAYERS_PREWARM})
|
|
303
|
+
local g
|
|
304
|
+
for g in "${_groups[@]}"; do
|
|
305
|
+
[[ -z "$g" ]] && continue
|
|
306
|
+
if (( ${+functions[_dotfiles_load_group_${g}]} )); then
|
|
307
|
+
"_dotfiles_load_group_${g}"
|
|
308
|
+
fi
|
|
309
|
+
done
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
_dotfiles_load_heavy_layers() {
|
|
313
|
+
[[ "${DOTFILES_LAYERS_LOADED}" == "1" ]] && return 0
|
|
314
|
+
DOTFILES_LAYERS_LOADED=1
|
|
315
|
+
_dotfiles_load_heavy_layers_stage1
|
|
316
|
+
_dotfiles_load_heavy_layers_stage2
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
# Optional background prewarm for heavy layers (idle after first prompt)
|
|
320
|
+
_dotfiles_schedule_heavy_layers() {
|
|
321
|
+
if [[ "${DOTFILES_LAYERS_LOAD}" == "background" ]]; then
|
|
322
|
+
if [[ -n "${ZSH_EXECUTION_STRING:-}" ]]; then
|
|
323
|
+
(sleep 1; _dotfiles_load_heavy_layers_stage1; _dotfiles_load_heavy_layers_stage2; _dotfiles_prewarm_groups) &
|
|
324
|
+
else
|
|
325
|
+
zmodload zsh/sched 2>/dev/null || return 0
|
|
326
|
+
sched +1 _dotfiles_load_heavy_layers_stage1
|
|
327
|
+
sched +2 _dotfiles_load_heavy_layers_stage2
|
|
328
|
+
# Prewarm selected groups after stage2 loads stubs
|
|
329
|
+
sched +3 _dotfiles_prewarm_groups
|
|
330
|
+
fi
|
|
331
|
+
fi
|
|
332
|
+
}
|
|
333
|
+
# Compatibility: use add-zsh-hook when available (tests rely on this)
|
|
334
|
+
autoload -Uz add-zsh-hook
|
|
335
|
+
_load_deferred_layers() {
|
|
336
|
+
if (( ${+functions[add-zsh-hook]} )); then
|
|
337
|
+
add-zsh-hook -d precmd _load_deferred_layers
|
|
338
|
+
else
|
|
339
|
+
_dotfiles_del_precmd _load_deferred_layers
|
|
340
|
+
fi
|
|
341
|
+
_dotfiles_schedule_heavy_layers
|
|
342
|
+
}
|
|
343
|
+
if (( ${+functions[add-zsh-hook]} )); then
|
|
344
|
+
add-zsh-hook precmd _load_deferred_layers
|
|
345
|
+
else
|
|
346
|
+
_dotfiles_add_precmd _load_deferred_layers
|
|
347
|
+
fi
|
|
348
|
+
|
|
349
|
+
# Capture existing command_not_found handler (if any)
|
|
350
|
+
if (( ${+functions[command_not_found_handler]} )); then
|
|
351
|
+
functions[_dotfiles_prev_command_not_found_handler]="${functions[command_not_found_handler]}"
|
|
352
|
+
fi
|
|
353
|
+
|
|
354
|
+
command_not_found_handler() {
|
|
355
|
+
local cmd="$1"
|
|
356
|
+
shift || true
|
|
357
|
+
|
|
358
|
+
if [[ "${DOTFILES_LAYERS_LOADED}" != "1" ]]; then
|
|
359
|
+
_dotfiles_load_heavy_layers_stage1
|
|
360
|
+
if (( ${+functions[$cmd]} )); then
|
|
361
|
+
"$cmd" "$@"
|
|
362
|
+
return $?
|
|
363
|
+
fi
|
|
364
|
+
if alias "$cmd" >/dev/null 2>&1; then
|
|
365
|
+
local -a _args
|
|
366
|
+
_args=("$@")
|
|
367
|
+
eval "$cmd ${(@q)_args}"
|
|
368
|
+
unset _args
|
|
369
|
+
return $?
|
|
370
|
+
fi
|
|
371
|
+
_dotfiles_load_heavy_layers_stage2
|
|
372
|
+
if (( ${+functions[$cmd]} )); then
|
|
373
|
+
"$cmd" "$@"
|
|
374
|
+
return $?
|
|
375
|
+
fi
|
|
376
|
+
if alias "$cmd" >/dev/null 2>&1; then
|
|
377
|
+
local -a _args2
|
|
378
|
+
_args2=("$@")
|
|
379
|
+
eval "$cmd ${(@q)_args2}"
|
|
380
|
+
unset _args2
|
|
381
|
+
return $?
|
|
382
|
+
fi
|
|
383
|
+
fi
|
|
384
|
+
|
|
385
|
+
if (( ${+functions[_dotfiles_prev_command_not_found_handler]} )); then
|
|
386
|
+
_dotfiles_prev_command_not_found_handler "$cmd" "$@"
|
|
387
|
+
return $?
|
|
388
|
+
fi
|
|
389
|
+
|
|
390
|
+
print -r -- "zsh: command not found: ${cmd}" >&2
|
|
391
|
+
return 127
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
# dot load: force heavy layers now
|
|
395
|
+
unalias dot 2>/dev/null
|
|
396
|
+
functions[dot]='
|
|
397
|
+
if [[ "$1" == "load" ]]; then
|
|
398
|
+
if [[ "$2" == "--background" ]]; then
|
|
399
|
+
DOTFILES_LAYERS_LOAD=background
|
|
400
|
+
_dotfiles_schedule_heavy_layers
|
|
401
|
+
return 0
|
|
402
|
+
fi
|
|
403
|
+
if [[ "$2" == "--status" ]]; then
|
|
404
|
+
if [[ "$3" == "--watch" ]]; then
|
|
405
|
+
local _timeout="${4:-5}"
|
|
406
|
+
local _t0=$EPOCHREALTIME
|
|
407
|
+
if [[ "${DOTFILES_LAYERS_LOAD_STATE:-idle}" == "idle" ]]; then
|
|
408
|
+
_dotfiles_load_heavy_layers
|
|
409
|
+
fi
|
|
410
|
+
while [[ "${DOTFILES_LAYERS_LOAD_STATE:-idle}" != "ready" ]]; do
|
|
411
|
+
sleep 0.1
|
|
412
|
+
if [[ -n "${_timeout}" && "${_timeout}" != "0" ]]; then
|
|
413
|
+
local _t1=$EPOCHREALTIME
|
|
414
|
+
if (( (_t1 - _t0) >= _timeout )); then
|
|
415
|
+
print -r -- "timeout"
|
|
416
|
+
return 124
|
|
417
|
+
fi
|
|
418
|
+
fi
|
|
419
|
+
done
|
|
420
|
+
fi
|
|
421
|
+
print -r -- "${DOTFILES_LAYERS_LOAD_STATE:-idle}"
|
|
422
|
+
return 0
|
|
423
|
+
fi
|
|
424
|
+
_dotfiles_load_heavy_layers
|
|
425
|
+
return 0
|
|
426
|
+
fi
|
|
427
|
+
"$HOME/.local/bin/dot" "$@"
|
|
428
|
+
'
|
|
429
|
+
fi
|
|
430
|
+
|
|
431
|
+
# Essential Aliases (fallback if 90-ux-aliases.sh is unavailable)
|
|
432
|
+
if command -v bat >/dev/null; then
|
|
433
|
+
alias cat="bat"
|
|
434
|
+
fi
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
if [[ "${DOTFILES_FAST}" != "1" ]]; then
|
|
438
|
+
## AI / Predictive Shell (opt-in)
|
|
439
|
+
if [[ "${DOTFILES_AI}" == "1" ]]; then
|
|
440
|
+
[[ -f "$HOME/.config/shell/custom/context_suggest.zsh" ]] && source "$HOME/.config/shell/custom/context_suggest.zsh"
|
|
441
|
+
[[ -f "$HOME/.config/shell/custom/error_analysis.zsh" ]] && source "$HOME/.config/shell/custom/error_analysis.zsh"
|
|
442
|
+
fi
|
|
443
|
+
|
|
444
|
+
: ${DOTFILES_DEFER_TOOLS:=1}
|
|
445
|
+
|
|
446
|
+
# Dotfiles 2026 Async Loader: Move heavy binary path resolution to background
|
|
447
|
+
_dotfiles_async_init() {
|
|
448
|
+
[[ "$DOTFILES_FAST" == "1" ]] && return
|
|
449
|
+
local tools=(mise atuin starship zoxide)
|
|
450
|
+
local t
|
|
451
|
+
for t in $tools; do
|
|
452
|
+
if [[ -x "${commands[$t]}" ]]; then
|
|
453
|
+
case "$t" in
|
|
454
|
+
mise)
|
|
455
|
+
_cached_eval mise-init mise activate zsh
|
|
456
|
+
;;
|
|
457
|
+
atuin)
|
|
458
|
+
_cached_eval atuin-init atuin init zsh
|
|
459
|
+
;;
|
|
460
|
+
starship)
|
|
461
|
+
[[ "$DOTFILES_ARTIFACT_MODE" == "0" ]] && _cached_eval starship-init starship init zsh
|
|
462
|
+
;;
|
|
463
|
+
zoxide)
|
|
464
|
+
_cached_eval zoxide-init zoxide init zsh
|
|
465
|
+
;;
|
|
466
|
+
esac
|
|
467
|
+
fi
|
|
468
|
+
done
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
# Deferred Hydration for Zero-Jank Experience
|
|
472
|
+
_dotfiles_deferred_hydration() {
|
|
473
|
+
# Unregister self
|
|
474
|
+
_dotfiles_del_precmd _dotfiles_deferred_hydration
|
|
475
|
+
_dotfiles_del_preexec _dotfiles_deferred_hydration
|
|
476
|
+
|
|
477
|
+
# Check if already hydrated in this shell instance
|
|
478
|
+
[[ -n "$DOTFILES_HYDRATED" ]] && return 0
|
|
479
|
+
export DOTFILES_HYDRATED=1
|
|
480
|
+
|
|
481
|
+
_dotfiles_async_init
|
|
482
|
+
|
|
483
|
+
# Bento-Grid 2.0 (Liquid Glass Dashboard)
|
|
484
|
+
# Only render if interactive and not in restricted ultra-fast mode
|
|
485
|
+
if [[ "$DOTFILES_ARTIFACT_MODE" == "1" ]]; then
|
|
486
|
+
[[ -f "$HOME/.dotfiles/scripts/dot/lib/bento.sh" ]] && (bash "$HOME/.dotfiles/scripts/dot/lib/bento.sh" </dev/null; kill -WINCH $$) &!
|
|
487
|
+
fi
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
# 1. Idle trigger (500ms)
|
|
491
|
+
zmodload zsh/sched 2>/dev/null
|
|
492
|
+
sched +1 _dotfiles_deferred_hydration 2>/dev/null
|
|
493
|
+
|
|
494
|
+
# 2. First-action trigger (Prompt or Enter)
|
|
495
|
+
_dotfiles_add_precmd _dotfiles_deferred_hydration
|
|
496
|
+
_dotfiles_add_preexec _dotfiles_deferred_hydration
|
|
497
|
+
|
|
498
|
+
fi
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# shellcheck shell=bash
|
|
2
|
+
# Cognitive Shell Enhancements
|
|
3
|
+
if [[ -o interactive ]]; then
|
|
4
|
+
# Carapace completions — cached to avoid subshell on every startup
|
|
5
|
+
if command -v carapace >/dev/null 2>&1; then
|
|
6
|
+
if typeset -f _cached_eval >/dev/null 2>&1; then
|
|
7
|
+
_cached_eval carapace carapace _carapace zsh
|
|
8
|
+
else
|
|
9
|
+
source <(carapace _zsh)
|
|
10
|
+
fi
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# thefuck — lazy-loaded to avoid ~200ms startup penalty
|
|
14
|
+
if command -v thefuck >/dev/null 2>&1; then
|
|
15
|
+
_lazy_load_thefuck() {
|
|
16
|
+
unset -f fuck _lazy_load_thefuck 2>/dev/null
|
|
17
|
+
_cached_eval "thefuck-alias" thefuck --alias
|
|
18
|
+
}
|
|
19
|
+
fuck() { _lazy_load_thefuck; fuck "$@"; }
|
|
20
|
+
alias fix='fuck'
|
|
21
|
+
fi
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Fallback command shims for environments with aliases disabled.
|
|
25
|
+
# These are lightweight functions to ensure core shortcuts still work.
|
|
26
|
+
|
|
27
|
+
# Opt-out with: export DOTFILES_ALIAS_SHIMS=0
|
|
28
|
+
if [[ "${DOTFILES_ALIAS_SHIMS:-1}" != "1" ]]; then
|
|
29
|
+
return 0
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Avoid redefining if already present.
|
|
33
|
+
if ! typeset -f c >/dev/null 2>&1; then
|
|
34
|
+
c() { clear; }
|
|
35
|
+
fi
|
|
36
|
+
if ! typeset -f q >/dev/null 2>&1; then
|
|
37
|
+
q() { exit; }
|
|
38
|
+
fi
|
|
39
|
+
if ! typeset -f e >/dev/null 2>&1; then
|
|
40
|
+
e() { "${EDITOR:-nano}" "$@"; }
|
|
41
|
+
fi
|
|
42
|
+
if ! typeset -f h >/dev/null 2>&1; then
|
|
43
|
+
h() { history; }
|
|
44
|
+
fi
|
|
45
|
+
if ! typeset -f l >/dev/null 2>&1; then
|
|
46
|
+
l() { command -v eza >/dev/null 2>&1 && eza --sort Name --icons --group-directories-first "$@" || command ls "$@"; }
|
|
47
|
+
fi
|
|
48
|
+
if ! typeset -f ll >/dev/null 2>&1; then
|
|
49
|
+
ll() { command -v eza >/dev/null 2>&1 && eza -alF --sort Name --icons --group-directories-first "$@" || command ls -lA "$@"; }
|
|
50
|
+
fi
|
|
51
|
+
if ! typeset -f la >/dev/null 2>&1; then
|
|
52
|
+
la() { command -v eza >/dev/null 2>&1 && eza -a --sort Name --icons --group-directories-first "$@" || command ls -a "$@"; }
|
|
53
|
+
fi
|
|
54
|
+
if ! typeset -f lt >/dev/null 2>&1; then
|
|
55
|
+
lt() { command -v eza >/dev/null 2>&1 && eza -aT --sort Name --icons --group-directories-first "$@" || command ls -R "$@"; }
|
|
56
|
+
fi
|
|
57
|
+
if ! typeset -f lr >/dev/null 2>&1; then
|
|
58
|
+
lr() { command -v eza >/dev/null 2>&1 && eza -alF --recurse --sort Name --icons --group-directories-first "$@" || command ls -lAR "$@"; }
|
|
59
|
+
fi
|
|
60
|
+
if ! typeset -f lra >/dev/null 2>&1; then
|
|
61
|
+
lra() { command -v eza >/dev/null 2>&1 && eza -alF --recurse --all --sort Name --icons --group-directories-first "$@" || command ls -lAR "$@"; }
|
|
62
|
+
fi
|
|
63
|
+
if ! typeset -f lta >/dev/null 2>&1; then
|
|
64
|
+
lta() { command -v eza >/dev/null 2>&1 && eza -aT --all --sort Name --icons --group-directories-first "$@" || command ls -aR "$@"; }
|
|
65
|
+
fi
|
|
66
|
+
if ! typeset -f d >/dev/null 2>&1; then
|
|
67
|
+
d() { command -v dot >/dev/null 2>&1 && dot "$@" || command -v docker >/dev/null 2>&1 && docker "$@"; }
|
|
68
|
+
fi
|
|
69
|
+
if ! typeset -f i >/dev/null 2>&1; then
|
|
70
|
+
i() { command -v epoch >/dev/null 2>&1 && epoch "$@"; }
|
|
71
|
+
fi
|
|
72
|
+
if ! typeset -f a >/dev/null 2>&1; then
|
|
73
|
+
a() { command -v ai_core >/dev/null 2>&1 && ai_core query "$@"; }
|
|
74
|
+
fi
|
|
75
|
+
if ! typeset -f _ >/dev/null 2>&1; then
|
|
76
|
+
_() { sudo "$@"; }
|
|
77
|
+
fi
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# YubiKey FIDO2/U2F security key helper
|
|
2
|
+
if [[ -x /usr/lib/ssh/ssh-sk-helper ]]; then
|
|
3
|
+
export SSH_SK_HELPER=/usr/lib/ssh/ssh-sk-helper
|
|
4
|
+
fi
|
|
5
|
+
|
|
6
|
+
# SSH agent: auto-start if no agent is running (interactive only)
|
|
7
|
+
if [[ -o interactive ]] && [[ -z "$SSH_AUTH_SOCK" ]]; then
|
|
8
|
+
eval "$(ssh-agent -s)" >/dev/null 2>&1
|
|
9
|
+
|
|
10
|
+
# Add default key with timeout guard (2s max) to prevent startup hangs
|
|
11
|
+
if [[ -f ~/.ssh/id_ed25519 ]]; then
|
|
12
|
+
if [[ "$OSTYPE" == darwin* ]]; then
|
|
13
|
+
timeout 2 ssh-add --apple-use-keychain ~/.ssh/id_ed25519 2>/dev/null || true
|
|
14
|
+
else
|
|
15
|
+
timeout 2 ssh-add ~/.ssh/id_ed25519 2>/dev/null || true
|
|
16
|
+
fi
|
|
17
|
+
fi
|
|
18
|
+
fi
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Environment and core variables
|
|
2
|
+
export HOSTNAME="${HOST}"
|
|
3
|
+
export INPUTRC="${HOME}/.inputrc"
|
|
4
|
+
export OS_ARCH='{{ output "uname" "-m" | trim }}'
|
|
5
|
+
export OS_NAME='{{ output "uname" | trim }}'
|
|
6
|
+
export OS_VERSION='{{ output "uname" "-r" | trim }}'
|
|
7
|
+
export USER_LANGUAGE="en_GB.UTF-8"
|
|
8
|
+
export ARCHFLAGS="-arch ${OS_ARCH}"
|
|
9
|
+
export DOTFILES_VERSION='{{ .dotfiles_version }}'
|
|
10
|
+
export DOTFILES="${HOME}/.dotfiles/lib"
|
|
11
|
+
export LANG="${USER_LANGUAGE}"
|
|
12
|
+
export LANGUAGE="${USER_LANGUAGE}"
|
|
13
|
+
export LC_ALL="${USER_LANGUAGE}"
|
|
14
|
+
export LC_CTYPE="${USER_LANGUAGE}"
|
|
15
|
+
export TERM="xterm-256color"
|
|
16
|
+
|
|
17
|
+
# fnm multishell path for environments without /run/user/... access
|
|
18
|
+
if [[ -z "${XDG_RUNTIME_DIR:-}" ]]; then
|
|
19
|
+
export XDG_RUNTIME_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/run"
|
|
20
|
+
fi
|
|
21
|
+
if [[ ! -d "${XDG_RUNTIME_DIR}" ]]; then
|
|
22
|
+
mkdir -p "${XDG_RUNTIME_DIR}" 2>/dev/null || true
|
|
23
|
+
fi
|
|
24
|
+
|
|
25
|
+
export FNM_MULTISHELL_PATH="${FNM_MULTISHELL_PATH:-${XDG_RUNTIME_DIR}/fnm_multishells}"
|
|
26
|
+
if [[ ! -d "${FNM_MULTISHELL_PATH}" ]]; then
|
|
27
|
+
mkdir -p "${FNM_MULTISHELL_PATH}" 2>/dev/null || true
|
|
28
|
+
fi
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# Zinit plugin manager
|
|
2
|
+
[[ "${DOTFILES_FAST:-0}" == "1" ]] && return 0
|
|
3
|
+
[[ "${DOTFILES_ULTRA_FAST:-0}" == "1" ]] && return 0
|
|
4
|
+
|
|
5
|
+
ZINIT_HOME="${XDG_DATA_HOME:-${HOME}/.local/share}/zinit/zinit.git"
|
|
6
|
+
|
|
7
|
+
_dotfiles_zinit_git_policy() {
|
|
8
|
+
[[ -d "$ZINIT_HOME/.git" ]] || return 0
|
|
9
|
+
command git -C "$ZINIT_HOME" config --local merge.verifySignatures false >/dev/null 2>&1 || true
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
_dotfiles_zinit_init() {
|
|
13
|
+
if [[ ! -f "$ZINIT_HOME/zinit.zsh" ]]; then
|
|
14
|
+
print -P "%F{33}▓▒░ %F{220}Installing %F{33}ZDHARMA-CONTINUUM%F{220} Initiative Plugin Manager (%F{33}zdharma-continuum/zinit%F{220})…%f"
|
|
15
|
+
command mkdir -p "$(dirname "$ZINIT_HOME")" && command chmod g-rwX "$(dirname "$ZINIT_HOME")"
|
|
16
|
+
command git clone https://github.com/zdharma-continuum/zinit "$ZINIT_HOME" && \
|
|
17
|
+
print -P "%F{33}▓▒░ %F{34}Installation successful.%f%b" || \
|
|
18
|
+
print -P "%F{160}▓▒░ The clone has failed.%f%b"
|
|
19
|
+
fi
|
|
20
|
+
|
|
21
|
+
_dotfiles_zinit_git_policy
|
|
22
|
+
|
|
23
|
+
source "$ZINIT_HOME/zinit.zsh"
|
|
24
|
+
autoload -Uz _zinit
|
|
25
|
+
(( ${+_comps} )) && _comps[zinit]=_zinit
|
|
26
|
+
|
|
27
|
+
# Load Zsh Plugins (Turbo mode - deferred loading, pinned to stable releases)
|
|
28
|
+
zinit ice wait lucid ver"0.8.0"
|
|
29
|
+
zinit light zsh-users/zsh-syntax-highlighting
|
|
30
|
+
zinit ice wait lucid ver"v0.7.1" atload"_zsh_autosuggest_start"
|
|
31
|
+
zinit light zsh-users/zsh-autosuggestions
|
|
32
|
+
zinit ice wait lucid ver"0.35.0" blockf atpull"zinit creinstall -q ."
|
|
33
|
+
zinit light zsh-users/zsh-completions
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# Defer Zinit init for faster first prompt (opt-out by setting DOTFILES_DEFER_ZINIT=0)
|
|
37
|
+
: ${DOTFILES_DEFER_ZINIT:=1}
|
|
38
|
+
: ${DOTFILES_DEFER_ZINIT_MODE:=preexec}
|
|
39
|
+
|
|
40
|
+
if [[ "${DOTFILES_DEFER_ZINIT}" == "1" ]]; then
|
|
41
|
+
# Stub to auto-load zinit on first call (e.g. by topgrade)
|
|
42
|
+
zinit() {
|
|
43
|
+
unfunction zinit
|
|
44
|
+
_dotfiles_zinit_init
|
|
45
|
+
zinit "$@"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
_dotfiles_zinit_deferred() {
|
|
49
|
+
if [[ "${DOTFILES_DEFER_ZINIT_MODE}" == "preexec" ]]; then
|
|
50
|
+
_dotfiles_del_preexec _dotfiles_zinit_deferred
|
|
51
|
+
else
|
|
52
|
+
_dotfiles_del_precmd _dotfiles_zinit_deferred
|
|
53
|
+
fi
|
|
54
|
+
# If zinit was already loaded via the stub, this is a no-op
|
|
55
|
+
(( ${+functions[zinit]} )) && [[ "$(whence -w zinit)" == "zinit: function" ]] || _dotfiles_zinit_init
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if [[ "${DOTFILES_DEFER_ZINIT_MODE}" == "preexec" ]]; then
|
|
59
|
+
_dotfiles_add_preexec _dotfiles_zinit_deferred
|
|
60
|
+
else
|
|
61
|
+
_dotfiles_add_precmd _dotfiles_zinit_deferred
|
|
62
|
+
fi
|
|
63
|
+
else
|
|
64
|
+
_dotfiles_zinit_init
|
|
65
|
+
fi
|