@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,6 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
## Secure Configuration Management.
|
|
4
|
+
##
|
|
5
|
+
## Manages environment variables and secrets across local development.
|
|
6
|
+
## Provides init, validate, rotate, and audit capabilities for credentials.
|
|
7
|
+
##
|
|
8
|
+
## # Usage
|
|
9
|
+
## manage-secrets.sh init # Create .env.local from template
|
|
10
|
+
## manage-secrets.sh validate # Check configuration integrity
|
|
11
|
+
## manage-secrets.sh check # Scan for hardcoded secrets
|
|
12
|
+
## manage-secrets.sh rotate github # Secret rotation guide
|
|
13
|
+
## manage-secrets.sh clean # Remove temporary files
|
|
14
|
+
##
|
|
15
|
+
## # Dependencies
|
|
16
|
+
## - stat: Permission checking
|
|
17
|
+
## - grep: Pattern matching
|
|
18
|
+
## - find: File discovery
|
|
19
|
+
##
|
|
20
|
+
## # Platform Notes
|
|
21
|
+
## - macOS: Uses BSD stat syntax
|
|
22
|
+
## - Linux: Uses GNU stat syntax
|
|
23
|
+
## - WSL: Works with Linux filesystem permissions
|
|
24
|
+
##
|
|
25
|
+
## # Security
|
|
26
|
+
## - Creates .env.local with 600 permissions
|
|
27
|
+
## - Automatically adds .env.local to .gitignore
|
|
28
|
+
## - Never commits secrets to version control
|
|
29
|
+
##
|
|
30
|
+
## # Idempotency
|
|
31
|
+
## Safe to run repeatedly. init requires --force to overwrite.
|
|
4
32
|
|
|
5
33
|
set -euo pipefail
|
|
6
34
|
|
|
@@ -11,16 +39,10 @@ readonly REPO_ROOT
|
|
|
11
39
|
readonly ENV_TEMPLATE="${REPO_ROOT}/.github/security-policies/environment-template.env"
|
|
12
40
|
readonly ENV_LOCAL="${REPO_ROOT}/.env.local"
|
|
13
41
|
|
|
14
|
-
#
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
readonly YELLOW='\033[1;33m'
|
|
19
|
-
readonly BLUE='\033[0;34m'
|
|
20
|
-
readonly NC='\033[0m'
|
|
21
|
-
else
|
|
22
|
-
readonly RED='' GREEN='' YELLOW='' BLUE='' NC=''
|
|
23
|
-
fi
|
|
42
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
43
|
+
# shellcheck disable=SC1091
|
|
44
|
+
source "${SCRIPT_DIR}/../dot/lib/ui.sh"
|
|
45
|
+
ui_init
|
|
24
46
|
|
|
25
47
|
# Help text
|
|
26
48
|
show_help() {
|
|
@@ -58,22 +80,11 @@ SECURITY NOTES:
|
|
|
58
80
|
EOF
|
|
59
81
|
}
|
|
60
82
|
|
|
61
|
-
# Logging functions
|
|
62
|
-
log_info() {
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
log_success() {
|
|
67
|
-
echo -e "${GREEN}[SUCCESS]${NC} $*"
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
log_warning() {
|
|
71
|
-
echo -e "${YELLOW}[WARNING]${NC} $*"
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
log_error() {
|
|
75
|
-
echo -e "${RED}[ERROR]${NC} $*"
|
|
76
|
-
}
|
|
83
|
+
# Logging functions — delegate to shared ui.sh
|
|
84
|
+
log_info() { ui_info "$@"; }
|
|
85
|
+
log_success() { ui_ok "$@"; }
|
|
86
|
+
log_warning() { ui_warn "$@"; }
|
|
87
|
+
log_error() { ui_err "$@"; }
|
|
77
88
|
|
|
78
89
|
# Initialize environment configuration
|
|
79
90
|
init_config() {
|
|
@@ -105,6 +116,7 @@ init_config() {
|
|
|
105
116
|
log_info "Next steps:"
|
|
106
117
|
echo " 1. Edit .env.local and configure required variables"
|
|
107
118
|
echo " 2. Run '$0 validate' to check configuration"
|
|
119
|
+
# shellcheck disable=SC1091
|
|
108
120
|
echo " 3. Source the file: source .env.local"
|
|
109
121
|
|
|
110
122
|
# Add to .gitignore if not present
|
|
@@ -130,7 +142,7 @@ validate_config() {
|
|
|
130
142
|
|
|
131
143
|
# Check file permissions
|
|
132
144
|
local perms
|
|
133
|
-
perms=$(stat -c %a "$ENV_LOCAL" 2>/dev/null || stat -f %
|
|
145
|
+
perms=$(stat -c %a "$ENV_LOCAL" 2>/dev/null || stat -f %OLp "$ENV_LOCAL")
|
|
134
146
|
if [[ "$perms" != "600" ]]; then
|
|
135
147
|
log_warning ".env.local has incorrect permissions ($perms). Should be 600."
|
|
136
148
|
log_info "Fix with: chmod 600 $ENV_LOCAL"
|
|
@@ -139,6 +151,7 @@ validate_config() {
|
|
|
139
151
|
|
|
140
152
|
# Source and validate environment
|
|
141
153
|
# shellcheck source=/dev/null
|
|
154
|
+
# shellcheck disable=SC1091
|
|
142
155
|
if source "$ENV_LOCAL" 2>/dev/null; then
|
|
143
156
|
log_success ".env.local loads successfully"
|
|
144
157
|
else
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# shellcheck shell=bash
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
# ssh-cert.sh — Short-lived SSH certificate management
|
|
7
|
+
#
|
|
8
|
+
# Supports step-ca (Smallstep) and ssh-keygen-based CA workflows.
|
|
9
|
+
# Short-lived certificates reduce the blast radius of key compromise
|
|
10
|
+
# by expiring automatically (default: 16 hours).
|
|
11
|
+
#
|
|
12
|
+
# Usage:
|
|
13
|
+
# dot ssh-cert issue [--ttl 16h] [--principal user]
|
|
14
|
+
# dot ssh-cert status
|
|
15
|
+
# dot ssh-cert revoke
|
|
16
|
+
|
|
17
|
+
# ---------- configuration -------------------------------------------------- #
|
|
18
|
+
|
|
19
|
+
SSH_DIR="${HOME}/.ssh"
|
|
20
|
+
CERT_FILE="${SSH_DIR}/id_ed25519-cert.pub"
|
|
21
|
+
KEY_FILE="${SSH_DIR}/id_ed25519"
|
|
22
|
+
DEFAULT_TTL="${SSH_CERT_TTL:-16h}"
|
|
23
|
+
DEFAULT_PRINCIPAL="${SSH_CERT_PRINCIPAL:-${USER}}"
|
|
24
|
+
CA_URL="${SSH_CERT_CA_URL:-}"
|
|
25
|
+
CA_PROVISIONER="${SSH_CERT_CA_PROVISIONER:-}"
|
|
26
|
+
|
|
27
|
+
# ---------- helpers -------------------------------------------------------- #
|
|
28
|
+
|
|
29
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
30
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
31
|
+
# shellcheck disable=SC1091
|
|
32
|
+
source "$SCRIPT_DIR/../dot/lib/ui.sh"
|
|
33
|
+
ui_init
|
|
34
|
+
|
|
35
|
+
info() { ui_info "ssh-cert" "$*"; }
|
|
36
|
+
warn() { ui_warn "ssh-cert" "$*"; }
|
|
37
|
+
error() {
|
|
38
|
+
ui_err "ssh-cert" "$*"
|
|
39
|
+
exit 1
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
check_key() {
|
|
43
|
+
if [[ ! -f "$KEY_FILE" ]]; then
|
|
44
|
+
error "SSH key not found at $KEY_FILE. Generate one with: ssh-keygen -t ed25519"
|
|
45
|
+
fi
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
# ---------- issue ---------------------------------------------------------- #
|
|
49
|
+
|
|
50
|
+
cmd_issue() {
|
|
51
|
+
local ttl="$DEFAULT_TTL"
|
|
52
|
+
local principal="$DEFAULT_PRINCIPAL"
|
|
53
|
+
|
|
54
|
+
while [[ $# -gt 0 ]]; do
|
|
55
|
+
case "$1" in
|
|
56
|
+
--ttl)
|
|
57
|
+
ttl="$2"
|
|
58
|
+
shift 2
|
|
59
|
+
;;
|
|
60
|
+
--principal)
|
|
61
|
+
principal="$2"
|
|
62
|
+
shift 2
|
|
63
|
+
;;
|
|
64
|
+
*) error "Unknown option: $1" ;;
|
|
65
|
+
esac
|
|
66
|
+
done
|
|
67
|
+
|
|
68
|
+
check_key
|
|
69
|
+
|
|
70
|
+
# Method 1: step-ca (Smallstep) — preferred for production
|
|
71
|
+
if command -v step >/dev/null 2>&1 && [[ -n "$CA_URL" ]]; then
|
|
72
|
+
info "Requesting certificate from step-ca ($CA_URL)..."
|
|
73
|
+
local step_args=(ssh certificate "$principal" "$KEY_FILE"
|
|
74
|
+
--sign
|
|
75
|
+
--not-after "$ttl"
|
|
76
|
+
--ca-url "$CA_URL"
|
|
77
|
+
--force
|
|
78
|
+
)
|
|
79
|
+
if [[ -n "$CA_PROVISIONER" ]]; then
|
|
80
|
+
step_args+=(--provisioner "$CA_PROVISIONER")
|
|
81
|
+
fi
|
|
82
|
+
step "${step_args[@]}"
|
|
83
|
+
info "Certificate issued:"
|
|
84
|
+
step ssh inspect "$CERT_FILE"
|
|
85
|
+
return 0
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
# Method 2: ssh-keygen with a local CA (for dev/testing)
|
|
89
|
+
local ca_key="${SSH_DIR}/ca_key"
|
|
90
|
+
if [[ ! -f "$ca_key" ]]; then
|
|
91
|
+
warn "No step-ca configured and no local CA key found."
|
|
92
|
+
echo ""
|
|
93
|
+
echo "To use short-lived SSH certificates, choose one of:"
|
|
94
|
+
echo ""
|
|
95
|
+
echo " Option A: Smallstep step-ca (recommended for production)"
|
|
96
|
+
echo " 1. Install: brew install step / sudo pacman -S step-cli step-ca"
|
|
97
|
+
echo " 2. Initialize CA: step ca init --name 'My CA' --provisioner admin"
|
|
98
|
+
echo " 3. Start CA: step-ca \$(step path)/config/ca.json"
|
|
99
|
+
echo " 4. Configure: export SSH_CERT_CA_URL=https://ca.example.com"
|
|
100
|
+
echo " 5. Run: dot ssh-cert issue"
|
|
101
|
+
echo ""
|
|
102
|
+
echo " Option B: Local CA key (for development/testing)"
|
|
103
|
+
echo " 1. Generate CA: ssh-keygen -t ed25519 -f ~/.ssh/ca_key -C 'local-ca'"
|
|
104
|
+
echo " 2. Run: dot ssh-cert issue"
|
|
105
|
+
echo ""
|
|
106
|
+
echo " Environment variables:"
|
|
107
|
+
echo " SSH_CERT_CA_URL step-ca server URL"
|
|
108
|
+
echo " SSH_CERT_CA_PROVISIONER step-ca provisioner name"
|
|
109
|
+
echo " SSH_CERT_TTL Certificate lifetime (default: 16h)"
|
|
110
|
+
echo " SSH_CERT_PRINCIPAL Certificate principal (default: \$USER)"
|
|
111
|
+
return 1
|
|
112
|
+
fi
|
|
113
|
+
|
|
114
|
+
info "Signing with local CA key ($ca_key)..."
|
|
115
|
+
info "TTL: $ttl, Principal: $principal"
|
|
116
|
+
|
|
117
|
+
# Parse TTL to seconds for validity
|
|
118
|
+
local validity="-${ttl}:+${ttl}"
|
|
119
|
+
|
|
120
|
+
ssh-keygen \
|
|
121
|
+
-s "$ca_key" \
|
|
122
|
+
-I "${principal}@$(hostname)-$(date +%s)" \
|
|
123
|
+
-n "$principal" \
|
|
124
|
+
-V "$validity" \
|
|
125
|
+
"${KEY_FILE}.pub"
|
|
126
|
+
|
|
127
|
+
info "Certificate issued:"
|
|
128
|
+
ssh-keygen -L -f "$CERT_FILE"
|
|
129
|
+
info "Expires automatically after $ttl"
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
# ---------- status --------------------------------------------------------- #
|
|
133
|
+
|
|
134
|
+
cmd_status() {
|
|
135
|
+
if [[ ! -f "$CERT_FILE" ]]; then
|
|
136
|
+
info "No SSH certificate found at $CERT_FILE"
|
|
137
|
+
return 0
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
info "Current certificate:"
|
|
141
|
+
ssh-keygen -L -f "$CERT_FILE"
|
|
142
|
+
|
|
143
|
+
# Check expiry
|
|
144
|
+
local valid_to
|
|
145
|
+
valid_to=$(ssh-keygen -L -f "$CERT_FILE" 2>/dev/null | grep "Valid:" | sed 's/.*to //')
|
|
146
|
+
if [[ -n "$valid_to" ]]; then
|
|
147
|
+
local expiry_epoch
|
|
148
|
+
expiry_epoch=$(date -d "$valid_to" +%s 2>/dev/null || date -j -f "%Y-%m-%dT%H:%M:%S" "$valid_to" +%s 2>/dev/null || echo 0)
|
|
149
|
+
local now_epoch
|
|
150
|
+
now_epoch=$(date +%s)
|
|
151
|
+
if ((expiry_epoch > 0 && expiry_epoch < now_epoch)); then
|
|
152
|
+
warn "Certificate has EXPIRED"
|
|
153
|
+
return 1
|
|
154
|
+
else
|
|
155
|
+
local remaining=$(((expiry_epoch - now_epoch) / 3600))
|
|
156
|
+
info "Certificate valid for ~${remaining}h"
|
|
157
|
+
fi
|
|
158
|
+
fi
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
# ---------- revoke --------------------------------------------------------- #
|
|
162
|
+
|
|
163
|
+
cmd_revoke() {
|
|
164
|
+
if [[ ! -f "$CERT_FILE" ]]; then
|
|
165
|
+
info "No certificate to revoke"
|
|
166
|
+
return 0
|
|
167
|
+
fi
|
|
168
|
+
|
|
169
|
+
# Step-ca revocation
|
|
170
|
+
if command -v step >/dev/null 2>&1 && [[ -n "$CA_URL" ]]; then
|
|
171
|
+
info "Revoking certificate via step-ca..."
|
|
172
|
+
step ssh revoke "$CERT_FILE" --ca-url "$CA_URL" || true
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
# Local removal
|
|
176
|
+
rm -f "$CERT_FILE"
|
|
177
|
+
info "Certificate removed: $CERT_FILE"
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
# ---------- main ----------------------------------------------------------- #
|
|
181
|
+
|
|
182
|
+
subcommand="${1:-}"
|
|
183
|
+
shift 2>/dev/null || true
|
|
184
|
+
|
|
185
|
+
case "$subcommand" in
|
|
186
|
+
issue) cmd_issue "$@" ;;
|
|
187
|
+
status) cmd_status ;;
|
|
188
|
+
revoke) cmd_revoke ;;
|
|
189
|
+
*)
|
|
190
|
+
echo "Usage: dot ssh-cert <command>"
|
|
191
|
+
echo ""
|
|
192
|
+
echo "Commands:"
|
|
193
|
+
echo " issue [--ttl 16h] [--principal user] Request a short-lived certificate"
|
|
194
|
+
echo " status Show current certificate status"
|
|
195
|
+
echo " revoke Revoke and remove certificate"
|
|
196
|
+
echo ""
|
|
197
|
+
echo "Environment:"
|
|
198
|
+
echo " SSH_CERT_CA_URL step-ca server URL (enables Smallstep mode)"
|
|
199
|
+
echo " SSH_CERT_CA_PROVISIONER step-ca provisioner name"
|
|
200
|
+
echo " SSH_CERT_TTL Certificate lifetime (default: 16h)"
|
|
201
|
+
echo " SSH_CERT_PRINCIPAL Certificate principal (default: \$USER)"
|
|
202
|
+
;;
|
|
203
|
+
esac
|
|
@@ -1,28 +1,50 @@
|
|
|
1
|
-
#!/bin/
|
|
2
|
-
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
set -euo pipefail
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
7
|
+
# shellcheck disable=SC1091
|
|
8
|
+
source "$SCRIPT_DIR/../dot/lib/ui.sh"
|
|
9
|
+
# shellcheck source=../dot/lib/platform.sh
|
|
10
|
+
# shellcheck disable=SC1091
|
|
11
|
+
source "$SCRIPT_DIR/../dot/lib/platform.sh"
|
|
12
|
+
|
|
13
|
+
DRY_RUN=0
|
|
14
|
+
for arg in "$@"; do
|
|
15
|
+
case "$arg" in --dry-run | -n) DRY_RUN=1 ;; esac
|
|
16
|
+
done
|
|
17
|
+
_run_cmd() {
|
|
18
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then ui_info "[dry-run]" "$*"; else "$@"; fi
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ui_init
|
|
22
|
+
ui_header "Telemetry"
|
|
23
|
+
|
|
24
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
25
|
+
ui_info "Mode" "dry-run (no changes will be made)"
|
|
26
|
+
elif [ "${DOTFILES_TELEMETRY:-}" != "1" ]; then
|
|
27
|
+
ui_warn "Telemetry" "disabled by default"
|
|
28
|
+
ui_info "Re-run" "DOTFILES_TELEMETRY=1"
|
|
7
29
|
exit 1
|
|
8
30
|
fi
|
|
9
31
|
|
|
10
|
-
case "$(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
sudo systemctl disable --now whoopsie 2>/dev/null || true
|
|
14
|
-
sudo systemctl disable --now apport 2>/dev/null || true
|
|
15
|
-
sudo systemctl mask apport 2>/dev/null || true
|
|
16
|
-
|
|
17
|
-
sudo systemctl disable --now popularity-contest 2>/dev/null || true
|
|
32
|
+
case "$(dot_platform_id)" in
|
|
33
|
+
linux | wsl)
|
|
34
|
+
ui_info "Disabling" "Ubuntu crash reporting (whoopsie/apport)"
|
|
35
|
+
_run_cmd sudo systemctl disable --now whoopsie 2>/dev/null || true
|
|
36
|
+
_run_cmd sudo systemctl disable --now apport 2>/dev/null || true
|
|
37
|
+
_run_cmd sudo systemctl mask apport 2>/dev/null || true
|
|
38
|
+
ui_info "Disabling" "popularity-contest"
|
|
39
|
+
_run_cmd sudo systemctl disable --now popularity-contest 2>/dev/null || true
|
|
18
40
|
;;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
sudo defaults write /Library/Application\ Support/CrashReporter/DiagnosticMessagesHistory.plist AutoSubmit -bool false || true
|
|
22
|
-
sudo defaults write /Library/Application\ Support/CrashReporter/DiagnosticMessagesHistory.plist ThirdPartyDataSubmit -bool false || true
|
|
41
|
+
macos)
|
|
42
|
+
ui_info "Disabling" "macOS analytics"
|
|
43
|
+
_run_cmd sudo defaults write /Library/Application\ Support/CrashReporter/DiagnosticMessagesHistory.plist AutoSubmit -bool false || true
|
|
44
|
+
_run_cmd sudo defaults write /Library/Application\ Support/CrashReporter/DiagnosticMessagesHistory.plist ThirdPartyDataSubmit -bool false || true
|
|
23
45
|
;;
|
|
24
46
|
*)
|
|
25
|
-
|
|
47
|
+
ui_err "Unsupported OS" "telemetry kill"
|
|
26
48
|
exit 1
|
|
27
49
|
;;
|
|
28
50
|
esac
|
|
@@ -1,29 +1,51 @@
|
|
|
1
|
-
#!/bin/
|
|
2
|
-
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
set -euo pipefail
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
6
|
+
# shellcheck source=../dot/lib/ui.sh
|
|
7
|
+
# shellcheck disable=SC1091
|
|
8
|
+
source "$SCRIPT_DIR/../dot/lib/ui.sh"
|
|
9
|
+
# shellcheck source=../dot/lib/platform.sh
|
|
10
|
+
# shellcheck disable=SC1091
|
|
11
|
+
source "$SCRIPT_DIR/../dot/lib/platform.sh"
|
|
12
|
+
|
|
13
|
+
DRY_RUN=0
|
|
14
|
+
for arg in "$@"; do
|
|
15
|
+
case "$arg" in --dry-run | -n) DRY_RUN=1 ;; esac
|
|
16
|
+
done
|
|
17
|
+
_run_cmd() {
|
|
18
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then ui_info "[dry-run]" "$*"; else "$@"; fi
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
ui_init
|
|
22
|
+
ui_header "USB Safety"
|
|
23
|
+
|
|
24
|
+
if [[ "$DRY_RUN" -eq 1 ]]; then
|
|
25
|
+
ui_info "Mode" "dry-run (no changes will be made)"
|
|
26
|
+
elif [ "${DOTFILES_USB_SAFETY:-}" != "1" ]; then
|
|
27
|
+
ui_warn "USB safety" "disabled by default"
|
|
28
|
+
ui_info "Re-run" "DOTFILES_USB_SAFETY=1"
|
|
7
29
|
exit 1
|
|
8
30
|
fi
|
|
9
31
|
|
|
10
|
-
case "$(
|
|
11
|
-
|
|
32
|
+
case "$(dot_platform_id)" in
|
|
33
|
+
linux | wsl)
|
|
12
34
|
if command -v gsettings >/dev/null; then
|
|
13
|
-
|
|
14
|
-
gsettings set org.gnome.desktop.media-handling automount false || true
|
|
15
|
-
gsettings set org.gnome.desktop.media-handling automount-open false || true
|
|
35
|
+
ui_info "Disabling" "GNOME automount for removable media"
|
|
36
|
+
_run_cmd gsettings set org.gnome.desktop.media-handling automount false || true
|
|
37
|
+
_run_cmd gsettings set org.gnome.desktop.media-handling automount-open false || true
|
|
16
38
|
else
|
|
17
|
-
|
|
39
|
+
ui_err "gsettings" "not found"
|
|
18
40
|
exit 1
|
|
19
41
|
fi
|
|
20
42
|
;;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
43
|
+
macos)
|
|
44
|
+
ui_info "macOS" "no CLI toggle for USB automount"
|
|
45
|
+
ui_info "Use" "System Settings > General > Login Items > External disks"
|
|
24
46
|
;;
|
|
25
47
|
*)
|
|
26
|
-
|
|
48
|
+
ui_err "Unsupported OS" "USB safety"
|
|
27
49
|
exit 1
|
|
28
50
|
;;
|
|
29
51
|
esac
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
## Apply GNOME Theme — Apply Catppuccin themes to GNOME desktop.
|
|
4
|
+
##
|
|
5
|
+
## Configures GTK theme, icon theme, cursor theme, shell theme,
|
|
6
|
+
## fonts, and wallpaper using gsettings.
|
|
7
|
+
##
|
|
8
|
+
## # Requirements
|
|
9
|
+
## - gsettings: GNOME settings tool
|
|
10
|
+
## - gnome-extensions (optional): For shell themes
|
|
11
|
+
## - User Themes extension (optional): For custom shell themes
|
|
12
|
+
##
|
|
13
|
+
## # Usage
|
|
14
|
+
## apply-gnome-theme.sh catppuccin-mocha # Apply dark theme
|
|
15
|
+
## apply-gnome-theme.sh catppuccin-latte # Apply light theme
|
|
16
|
+
## apply-gnome-theme.sh current # Show current theme
|
|
17
|
+
## apply-gnome-theme.sh backup # Backup current settings
|
|
18
|
+
##
|
|
19
|
+
## # Platform Notes
|
|
20
|
+
## - GNOME 42+: Full color-scheme support
|
|
21
|
+
## - Older GNOME: Color scheme setting skipped
|
|
22
|
+
|
|
23
|
+
set -euo pipefail
|
|
24
|
+
|
|
25
|
+
THEME_NAME="${1:-}"
|
|
8
26
|
|
|
9
27
|
if [ -z "$THEME_NAME" ]; then
|
|
10
28
|
echo "Usage: $0 <theme-name>"
|
|
@@ -12,27 +30,28 @@ if [ -z "$THEME_NAME" ]; then
|
|
|
12
30
|
exit 1
|
|
13
31
|
fi
|
|
14
32
|
|
|
15
|
-
# Colors for output
|
|
16
|
-
|
|
17
|
-
GREEN='\033[0;32m'
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
NC='
|
|
33
|
+
# Colors for output (respect NO_COLOR: https://no-color.org)
|
|
34
|
+
if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
|
|
35
|
+
RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m'
|
|
36
|
+
BLUE='\033[0;34m' NC='\033[0m'
|
|
37
|
+
else
|
|
38
|
+
RED='' GREEN='' YELLOW='' BLUE='' NC=''
|
|
39
|
+
fi
|
|
21
40
|
|
|
22
41
|
log() {
|
|
23
|
-
|
|
42
|
+
printf '%b\n' "${BLUE}[GNOME]${NC} $1"
|
|
24
43
|
}
|
|
25
44
|
|
|
26
45
|
warn() {
|
|
27
|
-
|
|
46
|
+
printf '%b\n' "${YELLOW}[WARN]${NC} $1"
|
|
28
47
|
}
|
|
29
48
|
|
|
30
49
|
error() {
|
|
31
|
-
|
|
50
|
+
printf '%b\n' "${RED}[ERROR]${NC} $1"
|
|
32
51
|
}
|
|
33
52
|
|
|
34
53
|
success() {
|
|
35
|
-
|
|
54
|
+
printf '%b\n' "${GREEN}[SUCCESS]${NC} $1"
|
|
36
55
|
}
|
|
37
56
|
|
|
38
57
|
# Check if we're running GNOME
|
|
@@ -174,54 +193,66 @@ apply_catppuccin_theme() {
|
|
|
174
193
|
# Function to apply wallpaper
|
|
175
194
|
apply_wallpaper() {
|
|
176
195
|
local theme="$1"
|
|
177
|
-
local
|
|
196
|
+
local wallpaper_dir="${DOTFILES_WALLPAPER_DIR:-$HOME/Pictures/Wallpapers}"
|
|
197
|
+
local mode="light"
|
|
178
198
|
|
|
179
|
-
#
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
catppuccin-mocha)
|
|
192
|
-
wallpaper_path="/usr/share/backgrounds/catppuccin/cat_mocha.png"
|
|
193
|
-
;;
|
|
194
|
-
esac
|
|
199
|
+
# Determine light/dark from theme name
|
|
200
|
+
case "$theme" in
|
|
201
|
+
*-latte) mode="light" ;;
|
|
202
|
+
*-frappe | *-macchiato | *-mocha) mode="dark" ;;
|
|
203
|
+
*-light*) mode="light" ;;
|
|
204
|
+
*-dark* | *-night* | *-storm* | *-moon*) mode="dark" ;;
|
|
205
|
+
esac
|
|
206
|
+
|
|
207
|
+
# Pick a random wallpaper matching the mode from curated collection
|
|
208
|
+
local wp=""
|
|
209
|
+
if [ -d "$wallpaper_dir" ]; then
|
|
210
|
+
wp="$(find "$wallpaper_dir" -maxdepth 1 -type f -iname "*-${mode}.jpg" 2>/dev/null | shuf -n 1 || true)"
|
|
195
211
|
fi
|
|
196
212
|
|
|
197
|
-
# Fallback
|
|
198
|
-
if [
|
|
213
|
+
# Fallback: check Catppuccin system/user wallpapers
|
|
214
|
+
if [ -z "$wp" ]; then
|
|
215
|
+
local cat_flavor=""
|
|
199
216
|
case "$theme" in
|
|
200
|
-
catppuccin-latte)
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
catppuccin-
|
|
204
|
-
wallpaper_path="$HOME/.local/share/backgrounds/catppuccin/cat_frappe.png"
|
|
205
|
-
;;
|
|
206
|
-
catppuccin-macchiato)
|
|
207
|
-
wallpaper_path="$HOME/.local/share/backgrounds/catppuccin/cat_macchiato.png"
|
|
208
|
-
;;
|
|
209
|
-
catppuccin-mocha)
|
|
210
|
-
wallpaper_path="$HOME/.local/share/backgrounds/catppuccin/cat_mocha.png"
|
|
211
|
-
;;
|
|
217
|
+
catppuccin-latte) cat_flavor="latte" ;;
|
|
218
|
+
catppuccin-frappe) cat_flavor="frappe" ;;
|
|
219
|
+
catppuccin-macchiato) cat_flavor="macchiato" ;;
|
|
220
|
+
catppuccin-mocha) cat_flavor="mocha" ;;
|
|
212
221
|
esac
|
|
222
|
+
if [ -n "$cat_flavor" ]; then
|
|
223
|
+
for dir in /usr/share/backgrounds/catppuccin "$HOME/.local/share/backgrounds/catppuccin"; do
|
|
224
|
+
if [ -f "$dir/cat_${cat_flavor}.png" ]; then
|
|
225
|
+
wp="$dir/cat_${cat_flavor}.png"
|
|
226
|
+
break
|
|
227
|
+
fi
|
|
228
|
+
done
|
|
229
|
+
fi
|
|
230
|
+
fi
|
|
231
|
+
|
|
232
|
+
if [ -z "$wp" ]; then
|
|
233
|
+
warn "No ${mode} wallpapers found in $wallpaper_dir"
|
|
234
|
+
return
|
|
213
235
|
fi
|
|
214
236
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
237
|
+
log "Setting wallpaper: $wp"
|
|
238
|
+
|
|
239
|
+
# Set both light and dark URIs if we have a pair
|
|
240
|
+
local base="${wp%-${mode}.jpg}"
|
|
241
|
+
local light_wp="${base}-light.jpg"
|
|
242
|
+
local dark_wp="${base}-dark.jpg"
|
|
243
|
+
|
|
244
|
+
if [ -f "$light_wp" ] && [ -f "$dark_wp" ]; then
|
|
245
|
+
gsettings set org.gnome.desktop.background picture-uri "file://${light_wp}"
|
|
246
|
+
gsettings set org.gnome.desktop.background picture-uri-dark "file://${dark_wp}"
|
|
247
|
+
gsettings set org.gnome.desktop.screensaver picture-uri "file://${light_wp}"
|
|
221
248
|
else
|
|
222
|
-
|
|
223
|
-
|
|
249
|
+
gsettings set org.gnome.desktop.background picture-uri "file://$wp"
|
|
250
|
+
gsettings set org.gnome.desktop.background picture-uri-dark "file://$wp"
|
|
251
|
+
gsettings set org.gnome.desktop.screensaver picture-uri "file://$wp"
|
|
224
252
|
fi
|
|
253
|
+
gsettings set org.gnome.desktop.background picture-options "zoom"
|
|
254
|
+
|
|
255
|
+
success "Wallpaper set (${mode}): $(basename "$wp")"
|
|
225
256
|
}
|
|
226
257
|
|
|
227
258
|
# Function to backup current settings
|