fix(installer): repair broken package lists and make user-timer setup non-fatal
The core, hyprlua and hyprland package installs used backslash-continued `pacman` commands with inline `#` comments. Bash treats the first inline comment as the end of the command, so pacman ran with only the packages before it and every later name (7zip, cronie, nwg-dock-hyprland, …) was executed as a shell command — failing under `set -e`. Move all three lists into arrays, where per-item comments are valid, and install with `--`. Also: - himalaya: install the official `himalaya` package (AUR `himalaya-bin` is gone). - mail-notmuch / caldav-sync: make the systemd *user* timer setup and the initial sync best-effort. A bare TTY/chroot install has no user session bus (and ~/.config may not be writable yet), so `systemctl --user` and the mkdir could abort the module; warn and continue instead. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>main
parent
cb88b315a9
commit
2c05c4e274
|
|
@ -57,83 +57,92 @@ sudo pacman -Syu --noconfirm --needed flatpak
|
|||
# 2. Install required packages
|
||||
# ---------------------------------------------------------------------------
|
||||
log "Installing required packages..."
|
||||
sudo pacman -Syu --noconfirm --needed \
|
||||
hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \
|
||||
# hyprland — the Wayland compositor / window manager
|
||||
# hyprcursor — hardware-accelerated cursor rendering for Hyprland
|
||||
# wl-clipboard — wl-copy / wl-paste; clipboard tools for Wayland
|
||||
# hyprpaper — wallpaper utility with per-monitor and animation support
|
||||
# hyprlock — GPU-accelerated screen locker (Hyprland-native)
|
||||
# wofi — Wayland application launcher (rofi replacement)
|
||||
# kitty — GPU-accelerated terminal (default terminal in this setup)
|
||||
# dunst — lightweight, scriptable notification daemon
|
||||
nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \
|
||||
# nwg-dock-hyprland — dock/taskbar with Hyprland workspace awareness
|
||||
# nwg-drawer — application drawer (grid-style launcher)
|
||||
# nwg-menu — GTK menu used in the panel's app button
|
||||
# nwg-look — GTK/cursor/icon theme picker for wlroots sessions
|
||||
python cmake meson cpio pkgconf ruby-pkg-config \
|
||||
# Packages live in an array so each can carry an inline comment. A single
|
||||
# backslash-continued `pacman` command cannot: bash treats the first inline
|
||||
# comment as the end of the command, silently dropping every later package
|
||||
# (which then get run as shell commands and abort under `set -e`).
|
||||
HYPRLAND_PACKAGES=(
|
||||
hyprland # the Wayland compositor / window manager
|
||||
hyprcursor # hardware-accelerated cursor rendering for Hyprland
|
||||
wl-clipboard # wl-copy / wl-paste; clipboard tools for Wayland
|
||||
hyprpaper # wallpaper utility with per-monitor and animation support
|
||||
hyprlock # GPU-accelerated screen locker (Hyprland-native)
|
||||
wofi # Wayland application launcher (rofi replacement)
|
||||
kitty # GPU-accelerated terminal (default terminal in this setup)
|
||||
dunst # lightweight, scriptable notification daemon
|
||||
|
||||
nwg-dock-hyprland # dock/taskbar with Hyprland workspace awareness
|
||||
nwg-drawer # application drawer (grid-style launcher)
|
||||
nwg-menu # GTK menu used in the panel's app button
|
||||
nwg-look # GTK/cursor/icon theme picker for wlroots sessions
|
||||
|
||||
# Build tools needed to compile EWW (Rust) and AUR packages (C/C++/Ruby)
|
||||
hyprsunset hypridle ksshaskpass \
|
||||
# hyprsunset — blue-light filter / night-mode daemon for Hyprland
|
||||
# hypridle — idle daemon that triggers lock/suspend after inactivity
|
||||
# ksshaskpass — Qt SSH passphrase dialog (registered as ssh-askpass)
|
||||
nm-connection-editor network-manager-applet blueman bluez \
|
||||
# nm-connection-editor — GTK GUI for editing NetworkManager profiles
|
||||
# network-manager-applet — system-tray applet showing Wi-Fi/VPN status
|
||||
# blueman — GTK Bluetooth manager with tray icon
|
||||
# bluez — core Linux Bluetooth protocol stack
|
||||
pipewire alsa-utils firefox greetd-tuigreet \
|
||||
# pipewire — modern audio/video routing daemon
|
||||
# alsa-utils — ALSA CLI tools (amixer, aplay) for low-level audio
|
||||
# firefox — web browser
|
||||
# greetd-tuigreet — TUI login greeter (text-based, no GPU needed at DM)
|
||||
grim slurp gst-plugin-pipewire imagemagick \
|
||||
# grim — Wayland screenshot tool (outputs to file or stdout)
|
||||
# slurp — interactive region selector (used with grim)
|
||||
# gst-plugin-pipewire — GStreamer plugin bridging through PipeWire
|
||||
# imagemagick — image processing (screenshot effects, compositing)
|
||||
nerd-fonts otf-font-awesome \
|
||||
# nerd-fonts — all Nerd Font patched families (icon glyphs in bar)
|
||||
# otf-font-awesome — Font Awesome icon glyphs for EWW/dunst
|
||||
pipewire-alsa pipewire-jack pipewire-pulse \
|
||||
python cmake meson cpio pkgconf ruby-pkg-config
|
||||
|
||||
hyprsunset # blue-light filter / night-mode daemon for Hyprland
|
||||
hypridle # idle daemon that triggers lock/suspend after inactivity
|
||||
ksshaskpass # Qt SSH passphrase dialog (registered as ssh-askpass)
|
||||
|
||||
nm-connection-editor # GTK GUI for editing NetworkManager profiles
|
||||
network-manager-applet # system-tray applet showing Wi-Fi/VPN status
|
||||
blueman # GTK Bluetooth manager with tray icon
|
||||
bluez # core Linux Bluetooth protocol stack
|
||||
|
||||
pipewire # modern audio/video routing daemon
|
||||
alsa-utils # ALSA CLI tools (amixer, aplay) for low-level audio
|
||||
firefox # web browser
|
||||
greetd-tuigreet # TUI login greeter (text-based, no GPU needed at DM)
|
||||
|
||||
grim # Wayland screenshot tool (outputs to file or stdout)
|
||||
slurp # interactive region selector (used with grim)
|
||||
gst-plugin-pipewire # GStreamer plugin bridging through PipeWire
|
||||
imagemagick # image processing (screenshot effects, compositing)
|
||||
|
||||
nerd-fonts # all Nerd Font patched families (icon glyphs in bar)
|
||||
otf-font-awesome # Font Awesome icon glyphs for EWW/dunst
|
||||
|
||||
# Compatibility layers: let ALSA, JACK, and PulseAudio apps route through
|
||||
# PipeWire without requiring code changes in those apps
|
||||
qt5-wayland qt6-wayland swww ttf-jetbrains-mono wireplumber \
|
||||
# qt5-wayland / qt6-wayland — Qt platform plugins for native Wayland rendering
|
||||
# swww — smooth animated wallpaper daemon
|
||||
# ttf-jetbrains-mono — monospace font for terminals and the EWW bar
|
||||
# wireplumber — PipeWire session/policy manager
|
||||
qt6ct xdg-desktop-portal-hyprland xdg-utils \
|
||||
# qt6ct — Qt6 colour/style configurator (run as user)
|
||||
# xdg-desktop-portal-hyprland — Hyprland XDG portal (screen share, file pick)
|
||||
# xdg-utils — xdg-open / MIME handling helpers
|
||||
xorg-server xorg-xinit papirus-icon-theme \
|
||||
# xorg-server / xorg-xinit — X server for XWayland (legacy X11 apps)
|
||||
# papirus-icon-theme — icon theme used system-wide and by udiskie
|
||||
cool-retro-term qalculate-gtk iwd dbus \
|
||||
# cool-retro-term — retro CRT-style terminal emulator
|
||||
# qalculate-gtk — powerful GTK calculator with unit conversion
|
||||
# iwd — Intel Wireless Daemon (lightweight Wi-Fi back-end)
|
||||
# dbus — D-Bus inter-process communication daemon
|
||||
thunar tumbler thunar-archive-plugin thunar-shares-plugin thunar-volman \
|
||||
# thunar — lightweight GTK file manager (XFCE project)
|
||||
# tumbler — thumbnail service for Thunar
|
||||
# thunar-archive-plugin — right-click archive (zip/tar) integration
|
||||
# thunar-shares-plugin — Samba share management from Thunar
|
||||
# thunar-volman — automatic volume/device mounting in Thunar
|
||||
hyprpicker pcmanfm-qt udisks2 ly kew \
|
||||
# hyprpicker — colour picker outputting hex/rgb/hsl under Hyprland
|
||||
# pcmanfm-qt — Qt file manager kept as fallback
|
||||
# udisks2 — D-Bus service for querying and managing storage devices
|
||||
# ly — minimal TUI display manager (replaces getty on tty1)
|
||||
# kew — terminal music player
|
||||
hyprpolkitagent pavucontrol playerctl wf-recorder sound-theme-freedesktop
|
||||
# hyprpolkitagent — Hyprland-native Polkit authentication agent
|
||||
# pavucontrol — PulseAudio/PipeWire volume control GUI
|
||||
# playerctl — MPRIS media player controller (play/pause CLI)
|
||||
# wf-recorder — screen recorder for wlroots compositors
|
||||
# sound-theme-freedesktop — standard freedesktop sound event library
|
||||
pipewire-alsa pipewire-jack pipewire-pulse
|
||||
|
||||
qt5-wayland # Qt5 platform plugin for native Wayland rendering
|
||||
qt6-wayland # Qt6 platform plugin for native Wayland rendering
|
||||
swww # smooth animated wallpaper daemon
|
||||
ttf-jetbrains-mono # monospace font for terminals and the EWW bar
|
||||
wireplumber # PipeWire session/policy manager
|
||||
|
||||
qt6ct # Qt6 colour/style configurator (run as user)
|
||||
xdg-desktop-portal-hyprland # Hyprland XDG portal (screen share, file pick)
|
||||
xdg-utils # xdg-open / MIME handling helpers
|
||||
|
||||
xorg-server # X server for XWayland (legacy X11 apps)
|
||||
xorg-xinit # startx / xinitrc support for XWayland
|
||||
papirus-icon-theme # icon theme used system-wide and by udiskie
|
||||
|
||||
cool-retro-term # retro CRT-style terminal emulator
|
||||
qalculate-gtk # powerful GTK calculator with unit conversion
|
||||
iwd # Intel Wireless Daemon (lightweight Wi-Fi back-end)
|
||||
dbus # D-Bus inter-process communication daemon
|
||||
|
||||
thunar # lightweight GTK file manager (XFCE project)
|
||||
tumbler # thumbnail service for Thunar
|
||||
thunar-archive-plugin # right-click archive (zip/tar) integration
|
||||
thunar-shares-plugin # Samba share management from Thunar
|
||||
thunar-volman # automatic volume/device mounting in Thunar
|
||||
|
||||
hyprpicker # colour picker outputting hex/rgb/hsl under Hyprland
|
||||
pcmanfm-qt # Qt file manager kept as fallback
|
||||
udisks2 # D-Bus service for querying and managing storage devices
|
||||
ly # minimal TUI display manager (replaces getty on tty1)
|
||||
kew # terminal music player
|
||||
|
||||
hyprpolkitagent # Hyprland-native Polkit authentication agent
|
||||
pavucontrol # PulseAudio/PipeWire volume control GUI
|
||||
playerctl # MPRIS media player controller (play/pause CLI)
|
||||
wf-recorder # screen recorder for wlroots compositors
|
||||
sound-theme-freedesktop # standard freedesktop sound event library
|
||||
)
|
||||
sudo pacman -Syu --noconfirm --needed -- "${HYPRLAND_PACKAGES[@]}"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 3. Enable essential services
|
||||
|
|
|
|||
|
|
@ -57,88 +57,95 @@ sudo pacman -Syu --noconfirm --needed flatpak
|
|||
# 2. Install required packages
|
||||
# ---------------------------------------------------------------------------
|
||||
log "Installing required packages..."
|
||||
sudo pacman -Syu --noconfirm --needed \
|
||||
hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \
|
||||
# hyprland — Wayland compositor / window manager
|
||||
# hyprcursor — hardware-accelerated cursor rendering for Hyprland
|
||||
# wl-clipboard — wl-copy / wl-paste; Wayland clipboard CLI tools
|
||||
# hyprpaper — wallpaper utility with per-monitor support
|
||||
# hyprlock — GPU-accelerated screen locker (Hyprland-native)
|
||||
# wofi — Wayland application launcher (rofi alternative)
|
||||
# kitty — GPU-accelerated terminal (default in this setup)
|
||||
# dunst — lightweight, scriptable notification daemon
|
||||
nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \
|
||||
# nwg-dock-hyprland — dock/taskbar with Hyprland workspace awareness
|
||||
# nwg-drawer — grid application drawer / launcher
|
||||
# nwg-menu — GTK application menu for the panel button
|
||||
# nwg-look — GTK/cursor/icon theme picker for wlroots sessions
|
||||
python cmake meson cpio pkgconf ruby-pkg-config \
|
||||
# Packages live in an array so each can carry an inline comment. A single
|
||||
# backslash-continued `pacman` command cannot: bash treats the first inline
|
||||
# comment as the end of the command, silently dropping every later package
|
||||
# (which then get run as shell commands and abort under `set -e`).
|
||||
HYPRLUA_PACKAGES=(
|
||||
hyprland # Wayland compositor / window manager
|
||||
hyprcursor # hardware-accelerated cursor rendering for Hyprland
|
||||
wl-clipboard # wl-copy / wl-paste; Wayland clipboard CLI tools
|
||||
hyprpaper # wallpaper utility with per-monitor support
|
||||
hyprlock # GPU-accelerated screen locker (Hyprland-native)
|
||||
wofi # Wayland application launcher (rofi alternative)
|
||||
kitty # GPU-accelerated terminal (default in this setup)
|
||||
dunst # lightweight, scriptable notification daemon
|
||||
|
||||
nwg-dock-hyprland # dock/taskbar with Hyprland workspace awareness
|
||||
nwg-drawer # grid application drawer / launcher
|
||||
nwg-menu # GTK application menu for the panel button
|
||||
nwg-look # GTK/cursor/icon theme picker for wlroots sessions
|
||||
|
||||
# Build toolchain required for EWW (Rust) and AUR package compilation
|
||||
hyprsunset hypridle ksshaskpass \
|
||||
# hyprsunset — blue-light filter / night-mode daemon
|
||||
# hypridle — idle daemon triggering lock/suspend after inactivity
|
||||
# ksshaskpass — Qt SSH passphrase dialog registered as ssh-askpass
|
||||
nm-connection-editor network-manager-applet blueman bluez \
|
||||
# nm-connection-editor — GTK editor for NetworkManager connection profiles
|
||||
# network-manager-applet — tray applet showing network connection status
|
||||
# blueman — GTK Bluetooth manager with tray icon support
|
||||
# bluez — core Linux Bluetooth protocol stack
|
||||
pipewire alsa-utils firefox greetd-tuigreet \
|
||||
# pipewire — modern audio/video routing daemon (replaces PulseAudio)
|
||||
# alsa-utils — low-level ALSA CLI tools (amixer, aplay, arecord)
|
||||
# firefox — web browser
|
||||
# greetd-tuigreet — TUI login greeter (text-based, no GPU requirement)
|
||||
grim slurp gst-plugin-pipewire imagemagick \
|
||||
# grim — Wayland screenshot capture tool
|
||||
# slurp — interactive rectangular region selector for screenshots
|
||||
# gst-plugin-pipewire — GStreamer plugin routing through PipeWire
|
||||
# imagemagick — image processing toolkit for screenshot effects
|
||||
nerd-fonts otf-font-awesome \
|
||||
# nerd-fonts — all Nerd Font families (icon glyphs in EWW bar)
|
||||
# otf-font-awesome — Font Awesome glyph set for bar and notifications
|
||||
pipewire-alsa pipewire-jack pipewire-pulse \
|
||||
python cmake meson cpio pkgconf ruby-pkg-config
|
||||
|
||||
hyprsunset # blue-light filter / night-mode daemon
|
||||
hypridle # idle daemon triggering lock/suspend after inactivity
|
||||
ksshaskpass # Qt SSH passphrase dialog registered as ssh-askpass
|
||||
|
||||
nm-connection-editor # GTK editor for NetworkManager connection profiles
|
||||
network-manager-applet # tray applet showing network connection status
|
||||
blueman # GTK Bluetooth manager with tray icon support
|
||||
bluez # core Linux Bluetooth protocol stack
|
||||
|
||||
pipewire # modern audio/video routing daemon (replaces PulseAudio)
|
||||
alsa-utils # low-level ALSA CLI tools (amixer, aplay, arecord)
|
||||
firefox # web browser
|
||||
greetd-tuigreet # TUI login greeter (text-based, no GPU requirement)
|
||||
|
||||
grim # Wayland screenshot capture tool
|
||||
slurp # interactive rectangular region selector for screenshots
|
||||
gst-plugin-pipewire # GStreamer plugin routing through PipeWire
|
||||
imagemagick # image processing toolkit for screenshot effects
|
||||
|
||||
nerd-fonts # all Nerd Font families (icon glyphs in EWW bar)
|
||||
otf-font-awesome # Font Awesome glyph set for bar and notifications
|
||||
|
||||
# Compatibility shims letting ALSA, JACK, and PulseAudio apps route through
|
||||
# PipeWire transparently without needing to be recompiled
|
||||
qt5-wayland qt6-wayland swww ttf-jetbrains-mono wireplumber \
|
||||
# qt5-wayland / qt6-wayland — Qt Wayland platform plugins for native rendering
|
||||
# swww — smooth animated wallpaper daemon for wlroots
|
||||
# ttf-jetbrains-mono — monospace coding font used in terminals/bar
|
||||
# wireplumber — PipeWire session and policy manager
|
||||
xdg-desktop-portal-hyprland xdg-utils \
|
||||
# xdg-desktop-portal-hyprland — Hyprland XDG portal (screen share, file pick)
|
||||
# xdg-utils — xdg-open and MIME handling utilities
|
||||
pipewire-alsa pipewire-jack pipewire-pulse
|
||||
|
||||
qt5-wayland # Qt5 Wayland platform plugin for native rendering
|
||||
qt6-wayland # Qt6 Wayland platform plugin for native rendering
|
||||
swww # smooth animated wallpaper daemon for wlroots
|
||||
ttf-jetbrains-mono # monospace coding font used in terminals/bar
|
||||
wireplumber # PipeWire session and policy manager
|
||||
|
||||
xdg-desktop-portal-hyprland # Hyprland XDG portal (screen share, file pick)
|
||||
xdg-utils # xdg-open and MIME handling utilities
|
||||
# Note: qt6ct is NOT included in hyprlua (differs from hyprland.sh)
|
||||
xorg-server xorg-xinit papirus-icon-theme \
|
||||
# xorg-server / xorg-xinit — X server for XWayland (legacy X11 apps)
|
||||
# papirus-icon-theme — icon theme used system-wide and by udiskie
|
||||
cool-retro-term qalculate-gtk iwd dbus \
|
||||
# cool-retro-term — retro CRT-style terminal emulator
|
||||
# qalculate-gtk — full-featured GTK calculator with unit conversion
|
||||
# iwd — Intel Wireless Daemon (lighter Wi-Fi stack than wpa_supplicant)
|
||||
# dbus — D-Bus inter-process communication daemon
|
||||
thunar tumbler thunar-archive-plugin thunar-shares-plugin thunar-volman \
|
||||
# thunar — lightweight GTK file manager
|
||||
# tumbler — D-Bus thumbnail service for Thunar
|
||||
# thunar-archive-plugin — archive (zip/tar) right-click integration
|
||||
# thunar-shares-plugin — Samba share management in Thunar
|
||||
# thunar-volman — automatic volume/device mounting in Thunar
|
||||
hyprpicker pcmanfm-qt udisks2 ly kew \
|
||||
# hyprpicker — colour picker outputting hex/rgb/hsl values
|
||||
# pcmanfm-qt — Qt file manager (kept as fallback / alternative)
|
||||
# udisks2 — D-Bus daemon for querying and managing storage devices
|
||||
# ly — minimal TUI display manager (takes over tty1 from getty)
|
||||
# kew — terminal-based music player
|
||||
hyprpolkitagent pavucontrol playerctl wf-recorder sound-theme-freedesktop \
|
||||
# hyprpolkitagent — Hyprland-native Polkit authentication agent
|
||||
# pavucontrol — PulseAudio/PipeWire GUI volume mixer
|
||||
# playerctl — MPRIS media player CLI controller
|
||||
# wf-recorder — screen recorder for wlroots-based compositors
|
||||
# sound-theme-freedesktop — standard freedesktop sound event samples
|
||||
python-opencv v4l-utils
|
||||
# python-opencv — OpenCV Python bindings; used by the webcam presence-
|
||||
# detection daemon to watch for the user at the desk and
|
||||
# inhibit idle/screen-lock while they are present
|
||||
# v4l-utils — Video4Linux2 tools for enumerating and configuring webcams
|
||||
|
||||
xorg-server # X server for XWayland (legacy X11 apps)
|
||||
xorg-xinit # startx / xinitrc support for XWayland
|
||||
papirus-icon-theme # icon theme used system-wide and by udiskie
|
||||
|
||||
cool-retro-term # retro CRT-style terminal emulator
|
||||
qalculate-gtk # full-featured GTK calculator with unit conversion
|
||||
iwd # Intel Wireless Daemon (lighter Wi-Fi stack than wpa_supplicant)
|
||||
dbus # D-Bus inter-process communication daemon
|
||||
|
||||
thunar # lightweight GTK file manager
|
||||
tumbler # D-Bus thumbnail service for Thunar
|
||||
thunar-archive-plugin # archive (zip/tar) right-click integration
|
||||
thunar-shares-plugin # Samba share management in Thunar
|
||||
thunar-volman # automatic volume/device mounting in Thunar
|
||||
|
||||
hyprpicker # colour picker outputting hex/rgb/hsl values
|
||||
pcmanfm-qt # Qt file manager (kept as fallback / alternative)
|
||||
udisks2 # D-Bus daemon for querying and managing storage devices
|
||||
ly # minimal TUI display manager (takes over tty1 from getty)
|
||||
kew # terminal-based music player
|
||||
|
||||
hyprpolkitagent # Hyprland-native Polkit authentication agent
|
||||
pavucontrol # PulseAudio/PipeWire GUI volume mixer
|
||||
playerctl # MPRIS media player CLI controller
|
||||
wf-recorder # screen recorder for wlroots-based compositors
|
||||
sound-theme-freedesktop # standard freedesktop sound event samples
|
||||
|
||||
python-opencv # OpenCV Python bindings; webcam presence-detection daemon
|
||||
v4l-utils # Video4Linux2 tools for enumerating and configuring webcams
|
||||
)
|
||||
sudo pacman -Syu --noconfirm --needed -- "${HYPRLUA_PACKAGES[@]}"
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 3. Enable essential services
|
||||
|
|
|
|||
|
|
@ -40,122 +40,130 @@ log "Installing core packages..."
|
|||
#
|
||||
# Package groupings with rationale:
|
||||
|
||||
sudo pacman -Syu --noconfirm --needed \
|
||||
# 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)
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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)
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
\
|
||||
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
|
||||
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.
|
||||
|
|
|
|||
|
|
@ -93,8 +93,10 @@ log "Discovering CalDAV collections (confirm any prompts with y)..."
|
|||
yes | vdirsyncer discover calendars || true
|
||||
|
||||
# Pull all events from the server for the first time.
|
||||
# Best-effort: with placeholder credentials or no network at install time this
|
||||
# is expected to fail, which must not abort the module. Warn and continue.
|
||||
log "Running initial sync..."
|
||||
vdirsyncer sync
|
||||
vdirsyncer sync || warn "Initial CalDAV sync failed (credentials/network not ready) — run 'vdirsyncer sync' once configured."
|
||||
|
||||
# ── khal configuration ────────────────────────────────────────────────────────
|
||||
# khal needs one [[calendar]] section per local ICS directory.
|
||||
|
|
@ -254,17 +256,23 @@ PYEOF
|
|||
# Make the helper executable so it can be called directly from the PATH
|
||||
chmod +x ~/.local/bin/ics-to-calendarim
|
||||
|
||||
# Build the initial calendar.vim cache from the events we just synced
|
||||
# Build the initial calendar.vim cache from the events we just synced.
|
||||
# Best-effort: harmless to skip if the first sync pulled nothing.
|
||||
log "Running initial calendar.vim cache build..."
|
||||
~/.local/bin/ics-to-calendarim
|
||||
~/.local/bin/ics-to-calendarim || warn "calendar.vim cache build skipped — rebuild later with: ics-to-calendarim"
|
||||
|
||||
# ── systemd user timer ────────────────────────────────────────────────────────
|
||||
# A systemd user timer keeps calendars current automatically.
|
||||
# Using systemd (instead of cron) lets the unit run without requiring root and
|
||||
# integrates cleanly with the user's login session.
|
||||
#
|
||||
# Best-effort: when the installer runs from a bare TTY or chroot there is no
|
||||
# per-user systemd session bus (and ~/.config may not yet be owned by the
|
||||
# invoking user), so `systemctl --user` and even the mkdir can fail. That must
|
||||
# not abort the module — the timer can be (re)created on first login. We warn
|
||||
# and continue rather than letting `set -e` kill the install.
|
||||
log "Installing vdirsyncer systemd user timer (every 15 min)..."
|
||||
mkdir -p ~/.config/systemd/user
|
||||
|
||||
if mkdir -p ~/.config/systemd/user 2>/dev/null; then
|
||||
# The service unit runs vdirsyncer sync then rebuilds the calendar.vim cache.
|
||||
# Type=oneshot: the service is considered active only while the process runs;
|
||||
# it exits when done rather than staying in the background.
|
||||
|
|
@ -297,10 +305,18 @@ Unit=vdirsyncer.service
|
|||
WantedBy=timers.target
|
||||
EOF
|
||||
|
||||
# Reload systemd user daemon so it picks up the new unit files
|
||||
systemctl --user daemon-reload
|
||||
# Enable and immediately start the timer; "--now" starts it without a reboot
|
||||
systemctl --user enable --now vdirsyncer.timer
|
||||
# A successful daemon-reload means a user session bus is available; only then
|
||||
# is it worth trying to enable/start the timer.
|
||||
if systemctl --user daemon-reload 2>/dev/null; then
|
||||
# Enable and immediately start the timer; "--now" starts it without a reboot.
|
||||
systemctl --user enable --now vdirsyncer.timer 2>/dev/null \
|
||||
|| warn "Could not enable vdirsyncer.timer now — run: systemctl --user enable --now vdirsyncer.timer"
|
||||
else
|
||||
warn "No user systemd session detected — enable the timer after login with: systemctl --user enable --now vdirsyncer.timer"
|
||||
fi
|
||||
else
|
||||
warn "Could not create ~/.config/systemd/user — skipping the vdirsyncer timer (set it up after first login)."
|
||||
fi
|
||||
|
||||
log "CalDAV sync configured. Events will appear in calendar.vim automatically."
|
||||
log "Manual sync: vdirsyncer sync && ics-to-calendarim"
|
||||
|
|
|
|||
|
|
@ -4,10 +4,9 @@ set -euo pipefail
|
|||
# Load shared log/skip/warn/err helpers from the installer library.
|
||||
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
|
||||
|
||||
log "Installing Himalaya (AUR)..."
|
||||
# himalaya-bin is the pre-compiled binary release of the Himalaya CLI email client.
|
||||
# The -bin variant is preferred over building from source because compiling the full
|
||||
# Rust workspace is slow and requires a complete Rust toolchain.
|
||||
# --answerdiff None / --answerclean All suppress interactive PKGBUILD/clean prompts.
|
||||
yay -S --answerdiff None --answerclean All --noconfirm himalaya-bin
|
||||
log "Installing Himalaya..."
|
||||
# Himalaya is now packaged in the official Arch repos as `himalaya`, so install
|
||||
# it with pacman. (The old AUR `himalaya-bin` binary package has been dropped.)
|
||||
# --needed skips the work if it is already installed.
|
||||
sudo pacman -S --noconfirm --needed himalaya
|
||||
log "Himalaya installed."
|
||||
|
|
|
|||
|
|
@ -158,11 +158,16 @@ grep -qxF "text/html; w3m -dump -o document_charset=%{charset} '%s'; nametemplat
|
|||
|| echo "text/html; w3m -dump -o document_charset=%{charset} '%s'; nametemplate=%s.html; copiousoutput" >> ~/.mailcap
|
||||
|
||||
# ── systemd timer for periodic sync ───────────────────────────────────────────
|
||||
# This whole block is best-effort: when the installer runs from a bare TTY or a
|
||||
# chroot there is no per-user systemd session bus (and ~/.config may not yet be
|
||||
# owned by the invoking user), so `systemctl --user` and even the mkdir can fail.
|
||||
# None of that should abort the module — the mail config is already in place and
|
||||
# the timer can be (re)created on first graphical/login session. We therefore
|
||||
# warn and continue instead of letting `set -e` kill the install.
|
||||
log "Installing mbsync systemd user timer (every 5 min)..."
|
||||
# User units live under ~/.config/systemd/user/; --user scope requires no root
|
||||
# and units only run while the user session is active.
|
||||
mkdir -p ~/.config/systemd/user
|
||||
|
||||
if mkdir -p ~/.config/systemd/user 2>/dev/null; then
|
||||
# Type=oneshot: systemd marks the service done as soon as ExecStart exits,
|
||||
# appropriate for a batch sync command that runs and terminates.
|
||||
# After=network-online.target: prevents sync attempts before a route is available.
|
||||
|
|
@ -194,16 +199,33 @@ WantedBy=timers.target
|
|||
EOF
|
||||
|
||||
# Reload the user manager so it picks up the newly written unit files.
|
||||
systemctl --user daemon-reload
|
||||
# enable makes the timer survive reboots; --now also starts it in the current session.
|
||||
systemctl --user enable --now mbsync.timer
|
||||
# A successful daemon-reload means a user session bus is available; only then
|
||||
# is it worth trying to enable/start the timer. Guard both so the absence of
|
||||
# a session during install is reported, not fatal.
|
||||
if systemctl --user daemon-reload 2>/dev/null; then
|
||||
# enable makes the timer survive reboots; --now also starts it now.
|
||||
systemctl --user enable --now mbsync.timer 2>/dev/null \
|
||||
|| warn "Could not enable mbsync.timer now — run: systemctl --user enable --now mbsync.timer"
|
||||
else
|
||||
warn "No user systemd session detected — enable the timer after login with: systemctl --user enable --now mbsync.timer"
|
||||
fi
|
||||
else
|
||||
warn "Could not create ~/.config/systemd/user — skipping the mbsync timer (set it up after first login)."
|
||||
fi
|
||||
|
||||
# ── initial sync ──────────────────────────────────────────────────────────────
|
||||
# Also best-effort: with placeholder credentials or no network at install time
|
||||
# the first sync is expected to fail. Warn rather than abort so the module still
|
||||
# reports success — the timer (or a manual `mbsync -a`) will sync once the user
|
||||
# has filled in real account details.
|
||||
log "Running initial mail sync..."
|
||||
# -a syncs all configured channels; may take several minutes on a large mailbox.
|
||||
mbsync -a
|
||||
if mbsync -a; then
|
||||
# Index the freshly downloaded messages so alot can display them immediately.
|
||||
notmuch new
|
||||
notmuch new || warn "notmuch new failed — index later with: notmuch new"
|
||||
else
|
||||
warn "Initial mail sync failed (credentials/network not ready) — run 'mbsync -a && notmuch new' once configured."
|
||||
fi
|
||||
|
||||
log "Mail setup complete. Syncs automatically every 5 min via systemd timer."
|
||||
log "Open alot with: alot | Check timer: systemctl --user status mbsync.timer"
|
||||
|
|
|
|||
Loading…
Reference in New Issue