@sebastienrousseau/dotfiles 0.2.481 → 0.2.499
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/docs/ARCHITECTURE.md +29 -196
- package/docs/COMPLIANCE.md +10 -10
- package/docs/COPYRIGHT +3 -4
- package/docs/OPERATIONS.md +38 -65
- package/docs/PLAN.md +3 -3
- package/docs/PR_DESCRIPTION.md +85 -84
- package/docs/ROADMAP.md +11 -11
- package/docs/ROADMAP_legacy.md +556 -0
- package/docs/SECURITY_CHECKLIST.md +1 -1
- package/docs/TASK.md +4 -4
- package/docs/WALKTHROUGH.md +33 -152
- package/package.json +17 -5
- package/scripts/backup.sh +142 -0
- package/scripts/banner.sh +20 -0
- package/scripts/benchmark.sh +20 -0
- package/scripts/build.sh +41 -0
- package/scripts/clean.sh +31 -0
- package/scripts/compile.sh +54 -0
- package/scripts/copy.sh +108 -0
- package/scripts/{tools/detect-collisions.py → detect-collisions.py} +1 -1
- package/scripts/doctor.sh +79 -0
- package/scripts/dotfiles.sh +63 -0
- package/scripts/download.sh +35 -0
- package/scripts/help.sh +57 -0
- package/scripts/lock-configs.sh +57 -0
- package/scripts/package.sh +46 -0
- package/scripts/ssh.sh +55 -0
- package/scripts/teleport.sh +23 -0
- package/scripts/{tests/test-aliases.sh → test-aliases.sh} +3 -3
- package/scripts/test_smoke.sh +88 -0
- package/scripts/unpack.sh +28 -0
- package/scripts/{diagnostics/verify_state.sh → verify_state.sh} +21 -21
- package/templates/projects/go/README.md +0 -4
- package/templates/projects/node/README.md +0 -4
- package/templates/projects/python/README.md +0 -4
- package/templates/projects/python/pyproject.toml +0 -15
- package/CHANGELOG.md +0 -285
- package/LICENSE +0 -1283
- package/README.md +0 -315
- package/docs/ALIASES.md +0 -128
- 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/KEY_ROTATION.md +0 -219
- package/docs/LEGACY_ROADMAP.md +0 -142
- package/docs/NEOVIM_IDE_GUIDE.md +0 -52
- package/docs/README.md +0 -269
- package/docs/REPO_AUDIT.md +0 -23
- package/docs/SCREENSHOTS.md +0 -116
- package/docs/SECRETS.md +0 -76
- package/docs/SECURITY.md +0 -30
- package/docs/TESTING.md +0 -190
- package/docs/TOOLS.md +0 -146
- package/docs/TROUBLESHOOTING.md +0 -112
- package/docs/UTILS.md +0 -105
- package/docs/WSL2_NIX_TROUBLESHOOTING.md +0 -723
- package/docs/adr/ADR-001-ci-cd-pipeline.md +0 -101
- package/docs/adr/ADR-002-shell-performance.md +0 -121
- package/docs/adr/ADR-003-security-first.md +0 -140
- package/docs/adr/ADR-004-cli-architecture.md +0 -157
- package/docs/adr/ADR-005-chezmoi-choice.md +0 -89
- package/docs/adr/ADR-006-shell-selection.md +0 -115
- package/docs/adr/README.md +0 -33
- package/docs/themes/README.md +0 -20
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -483
- package/dot_config/ansible/ansible.cfg.tmpl +0 -11
- package/dot_config/atuin/config.toml +0 -23
- package/dot_config/bat/config +0 -8
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -49
- package/dot_config/clippy.toml +0 -55
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json.tmpl +0 -15
- package/dot_config/dotfiles/boot/README.md +0 -11
- package/dot_config/dotfiles/grub/README.md +0 -11
- package/dot_config/dotfiles/lock/README.md +0 -11
- package/dot_config/dotfiles/versions.env.tmpl +0 -19
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -44
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -661
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/config.tmpl +0 -77
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf.tmpl +0 -11
- package/dot_config/go/aliases.sh +0 -61
- package/dot_config/go/env.sh +0 -24
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -305
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -66
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -309
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -21
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/ice/README.md +0 -13
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py.tmpl +0 -5
- package/dot_config/just/justfile +0 -104
- package/dot_config/k9s/config.yaml.tmpl +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -517
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -23
- package/dot_config/lsd/config.yaml +0 -19
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -41
- package/dot_config/mongosh/mongoshrc.js +0 -67
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/nvim/init.lua +0 -4
- package/dot_config/nvim/lazy-lock.json +0 -27
- package/dot_config/nvim/lua/config/autocmds.lua +0 -63
- package/dot_config/nvim/lua/config/keymaps.lua +0 -87
- package/dot_config/nvim/lua/config/lazy.lua +0 -34
- package/dot_config/nvim/lua/config/options.lua +0 -48
- package/dot_config/nvim/lua/plugins/coding.lua +0 -234
- package/dot_config/nvim/lua/plugins/dap.lua +0 -201
- package/dot_config/nvim/lua/plugins/editor.lua +0 -59
- package/dot_config/nvim/lua/plugins/git.lua +0 -9
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -221
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -17
- package/dot_config/nvim/lua/plugins/rust.lua +0 -33
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -32
- package/dot_config/nvim/lua/plugins/ui.lua +0 -537
- package/dot_config/nvim/snippets/all.lua +0 -9
- package/dot_config/nvim/snippets/python.lua +0 -16
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/pypoetry/config.toml.tmpl +0 -6
- package/dot_config/pyrightconfig.json.tmpl +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/shell/00-container-detect.sh +0 -53
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -95
- 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/50-logic-functions.sh.tmpl +0 -10
- package/dot_config/shell/90-theme-switch.sh +0 -70
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -35
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -23
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -119
- package/dot_config/shell/README.md +0 -267
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -124
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl.tmpl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -181
- package/dot_config/topgrade/topgrade.toml.tmpl +0 -42
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -123
- package/dot_config/waybar/style.css +0 -8
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -236
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/yarn/yarnrc.yml.tmpl +0 -36
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zellij/config.kdl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -13
- package/dot_config/zsh/dot_zshenv +0 -6
- package/dot_config/zsh/dot_zshrc.tmpl +0 -199
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -5
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh.tmpl +0 -22
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -123
- package/dot_config/zsh/rc.d/40-bell.zsh.tmpl +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh.tmpl +0 -9
- package/dot_local/bin/executable_ai_core +0 -130
- package/dot_local/bin/executable_b64 +0 -59
- package/dot_local/bin/executable_dot +0 -178
- package/dot_local/bin/executable_dot_completion +0 -55
- package/dot_local/bin/executable_epoch +0 -62
- package/dot_local/bin/executable_extract +0 -108
- package/dot_local/bin/executable_git-ai-commit +0 -160
- package/dot_local/bin/executable_git-ai-diff +0 -154
- package/dot_local/bin/executable_hash +0 -123
- package/dot_local/bin/executable_hex +0 -79
- package/dot_local/bin/executable_ip +0 -37
- package/dot_local/bin/executable_jsonv +0 -54
- package/dot_local/bin/executable_jwt +0 -78
- package/dot_local/bin/executable_kill-port +0 -59
- package/dot_local/bin/executable_lorem +0 -103
- package/dot_local/bin/executable_regex +0 -96
- package/dot_local/bin/executable_tmux-sessionizer +0 -187
- package/dot_local/bin/executable_tour +0 -137
- package/dot_local/bin/executable_update +0 -108
- package/dot_local/bin/executable_uuid +0 -57
- package/dot_local/bin/executable_yamlv +0 -39
- package/dot_local/bin/executable_zig-install +0 -89
- package/dot_local/bin/voice_ops +0 -7
- package/dot_local/share/bash-completion/completions/dot +0 -54
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/install.sh +0 -255
- package/scripts/ci/validate-ci-config.sh +0 -222
- package/scripts/demo/record.sh +0 -41
- package/scripts/diagnostics/benchmark.sh +0 -201
- package/scripts/diagnostics/doctor.sh +0 -115
- package/scripts/diagnostics/drift-dashboard.sh +0 -26
- package/scripts/diagnostics/health.sh +0 -356
- package/scripts/diagnostics/history-analysis.sh +0 -77
- package/scripts/diagnostics/security-score.sh +0 -392
- package/scripts/dot/commands/appearance.sh +0 -63
- package/scripts/dot/commands/core.sh +0 -130
- package/scripts/dot/commands/diagnostics.sh +0 -100
- package/scripts/dot/commands/meta.sh +0 -117
- package/scripts/dot/commands/restore.sh +0 -209
- package/scripts/dot/commands/secrets.sh +0 -81
- package/scripts/dot/commands/security.sh +0 -73
- package/scripts/dot/commands/tools.sh +0 -228
- package/scripts/dot/lib/utils.sh +0 -72
- package/scripts/fonts/install-nerd-fonts.sh +0 -59
- package/scripts/fonts/patch-fonts.sh +0 -34
- package/scripts/ops/chezmoi-apply.sh +0 -42
- package/scripts/ops/chezmoi-diff.sh +0 -14
- package/scripts/ops/chezmoi-remove.sh +0 -43
- package/scripts/ops/chezmoi-update.sh +0 -16
- package/scripts/ops/heal.sh +0 -466
- package/scripts/ops/health-check.sh +0 -380
- package/scripts/ops/rollback.sh +0 -531
- package/scripts/ops/teleport.sh +0 -32
- package/scripts/secrets/age-init.sh +0 -69
- package/scripts/secrets/create-secrets-file.sh +0 -44
- package/scripts/secrets/encrypt-ssh-key.sh +0 -42
- package/scripts/security/backup.sh +0 -17
- package/scripts/security/dns-doh.sh +0 -29
- package/scripts/security/encryption-check.sh +0 -39
- package/scripts/security/enforce-policies.sh +0 -339
- package/scripts/security/firewall.sh +0 -34
- package/scripts/security/lock-configs.sh +0 -57
- package/scripts/security/lock-screen.sh +0 -33
- package/scripts/security/manage-secrets.sh +0 -415
- package/scripts/security/telemetry-kill.sh +0 -28
- package/scripts/security/usb-safety.sh +0 -29
- 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-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/scripts/theme/apply-gnome-theme.sh +0 -297
- package/scripts/theme/install-boot-logo.sh +0 -61
- package/scripts/theme/install-catppuccin-themes.sh +0 -346
- package/scripts/theme/install-cursors.sh +0 -24
- package/scripts/theme/install-file-icons.sh +0 -25
- package/scripts/theme/install-grub-theme.sh +0 -51
- package/scripts/theme/install-lock-icon.sh +0 -29
- package/scripts/theme/switch.sh +0 -250
- package/scripts/theme/wallpaper-rotate.sh +0 -82
- package/scripts/theme/wallpaper-sync.sh +0 -42
- package/scripts/tools/cmatrix.sh +0 -20
- package/scripts/tools/emoji-picker.sh +0 -45
- package/scripts/tools/figlet-banner.sh +0 -17
- package/scripts/tools/log-rotate.sh +0 -29
- package/scripts/tools/lolcat-wrap.sh +0 -18
- package/scripts/tools/pipes.sh +0 -47
- package/scripts/tuning/linux.sh +0 -175
- package/scripts/tuning/macos.sh +0 -46
- package/templates/projects/molecule/README.md +0 -7
- package/templates/projects/molecule/converge.yml +0 -7
- package/templates/projects/molecule/molecule.yml +0 -16
- package/templates/projects/packer/README.md +0 -15
- package/templates/projects/packer/main.pkr.hcl +0 -15
package/install.sh
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# Universal Dotfiles Installer (Zero-Dependency)
|
|
3
|
-
# Usage: sh -c "$(curl -fsSL https://dotfiles.io/install.sh)"
|
|
4
|
-
# (or ./install.sh locally)
|
|
5
|
-
#
|
|
6
|
-
# This installer uses modular libraries from install/lib/:
|
|
7
|
-
# - os_detection.sh : OS and architecture detection
|
|
8
|
-
# - package_managers.sh: Package manager bootstrapping
|
|
9
|
-
# - backup.sh : Dotfile backup functionality
|
|
10
|
-
# - chezmoi.sh : Chezmoi installation and configuration
|
|
11
|
-
|
|
12
|
-
set -euo pipefail
|
|
13
|
-
|
|
14
|
-
# =============================================================================
|
|
15
|
-
# Configuration
|
|
16
|
-
# =============================================================================
|
|
17
|
-
|
|
18
|
-
VERSION="${1:-v0.2.480}"
|
|
19
|
-
REPO_URL="https://github.com/sebastienrousseau/dotfiles.git"
|
|
20
|
-
SOURCE_DIR="$HOME/.dotfiles"
|
|
21
|
-
LEGACY_SOURCE_DIR="$HOME/.local/share/chezmoi"
|
|
22
|
-
|
|
23
|
-
# =============================================================================
|
|
24
|
-
# Colors and Output
|
|
25
|
-
# =============================================================================
|
|
26
|
-
|
|
27
|
-
if [[ -z "${NO_COLOR:-}" ]] && [[ -t 1 ]]; then
|
|
28
|
-
RED='\033[0;31m'
|
|
29
|
-
GREEN='\033[0;32m'
|
|
30
|
-
BLUE='\033[0;34m'
|
|
31
|
-
CYAN='\033[0;36m'
|
|
32
|
-
BOLD='\033[1m'
|
|
33
|
-
NC='\033[0m'
|
|
34
|
-
else
|
|
35
|
-
RED='' GREEN='' BLUE='' CYAN='' BOLD='' NC=''
|
|
36
|
-
fi
|
|
37
|
-
|
|
38
|
-
step() { echo -e "${BLUE}==>${NC} ${BOLD}$1${NC}"; }
|
|
39
|
-
success() { echo -e "${GREEN}==> Done!${NC}"; }
|
|
40
|
-
error() {
|
|
41
|
-
echo -e "${RED}==> Error: $1${NC}"
|
|
42
|
-
exit 1
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
# =============================================================================
|
|
46
|
-
# Banner
|
|
47
|
-
# =============================================================================
|
|
48
|
-
|
|
49
|
-
echo -e "${CYAN}${BOLD}"
|
|
50
|
-
cat <<"EOF"
|
|
51
|
-
___ _ _ _ _
|
|
52
|
-
/ _ \___ | |_ (_)| |(_) ___ ___
|
|
53
|
-
/ /_)/ _ \| __|| || || |/ _ \/ __|
|
|
54
|
-
/ ___/ (_) | |_ | || || | __/\__ \
|
|
55
|
-
\/ \___/ \__||_||_||_|\___||___/
|
|
56
|
-
Universal Installer
|
|
57
|
-
EOF
|
|
58
|
-
echo -e "${NC}"
|
|
59
|
-
|
|
60
|
-
# =============================================================================
|
|
61
|
-
# Library Loading
|
|
62
|
-
# =============================================================================
|
|
63
|
-
|
|
64
|
-
# Determine script directory for library loading
|
|
65
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" 2>/dev/null && pwd)" || SCRIPT_DIR=""
|
|
66
|
-
LIB_DIR="${SCRIPT_DIR}/install/lib"
|
|
67
|
-
|
|
68
|
-
# Source libraries if available (for local installs)
|
|
69
|
-
if [ -d "$LIB_DIR" ]; then
|
|
70
|
-
# shellcheck source=install/lib/os_detection.sh
|
|
71
|
-
source "$LIB_DIR/os_detection.sh"
|
|
72
|
-
# shellcheck source=install/lib/package_managers.sh
|
|
73
|
-
source "$LIB_DIR/package_managers.sh"
|
|
74
|
-
# shellcheck source=install/lib/backup.sh
|
|
75
|
-
source "$LIB_DIR/backup.sh"
|
|
76
|
-
# shellcheck source=install/lib/chezmoi.sh
|
|
77
|
-
source "$LIB_DIR/chezmoi.sh"
|
|
78
|
-
LIBS_LOADED=1
|
|
79
|
-
else
|
|
80
|
-
LIBS_LOADED=0
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
# =============================================================================
|
|
84
|
-
# Inline Functions (for remote install without libraries)
|
|
85
|
-
# =============================================================================
|
|
86
|
-
|
|
87
|
-
if [ "$LIBS_LOADED" = "0" ]; then
|
|
88
|
-
# Minimal inline implementations when libraries aren't available
|
|
89
|
-
detect_os() {
|
|
90
|
-
OS="$(uname -s)"
|
|
91
|
-
ARCH="$(uname -m)"
|
|
92
|
-
target_os="unknown"
|
|
93
|
-
case "$OS" in
|
|
94
|
-
Darwin) target_os="macos" ;;
|
|
95
|
-
Linux)
|
|
96
|
-
if [ -f /proc/version ] && grep -qi 'microsoft\|WSL' /proc/version; then
|
|
97
|
-
target_os="wsl2"
|
|
98
|
-
elif [ -f /etc/os-release ]; then
|
|
99
|
-
. /etc/os-release
|
|
100
|
-
case "${ID:-}" in
|
|
101
|
-
ubuntu | debian | pop | linuxmint | elementary) target_os="debian" ;;
|
|
102
|
-
fedora | rhel | centos | rocky | alma) target_os="fedora" ;;
|
|
103
|
-
arch | manjaro | endeavouros) target_os="arch" ;;
|
|
104
|
-
*) target_os="linux" ;;
|
|
105
|
-
esac
|
|
106
|
-
else
|
|
107
|
-
target_os="linux"
|
|
108
|
-
fi
|
|
109
|
-
;;
|
|
110
|
-
esac
|
|
111
|
-
export OS ARCH target_os
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
print_os_info() {
|
|
115
|
-
echo " OS: $OS"
|
|
116
|
-
echo " Arch: $ARCH"
|
|
117
|
-
echo " Target: $target_os"
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
bootstrap_package_manager() {
|
|
121
|
-
if [ "$target_os" = "macos" ] && ! command -v brew >/dev/null; then
|
|
122
|
-
echo " Homebrew not found."
|
|
123
|
-
echo -e "${CYAN} SECURITY NOTE: This will download and execute code from brew.sh${NC}"
|
|
124
|
-
if [ "${DOTFILES_NONINTERACTIVE:-0}" != "1" ]; then
|
|
125
|
-
read -r -p " Continue with Homebrew installation? [y/N] " response
|
|
126
|
-
case "$response" in
|
|
127
|
-
[yY][eE][sS] | [yY]) ;;
|
|
128
|
-
*) error "Homebrew installation cancelled." ;;
|
|
129
|
-
esac
|
|
130
|
-
fi
|
|
131
|
-
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
132
|
-
[ -x /opt/homebrew/bin/brew ] && eval "$(/opt/homebrew/bin/brew shellenv)"
|
|
133
|
-
[ -x /usr/local/bin/brew ] && eval "$(/usr/local/bin/brew shellenv)"
|
|
134
|
-
fi
|
|
135
|
-
case "$target_os" in
|
|
136
|
-
debian | wsl2) command -v apt-get >/dev/null || error "apt-get required" ;;
|
|
137
|
-
fedora) command -v dnf >/dev/null || error "dnf required" ;;
|
|
138
|
-
arch) command -v pacman >/dev/null || error "pacman required" ;;
|
|
139
|
-
esac
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
check_prerequisites() {
|
|
143
|
-
command -v curl >/dev/null || error "curl is required"
|
|
144
|
-
command -v git >/dev/null || error "git is required"
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
install_chezmoi() {
|
|
148
|
-
if command -v chezmoi >/dev/null; then
|
|
149
|
-
echo " chezmoi already installed: $(chezmoi --version)"
|
|
150
|
-
elif command -v brew >/dev/null; then
|
|
151
|
-
brew install chezmoi
|
|
152
|
-
else
|
|
153
|
-
local bin_dir="$HOME/.local/bin"
|
|
154
|
-
mkdir -p "$bin_dir"
|
|
155
|
-
local installer
|
|
156
|
-
installer=$(mktemp)
|
|
157
|
-
curl -fsSL -o "$installer" https://get.chezmoi.io || error "Failed to download chezmoi"
|
|
158
|
-
[ "$(wc -c <"$installer")" -gt 102400 ] && {
|
|
159
|
-
rm -f "$installer"
|
|
160
|
-
error "Installer too large"
|
|
161
|
-
}
|
|
162
|
-
sh "$installer" -- -b "$bin_dir" 2>/dev/null || {
|
|
163
|
-
rm -f "$installer"
|
|
164
|
-
error "Failed to install chezmoi"
|
|
165
|
-
}
|
|
166
|
-
rm -f "$installer"
|
|
167
|
-
export PATH="$bin_dir:$PATH"
|
|
168
|
-
fi
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
ensure_chezmoi_source() {
|
|
172
|
-
local dir="$1"
|
|
173
|
-
local config_dir="$HOME/.config/chezmoi"
|
|
174
|
-
mkdir -p "$config_dir"
|
|
175
|
-
printf 'sourceDir = "%s"\n' "$dir" >"$config_dir/chezmoi.toml"
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
perform_backup() {
|
|
179
|
-
local backup_dir
|
|
180
|
-
backup_dir="$HOME/.dotfiles.bak.$(date +"%Y%m%d_%H%M%S")"
|
|
181
|
-
local count=0
|
|
182
|
-
if command -v chezmoi >/dev/null && [ -f "$HOME/.config/chezmoi/chezmoi.toml" ]; then
|
|
183
|
-
while IFS= read -r file; do
|
|
184
|
-
[ -z "$file" ] && continue
|
|
185
|
-
if [ -e "$file" ]; then
|
|
186
|
-
local rel="${file#"$HOME"/}"
|
|
187
|
-
mkdir -p "$backup_dir/$(dirname "$rel")"
|
|
188
|
-
cp -a "$file" "$backup_dir/$rel"
|
|
189
|
-
count=$((count + 1))
|
|
190
|
-
fi
|
|
191
|
-
done < <(chezmoi managed --path-style=absolute 2>/dev/null || true)
|
|
192
|
-
fi
|
|
193
|
-
[ "$count" -gt 0 ] && echo " Backed up $count files to $backup_dir" || echo " No files to back up."
|
|
194
|
-
}
|
|
195
|
-
fi
|
|
196
|
-
|
|
197
|
-
# =============================================================================
|
|
198
|
-
# Main Installation Flow
|
|
199
|
-
# =============================================================================
|
|
200
|
-
|
|
201
|
-
# Step 1: Detect Environment
|
|
202
|
-
step "Detecting Environment..."
|
|
203
|
-
detect_os
|
|
204
|
-
print_os_info
|
|
205
|
-
|
|
206
|
-
# Step 2: Bootstrap Package Managers
|
|
207
|
-
step "Checking Prerequisites..."
|
|
208
|
-
bootstrap_package_manager
|
|
209
|
-
check_prerequisites
|
|
210
|
-
|
|
211
|
-
# Step 3: Install Chezmoi
|
|
212
|
-
step "Installing Chezmoi..."
|
|
213
|
-
install_chezmoi
|
|
214
|
-
|
|
215
|
-
# Step 4: Backup Existing Dotfiles
|
|
216
|
-
step "Backing up existing dotfiles..."
|
|
217
|
-
if [ -d "$SOURCE_DIR/.git" ]; then
|
|
218
|
-
ensure_chezmoi_source "$SOURCE_DIR"
|
|
219
|
-
elif [ -d "$LEGACY_SOURCE_DIR/.git" ]; then
|
|
220
|
-
ensure_chezmoi_source "$LEGACY_SOURCE_DIR"
|
|
221
|
-
fi
|
|
222
|
-
perform_backup
|
|
223
|
-
|
|
224
|
-
# Step 5: Apply Configuration
|
|
225
|
-
step "Applying Configuration..."
|
|
226
|
-
|
|
227
|
-
APPLY_FLAGS=()
|
|
228
|
-
[ "${DOTFILES_NONINTERACTIVE:-0}" = "1" ] && APPLY_FLAGS=(--force --no-tty)
|
|
229
|
-
|
|
230
|
-
if [ -d "$SOURCE_DIR/.git" ]; then
|
|
231
|
-
echo " Applying from local source: $SOURCE_DIR"
|
|
232
|
-
ensure_chezmoi_source "$SOURCE_DIR"
|
|
233
|
-
chezmoi apply "${APPLY_FLAGS[@]}"
|
|
234
|
-
elif [ -d "$LEGACY_SOURCE_DIR/.git" ]; then
|
|
235
|
-
echo " Migrating from legacy source: $LEGACY_SOURCE_DIR"
|
|
236
|
-
mv "$LEGACY_SOURCE_DIR" "$SOURCE_DIR"
|
|
237
|
-
ensure_chezmoi_source "$SOURCE_DIR"
|
|
238
|
-
chezmoi apply "${APPLY_FLAGS[@]}"
|
|
239
|
-
else
|
|
240
|
-
echo " Initializing from GitHub (Version: $VERSION)..."
|
|
241
|
-
echo -e "${CYAN} SECURITY NOTE: Cloning pinned version $VERSION${NC}"
|
|
242
|
-
|
|
243
|
-
git clone --depth 1 --branch "$VERSION" "$REPO_URL" "$SOURCE_DIR" 2>/dev/null ||
|
|
244
|
-
{ git clone "$REPO_URL" "$SOURCE_DIR" && (cd "$SOURCE_DIR" && git checkout "$VERSION"); }
|
|
245
|
-
|
|
246
|
-
ensure_chezmoi_source "$SOURCE_DIR"
|
|
247
|
-
chezmoi apply "${APPLY_FLAGS[@]}"
|
|
248
|
-
fi
|
|
249
|
-
|
|
250
|
-
# =============================================================================
|
|
251
|
-
# Complete
|
|
252
|
-
# =============================================================================
|
|
253
|
-
|
|
254
|
-
success
|
|
255
|
-
echo -e "${GREEN}Configuration loaded. Please restart your shell.${NC}"
|
|
@@ -1,222 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# CI Configuration Validation Script
|
|
3
|
-
# Verifies that all zero-warning policy components are properly configured
|
|
4
|
-
|
|
5
|
-
set -euo pipefail
|
|
6
|
-
|
|
7
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
REPO_ROOT="$(dirname "$(dirname "$SCRIPT_DIR")")"
|
|
9
|
-
|
|
10
|
-
# Colors for output
|
|
11
|
-
RED='\033[0;31m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
YELLOW='\033[0;33m'
|
|
14
|
-
BLUE='\033[0;34m'
|
|
15
|
-
NC='\033[0m'
|
|
16
|
-
|
|
17
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
18
|
-
echo -e "${BLUE} CI CONFIGURATION VALIDATOR ${NC}"
|
|
19
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
20
|
-
echo ""
|
|
21
|
-
|
|
22
|
-
ERRORS=0
|
|
23
|
-
WARNINGS=0
|
|
24
|
-
|
|
25
|
-
# Helper functions
|
|
26
|
-
check_file_exists() {
|
|
27
|
-
local file="$1"
|
|
28
|
-
local description="$2"
|
|
29
|
-
|
|
30
|
-
if [[ -f "$file" ]]; then
|
|
31
|
-
echo -e " ${GREEN}✓${NC} $description"
|
|
32
|
-
return 0
|
|
33
|
-
else
|
|
34
|
-
echo -e " ${RED}✗${NC} $description"
|
|
35
|
-
((ERRORS++))
|
|
36
|
-
return 1
|
|
37
|
-
fi
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
check_pattern_in_file() {
|
|
41
|
-
local file="$1"
|
|
42
|
-
local pattern="$2"
|
|
43
|
-
local description="$3"
|
|
44
|
-
|
|
45
|
-
if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
|
|
46
|
-
echo -e " ${GREEN}✓${NC} $description"
|
|
47
|
-
return 0
|
|
48
|
-
else
|
|
49
|
-
echo -e " ${RED}✗${NC} $description"
|
|
50
|
-
((ERRORS++))
|
|
51
|
-
return 1
|
|
52
|
-
fi
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
warn_if_pattern() {
|
|
56
|
-
local file="$1"
|
|
57
|
-
local pattern="$2"
|
|
58
|
-
local description="$3"
|
|
59
|
-
|
|
60
|
-
if [[ -f "$file" ]] && grep -q "$pattern" "$file"; then
|
|
61
|
-
echo -e " ${YELLOW}⚠${NC} $description"
|
|
62
|
-
((WARNINGS++))
|
|
63
|
-
return 1
|
|
64
|
-
else
|
|
65
|
-
echo -e " ${GREEN}✓${NC} $description"
|
|
66
|
-
return 0
|
|
67
|
-
fi
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
# Check 1: Core CI files exist
|
|
71
|
-
echo -e "${BLUE}1. Core CI Files${NC}"
|
|
72
|
-
check_file_exists "$REPO_ROOT/.github/workflows/ci.yml" "Main CI workflow exists"
|
|
73
|
-
check_file_exists "$REPO_ROOT/.github/workflows/nightly.yml" "Nightly workflow exists"
|
|
74
|
-
check_file_exists "$REPO_ROOT/.github/workflows/security-enhanced.yml" "Security workflow exists"
|
|
75
|
-
check_file_exists "$REPO_ROOT/config/pre-commit-config.yaml" "Pre-commit configuration exists"
|
|
76
|
-
echo ""
|
|
77
|
-
|
|
78
|
-
# Check 2: Zero-warning enforcement
|
|
79
|
-
echo -e "${BLUE}2. Zero-Warning Policy Enforcement${NC}"
|
|
80
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "zero-warning" "Zero-warning policy documented"
|
|
81
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail on unformatted code" "Formatter failure enforced"
|
|
82
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "warnings-as-errors" "Warnings treated as errors"
|
|
83
|
-
|
|
84
|
-
# Verify no || true patterns in security steps
|
|
85
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "gitleaks.*||.*true" "Gitleaks bypass detected"
|
|
86
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "shellcheck.*||.*true" "Shellcheck bypass detected"
|
|
87
|
-
echo ""
|
|
88
|
-
|
|
89
|
-
# Check 3: Test coverage requirements
|
|
90
|
-
echo -e "${BLUE}3. Test Coverage Requirements${NC}"
|
|
91
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "100%" "100% coverage requirement"
|
|
92
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "fail-under" "Coverage threshold enforcement"
|
|
93
|
-
|
|
94
|
-
if [[ -f "$REPO_ROOT/scripts/tests/framework/test_runner.sh" ]]; then
|
|
95
|
-
echo -e " ${GREEN}✓${NC} Test framework exists"
|
|
96
|
-
else
|
|
97
|
-
echo -e " ${RED}✗${NC} Test framework missing"
|
|
98
|
-
((ERRORS++))
|
|
99
|
-
fi
|
|
100
|
-
echo ""
|
|
101
|
-
|
|
102
|
-
# Check 4: Security scanning
|
|
103
|
-
echo -e "${BLUE}4. Security Scanning Configuration${NC}"
|
|
104
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-secrets" "Secret scanning enabled"
|
|
105
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "security-dependencies" "Dependency audit enabled"
|
|
106
|
-
check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "gitleaks" "Pre-commit secret scanning"
|
|
107
|
-
check_pattern_in_file "$REPO_ROOT/config/pre-commit-config.yaml" "detect-secrets" "Advanced secret detection"
|
|
108
|
-
|
|
109
|
-
# Verify no piped execution patterns
|
|
110
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "curl.*|.*sh" "Dangerous piped execution"
|
|
111
|
-
warn_if_pattern "$REPO_ROOT/.github/workflows/ci.yml" "wget.*|.*bash" "Dangerous piped execution"
|
|
112
|
-
echo ""
|
|
113
|
-
|
|
114
|
-
# Check 5: Performance monitoring
|
|
115
|
-
echo -e "${BLUE}5. Performance Monitoring${NC}"
|
|
116
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "benchmark" "Performance benchmarking enabled"
|
|
117
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "500ms" "Shell startup threshold defined"
|
|
118
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "performance-tracking" "Nightly performance tracking"
|
|
119
|
-
echo ""
|
|
120
|
-
|
|
121
|
-
# Check 6: Multi-OS support
|
|
122
|
-
echo -e "${BLUE}6. Multi-OS Testing${NC}"
|
|
123
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "ubuntu-latest" "Linux testing enabled"
|
|
124
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "macos-latest" "macOS testing enabled"
|
|
125
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "matrix:" "OS matrix testing configured"
|
|
126
|
-
echo ""
|
|
127
|
-
|
|
128
|
-
# Check 7: Timeouts and efficiency
|
|
129
|
-
echo -e "${BLUE}7. Timeout and Efficiency Settings${NC}"
|
|
130
|
-
if grep -q "timeout-minutes: [0-9]" "$REPO_ROOT/.github/workflows/ci.yml"; then
|
|
131
|
-
MAX_TIMEOUT=$(grep "timeout-minutes:" "$REPO_ROOT/.github/workflows/ci.yml" |
|
|
132
|
-
awk '{print $2}' | sort -n | tail -1)
|
|
133
|
-
if [[ $MAX_TIMEOUT -le 15 ]]; then
|
|
134
|
-
echo -e " ${GREEN}✓${NC} Job timeouts properly configured (max: ${MAX_TIMEOUT}min)"
|
|
135
|
-
else
|
|
136
|
-
echo -e " ${YELLOW}⚠${NC} Some jobs have long timeouts (max: ${MAX_TIMEOUT}min)"
|
|
137
|
-
((WARNINGS++))
|
|
138
|
-
fi
|
|
139
|
-
else
|
|
140
|
-
echo -e " ${RED}✗${NC} No timeout configuration found"
|
|
141
|
-
((ERRORS++))
|
|
142
|
-
fi
|
|
143
|
-
|
|
144
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "cache" "Dependency caching enabled"
|
|
145
|
-
echo ""
|
|
146
|
-
|
|
147
|
-
# Check 8: Branch protection readiness
|
|
148
|
-
echo -e "${BLUE}8. Branch Protection Readiness${NC}"
|
|
149
|
-
check_file_exists "$REPO_ROOT/.github/BRANCH_PROTECTION.md" "Branch protection documentation"
|
|
150
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/ci.yml" "quality-gate" "Quality gate job defined"
|
|
151
|
-
|
|
152
|
-
# Check for required status check names
|
|
153
|
-
REQUIRED_CHECKS=(
|
|
154
|
-
"lint-shell"
|
|
155
|
-
"security-secrets"
|
|
156
|
-
"security-dependencies"
|
|
157
|
-
"test-unit"
|
|
158
|
-
"quality-gate"
|
|
159
|
-
)
|
|
160
|
-
|
|
161
|
-
for check in "${REQUIRED_CHECKS[@]}"; do
|
|
162
|
-
if grep -q "name:.*$check" "$REPO_ROOT/.github/workflows/ci.yml"; then
|
|
163
|
-
echo -e " ${GREEN}✓${NC} Required check '$check' defined"
|
|
164
|
-
else
|
|
165
|
-
echo -e " ${RED}✗${NC} Required check '$check' missing"
|
|
166
|
-
((ERRORS++))
|
|
167
|
-
fi
|
|
168
|
-
done
|
|
169
|
-
echo ""
|
|
170
|
-
|
|
171
|
-
# Check 9: Nightly extended testing
|
|
172
|
-
echo -e "${BLUE}9. Nightly Extended Testing${NC}"
|
|
173
|
-
if [[ -f "$REPO_ROOT/.github/workflows/nightly.yml" ]]; then
|
|
174
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "dependency-updates" "Dependency monitoring"
|
|
175
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "beta-tools-test" "Beta tool testing"
|
|
176
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "security-extended" "Extended security scanning"
|
|
177
|
-
check_pattern_in_file "$REPO_ROOT/.github/workflows/nightly.yml" "cron:" "Scheduled execution"
|
|
178
|
-
else
|
|
179
|
-
echo -e " ${RED}✗${NC} Nightly workflow missing"
|
|
180
|
-
((ERRORS++))
|
|
181
|
-
fi
|
|
182
|
-
echo ""
|
|
183
|
-
|
|
184
|
-
# Final summary
|
|
185
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
186
|
-
echo -e "${BLUE} VALIDATION SUMMARY ${NC}"
|
|
187
|
-
echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
|
188
|
-
|
|
189
|
-
if [[ $ERRORS -eq 0 ]] && [[ $WARNINGS -eq 0 ]]; then
|
|
190
|
-
echo -e "${GREEN}✅ PERFECT: CI configuration fully compliant${NC}"
|
|
191
|
-
echo " - Zero-warning policy properly enforced"
|
|
192
|
-
echo " - All security gates configured"
|
|
193
|
-
echo " - Performance monitoring active"
|
|
194
|
-
echo " - Ready for branch protection"
|
|
195
|
-
elif [[ $ERRORS -eq 0 ]]; then
|
|
196
|
-
echo -e "${YELLOW}⚠️ GOOD: CI mostly compliant with $WARNINGS warning(s)${NC}"
|
|
197
|
-
echo " - Core functionality working"
|
|
198
|
-
echo " - Minor improvements recommended"
|
|
199
|
-
else
|
|
200
|
-
echo -e "${RED}❌ ISSUES: CI configuration has $ERRORS error(s) and $WARNINGS warning(s)${NC}"
|
|
201
|
-
echo " - Critical fixes required before deployment"
|
|
202
|
-
fi
|
|
203
|
-
|
|
204
|
-
echo ""
|
|
205
|
-
echo "Configuration Details:"
|
|
206
|
-
echo " - Repository: $REPO_ROOT"
|
|
207
|
-
echo " - Main CI: .github/workflows/ci.yml"
|
|
208
|
-
echo " - Nightly: .github/workflows/nightly.yml"
|
|
209
|
-
echo " - Pre-commit: config/pre-commit-config.yaml"
|
|
210
|
-
echo ""
|
|
211
|
-
echo "Next Steps:"
|
|
212
|
-
if [[ $ERRORS -gt 0 ]]; then
|
|
213
|
-
echo " 1. Fix critical errors listed above"
|
|
214
|
-
echo " 2. Re-run validation: $0"
|
|
215
|
-
fi
|
|
216
|
-
if [[ $WARNINGS -gt 0 ]]; then
|
|
217
|
-
echo " 3. Address warnings for optimal configuration"
|
|
218
|
-
fi
|
|
219
|
-
echo " 4. Configure branch protection rules per BRANCH_PROTECTION.md"
|
|
220
|
-
echo " 5. Test CI pipeline with a small PR"
|
|
221
|
-
|
|
222
|
-
exit $ERRORS
|
package/scripts/demo/record.sh
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
set -e
|
|
3
|
-
|
|
4
|
-
OUT="${1:-$HOME/.dotfiles/docs/demo/demo.gif}"
|
|
5
|
-
DURATION="${DURATION:-30}"
|
|
6
|
-
FPS="${FPS:-15}"
|
|
7
|
-
|
|
8
|
-
record_ffmpeg() {
|
|
9
|
-
if command -v ffmpeg >/dev/null; then
|
|
10
|
-
echo "Recording with ffmpeg for ${DURATION}s..."
|
|
11
|
-
if [ "$(uname -s)" = "Darwin" ]; then
|
|
12
|
-
# macOS (AVFoundation)
|
|
13
|
-
ffmpeg -y -t "$DURATION" -f avfoundation -i "1:none" -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
|
|
14
|
-
else
|
|
15
|
-
# Linux (X11)
|
|
16
|
-
ffmpeg -y -t "$DURATION" -f x11grab -i :0.0 -vf "fps=$FPS,scale=1024:-1:flags=lanczos" "$OUT"
|
|
17
|
-
fi
|
|
18
|
-
else
|
|
19
|
-
echo "ffmpeg not found. Install it and retry."
|
|
20
|
-
exit 1
|
|
21
|
-
fi
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
record_wf_recorder() {
|
|
25
|
-
if command -v wf-recorder >/dev/null; then
|
|
26
|
-
echo "Recording with wf-recorder for ${DURATION}s..."
|
|
27
|
-
wf-recorder -f "$OUT" -t "$DURATION"
|
|
28
|
-
else
|
|
29
|
-
return 1
|
|
30
|
-
fi
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
if [ "$(uname -s)" = "Linux" ]; then
|
|
34
|
-
if record_wf_recorder; then
|
|
35
|
-
exit 0
|
|
36
|
-
fi
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
record_ffmpeg
|
|
40
|
-
|
|
41
|
-
printf "Saved demo to %s\n" "$OUT"
|