- lib/distro.sh: add DISTRO_CODENAME from VERSION_CODENAME; remove unused REPO_ADD_RPM variable; export DISTRO_CODENAME - stages/01-repos.sh: replace repeated '. /etc/os-release' subshell calls with $DISTRO_CODENAME in Docker and Tailscale repo lines - stages/00-envcheck.sh: combine four mkdir -p calls into one - stages/02-packages.sh: remove identical if/else branches in fd symlink block; both branches were the same command - stages/03-toolchains.sh: set NVM_DIR once before the if/else instead of twice; remove dead commented-out duplicate curl line - stages/04-shell.sh: capture $(date +%Y%m%d) into _bak_date once per backup and reuse in cp and warn to avoid redundant forks - stages/06-scripts.sh: split 'export VAR=$(cmd)' into assignment + export to correctly propagate errors under set -euo pipefail - stages/07-uv-projects.sh: remove unused has_package_json field (always false, never read); fix stage completion message 06 -> 07 - stages/08-systemd.sh: remove mempi-sync.timer (deploy, enable, header comment); deploy mempi-sync.service only - stages/09-desktop.sh: remove duplicate mkdir -p in COSMIC section; remove unused repo_url parameter from install_nerd_font() - stages/12-other-apps.sh: replace manual distro branch for Nextcloud with pkg_install_mapped - config/scripts/bw-load-ssh.sh: split 'export BW_SESSION=$(cat ...)' into assignment + export - config/systemd/mempi-sync.timer: delete file
135 lines
4.7 KiB
Bash
Executable File
135 lines
4.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ===========================================================================
|
|
# Stage 02: System Packages
|
|
# Installs all non-default packages — distro-agnostic.
|
|
#
|
|
# Package names that differ between Debian and Fedora are handled via
|
|
# pkg_install_mapped() or conditional branches.
|
|
# Same-name packages are installed with pkg_install().
|
|
# ===========================================================================
|
|
|
|
info "Installing system packages (this may take a while)..."
|
|
|
|
# ===========================================================================
|
|
# A. Development tools & compilers
|
|
# ===========================================================================
|
|
echo " Development tools..."
|
|
pkg_group_install "development-tools" # Fedora only
|
|
|
|
# Common dev packages (same name on both)
|
|
pkg_install cmake
|
|
pkg_install python3-devel # Needed for building native extensions (evdev, etc.)
|
|
|
|
# Differently-named dev packages
|
|
pkg_install_mapped "build-essential" "@development-tools"
|
|
pkg_install_mapped "g++" "gcc-c++"
|
|
|
|
# Kernel headers
|
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
|
pkg_install "linux-headers-$(uname -r)" 2>/dev/null || pkg_install linux-headers-generic
|
|
else
|
|
pkg_install kernel-devel kernel-headers
|
|
fi
|
|
|
|
pkg_install dkms
|
|
|
|
# ---- Swap ffmpeg-free → ffmpeg from RPM Fusion (for full codec support) ----
|
|
# Fedora ships ffmpeg-free in main repos, but RPM Fusion's ffmpeg has more codecs
|
|
if rpm -q ffmpeg-free &>/dev/null; then
|
|
echo " Swapping ffmpeg-free → ffmpeg (RPM Fusion)..."
|
|
sudo dnf swap -y ffmpeg-free ffmpeg --allowerasing 2>/dev/null && ok " ffmpeg swapped" || warn " ffmpeg swap had issues."
|
|
fi
|
|
|
|
# ===========================================================================
|
|
# B. CLI utilities
|
|
# ===========================================================================
|
|
echo " CLI utility packages..."
|
|
|
|
# Same-name CLI tools
|
|
pkg_install \
|
|
ripgrep \
|
|
fd-find \
|
|
jq \
|
|
just \
|
|
ffmpeg \
|
|
wl-clipboard \
|
|
wtype \
|
|
wofi
|
|
|
|
# fd-find may need a symlink (binary is fdfind on both distros)
|
|
if command -v fdfind &>/dev/null && ! command -v fd &>/dev/null; then
|
|
sudo ln -sf "$(which fdfind)" /usr/local/bin/fd 2>/dev/null || true
|
|
fi
|
|
|
|
# Differently-named
|
|
pkg_install_mapped "imagemagick" "ImageMagick"
|
|
|
|
# ===========================================================================
|
|
# C. Media & graphics
|
|
# ===========================================================================
|
|
echo " Media & graphics packages..."
|
|
pkg_install gimp vlc
|
|
|
|
# ===========================================================================
|
|
# D. Fonts
|
|
# ===========================================================================
|
|
echo " Font packages..."
|
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
|
pkg_install fonts-powerline fonts-noto-cjk fonts-noto-cjk-extra \
|
|
fonts-noto-core fonts-noto-ui-core 2>/dev/null || true
|
|
else
|
|
pkg_install powerline-fonts google-noto-cjk-fonts \
|
|
google-noto-fonts-common 2>/dev/null || true
|
|
fi
|
|
|
|
# ===========================================================================
|
|
# E. System tools
|
|
# ===========================================================================
|
|
echo " System tool packages..."
|
|
pkg_install \
|
|
powertop \
|
|
smartmontools \
|
|
solaar 2>/dev/null || warn " Some system tools failed."
|
|
|
|
# Power management — use tuned on Fedora, TLP on Debian
|
|
if [ "$DISTRO_FAMILY" = "debian" ]; then
|
|
pkg_install tlp 2>/dev/null || warn " tlp not available."
|
|
else
|
|
# tuned is preinstalled on Fedora Workstation — just enable it
|
|
$SERVICE_ENABLE tuned 2>/dev/null || true
|
|
fi
|
|
|
|
# ===========================================================================
|
|
# F. General utilities
|
|
# ===========================================================================
|
|
echo " General utility packages..."
|
|
pkg_install \
|
|
rsync \
|
|
curl \
|
|
wget \
|
|
unzip \
|
|
p7zip 2>/dev/null || true
|
|
|
|
# ---- Ghostty terminal emulator ----
|
|
# Fedora: via COPR (scottames/ghostty) added in stage 01
|
|
# Ubuntu/Pop: via PPA (added in stage 01)
|
|
echo " Ghostty terminal emulator..."
|
|
pkg_install ghostty 2>/dev/null || warn " ghostty install failed."
|
|
|
|
# ---- VS Code ----
|
|
echo " VS Code..."
|
|
pkg_install code 2>/dev/null || warn " code install failed."
|
|
|
|
# ===========================================================================
|
|
# Start enabled services
|
|
# ===========================================================================
|
|
if [ "$DISTRO_FAMILY" = "debian" ] && command -v tlp &>/dev/null; then
|
|
$SERVICE_ENABLE tlp 2>/dev/null || true
|
|
fi
|
|
# tuned is already enabled by default on Fedora, but ensure it's running
|
|
if [ "$DISTRO_FAMILY" = "fedora" ] && command -v tuned &>/dev/null; then
|
|
$SERVICE_ENABLE tuned 2>/dev/null || true
|
|
fi
|
|
|
|
ok "Stage 02 complete: system packages installed."
|