refactor(shell): collapse managed tree back into stubs

Drop ~/.config/zsh/{env,interactive,login} modules. PATH and local.zsh
live in .zshenv; interactive UX is a single .zshrc again. Deploy only
installs the three stubs and removes obsolete trees/examples.
This commit is contained in:
Jeffrey
2026-08-06 14:46:56 +08:00
parent 7f80bb66e1
commit e5e2801ce8
12 changed files with 225 additions and 379 deletions
+18 -31
View File
@@ -44,16 +44,15 @@ fi
main_bin="$TEMP_DIR/main-bin"
main_home="$TEMP_DIR/main-home"
mkdir -p "$main_bin" "$main_home"
for command_name in zsh git curl tar fc-cache eza zoxide autoconf trash install; do
for command_name in zsh git curl tar fc-cache eza zoxide autoconf trash; do
ln -s /usr/bin/true "$main_bin/$command_name"
done
# real install binary needed by deploy.sh
ln -sf "$(command -v install)" "$main_bin/install"
ln -sf "$(command -v cp)" "$main_bin/cp"
ln -sf "$(command -v mkdir)" "$main_bin/mkdir"
ln -sf "$(command -v chmod)" "$main_bin/chmod"
ln -sf "$(command -v ln)" "$main_bin/ln"
ln -sf "$(command -v rm)" "$main_bin/rm"
ln -sf "$(command -v rm)" "$main_bin/rm" 2>/dev/null || ln -sf /bin/rm "$main_bin/rm"
ln -sf "$(command -v bash)" "$main_bin/bash"
ln -sf "$(command -v mktemp)" "$main_bin/mktemp"
ln -sf "$(command -v dirname)" "$main_bin/dirname"
@@ -61,7 +60,6 @@ ln -sf "$(command -v date)" "$main_bin/date"
ln -sf "$(command -v sed)" "$main_bin/sed"
ln -sf "$(command -v grep)" "$main_bin/grep"
ln -sf "$(command -v awk)" "$main_bin/awk"
ln -sf "$(command -v compgen)" "$main_bin/compgen" 2>/dev/null || true
ln -s /usr/bin/false "$main_bin/wget"
cp "$ROOT/README.md" "$main_home/.zshrc"
printf '%s\n' 'existing-zshenv' >"$main_home/.zshenv"
@@ -83,10 +81,7 @@ for script in "$ROOT"/*.sh; do
bash -n "$script"
done
for config in "$ROOT/.zshenv" "$ROOT/.zshrc" "$ROOT/.zprofile" \
"$ROOT"/config/env/*.zsh \
"$ROOT"/config/interactive/*.zsh \
"$ROOT"/zshrc/*.zsh; do
for config in "$ROOT/.zshenv" "$ROOT/.zshrc" "$ROOT/.zprofile" "$ROOT"/zshrc/*.zsh; do
[[ -f "$config" ]] || continue
zsh -n "$config"
done
@@ -97,48 +92,40 @@ grep -q 'tail -1 || true' "$ROOT/install_merlin_worker.sh" || fail "a missing PY
grep -Fq 'mktemp "$HOME/.zshrc.download.' "$ROOT/install.sh" || fail ".zshrc is not downloaded on its target filesystem"
grep -Fq 'mktemp "$HOME/.zshenv.download.' "$ROOT/install.sh" || fail ".zshenv is not downloaded on its target filesystem"
grep -Fq 'mktemp "$HOME/.config/.easyzsh-' "$ROOT/patch.sh" || fail "patch downloads can be sourced while incomplete"
grep -Fq '"$ZSH_CONFIGS_DIR"/*(DN)' "$ROOT/config/interactive/10-bootstrap.zsh" || fail "existing extensionless Zsh configs are ignored"
grep -Fq '_resolve_trash_cmd' "$ROOT/config/interactive/20-post-omz.zsh" || fail "trash-backed rm helper is missing"
grep -Fq '"$ZSH_CONFIGS_DIR"/*(DN)' "$ROOT/.zshrc" || fail "existing extensionless Zsh configs are ignored"
grep -Fq '_resolve_trash_cmd' "$ROOT/.zshrc" || fail "trash-backed rm helper is missing"
grep -Fq 'libglib2.0-bin' "$ROOT/install.sh" || fail "Ubuntu Trash support is not installed"
grep -Fq 'deploy.sh' "$ROOT/install.sh" || fail "install.sh does not invoke deploy.sh"
grep -Fq 'brew shellenv' "$ROOT/config/env/00-path.zsh" || fail "Homebrew is not initialized in env path module"
grep -Fq '/usr/local/bin/brew' "$ROOT/config/env/00-path.zsh" || fail "Intel Homebrew path is missing from env path module"
grep -Fq '${HOME}/.local/bin' "$ROOT/config/env/00-path.zsh" || fail "~/.local/bin is not added in env path module"
grep -Fq 'local.zsh' "$ROOT/.zshenv" || fail "machine-local local.zsh hook is missing"
grep -Fq 'brew shellenv' "$ROOT/.zshenv" || fail "Homebrew is not initialized in .zshenv"
grep -Fq '/usr/local/bin/brew' "$ROOT/.zshenv" || fail "Intel Homebrew path is missing from .zshenv"
grep -Fq '$HOME/.local/bin' "$ROOT/.zshenv" || fail "~/.local/bin is not added in .zshenv"
grep -Fq 'local.zsh' "$ROOT/.zshenv" || fail "local.zsh is not sourced from .zshenv"
if grep -Fq 'brew shellenv' "$ROOT/.zshrc" "$ROOT/config/interactive"/*.zsh; then
fail "Homebrew still initializes from interactive-only files"
if grep -Fq 'brew shellenv' "$ROOT/.zshrc"; then
fail "Homebrew still initializes from interactive-only .zshrc"
fi
[[ ! -e "$ROOT/install/fnm.sh" ]] || fail "vendored fnm installer still exists"
if grep -Eq '^[[:space:]]*export MLX_USER_TOKEN=' "$ROOT"/zshrc/*.zsh; then
fail "a static MLX user token remains"
fi
# No multi-file managed tree under config/
[[ ! -d "$ROOT/config" ]] || fail "obsolete config/ managed tree still exists"
# deploy.sh installs managed layout and preserves local.zsh
# deploy.sh installs stubs and preserves local.zsh; removes obsolete tree
deploy_home="$TEMP_DIR/deploy-home"
mkdir -p "$deploy_home/.config/zsh" "$deploy_home/.local/bin" "$deploy_home/.grok/bin"
mkdir -p "$deploy_home/.config/zsh/env" "$deploy_home/.local/bin" "$deploy_home/.grok/bin"
printf '%s\n' 'machine-only' >"$deploy_home/.config/zsh/local.zsh"
printf '%s\n' 'stale' >"$deploy_home/.config/zsh/env/00-path.zsh"
printf '%s\n' '#!/bin/sh' 'echo grok-ok' >"$deploy_home/.grok/bin/grok"
chmod +x "$deploy_home/.grok/bin/grok"
HOME="$deploy_home" bash "$ROOT/deploy.sh" --home "$deploy_home"
[[ -f "$deploy_home/.zshenv" ]] || fail "deploy.sh did not install .zshenv"
[[ -f "$deploy_home/.config/zsh/env/00-path.zsh" ]] || fail "deploy.sh did not install env modules"
[[ -f "$deploy_home/.config/zsh/interactive/10-bootstrap.zsh" ]] || fail "deploy.sh did not install interactive modules"
[[ -f "$deploy_home/.zshrc" ]] || fail "deploy.sh did not install .zshrc"
grep -Fxq 'machine-only' "$deploy_home/.config/zsh/local.zsh" ||
fail "deploy.sh overwrote local.zsh"
[[ ! -e "$deploy_home/.config/zsh/env" ]] || fail "deploy.sh left obsolete env/ tree"
[[ ! -e "$deploy_home/.config/zsh/local.zsh.example" ]] || fail "deploy.sh left local.zsh.example in home"
[[ -L "$deploy_home/.local/bin/grok" ]] || fail "deploy.sh did not create grok shim"
# deploy migrates split local/* into local.zsh
split_home="$TEMP_DIR/split-home"
mkdir -p "$split_home/.config/zsh/local"
printf '%s\n' 'from-env-local' >"$split_home/.config/zsh/local/env.local.zsh"
printf '%s\n' 'from-login-local' >"$split_home/.config/zsh/local/login.local.zsh"
HOME="$split_home" bash "$ROOT/deploy.sh" --home "$split_home" >/dev/null
grep -Fq 'from-env-local' "$split_home/.config/zsh/local.zsh" ||
fail "deploy.sh did not migrate env.local.zsh into local.zsh"
grep -Fq 'from-login-local' "$split_home/.config/zsh/local.zsh" ||
fail "deploy.sh did not migrate login.local.zsh into local.zsh"
# Non-interactive zsh must resolve ~/.local/bin without sourcing .zshrc.
local_bin_home="$TEMP_DIR/local-bin-home"
mkdir -p "$local_bin_home/.local/bin"