mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-10 18:07:06 +01:00
The last unit over the cap is now github.com/kuhyx/digital-wellbeing, cloned at ~/digital-wellbeing, and `--warn` is gone from the directory-depth-cap hook. `check_directory_depth.sh --all` exits 0 with zero violations, down from 46 at the start of the session. That was the point of the campaign. History was filtered across all three paths the unit has lived at (63 commits); the current path alone holds 2. The six suites that test this code lived in linux_configuration/tests/ rather than beside it, so they were filtered separately (24 commits) and merged in as a second root. A path filter of the unit alone would have left them here, testing code that had left the repo -- and their names would still have been in shell-tests.yml's hardcoded arrays, failing CI on missing files. linux_configuration/lib/common.sh is vendored into vendor/ rather than trimmed to the four functions actually used: set_actual_user_vars calls two of the others, so a trim breaks silently. It is in vendor/ and not lib/ because test_music_parallelism.sh copies the unit's own lib/ into a scratch worktree while stubbing the shared lib; in one directory the real common.sh overwrote the stub, and the suite silently measured the wrong library. Running the callers caught what shellcheck and grep both missed: check_and_enable_services.sh died with "DW_REPO: unbound variable" because the definition sat below its first use. It now runs clean and reports ok for every extracted-unit check. Two long-standing live defects fixed as a consequence. The pacman-wrapper drift manifest embeds ABSOLUTE paths and had named deleted scripts/ paths since the flatten, so the check reported a permanent false "stale or tampered"; it now verifies, with unchanged hashes proving the extracted bytes are identical. And the last two stale live references are gone: 8 -> 0. The two pre-commit excludes for setup_midnight_shutdown.sh are dropped rather than moved. lsattr shows nothing in the unit is chattr +i any more, and the fixer hooks leave the file alone when allowed to run. Removing 80 shell files also shrank the jscpd denominator enough that the virtualenv/tqdm clones inside the GENERATED .ci-mirror-venv/ tipped the repo to 2.09% and blocked this commit, which adds no duplication. That directory is the same vendored third-party shell the ignore list already excludes as .venv/, just under another name; jscpd walks the working tree rather than the index, so being untracked did not spare it. Excluded by name: 1.74%. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
196 lines
6.7 KiB
Bash
Executable File
196 lines
6.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# shellcheck source=./detect_gpu.sh
|
|
# shellcheck source=./detect_gpu_and_install.sh
|
|
set -e
|
|
|
|
# shellcheck source=lib/packages.sh
|
|
. "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/packages.sh"
|
|
|
|
# Trap errors and call the play_error_sound function
|
|
trap 'play_error_sound' ERR
|
|
|
|
sudo -v
|
|
git config --global init.defaultBranch main
|
|
|
|
# GPU detection (now split vendor-specific logic)
|
|
if [ -f "./detect_gpu.sh" ]; then
|
|
# shellcheck source=./detect_gpu.sh disable=SC1091
|
|
. ./detect_gpu.sh
|
|
elif [ -f "./detect_gpu_and_install.sh" ]; then
|
|
# shellcheck source=./detect_gpu_and_install.sh disable=SC1091
|
|
. ./detect_gpu_and_install.sh
|
|
else
|
|
echo "GPU detection scripts not found; continuing without GPU specific installation."
|
|
fi
|
|
|
|
sudo cp /etc/makepkg.conf /etc/makepkg.conf.bak
|
|
sudo cp ./makepkg.conf /etc/makepkg.conf
|
|
sudo cp /etc/pacman.conf /etc/pacman.conf.bak
|
|
sudo cp ./pacman.conf /etc/pacman.conf
|
|
# sudo cp /etc/mkinitcpio.conf /etc/mkinitcpio.conf.bak
|
|
# sudo cp ./mkinitcpio.conf /etc/mkinitcpio.conf
|
|
# mkinitcpio -P
|
|
# Reflector install / service management (idempotent & resilient)
|
|
if pacman -Qi reflector >/dev/null 2>&1; then
|
|
echo "reflector already installed"
|
|
else
|
|
yes | sudo pacman -Sy --noconfirm reflector || echo "Warning: reflector install failed (continuing)"
|
|
fi
|
|
# Prefer timer over service (Arch default)
|
|
if systemctl list-unit-files | grep -q '^reflector.timer'; then
|
|
if systemctl is-enabled reflector.timer >/dev/null 2>&1; then
|
|
echo "reflector.timer already enabled"
|
|
else
|
|
sudo systemctl enable reflector.timer || echo "Warning: could not enable reflector.timer"
|
|
fi
|
|
if systemctl is-active reflector.timer >/dev/null 2>&1; then
|
|
echo "reflector.timer already active"
|
|
else
|
|
if ! sudo systemctl start reflector.timer; then
|
|
echo "Warning: failed to start reflector.timer (check: systemctl status reflector.timer; journalctl -xeu reflector.timer)"
|
|
fi
|
|
fi
|
|
elif systemctl list-unit-files | grep -q '^reflector.service'; then
|
|
if systemctl is-enabled reflector.service >/dev/null 2>&1; then
|
|
echo "reflector.service already enabled"
|
|
else
|
|
sudo systemctl enable reflector.service || echo "Warning: could not enable reflector.service"
|
|
fi
|
|
if systemctl is-active reflector.service >/dev/null 2>&1; then
|
|
echo "reflector.service already running"
|
|
else
|
|
if ! sudo systemctl start reflector.service; then
|
|
echo "Warning: failed to start reflector.service (check: systemctl status reflector.service; journalctl -xeu reflector.service)"
|
|
fi
|
|
fi
|
|
else
|
|
echo "reflector systemd unit not found (neither timer nor service)"
|
|
fi
|
|
# Read AUR packages from file (needed before pacman processing)
|
|
declare -a aur_packages=()
|
|
declare -a aur_package_names=()
|
|
while IFS= read -r line; do
|
|
if [[ -n $line && $line =~ ^[a-z0-9] ]]; then
|
|
aur_packages+=("$line")
|
|
aur_package_names+=("${line%% *}")
|
|
fi
|
|
done <"aur_packages.txt"
|
|
|
|
# Read pacman packages from file
|
|
declare -a pacman_packages
|
|
while IFS= read -r line; do
|
|
# Skip empty lines and comments (lines not starting with alphanumeric characters)
|
|
if [[ -n $line && $line =~ ^[a-z0-9] ]]; then
|
|
pacman_packages+=("$line")
|
|
fi
|
|
done <"pacman_packages.txt"
|
|
|
|
for pkg in "${pacman_packages[@]}"; do
|
|
# Skip NVIDIA packages if GPU is not NVIDIA
|
|
if [ "$GPU_VENDOR" != "nvidia" ] && { [ "$pkg" = "nvidia" ] || [ "$pkg" = "nvidia-utils" ] || [ "$pkg" = "lib32-nvidia-utils" ]; }; then
|
|
echo "Skipping $pkg (GPU vendor: $GPU_VENDOR)"
|
|
continue
|
|
fi
|
|
# Check for texlive subpackages
|
|
if [ "$pkg" == "texlive" ]; then
|
|
# shellcheck disable=SC2034 # Used via nameref in all_subpackages_installed
|
|
texlive_sub_pkgs=(
|
|
texlive-basic texlive-bibtexextra texlive-binextra texlive-context texlive-fontsextra
|
|
texlive-fontsrecommended texlive-fontutils texlive-formatsextra texlive-games texlive-humanities
|
|
texlive-latex texlive-latexextra texlive-latexrecommended texlive-luatex texlive-mathscience
|
|
texlive-metapost texlive-music texlive-pictures texlive-plaingeneric texlive-pstricks
|
|
texlive-publishers texlive-xetex
|
|
)
|
|
if all_subpackages_installed texlive_sub_pkgs; then
|
|
echo "All texlive subpackages are installed, skipping texlive"
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# Check for texlive-lang subpackages
|
|
if [ "$pkg" == "texlive-lang" ]; then
|
|
# shellcheck disable=SC2034 # Used via nameref in all_subpackages_installed
|
|
texlive_lang_sub_pkgs=(
|
|
texlive-langarabic texlive-langchinese texlive-langcjk texlive-langcyrillic
|
|
texlive-langczechslovak texlive-langenglish texlive-langeuropean texlive-langfrench
|
|
texlive-langgerman texlive-langgreek texlive-langitalian texlive-langjapanese
|
|
texlive-langkorean texlive-langother texlive-langpolish texlive-langportuguese
|
|
texlive-langspanish
|
|
)
|
|
if all_subpackages_installed texlive_lang_sub_pkgs; then
|
|
echo "All texlive-lang subpackages are installed, skipping texlive-lang"
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
if ! pacman -Qi "$pkg" &>/dev/null; then
|
|
if ! printf '%s
|
|
' "${aur_package_names[@]}" | grep -Fxq "$pkg"; then
|
|
yes | sudo pacman -Sy --noconfirm "$pkg"
|
|
else
|
|
echo "$pkg exists in AUR packages, skipping pacman installation"
|
|
fi
|
|
else
|
|
echo "$pkg is already installed"
|
|
fi
|
|
done
|
|
if ! command -v nvm &>/dev/null; then
|
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
|
|
else
|
|
echo "nvm is already installed"
|
|
fi
|
|
export NVM_DIR="$HOME/.nvm"
|
|
if [ -s "$NVM_DIR/nvm.sh" ]; then
|
|
# shellcheck source=/dev/null
|
|
. "$NVM_DIR/nvm.sh"
|
|
else
|
|
echo "nvm.sh not found at $NVM_DIR/nvm.sh" >&2
|
|
fi
|
|
if command -v nvm &>/dev/null; then
|
|
nvm i v18.20.5
|
|
nvm install --lts
|
|
else
|
|
echo "nvm command unavailable; skipping Node installation" >&2
|
|
fi
|
|
sudo systemctl enable bluetooth.service
|
|
sudo systemctl start bluetooth.service
|
|
|
|
for entry in "${aur_packages[@]}"; do
|
|
pkg_name=${entry%% *}
|
|
repo_url=${entry#* }
|
|
if [ "$repo_url" = "$pkg_name" ] || [ -z "$repo_url" ]; then
|
|
repo_url="https://aur.archlinux.org/${pkg_name}.git"
|
|
fi
|
|
install_from_aur "$repo_url" "$pkg_name"
|
|
done
|
|
|
|
cd ~/linux-configuration/fresh-install
|
|
if [ ! -d "$HOME/.config/mpv" ]; then
|
|
mkdir -p "$HOME/.config/mpv"
|
|
fi
|
|
cp mpv.conf "$HOME/.config/mpv/mpv.conf"
|
|
|
|
if [ ! -d "$HOME/.oh-my-zsh" ]; then
|
|
yes | sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
|
|
else
|
|
echo "Oh My Zsh is already installed"
|
|
fi
|
|
|
|
cd ~/linux-configuration
|
|
sudo "$HOME/hosts-blocker/install.sh"
|
|
i3/install.sh
|
|
"$HOME/digital-wellbeing/pacman/install_pacman_wrapper.sh"
|
|
fixes/nvidia_troubleshoot.sh
|
|
sudo features/setup_activitywatch.sh
|
|
sudo utils/setup_media_organizer.sh
|
|
yes | sudo periodic_background/setup_periodic_system.sh
|
|
yes | protonup
|
|
yes | sudo pacman -Syuu
|
|
|
|
#cd unreal-engine
|
|
## gh auth login
|
|
#gh repo clone EpicGames/UnrealEngine -- -b release --single-branch
|
|
#makepkg -s --nocheck --skipchecksums --skipinteg --skippgpcheck --noconfirm --needed
|
|
|
|
utils/setup_passwordless_system.sh
|