Feature: Bootstrap script for new installs

bootstrap.sh installs everything listed in system/packages.txt (pacman,
AUR via yay, flatpak, official install scripts), auto-detects CPU
microcode and GPU drivers, enables services, links dotfiles with stow
and runs system/install.sh. Optional --svt-av1 installs
svt-av1-essential-git and rebuilds ffmpeg against it via
system/rebuild-ffmpeg.sh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-11 18:10:27 +01:00
parent 1201e6a4cc
commit 4a57e9902f
4 changed files with 399 additions and 1 deletions

197
system/packages.txt Normal file
View File

@@ -0,0 +1,197 @@
# ============================================================================
# Packages installed by bootstrap.sh on a new machine.
#
# - One package per line; anything after "#" is a description.
# - Lines starting with "#" are skipped (left here for reference).
# - [section] lines tell bootstrap.sh which installer to use;
# [services] lists systemd units to enable.
#
# Not listed here (bootstrap.sh handles them itself):
# - CPU microcode and GPU drivers: auto-detected from the hardware
# - yay: bootstrapped from the AUR before the [aur] section
# - svt-av1-essential-git: optional, also rebuilds ffmpeg against it
# ============================================================================
[pacman]
adw-gtk-theme # Unofficial GTK 3 port of the libadwaita theme
# amd-ucode # Microcode update image for AMD CPUs -- auto-detected by bootstrap.sh
awww # An Answer to your Wayland Wallpaper Woes
baobab # A graphical directory tree analyzer
base # Minimal package set to define a basic Arch Linux installation
base-devel # Basic tools to build Arch Linux packages
blueman # GTK+ Bluetooth Manager
bluez # Daemons for the bluetooth protocol stack
bluez-utils # Development and debugging utilities for the bluetooth protocol stack
btop # A monitor of system resources, bpytop ported to C++
dolphin # KDE File Manager
# dunst # Customizable and lightweight notification-daemon !! you use swaync for notifications
efibootmgr # Linux user-space application to modify the EFI Boot Manager
fastfetch # A feature-rich and performance oriented neofetch like system information tool
ffmpeg # Complete solution to record, convert and stream audio and video
filezilla # Fast and reliable FTP, FTPS and SFTP client
firefox # Fast, Private & Safe Web Browser
flatpak # Linux application sandboxing and distribution framework (formerly xdg-app)
foot # Fast, lightweight, and minimalistic Wayland terminal emulator
fzf # Command-line fuzzy finder
galculator # GTK based scientific calculator
# garcon # Freedesktop.org compliant menu library !! XFCE desktop leftover?
gdu # Fast disk usage analyzer
git # the fast distributed version control system
gnome-calendar # Simple and beautiful calendar application designed to perfectly fit the GNOME desktop
gnome-disk-utility # Disk Management Utility for GNOME
gnome-font-viewer # A font viewer utility for GNOME
gnome-keyring # Stores passwords and encryption keys
gnome-text-editor # A simple text editor for the GNOME desktop
grim # Screenshot utility for Wayland
gst-plugin-pipewire # Multimedia graph framework - pipewire plugin
gvfs # Virtual filesystem implementation for GIO
gvfs-smb # Virtual filesystem implementation for GIO - SMB/CIFS backend (Windows file sharing)
htop # Interactive process viewer
hypridle # hyprland’s idle daemon
hyprland # a highly customizable dynamic tiling Wayland compositor
hyprlock # hyprland’s GPU-accelerated screen locking utility
hyprshot # Hyprland screenshot utility
imv # Image viewer for Wayland and X11
jq # Command-line JSON processor
# kitty # A modern, hackable, featureful, OpenGL-based terminal emulator !! you use foot as terminal (kitty config not in dotfiles)
libgsf # Extensible I/O abstraction library for dealing with structured file formats
libmatroska # Matroska library
libpulse # A featureful, general-purpose sound server (client library)
# libva-nvidia-driver # VA-API implementation that uses NVDEC as a backend -- auto-detected by bootstrap.sh
linux # The Linux kernel and modules
linux-firmware # Firmware files for Linux - Default set
mkinitcpio # Modular initramfs image creation utility
mkvtoolnix-cli # Set of tools to create, edit and inspect Matroska files
mpv # a free, open source, and cross-platform media player
mullvad-vpn-daemon # Mullvad VPN client (daemon and CLI)
nano # Pico editor clone with enhancements
network-manager-applet # Applet for managing network connections
networkmanager # Network connection manager and user applications
noto-fonts # Google Noto TTF fonts
noto-fonts-cjk # Google Noto CJK fonts
noto-fonts-emoji # Google Noto Color Emoji font
noto-fonts-extra # Google Noto TTF fonts - additional variants
npm # JavaScript package manager
nss-mdns # glibc plugin providing host name resolution via mDNS
# nvidia-open # NVIDIA open kernel modules -- auto-detected by bootstrap.sh
pacman-contrib # Contributed scripts and tools for pacman systems
pam-u2f # Universal 2nd Factor (U2F) PAM authentication module from Yubico
papirus-icon-theme # Papirus icon theme
pipewire # Low-latency audio/video router and processor
pipewire-alsa # Low-latency audio/video router and processor - ALSA configuration
pipewire-jack # Low-latency audio/video router and processor - JACK replacement
pipewire-pulse # Low-latency audio/video router and processor - PulseAudio replacement
pnpm # Fast, disk space efficient package manager
polkit-kde-agent # Daemon providing a polkit authentication UI for KDE
postgresql # Sophisticated object-relational DBMS
postgresql-libs # Sophisticated object-relational DBMS - Client binaries and libraries
proton-vpn-cli # Official ProtonVPN CLI Linux app
qt5-wayland # Provides APIs for Wayland
qt6-quickeffectmaker # Qt Quick Effect Maker (QQEM) for creating and editing custom shader effects
qt6-wayland # Provides APIs for Wayland
rofi # A window switcher, application launcher and dmenu replacement
sddm # QML based X11 and Wayland display manager
slurp # Select a region in a Wayland compositor
smartmontools # Control and monitor S.M.A.R.T. enabled ATA and SCSI Hard Drives
steam # Valve's digital software delivery system
stow # Manage installation of multiple softwares in the same directory tree
sudo # Give certain users the ability to run some commands as root
swaync # A simple GTK based notification daemon for Sway
tailscale # A mesh VPN that makes it easy to connect your devices, wherever they are.
thunar # Modern, fast and easy-to-use file manager for Xfce
thunar-archive-plugin # Adds archive operations to the Thunar file context menus
thunar-media-tags-plugin # Adds special features for media files to the Thunar File Manager
thunar-shares-plugin # Thunar plugin to quickly share a folder using Samba without requiring root access
thunar-volman # Automatic management of removable drives and media for Thunar
ttf-dejavu # Font family based on the Bitstream Vera Fonts with a wider range of characters
ttf-iosevka-nerd # Patched font Iosevka from nerd fonts library
ttf-jetbrains-mono # Typeface for developers, by JetBrains
ttf-jetbrains-mono-nerd # Patched font JetBrains Mono from nerd fonts library
ttf-liberation # Font family which aims at metric compatibility with Arial, Times New Roman, and Courier New
ttf-material-icons # Material Design icons by Google (deprecated classic Material Icons static style)
ttf-material-symbols-variable # Material Design icons by Google (Material Symbols - 4 axis variable)
ttf-noto-nerd # Patched font Noto from nerd fonts library
tumbler # Thumbnail service implementing the thumbnail management D-Bus specification
uv # An extremely fast Python package installer and resolver written in Rust
uwsm # A standalone Wayland session manager
vim # Vi Improved, a highly configurable, improved version of the vi text editor
# waybar # Highly customizable Wayland bar for Sway and Wlroots based compositors !! you've switched to quickshell (waybar is commented out in startup.lua)
webp-pixbuf-loader # WebM GDK Pixbuf Loader library
wget # Network utility to retrieve files from the web
wireplumber # Session / policy manager implementation for PipeWire
# wofi # launcher for wlroots-based wayland compositors !! you also have rofi — need both?
wpa_supplicant # A utility providing key negotiation for WPA wireless networks
xarchiver # GTK frontend to various command line archivers
xdg-desktop-portal-hyprland # xdg-desktop-portal backend for hyprland
xdg-utils # Command line tools that assist applications with a variety of desktop integration tasks
# xfce4-appfinder # Application launcher and finder !! XFCE desktop leftover?
# xfce4-panel # Panel for the Xfce desktop environment !! XFCE desktop leftover?
# xfce4-power-manager # Power Manager for Xfce !! XFCE desktop leftover?
# xfce4-session # Xfce's session manager !! XFCE desktop leftover?
# xfce4-settings # Xfce's Configuration System !! XFCE desktop leftover?
# xfce4-terminal # A modern terminal emulator primarily for the Xfce desktop environment !! XFCE desktop leftover?
# xfdesktop # Xfce's desktop manager !! XFCE desktop leftover?
# xfwm4 # Xfce's window manager !! XFCE desktop leftover?
zram-generator # Systemd unit generator for zram devices
zsh # A very advanced and programmable command interpreter (shell) for UNIX
# Used by the dotfiles, previously only pulled in by caelestia-shell / waybar
brightnessctl # Backlight control (quickshell, hypr keybinds)
cliphist # Clipboard history (wl-paste watcher in startup.lua)
playerctl # Media key control
power-profiles-daemon # Power profiles (quickshell battery widget)
wl-clipboard # wl-copy / wl-paste
openssh # SSH client/server (sshd service, git over ssh)
avahi # mDNS daemon (avahi-daemon service, used by nss-mdns)
[aur]
bitwarden-bin # A secure and free password manager for all of your devices.
# caelestia-shell # The desktop shell for the Caelestia dotfiles !! alternative quickshell config, not used by your shell.qml
flutter-bin # Cross platform widget toolkit for Dart (monolithic)
google-chrome # The popular web browser by Google (Stable Channel)
hyprmod # Native GTK4/libadwaita settings app for Hyprland
# jellyfin-desktop-debug # Detached debugging symbols for jellyfin-desktop !! debug symbols, not needed
minecraft-launcher # Official Minecraft Launcher
# orbit-wifi # A WiFi/Bluetooth manager for Wayland with glassmorphism UI !! removed from your config in commit 88484f8
plex-desktop # Plex desktop client for linux
plexamp-bin # Modern music client for Plex.(Prebuilt version.Use system-wide electron)
puddletag # An audio tag editor for GNU/Linux
quickshell-git # The shell your bar/OSD run on (previously a caelestia-shell dependency)
pwvucontrol # Pipewire volume control for GNOME
python-pywal # Generate and change colorschemes on the fly
raw-thumbnailer # A lightweight and fast raw image thumbnailer that can be used by file managers.
seafile-client # GUI client for synchronizing your local files with seafile server
sunshine # Self-hosted game stream host for Moonlight
# svt-av1-essential-git # A no-nonsense SVT-AV1 encoder fork with sensible defaults and Quality of Life improvements -- optional step in bootstrap.sh (rebuilds ffmpeg)
ttf-icomoon-feather # Icomoon feather font
tumbler-extra-thumbnailers # Customized thumbnailers for Tumbler
turritopsis # Desktop Jellyfin client with mpv playback
vesktop # A standalone Electron-based Discord app with Vencord & improved Linux support
visual-studio-code-bin # Visual Studio Code (vscode)
waypaper # GUI wallpaper setter for Wayland and Xorg window managers. It works as a frontend for popular wallpaper backends like swaybg, swww, wallutils, hyprpaper and feh.
# yay # Yet another yogurt. Pacman wrapper and AUR helper written in go. !! bootstrapped by the script itself anyway
# yay-debug # Detached debugging symbols for yay !! debug symbols, not needed
zen-browser-bin # Official package for Zen, a privacy-focused, feature packed Firefox-based web browser
[flatpak]
com.makemkv.MakeMKV # MakeMKV
org.jellyfin.JellyfinDesktop # Jellyfin Desktop
[installer] # official install scripts, see bootstrap.sh
claude # Claude Code CLI (official install script)
oh-my-posh # Prompt theme engine (official install script; your theme is already in dotfiles)
# ffmpeg # Static ffmpeg build — !! duplicate, ffmpeg is also installed via pacman above
# python3.13 # Standalone Python 3.13 — !! probably not needed, uv can provide Python
[services] # enabled with systemctl, start on next boot
NetworkManager.service # Networking
bluetooth.service # Bluetooth
sddm.service # Login screen
sshd.service # SSH server
avahi-daemon.service # mDNS / .local hostnames
systemd-resolved.service # DNS resolver (used by the VPNs)
systemd-timesyncd.service # Clock sync
fstrim.timer # Weekly SSD trim
tailscaled.service # Tailscale
mullvad-daemon.service # Mullvad VPN
proton.VPN.service # Proton VPN

27
system/rebuild-ffmpeg.sh Executable file
View File

@@ -0,0 +1,27 @@
#!/usr/bin/env bash
# Rebuilds Arch's ffmpeg package from source so it links against the installed
# svt-av1-essential-git instead of the repo svt-av1 it was built with.
#
# Re-run this after a `pacman -Syu` that updates ffmpeg, otherwise the repo
# build replaces this one.
set -euo pipefail
if ! pacman -Qq svt-av1-essential-git >/dev/null 2>&1; then
echo "svt-av1-essential-git is not installed; nothing to rebuild against." >&2
exit 1
fi
build="$(mktemp -d)"
trap 'rm -rf "$build"' EXIT
git clone --depth 1 https://gitlab.archlinux.org/archlinux/packaging/packages/ffmpeg.git "$build/ffmpeg"
cd "$build/ffmpeg"
# The PKGBUILD verifies a signed ffmpeg tag; makepkg won't fetch the keys itself
mapfile -t keys < <(source ./PKGBUILD && printf '%s\n' "${validpgpkeys[@]}")
if (( ${#keys[@]} )); then
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys "${keys[@]}"
fi
# No --needed: the version matches what's installed, we want it replaced anyway
makepkg --syncdeps --install --cleanbuild --noconfirm