mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 21:34:05 +01:00
The 290-line installer was 40 over the 250-line cap. Its five banner-marked steps move into a sibling lib/, leaving a 53-line entry that owns log()/die(), the globals that cross between steps, and the call order. Proven by execution, not inspection: meta/scripts/trace_shell_split.sh --prefix was captured at HEAD in place (tracing from a detached worktree changes REPO_DIR, which is interpolated into a generated file, and fakes a diff), then re-run after the split. The traces are identical -- same exit status, same ordered stubbed calls, and all five generated-file hashes unchanged, including usage-report-catchup.sh at sha=9f4803ab157c5527. REPO_DIR is computed once in the entry and read as a global rather than recomputed inside a lib one directory deeper; recomputing it would have pointed the generated catch-up script at the wrong repo while still exiting 0. test_usage_monitoring_installer_efficiency.sh greps the installer's source text for the pmon heredoc, so it follows that heredoc to lib/nvidia_pmon.sh. Its extraction anchor also had to become whitespace-insensitive: the pre-commit hook runs `shfmt -w` on staged shell files and rewrites `cat > "x" << 'SCRIPT'` to `cat >"x" <<'SCRIPT'`, which silently broke extraction. All five property assertions are unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
74 lines
2.0 KiB
Bash
Executable File
74 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Per-family package name tables and the installer front-end.
|
|
# Sourced by install_usage_monitoring.sh; inherits the caller's strict mode.
|
|
|
|
# Format: "<generic>=<package>"; empty package = skip on this distro.
|
|
# These stay at top level on purpose: `declare -A` inside a function is local,
|
|
# which would make every pkg_name lookup return empty.
|
|
declare -A PKG_ARCH=(
|
|
[atop]=atop [nvtop]=nvtop [netdata]=netdata
|
|
[wl_clipboard]=wl-clipboard [xclip]=xclip
|
|
)
|
|
declare -A PKG_DEBIAN=(
|
|
[atop]=atop [nvtop]=nvtop [netdata]=netdata
|
|
[wl_clipboard]=wl-clipboard [xclip]=xclip
|
|
)
|
|
declare -A PKG_FEDORA=(
|
|
[atop]=atop [nvtop]=nvtop [netdata]=netdata
|
|
[wl_clipboard]=wl-clipboard [xclip]=xclip
|
|
)
|
|
declare -A PKG_SUSE=(
|
|
[atop]=atop [nvtop]=nvtop [netdata]=netdata
|
|
[wl_clipboard]=wl-clipboard [xclip]=xclip
|
|
)
|
|
|
|
pkg_name() {
|
|
local key=$1
|
|
case "$FAMILY" in
|
|
arch) printf '%s' "${PKG_ARCH[$key]-}" ;;
|
|
debian) printf '%s' "${PKG_DEBIAN[$key]-}" ;;
|
|
fedora) printf '%s' "${PKG_FEDORA[$key]-}" ;;
|
|
suse) printf '%s' "${PKG_SUSE[$key]-}" ;;
|
|
esac
|
|
}
|
|
|
|
install_packages() {
|
|
local -a pkgs=("$@")
|
|
[[ ${#pkgs[@]} -eq 0 ]] && return 0
|
|
log "installing: ${pkgs[*]}"
|
|
case "$FAMILY" in
|
|
arch) sudo pacman -S --needed --noconfirm "${pkgs[@]}" ;;
|
|
debian)
|
|
sudo apt-get update -qq
|
|
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y "${pkgs[@]}"
|
|
;;
|
|
fedora) sudo dnf install -y "${pkgs[@]}" ;;
|
|
suse) sudo zypper --non-interactive install "${pkgs[@]}" ;;
|
|
esac
|
|
}
|
|
|
|
# Pick a clipboard tool matching the session type.
|
|
clipboard_pkg() {
|
|
if [[ ${XDG_SESSION_TYPE:-} == "wayland" ]]; then
|
|
pkg_name wl_clipboard
|
|
else
|
|
pkg_name xclip
|
|
fi
|
|
}
|
|
|
|
# Resolves the global `pkgs` array (and `clip`) from FAMILY, then installs.
|
|
# The trailing `|| true` guards the bare conditional from ending the function
|
|
# with a false return value under `set -e`.
|
|
resolve_and_install_packages() {
|
|
want_keys=(atop nvtop netdata)
|
|
pkgs=()
|
|
for key in "${want_keys[@]}"; do
|
|
p=$(pkg_name "$key")
|
|
[[ -n $p ]] && pkgs+=("$p")
|
|
done
|
|
clip=$(clipboard_pkg)
|
|
[[ -n $clip ]] && pkgs+=("$clip") || true
|
|
|
|
install_packages "${pkgs[@]}"
|
|
}
|