176 lines
13 KiB
Bash
176 lines
13 KiB
Bash
#!/bin/bash
|
|
# ╔══════════════════════════════════════════════════════════════════════════════╗
|
|
# ║ setup/modules/core-packages.sh — Core system package installation ║
|
|
# ║ ║
|
|
# ║ PURPOSE: ║
|
|
# ║ Installs all base-layer packages that every configuration of this ║
|
|
# ║ system relies on. This is the largest and most time-consuming module. ║
|
|
# ║ ║
|
|
# ║ WHEN TO RUN: ║
|
|
# ║ After package-managers.sh (yay must be present for the AUR packages). ║
|
|
# ║ Called "core" in the TUI installer's component checklist. ║
|
|
# ║ ║
|
|
# ║ CATEGORIES INSTALLED: ║
|
|
# ║ - Archiving & file utilities (7zip, atool, dust, fd, fzf, ripgrep) ║
|
|
# ║ - Base build tools (base-devel, gcc, rust, rustup, python, ruby) ║
|
|
# ║ - Networking (networkmanager, iwd, openssh, wpa_supplicant, bind, ldns) ║
|
|
# ║ - Audio (pipewire, wireplumber, libpulse) ║
|
|
# ║ - Boot & storage (grub, btrfs-progs, dosfstools, udisks2, udiskie) ║
|
|
# ║ - Terminal utilities (btop, htop, tmux, mc, yazi, nano, vim, neovim) ║
|
|
# ║ - System monitoring (fastfetch, lshw, lsof, smartmontools, vnstat) ║
|
|
# ║ - Security (fail2ban, ufw, pciutils, usbutils) ║
|
|
# ║ - Misc: flatpak, distrobox, qrencode, fdupes, lynx, tldr, tree ║
|
|
# ╚══════════════════════════════════════════════════════════════════════════════╝
|
|
|
|
set -euo pipefail
|
|
# -e: exit immediately if any package install fails
|
|
# -u: error on unset variables
|
|
# -o pipefail: catch failures inside pipes
|
|
|
|
# Load shared logging helpers (log, skip, warn, err functions)
|
|
source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh"
|
|
|
|
log "Installing core packages..."
|
|
|
|
# Single pacman invocation for efficiency:
|
|
# -S: sync (install)
|
|
# -yu: update the package database and upgrade existing packages first
|
|
# --noconfirm: don't prompt for confirmation (needed for scripted install)
|
|
# --needed: skip packages that are already up-to-date (idempotency)
|
|
#
|
|
# Package groupings with rationale:
|
|
|
|
# Packages are collected in an array rather than written as a single
|
|
# backslash-continued `pacman` invocation: an array literal is the only form
|
|
# where `#` comments (both full-line and trailing) are allowed between items.
|
|
# A continued command would treat the first inline comment as the end of the
|
|
# command, silently dropping every package after it.
|
|
CORE_PACKAGES=(
|
|
# ── Archiving & file utilities ────────────────────────────────────────────
|
|
7zip # Modern replacement for p7zip — handles .7z, .zip, .rar, etc.
|
|
arch-install-scripts # genfstab and other Arch install helpers (useful even post-install)
|
|
atftp # TFTP client/server — used by some network boot tools
|
|
atool # Universal archive wrapper (handles zip/tar/gz/xz with one command)
|
|
|
|
# ── Base system & build tools ─────────────────────────────────────────────
|
|
base # Minimal Arch base (filesystem, bash, glibc, etc.)
|
|
base-devel # AUR build requirements: make, gcc, binutils, pkg-config, etc.
|
|
bc # Arbitrary precision calculator — used in many shell scripts
|
|
bind # DNS tools: dig, nslookup, host
|
|
bluez # Bluetooth protocol stack — enables BT devices
|
|
btrfs-progs # btrfs filesystem tools: mkfs.btrfs, btrfsck, snapper
|
|
btop # Interactive resource monitor (CPU/mem/net/disk)
|
|
|
|
cronie # Cron daemon for scheduled tasks (enabled later in core.sh)
|
|
curl # HTTP/FTP transfer tool — used by many installers
|
|
|
|
# ── Hardware & disk utilities ─────────────────────────────────────────────
|
|
dmidecode # Reads hardware info from DMI/SMBIOS (CPU, memory, BIOS)
|
|
distrobox # Run other distro containers inside Arch (uses podman/docker)
|
|
dosfstools # mkfs.fat for FAT/EFI partitions; used when setting up boot
|
|
dust # Disk usage analyzer — like `du` but cleaner output
|
|
|
|
# ── Filesystem & recovery ────────────────────────────────────────────────
|
|
e2fsprogs # ext4 filesystem tools: fsck.ext4, mkfs.ext4, tune2fs
|
|
fail2ban # Bans IPs after repeated auth failures (SSH protection)
|
|
fastfetch # System info display (neofetch replacement, faster)
|
|
fd # Fast alternative to `find`, respects .gitignore
|
|
fdupes # Find duplicate files by checksum
|
|
ffmpeg # Video/audio processing framework; required by many tools
|
|
firefox # Default browser (also in DE install, but needed as base)
|
|
flatpak # Universal app sandbox format; Flathub remote added in pkg-mgr
|
|
fzf # Fuzzy finder — used by shell, yazi, neovim integrations
|
|
|
|
# ── Compilers & language runtimes ────────────────────────────────────────
|
|
gcc # GNU C compiler — needed for native AUR builds
|
|
git # Version control — required everywhere
|
|
glib2 # GNOME low-level lib; used by many GTK/D-Bus tools
|
|
greetd-tuigreet # Text-mode login greeter (configured in core.sh)
|
|
grub # GRUB2 bootloader for x86_64-efi
|
|
|
|
# ── Hardware identification & networking ──────────────────────────────────
|
|
hdparm # Disk performance testing and low-level ATA control
|
|
htop # Interactive process viewer (classic alternative to btop)
|
|
inetutils # hostname, telnet, rsh, ftp utilities
|
|
iputils # ping, tracepath, arping — basic IP network tools
|
|
iwd # Intel Wireless Daemon — WiFi backend for NetworkManager
|
|
jq # JSON processor — used by installer scripts and modules
|
|
ldns # DNS library + drill tool (alternative to dig)
|
|
less # Pager for viewing long output; also needed by man
|
|
libpulse # PulseAudio client library — compatibility shim for pipewire
|
|
linux # The Linux kernel itself
|
|
linux-firmware # Microcode and firmware blobs for hardware support
|
|
lshw # Detailed hardware listing (CPU, memory, PCI devices)
|
|
lsof # List open files — invaluable for debugging processes/sockets
|
|
|
|
lynx # Text-mode web browser — useful in TTY-only environments
|
|
|
|
# ── Editors & documentation ──────────────────────────────────────────────
|
|
man-db # Man page database and viewer
|
|
mc # Midnight Commander — two-pane terminal file manager
|
|
nano # Simple terminal text editor for quick edits
|
|
neovim # Primary editor (configured via dotfiles/nvim/)
|
|
networkmanager # Network connection manager daemon
|
|
|
|
# ── Fetch & monitoring ────────────────────────────────────────────────────
|
|
onefetch # Git repo summary in the terminal (like neofetch for repos)
|
|
openbsd-netcat # Netcat implementation — port scanning, simple TCP connections
|
|
openssh # SSH client and server (sshd enabled in optional module)
|
|
parted # Disk partitioning tool — used by arch-autoinstall.sh
|
|
pciutils # lspci — list PCI devices (needed for GPU detection)
|
|
pipewire # Modern audio/video server (replaces PulseAudio + JACK)
|
|
|
|
# ── Programming languages ────────────────────────────────────────────────
|
|
python # Python 3 interpreter
|
|
python-pip # Python package manager
|
|
qrencode # Generate QR codes in terminal — useful for sharing WiFi/URLs
|
|
ripgrep # Fast recursive grep replacement (rg command)
|
|
rsync # Efficient file sync over SSH or locally
|
|
ruby-pkg-config # Ruby gem build helper — needed by some AUR packages
|
|
rust # Rust compiler (also installed via rustup for toolchain mgmt)
|
|
rustup # Rust toolchain manager — switches stable/nightly/beta
|
|
|
|
# ── System monitoring & debugging ────────────────────────────────────────
|
|
smartmontools # S.M.A.R.T. disk health monitoring (smartctl)
|
|
strace # System call tracer — debugging tool for process behavior
|
|
symlinks # Scans and optionally fixes broken symlinks
|
|
sysstat # System performance stats: iostat, mpstat, pidstat, sar
|
|
tldr # Simplified man pages with practical examples
|
|
tmux # Terminal multiplexer — persistent sessions over SSH
|
|
tree # Display directory structure as a tree
|
|
|
|
# ── Disk & USB management ────────────────────────────────────────────────
|
|
udisks2 # D-Bus service for auto-mounting removable media
|
|
udisks2-btrfs # btrfs extension for udisks2
|
|
udiskie # User-space udisks2 automounter daemon
|
|
ufw # Uncomplicated Firewall — iptables frontend
|
|
usbutils # lsusb — list USB devices
|
|
|
|
# ── Network tools & misc ─────────────────────────────────────────────────
|
|
vim # Classic Vi IMproved editor (backup editor, always present)
|
|
vnstat # Network traffic monitor — tracks usage per interface
|
|
wget # HTTP/FTP file downloader
|
|
whois # Domain name lookup tool
|
|
wireplumber # Session/policy manager for PipeWire (required for audio)
|
|
wireless_tools # Legacy iwconfig, iwlist — sometimes needed for troubleshooting
|
|
wpa_supplicant # WPA2/WPA3 supplicant for WiFi authentication
|
|
wprs # Wayland proxy for running X11 apps in Wayland sessions
|
|
|
|
# ── File manager & archive ────────────────────────────────────────────────
|
|
yazi # Terminal file manager with image preview and fuzzy search
|
|
zip # Create ZIP archives
|
|
unzip # Extract ZIP archives
|
|
zram-generator # Systemd-based zram compressed swap setup (improves RAM efficiency)
|
|
)
|
|
|
|
sudo pacman -Syu --noconfirm --needed -- "${CORE_PACKAGES[@]}"
|
|
|
|
# ── AUR packages ──────────────────────────────────────────────────────────────
|
|
# Only install packages that are NOT available in official repos.
|
|
# pamtester: PAM module tester — used to verify FIDO2/U2F PAM stack without logging out.
|
|
# Available only in AUR because it's a small utility not deemed mainline-worthy.
|
|
log "Installing AUR packages..."
|
|
yay -S --aur --noconfirm --needed pamtester
|
|
|
|
log "Core packages installed."
|