mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-14 17:50:47 +01:00
Two levels of pure taxonomy carrying no information, and a 2-directory
cap leaves no room for them. Categories now sit directly under
linux_configuration/: features, fixes, utils, misc, fresh-install,
installers, diagnostics, gaming, boot_recovery, periodic_background, lib,
meta, tests. A script's own lib/ and tests/ are exempt from the cap, so
those stay put.
Depth violations 248 -> 139; roughly 40 of the remainder are inside
digital_wellbeing and hosts, deferred until the guard-lib repoint.
The moves are the easy half. What breaks is every path that counted
levels, and three classes of it had to be found by resolving paths rather
than reading diffs:
- 52 relative `source` lines for lib/common.sh and lib/android.sh. The
correct prefix differs per file: 40 were ../../ and 12 were ../../../,
so a blanket replace would have fixed one set and broken the other.
- REPO_ROOT in 7 fixes/lib/tests harnesses and setup_syncyomi_guard.sh,
each walking up four levels from a directory now two levels shallower.
This caused a real regression -- the fixes suite went red with
"log_warn: command not found" -- caught by running it and comparing
against the pre-move baseline worktree.
- conftest.py's sys.path entries, which took the pytest gate down with
14 collection errors, and the `# shellcheck source=` directives, which
took shellcheck down with SC1091.
16 symlinks in $HOME broke, including the entire i3blocks bar. All
repointed, and cpu_monitor/memory/disk/time/volume were run to confirm
they emit real output rather than merely resolving.
Verified: 1798 tests pass at 100% coverage, 8 of 9 lib/tests suites pass
(the ninth needs the coverage jail, identically at baseline), pre-commit
is clean, and the two untracked secret configs are still ignored after
their gitignore paths changed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PJrqKERAo5QUeEHWS5Asgp
126 lines
4.8 KiB
Bash
Executable File
126 lines
4.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# install_ffmpeg_with_arnndn.sh — helper to install/upgrade FFmpeg with arnndn and full audio filters
|
|
#
|
|
# Tries distro packages first; if not suitable, offers to build from source.
|
|
# This script prints commands and asks for confirmation before building.
|
|
|
|
# Source common library for shared functions
|
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
|
# shellcheck source=../../lib/common.sh
|
|
source "$SCRIPT_DIR/../../lib/common.sh"
|
|
|
|
print_info() {
|
|
echo "[info] $*"
|
|
}
|
|
|
|
detect_distro() {
|
|
if [[ -f /etc/os-release ]]; then
|
|
. /etc/os-release
|
|
echo "${ID:-unknown}"
|
|
else
|
|
echo "unknown"
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
local distro
|
|
distro=$(detect_distro)
|
|
print_info "Detected distro: $distro"
|
|
|
|
if has_cmd ffmpeg && ffmpeg -hide_banner -filters | grep -q " arnndn "; then
|
|
print_info "Your ffmpeg already supports arnndn."
|
|
else
|
|
case "$distro" in
|
|
ubuntu | debian)
|
|
print_info "On Ubuntu/Debian, the official repo may lack newer filters. Consider a PPA or build from source."
|
|
echo "Options:"
|
|
echo " - ppa: sudo add-apt-repository ppa:savoury1/ffmpeg6 && sudo apt update && sudo apt install ffmpeg"
|
|
echo " - source build (recommended for latest): run this script to build from source"
|
|
;;
|
|
arch | manjaro | endeavouros)
|
|
print_info "On Arch-based distros, ffmpeg is recent. Try: sudo pacman -Syu ffmpeg"
|
|
;;
|
|
fedora)
|
|
print_info "On Fedora, try: sudo dnf install ffmpeg"
|
|
;;
|
|
*)
|
|
print_info "Distro not recognized; will offer source build."
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if ask_yes_no "Build FFmpeg from source with rnnoise/arnndn support now?"; then
|
|
echo "This will clone FFmpeg and build locally under ./ffmpeg-build. Continue?"
|
|
if ! ask_yes_no "Proceed"; then
|
|
exit 0
|
|
fi
|
|
set -x
|
|
mkdir -p ffmpeg-build && cd ffmpeg-build
|
|
# Prepare repository
|
|
if [[ -d FFmpeg ]]; then
|
|
if [[ -d FFmpeg/.git ]]; then
|
|
if ask_yes_no "An existing FFmpeg source directory was found. Reuse and update it?"; then
|
|
set +e
|
|
git -C FFmpeg fetch --all --tags --prune
|
|
git -C FFmpeg pull --rebase --ff-only || true
|
|
set -e
|
|
else
|
|
if ask_yes_no "Delete existing FFmpeg directory and re-clone?"; then
|
|
rm -rf FFmpeg
|
|
else
|
|
echo "Keeping existing FFmpeg directory as-is."
|
|
fi
|
|
fi
|
|
else
|
|
if ask_yes_no "Non-git 'FFmpeg' directory exists. Delete and re-clone?"; then
|
|
rm -rf FFmpeg
|
|
else
|
|
echo "Cannot proceed with a non-git FFmpeg directory present. Aborting."
|
|
exit 4
|
|
fi
|
|
fi
|
|
fi
|
|
# Dependencies
|
|
if [[ $distro == "ubuntu" || $distro == "debian" ]]; then
|
|
sudo apt update
|
|
sudo apt install -y git build-essential yasm nasm pkg-config libx264-dev libx265-dev libvpx-dev libopus-dev libfdk-aac-dev libmp3lame-dev libvorbis-dev libass-dev libfreetype6-dev libgnutls28-dev libaom-dev libdav1d-dev libxvidcore-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev libxcb-shape0-dev libdrm-dev libvulkan-dev libva-dev libvdpau-dev librtmp-dev libunistring-dev libgnutls28-dev libchromaprint-dev libbluray-dev librubberband-dev libspeex-dev libsoxr-dev libvmaf-dev libzimg-dev libsvtav1-dev libtheora-dev libwebp-dev libopenal-dev libjack-jackd2-dev libpulse-dev librnnoise-dev
|
|
elif [[ $distro == "arch" || $distro == "manjaro" || $distro == "endeavouros" ]]; then
|
|
sudo pacman -Syu --needed base-devel yasm nasm pkgconf rnnoise
|
|
elif [[ $distro == "fedora" ]]; then
|
|
sudo dnf install -y git make gcc yasm nasm pkgconf-pkg-config rnnoise-devel libX11-devel libXext-devel libXfixes-devel libXv-devel libXrandr-devel libXi-devel libXtst-devel libXinerama-devel freetype-devel fontconfig-devel libass-devel libvpx-devel libaom-devel libdav1d-devel zimg-devel rubberband-devel soxr-devel libvorbis-devel opus-devel lame-devel
|
|
else
|
|
echo "Note: please ensure rnnoise development headers are installed (pkg-config rnnoise)." >&2
|
|
fi
|
|
if [[ ! -d FFmpeg/.git ]]; then
|
|
git clone https://github.com/FFmpeg/FFmpeg.git --depth=1
|
|
fi
|
|
cd FFmpeg
|
|
RN_FLAG=""
|
|
# Some FFmpeg versions auto-detect rnnoise without a flag; include the flag only if supported
|
|
if ./configure --help | grep -q "librnnoise"; then
|
|
RN_FLAG="--enable-librnnoise"
|
|
else
|
|
echo "[info] configure has no --enable-librnnoise; relying on auto-detection via pkg-config (rnnoise)." >&2
|
|
fi
|
|
|
|
./configure \
|
|
--enable-gpl --enable-nonfree \
|
|
--enable-libx264 --enable-libx265 --enable-libvpx --enable-libopus --enable-libmp3lame \
|
|
--enable-libvorbis --enable-libass --enable-fontconfig --enable-libfreetype \
|
|
--enable-librubberband --enable-libsoxr --enable-libzimg --enable-libvmaf \
|
|
--enable-libdav1d --enable-libaom --enable-libsvtav1 \
|
|
${RN_FLAG} \
|
|
--enable-ffplay --enable-ffprobe
|
|
make -j"$(nproc)"
|
|
echo "Build complete. You can run ./ffmpeg-build/FFmpeg/ffmpeg from this folder or 'sudo make install' to install system-wide."
|
|
set +x
|
|
else
|
|
echo "Skipped building from source."
|
|
fi
|
|
}
|
|
|
|
main "$@"
|