From 0c88a09a0f483f5687bba1f8cd07f4d652e73a32 Mon Sep 17 00:00:00 2001 From: The_miro Date: Fri, 22 May 2026 01:44:31 +0200 Subject: [PATCH] feat(installer): add structured logging to all modules and installers Add modules/lib/logging.sh with log(), skip(), warn(), err() helpers. Source it in all 84 scripts (core, DEs, optional apps) and replace bare echo calls with structured log messages. Add log file capture to install.sh. Co-Authored-By: Claude Sonnet 4.6 --- setup/install.sh | 7 ++++ setup/modules/Desktop-Environments/cosmic.sh | 9 +++--- setup/modules/Desktop-Environments/gnome.sh | 9 +++--- .../modules/Desktop-Environments/hyprland.sh | 32 ++++++++++++------- setup/modules/Desktop-Environments/hyprlua.sh | 32 ++++++++++++------- .../Desktop-Environments/kde-plasma.sh | 9 +++--- setup/modules/Desktop-Environments/lxqt.sh | 9 +++--- setup/modules/Desktop-Environments/sway.sh | 12 ++++--- setup/modules/Desktop-Environments/xfce.sh | 9 +++--- setup/modules/core-packages.sh | 5 +++ setup/modules/core.sh | 17 ++++++---- setup/modules/lib/logging.sh | 12 +++++++ .../optional-Modules/apps/anti-malware.sh | 13 ++++++-- setup/modules/optional-Modules/apps/ardour.sh | 3 ++ .../modules/optional-Modules/apps/audacity.sh | 3 ++ .../optional-Modules/apps/blender-povray.sh | 3 ++ setup/modules/optional-Modules/apps/butter.sh | 4 +++ .../modules/optional-Modules/apps/cecilia.sh | 3 ++ .../modules/optional-Modules/apps/chromium.sh | 4 +++ setup/modules/optional-Modules/apps/claude.sh | 4 +++ .../modules/optional-Modules/apps/cockpit.sh | 8 +++-- .../optional-Modules/apps/codeblocks.sh | 4 +++ setup/modules/optional-Modules/apps/croc.sh | 4 +++ .../optional-Modules/apps/db-clients.sh | 4 +++ .../optional-Modules/apps/disk-recovery.sh | 4 +++ setup/modules/optional-Modules/apps/docker.sh | 9 +++++- setup/modules/optional-Modules/apps/doom.sh | 3 ++ setup/modules/optional-Modules/apps/ffmpeg.sh | 3 ++ .../modules/optional-Modules/apps/firefox.sh | 4 +++ .../optional-Modules/apps/freeipa-client.sh | 3 ++ .../apps/freeipa-image-builder.sh | 2 ++ .../optional-Modules/apps/freeipa-server.sh | 3 ++ setup/modules/optional-Modules/apps/geany.sh | 4 +++ setup/modules/optional-Modules/apps/gimp.sh | 3 ++ .../modules/optional-Modules/apps/gnuplot.sh | 3 ++ .../modules/optional-Modules/apps/himalaya.sh | 3 ++ .../optional-Modules/apps/imagemagick.sh | 3 ++ .../modules/optional-Modules/apps/inkscape.sh | 3 ++ setup/modules/optional-Modules/apps/k8s.sh | 4 +++ setup/modules/optional-Modules/apps/kate.sh | 4 +++ .../modules/optional-Modules/apps/kdenlive.sh | 3 ++ setup/modules/optional-Modules/apps/krita.sh | 3 ++ .../optional-Modules/apps/lamco-rdp-server.sh | 14 ++++---- .../optional-Modules/apps/librewolf.sh | 4 +++ .../optional-Modules/apps/llama-cpp.sh | 3 ++ setup/modules/optional-Modules/apps/lmms.sh | 3 ++ .../optional-Modules/apps/localsend.sh | 4 +++ .../optional-Modules/apps/localtunnel.sh | 3 ++ .../optional-Modules/apps/min-browser.sh | 4 +++ setup/modules/optional-Modules/apps/mixxx.sh | 3 ++ setup/modules/optional-Modules/apps/mysql.sh | 7 ++++ .../optional-Modules/apps/networking-cli.sh | 3 ++ setup/modules/optional-Modules/apps/nyxt.sh | 4 +++ setup/modules/optional-Modules/apps/ollama.sh | 9 ++++-- .../optional-Modules/apps/onlyoffice.sh | 4 +++ .../optional-Modules/apps/open-webui.sh | 5 ++- .../optional-Modules/apps/openarena.sh | 4 +++ .../modules/optional-Modules/apps/openshot.sh | 3 ++ setup/modules/optional-Modules/apps/podman.sh | 7 ++-- .../optional-Modules/apps/prismlauncher.sh | 4 +++ .../optional-Modules/apps/productivity.sh | 4 +++ setup/modules/optional-Modules/apps/qemu.sh | 9 ++++-- .../optional-Modules/apps/rdp-client.sh | 6 ++-- .../optional-Modules/apps/sauerbraten.sh | 4 +++ .../modules/optional-Modules/apps/shotcut.sh | 3 ++ setup/modules/optional-Modules/apps/sox.sh | 3 ++ .../modules/optional-Modules/apps/spotify.sh | 8 +++++ .../optional-Modules/apps/ssh-server.sh | 9 ++++-- setup/modules/optional-Modules/apps/steam.sh | 4 +++ .../optional-Modules/apps/stuntrally.sh | 4 +++ setup/modules/optional-Modules/apps/tetris.sh | 4 +++ .../optional-Modules/apps/timeshift.sh | 6 +++- setup/modules/optional-Modules/apps/tlp.sh | 4 +++ setup/modules/optional-Modules/apps/toot.sh | 3 ++ .../modules/optional-Modules/apps/vesktop.sh | 6 ++++ .../optional-Modules/apps/vintagestory.sh | 4 +++ .../modules/optional-Modules/apps/vscodium.sh | 4 +++ .../optional-Modules/apps/wireshark.sh | 4 +++ .../modules/optional-Modules/apps/xournal.sh | 3 ++ setup/modules/optional-Modules/apps/yt-dlp.sh | 3 ++ setup/modules/optional-Modules/apps/zed.sh | 4 +++ .../optional-Modules/apps/zen-browser.sh | 4 +++ setup/modules/optional-Modules/python.sh | 5 +++ setup/modules/optional-Modules/wprs.sh | 3 ++ setup/modules/optional-Modules/zfs.sh | 4 ++- setup/modules/package-managers.sh | 14 +++++--- setup/modules/shell-setup.sh | 21 ++++-------- 87 files changed, 411 insertions(+), 110 deletions(-) create mode 100644 setup/modules/lib/logging.sh diff --git a/setup/install.sh b/setup/install.sh index 8a4394f..14c3f7e 100755 --- a/setup/install.sh +++ b/setup/install.sh @@ -1,4 +1,10 @@ #!/bin/bash +set -uo pipefail + +LOG="$HOME/dotfiles-install.log" +> "$LOG" +printf "Dotfiles install: %s\n" "$(date)" >> "$LOG" +exec > >(tee -a "$LOG") 2>&1 echo "Running Core installation Scripts" bash ~/Dotfiles/setup/modules/package-managers.sh @@ -31,3 +37,4 @@ esac # bash ~/Dotfiles/setup/modules/optional-Modules/zfs.sh # bash ~/Dotfiles/setup/modules/optional-Modules/wprs.sh +printf "\nDone. Log: %s\n" "$LOG" diff --git a/setup/modules/Desktop-Environments/cosmic.sh b/setup/modules/Desktop-Environments/cosmic.sh index a28fa10..c83967b 100755 --- a/setup/modules/Desktop-Environments/cosmic.sh +++ b/setup/modules/Desktop-Environments/cosmic.sh @@ -1,9 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== COSMIC Desktop Installer ===" - -echo "[+] Installing COSMIC..." +log "Installing COSMIC desktop..." sudo pacman -S --noconfirm --needed \ cosmic \ pipewire wireplumber pipewire-alsa pipewire-jack pipewire-pulse \ @@ -11,7 +10,7 @@ sudo pacman -S --noconfirm --needed \ bluez bluez-utils \ flatpak -echo "[+] Enabling services..." +log "Enabling services..." # cosmic-greeter is COSMIC's own display manager; fall back to sddm if absent if pacman -Qi cosmic-greeter &>/dev/null; then sudo systemctl enable cosmic-greeter.service @@ -22,4 +21,4 @@ fi sudo systemctl enable NetworkManager.service sudo systemctl enable bluetooth.service -echo "=== COSMIC installation complete. Reboot to start. ===" +log "COSMIC installation complete. Reboot to start." diff --git a/setup/modules/Desktop-Environments/gnome.sh b/setup/modules/Desktop-Environments/gnome.sh index 9a6d0f9..0d60453 100755 --- a/setup/modules/Desktop-Environments/gnome.sh +++ b/setup/modules/Desktop-Environments/gnome.sh @@ -1,9 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== GNOME Installer ===" - -echo "[+] Installing GNOME..." +log "Installing GNOME desktop..." sudo pacman -S --noconfirm --needed \ gnome \ gnome-tweaks \ @@ -12,8 +11,8 @@ sudo pacman -S --noconfirm --needed \ networkmanager \ flatpak -echo "[+] Enabling services..." +log "Enabling services..." sudo systemctl enable gdm.service sudo systemctl enable NetworkManager.service -echo "=== GNOME installation complete. Reboot to start. ===" +log "GNOME installation complete. Reboot to start." diff --git a/setup/modules/Desktop-Environments/hyprland.sh b/setup/modules/Desktop-Environments/hyprland.sh index 8d42fe0..85d5685 100755 --- a/setup/modules/Desktop-Environments/hyprland.sh +++ b/setup/modules/Desktop-Environments/hyprland.sh @@ -1,14 +1,15 @@ #!/bin/bash set -e +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== Hyprland Environment Installer (legacy — hyprlang config) ===" +log "Starting Hyprland installer (legacy — hyprlang config)..." # 1. Update system and install Flatpak -echo "Updating system and installing Flatpak..." +log "Updating system and installing Flatpak..." sudo pacman -Syu --noconfirm --needed flatpak # 2. Install required packages -echo "Installing required packages..." +log "Installing required packages..." sudo pacman -Syu --noconfirm --needed \ hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \ nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \ @@ -28,14 +29,14 @@ sudo pacman -Syu --noconfirm --needed \ hyprpolkitagent pavucontrol playerctl wf-recorder sound-theme-freedesktop # 3. Enable essential services -echo "Enabling essential services..." +log "Enabling essential services..." sudo systemctl enable NetworkManager.service sudo systemctl disable getty@tty1.service || true sudo systemctl enable ly@tty1.service sudo systemctl enable udisks2.service # 4. Install AUR packages -echo "Installing AUR packages..." +log "Installing AUR packages..." rustup default stable yay -Syu --answerdiff None --answerclean All --noconfirm \ hyprland-workspaces vicinae-bin bluetuith wvkbd iwmenu pinta \ @@ -43,7 +44,7 @@ yay -Syu --answerdiff None --answerclean All --noconfirm \ wofi-calc bri chamel # 5. EWW bar selection and compilation -echo "Setting up EWW bar..." +log "Setting up EWW bar..." rm -rf ~/.config/eww read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit echo @@ -51,10 +52,10 @@ case $doit in n|N) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww/ ~/.config/ ;; p|P) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-nobattery/ ~/.config/eww ;; t|T) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-touch/ ~/.config/eww ;; - *) echo "No valid choice — skipping EWW copy. Run manually later." ;; + *) warn "No valid choice — skipping EWW copy. Run manually later." ;; esac -echo "Compiling EWW..." +log "Compiling EWW..." mkdir -p ~/install-tmp cd ~/install-tmp git clone https://github.com/elkowar/eww @@ -65,6 +66,7 @@ sudo cp target/release/eww /usr/bin/ cd ~ # 6. Theme and icon setup +log "Installing themes and icons..." sudo cp -r ~/Dotfiles/gtk-themes/cyberqueer /usr/share/themes sudo cp ~/Dotfiles/desktopenvs/hyprland/btop/themes/cyberqueer.theme /usr/share/btop/themes sudo cp -f ~/Dotfiles/etc-ly-config.ini /etc/ly/config.ini @@ -72,12 +74,14 @@ sudo ln -sf /usr/bin/kitty /usr/bin/xdg-terminal-exec sudo ln -sf /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass # 7. Cursor setup +log "Installing cursor theme..." mkdir -p ~/.icons wget -O ~/install-tmp/Nordzy-cursors-lefthand.tar.gz \ https://github.com/guillaumeboehm/Nordzy-cursors/releases/download/v2.3.0/Nordzy-cursors-lefthand.tar.gz tar -zxf ~/install-tmp/Nordzy-cursors-lefthand.tar.gz -C ~/.icons/ # 8. Enable Bluetooth and wireless services +log "Enabling Bluetooth and wireless services..." sudo systemctl enable bluez sudo systemctl enable bluetooth.service sudo systemctl enable iwd.service @@ -88,7 +92,7 @@ sudo systemctl enable iwd.service # hyprpm add https://github.com/hyprwm/hyprland-plugins # 10. Copy configs -echo "Copying configs..." +log "Copying configs..." CONFIGS=(kitty mimeapps.list vicinae walker ulauncher hypr xfce4 wofi dunst alacritty nwg-dock-hyprland nwg-drawer nwg-panel scripts btop gtk-3.0) for cfg in "${CONFIGS[@]}"; do rm -rf ~/.config/"$cfg" @@ -99,16 +103,18 @@ cp ~/Dotfiles/desktopenvs/hyprland/hypr-usr/* ~/.config/ cp ~/Dotfiles/colors.conf ~/.config/colors.conf # 11. Wallpaper and resources +log "Copying wallpaper and resources..." mkdir -p ~/Pictures cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg # 12. Python venv for scripts +log "Setting up Python venv for scripts..." python -m venv ~/.config/python-script ~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime # 13. Udiskie icon fix -echo "Applying Udiskie icon fix..." +log "Applying Udiskie icon fix..." PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status" HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status" if [ -d "$PAPIRUS_DIR" ]; then @@ -116,14 +122,16 @@ if [ -d "$PAPIRUS_DIR" ]; then sudo ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg" sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor else - echo "Papirus-Dark not found — skipping udiskie icon fix." + warn "Papirus-Dark not found — skipping udiskie icon fix." fi # 14. Enable udiskie +log "Enabling udiskie service..." sudo systemctl enable udiskie.service sudo systemctl start udiskie.service # 15. Install config updater and theme script +log "Installing config updater and theme script..." mkdir -p ~/.config/config-updater ln -sf ~/Dotfiles/desktopenvs/hyprland/config-updater/updater.conf ~/.config/config-updater/updater.conf ln -sf ~/Dotfiles/desktopenvs/hyprland/config-updater/update-configs.sh ~/update-configs.sh @@ -135,4 +143,4 @@ chmod +x ~/apply-theme.sh # | grep -Po '"browser_download_url": "\K[^"]+' | grep WallRizz)" | tar -xz \ # && sudo mv WallRizz /usr/bin/ -echo "=== Hyprland installation complete. Reboot to start. ===" +log "Hyprland installation complete. Reboot to start." diff --git a/setup/modules/Desktop-Environments/hyprlua.sh b/setup/modules/Desktop-Environments/hyprlua.sh index cc0e616..60d10b7 100755 --- a/setup/modules/Desktop-Environments/hyprlua.sh +++ b/setup/modules/Desktop-Environments/hyprlua.sh @@ -1,14 +1,15 @@ #!/bin/bash set -e +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== HyprLua Environment Installer (Lua-based config) ===" +log "Starting HyprLua installer (Lua-based config)..." # 1. Update system and install Flatpak -echo "Updating system and installing Flatpak..." +log "Updating system and installing Flatpak..." sudo pacman -Syu --noconfirm --needed flatpak # 2. Install required packages -echo "Installing required packages..." +log "Installing required packages..." sudo pacman -Syu --noconfirm --needed \ hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \ nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \ @@ -28,14 +29,14 @@ sudo pacman -Syu --noconfirm --needed \ hyprpolkitagent pavucontrol playerctl wf-recorder sound-theme-freedesktop # 3. Enable essential services -echo "Enabling essential services..." +log "Enabling essential services..." sudo systemctl enable NetworkManager.service sudo systemctl disable getty@tty1.service || true sudo systemctl enable ly@tty1.service sudo systemctl enable udisks2.service # 4. Install AUR packages -echo "Installing AUR packages..." +log "Installing AUR packages..." rustup default stable yay -Syu --answerdiff None --answerclean All --noconfirm \ hyprland-workspaces vicinae-bin bluetuith wvkbd iwmenu pinta \ @@ -43,7 +44,7 @@ yay -Syu --answerdiff None --answerclean All --noconfirm \ wofi-calc bri chamel # 5. EWW bar selection and compilation -echo "Setting up EWW bar..." +log "Setting up EWW bar..." rm -rf ~/.config/eww read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit echo @@ -51,10 +52,10 @@ case $doit in n|N) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww/ ~/.config/ ;; p|P) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww-nobattery/ ~/.config/eww ;; t|T) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww-touch/ ~/.config/eww ;; - *) echo "No valid choice — skipping EWW copy. Run manually later." ;; + *) warn "No valid choice — skipping EWW copy. Run manually later." ;; esac -echo "Compiling EWW..." +log "Compiling EWW..." mkdir -p ~/install-tmp cd ~/install-tmp git clone https://github.com/elkowar/eww @@ -65,6 +66,7 @@ sudo cp target/release/eww /usr/bin/ cd ~ # 6. Theme and icon setup +log "Installing themes and icons..." sudo cp -r ~/Dotfiles/gtk-themes/cyberqueer /usr/share/themes sudo cp ~/Dotfiles/desktopenvs/hyprlua/btop/themes/cyberqueer.theme /usr/share/btop/themes sudo cp -f ~/Dotfiles/etc-ly-config.ini /etc/ly/config.ini @@ -74,12 +76,14 @@ sudo ln -sf /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' # 7. Cursor setup +log "Installing cursor theme..." mkdir -p ~/.icons wget -O ~/install-tmp/Nordzy-cursors-lefthand.tar.gz \ https://github.com/guillaumeboehm/Nordzy-cursors/releases/download/v2.3.0/Nordzy-cursors-lefthand.tar.gz tar -zxf ~/install-tmp/Nordzy-cursors-lefthand.tar.gz -C ~/.icons/ # 8. Enable Bluetooth and wireless services +log "Enabling Bluetooth and wireless services..." sudo systemctl enable bluez sudo systemctl enable bluetooth.service sudo systemctl enable iwd.service @@ -90,7 +94,7 @@ sudo systemctl enable iwd.service # hyprpm add https://github.com/hyprwm/hyprland-plugins # 10. Copy configs -echo "Copying configs..." +log "Copying configs..." CONFIGS=(kitty mimeapps.list vicinae walker ulauncher hypr xfce4 wofi dunst alacritty nwg-dock-hyprland nwg-drawer nwg-panel scripts btop gtk-3.0) for cfg in "${CONFIGS[@]}"; do rm -rf ~/.config/"$cfg" @@ -105,16 +109,18 @@ cp ~/Dotfiles/desktopenvs/hyprlua/hypr-usr/wallpaper.conf ~/.config/ cp ~/Dotfiles/colors.conf ~/.config/colors.conf # 11. Wallpaper and resources +log "Copying wallpaper and resources..." mkdir -p ~/Pictures cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg # 12. Python venv for scripts +log "Setting up Python venv for scripts..." python -m venv ~/.config/python-script ~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime # 13. Udiskie icon fix -echo "Applying Udiskie icon fix..." +log "Applying Udiskie icon fix..." PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status" HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status" if [ -d "$PAPIRUS_DIR" ]; then @@ -122,18 +128,20 @@ if [ -d "$PAPIRUS_DIR" ]; then sudo ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg" sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor else - echo "Papirus-Dark not found — skipping udiskie icon fix." + warn "Papirus-Dark not found — skipping udiskie icon fix." fi # 14. Enable udiskie +log "Enabling udiskie service..." sudo systemctl enable udiskie.service sudo systemctl start udiskie.service # 15. Install config updater and theme script +log "Installing config updater and theme script..." mkdir -p ~/.config/config-updater ln -sf ~/Dotfiles/desktopenvs/hyprlua/config-updater/updater.conf ~/.config/config-updater/updater.conf ln -sf ~/Dotfiles/desktopenvs/hyprlua/config-updater/update-configs.sh ~/update-configs.sh cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh chmod +x ~/apply-theme.sh -echo "=== HyprLua installation complete. Reboot to start. ===" +log "HyprLua installation complete. Reboot to start." diff --git a/setup/modules/Desktop-Environments/kde-plasma.sh b/setup/modules/Desktop-Environments/kde-plasma.sh index fa02ce0..83cc737 100755 --- a/setup/modules/Desktop-Environments/kde-plasma.sh +++ b/setup/modules/Desktop-Environments/kde-plasma.sh @@ -1,9 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== KDE Plasma Installer ===" - -echo "[+] Installing KDE Plasma..." +log "Installing KDE Plasma desktop..." sudo pacman -S --noconfirm --needed \ plasma-meta \ sddm sddm-kcm \ @@ -16,9 +15,9 @@ sudo pacman -S --noconfirm --needed \ power-profiles-daemon \ flatpak -echo "[+] Enabling services..." +log "Enabling services..." sudo systemctl enable sddm.service sudo systemctl enable NetworkManager.service sudo systemctl enable bluetooth.service -echo "=== KDE Plasma installation complete. Reboot to start. ===" +log "KDE Plasma installation complete. Reboot to start." diff --git a/setup/modules/Desktop-Environments/lxqt.sh b/setup/modules/Desktop-Environments/lxqt.sh index 9fc685f..6e1911e 100755 --- a/setup/modules/Desktop-Environments/lxqt.sh +++ b/setup/modules/Desktop-Environments/lxqt.sh @@ -1,9 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== LXQt Installer ===" - -echo "[+] Installing LXQt..." +log "Installing LXQt desktop..." sudo pacman -S --noconfirm --needed \ lxqt \ openbox obconf-qt \ @@ -17,9 +16,9 @@ sudo pacman -S --noconfirm --needed \ gvfs gvfs-smb gvfs-mtp \ flatpak -echo "[+] Enabling services..." +log "Enabling services..." sudo systemctl enable sddm.service sudo systemctl enable NetworkManager.service sudo systemctl enable bluetooth.service -echo "=== LXQt installation complete. Reboot to start. ===" +log "LXQt installation complete. Reboot to start." diff --git a/setup/modules/Desktop-Environments/sway.sh b/setup/modules/Desktop-Environments/sway.sh index 619a05b..60ff14b 100644 --- a/setup/modules/Desktop-Environments/sway.sh +++ b/setup/modules/Desktop-Environments/sway.sh @@ -1,10 +1,11 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== Sway Environment Installer ===" +log "Starting Sway installer..." # 1. Install packages -echo "Installing required packages..." +log "Installing required packages..." sudo pacman -Syu --noconfirm --needed \ brightnessctl btop dmenu foot glfw grim \ greetd-tuigreet gst-plugin-pipewire imagemagick iwd libpulse \ @@ -18,15 +19,16 @@ sudo pacman -Syu --noconfirm --needed \ zram-generator # 2. Enable services -echo "Enabling services..." +log "Enabling services..." sudo systemctl enable NetworkManager.service # 3. greetd config +log "Deploying greetd config..." sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml sudo systemctl enable greetd.service # 4. Copy DE configs -echo "Copying configs..." +log "Copying Sway configs..." CONFIGS=(sway alacritty) for cfg in "${CONFIGS[@]}"; do rm -rf ~/.config/"$cfg" @@ -37,4 +39,4 @@ cp ~/Dotfiles/colors.conf ~/.config/colors.conf cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh chmod +x ~/apply-theme.sh -echo "=== Sway installation complete. Run shell-setup.sh if you haven't already, then reboot. ===" +log "Sway installation complete. Run shell-setup.sh if you haven't already, then reboot." diff --git a/setup/modules/Desktop-Environments/xfce.sh b/setup/modules/Desktop-Environments/xfce.sh index 84aa141..0f72a07 100755 --- a/setup/modules/Desktop-Environments/xfce.sh +++ b/setup/modules/Desktop-Environments/xfce.sh @@ -1,9 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "=== XFCE Installer ===" - -echo "[+] Installing XFCE..." +log "Installing XFCE desktop..." sudo pacman -S --noconfirm --needed \ xfce4 xfce4-goodies \ lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \ @@ -15,9 +14,9 @@ sudo pacman -S --noconfirm --needed \ gvfs gvfs-smb gvfs-mtp \ flatpak -echo "[+] Enabling services..." +log "Enabling services..." sudo systemctl enable lightdm.service sudo systemctl enable NetworkManager.service sudo systemctl enable bluetooth.service -echo "=== XFCE installation complete. Reboot to start. ===" +log "XFCE installation complete. Reboot to start." diff --git a/setup/modules/core-packages.sh b/setup/modules/core-packages.sh index 5099559..08f54a4 100644 --- a/setup/modules/core-packages.sh +++ b/setup/modules/core-packages.sh @@ -1,6 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh" +log "Installing core packages..." sudo pacman -Syu --noconfirm --needed \ 7zip arch-install-scripts atftp atool \ base base-devel bc bind bluez btrfs-progs btop \ @@ -18,4 +20,7 @@ sudo pacman -Syu --noconfirm --needed \ vim vnstat wget whois wireplumber wireless_tools wpa_supplicant wprs \ yazi zip unzip zram-generator +log "Installing AUR packages..." yay -S --aur --noconfirm --needed pamtester + +log "Core packages installed." diff --git a/setup/modules/core.sh b/setup/modules/core.sh index a3e6000..ffd12cb 100644 --- a/setup/modules/core.sh +++ b/setup/modules/core.sh @@ -1,16 +1,21 @@ #!/bin/bash +set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh" -#networkmanager setup -echo "enabling NetworkManager" +log "Enabling NetworkManager..." sudo systemctl enable NetworkManager.service -#cron setup -echo "enabling cronie" +log "Enabling cronie..." sudo systemctl enable cronie.service -#greetd setup -echo "Installing greetd" +log "Deploying greetd config..." sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml sudo systemctl enable greetd.service + +log "Enabling fail2ban..." sudo systemctl enable fail2ban.service + +log "Enabling udisks2..." sudo systemctl enable udisks2.service + +log "Core services enabled." diff --git a/setup/modules/lib/logging.sh b/setup/modules/lib/logging.sh new file mode 100644 index 0000000..df0050c --- /dev/null +++ b/setup/modules/lib/logging.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Shared logging helpers — source this in every module + +GREEN="\e[32m" +YELLOW="\e[33m" +RED="\e[31m" +RESET="\e[0m" + +log() { printf "${GREEN}[+] %s${RESET}\n" "$*"; } +skip() { printf "${YELLOW}[~] %s${RESET}\n" "$*"; } +warn() { printf "${YELLOW}[!] %s${RESET}\n" "$*" >&2; } +err() { printf "${RED}[✖] %s${RESET}\n" "$*" >&2; } diff --git a/setup/modules/optional-Modules/apps/anti-malware.sh b/setup/modules/optional-Modules/apps/anti-malware.sh index 07bae0a..47adfb1 100644 --- a/setup/modules/optional-Modules/apps/anti-malware.sh +++ b/setup/modules/optional-Modules/apps/anti-malware.sh @@ -1,24 +1,33 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing anti-malware tools (clamav, clamtk, rkhunter)..." sudo pacman -S --noconfirm --needed \ clamav clamtk rkhunter +log "Installing chkrootkit (AUR)..." yay -S --aur --noconfirm --needed chkrootkit # initialise ClamAV database (first run) if [[ ! -f /var/lib/clamav/main.cvd ]] && [[ ! -f /var/lib/clamav/main.cld ]]; then - echo "Running initial freshclam..." + log "Running initial freshclam (virus database update)..." sudo freshclam +else + skip "ClamAV database already present." fi # cron job: update virus definitions twice a day CRON_FILE=/etc/cron.d/freshclam if [[ ! -f "$CRON_FILE" ]]; then - echo "Installing freshclam cron job..." + log "Installing freshclam cron job (twice daily)..." sudo tee "$CRON_FILE" > /dev/null <<'EOF' # Update ClamAV virus definitions twice a day 0 */12 * * * root /usr/bin/freshclam --quiet 2>/dev/null EOF sudo chmod 644 "$CRON_FILE" +else + skip "freshclam cron job already configured." fi + +log "Anti-malware tools installed." diff --git a/setup/modules/optional-Modules/apps/ardour.sh b/setup/modules/optional-Modules/apps/ardour.sh index be7fb12..7b2cb79 100644 --- a/setup/modules/optional-Modules/apps/ardour.sh +++ b/setup/modules/optional-Modules/apps/ardour.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Ardour (professional DAW)..." sudo pacman -S --noconfirm --needed ardour +log "Ardour installed." diff --git a/setup/modules/optional-Modules/apps/audacity.sh b/setup/modules/optional-Modules/apps/audacity.sh index 8694955..3548eb9 100644 --- a/setup/modules/optional-Modules/apps/audacity.sh +++ b/setup/modules/optional-Modules/apps/audacity.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Audacity (audio editor)..." sudo pacman -S --noconfirm --needed audacity +log "Audacity installed." diff --git a/setup/modules/optional-Modules/apps/blender-povray.sh b/setup/modules/optional-Modules/apps/blender-povray.sh index c5f01c4..c813518 100644 --- a/setup/modules/optional-Modules/apps/blender-povray.sh +++ b/setup/modules/optional-Modules/apps/blender-povray.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Blender and POV-Ray..." sudo pacman -S --noconfirm --needed blender povray +log "Blender and POV-Ray installed." diff --git a/setup/modules/optional-Modules/apps/butter.sh b/setup/modules/optional-Modules/apps/butter.sh index 0ad5535..32b0fbc 100755 --- a/setup/modules/optional-Modules/apps/butter.sh +++ b/setup/modules/optional-Modules/apps/butter.sh @@ -1,6 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing btrfs-progs..." sudo pacman -S --noconfirm --needed btrfs-progs +log "Installing butter (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm butter +log "butter installed." diff --git a/setup/modules/optional-Modules/apps/cecilia.sh b/setup/modules/optional-Modules/apps/cecilia.sh index f5cfb15..20996b2 100644 --- a/setup/modules/optional-Modules/apps/cecilia.sh +++ b/setup/modules/optional-Modules/apps/cecilia.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Cecilia (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm cecilia +log "Cecilia installed." diff --git a/setup/modules/optional-Modules/apps/chromium.sh b/setup/modules/optional-Modules/apps/chromium.sh index bd5fe3f..502444b 100644 --- a/setup/modules/optional-Modules/apps/chromium.sh +++ b/setup/modules/optional-Modules/apps/chromium.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Chromium..." sudo pacman -S --noconfirm --needed chromium +log "Chromium installed." diff --git a/setup/modules/optional-Modules/apps/claude.sh b/setup/modules/optional-Modules/apps/claude.sh index 64d6933..a7727f2 100755 --- a/setup/modules/optional-Modules/apps/claude.sh +++ b/setup/modules/optional-Modules/apps/claude.sh @@ -1,9 +1,13 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Claude Code via npm..." if ! command -v npm &>/dev/null; then + log "Sourcing nvm to get npm..." export NVM_DIR="$HOME/.nvm" [[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh" fi npm install -g @anthropic-ai/claude-code +log "Claude Code installed." diff --git a/setup/modules/optional-Modules/apps/cockpit.sh b/setup/modules/optional-Modules/apps/cockpit.sh index cda70e5..661bba0 100644 --- a/setup/modules/optional-Modules/apps/cockpit.sh +++ b/setup/modules/optional-Modules/apps/cockpit.sh @@ -1,17 +1,19 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" -# Core + official-repo plugins +log "Installing Cockpit (core + official plugins)..." sudo pacman -S --noconfirm --needed \ cockpit \ cockpit-pcp \ pcp -# AUR plugins: machines (VMs), podman containers, file navigator +log "Installing Cockpit AUR plugins (machines, podman, navigator)..." yay -S --answerdiff None --answerclean All --noconfirm \ cockpit-machines \ cockpit-podman \ cockpit-navigator +log "Enabling Cockpit socket..." sudo systemctl enable cockpit.socket -echo "Cockpit enabled. Web UI available at https://localhost:9090" +log "Cockpit enabled. Web UI available at https://localhost:9090" diff --git a/setup/modules/optional-Modules/apps/codeblocks.sh b/setup/modules/optional-Modules/apps/codeblocks.sh index a2deffb..3daadc3 100644 --- a/setup/modules/optional-Modules/apps/codeblocks.sh +++ b/setup/modules/optional-Modules/apps/codeblocks.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Code::Blocks..." sudo pacman -S --noconfirm --needed codeblocks +log "Code::Blocks installed." diff --git a/setup/modules/optional-Modules/apps/croc.sh b/setup/modules/optional-Modules/apps/croc.sh index a1af8b5..22fad87 100755 --- a/setup/modules/optional-Modules/apps/croc.sh +++ b/setup/modules/optional-Modules/apps/croc.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing croc (file transfer)..." sudo pacman -S --noconfirm --needed croc +log "croc installed." diff --git a/setup/modules/optional-Modules/apps/db-clients.sh b/setup/modules/optional-Modules/apps/db-clients.sh index f6f11d0..2649211 100755 --- a/setup/modules/optional-Modules/apps/db-clients.sh +++ b/setup/modules/optional-Modules/apps/db-clients.sh @@ -1,6 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing pgcli..." sudo pacman -S --noconfirm --needed pgcli +log "Installing mycli (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm mycli +log "DB clients installed." diff --git a/setup/modules/optional-Modules/apps/disk-recovery.sh b/setup/modules/optional-Modules/apps/disk-recovery.sh index 96e9f6d..28f52db 100755 --- a/setup/modules/optional-Modules/apps/disk-recovery.sh +++ b/setup/modules/optional-Modules/apps/disk-recovery.sh @@ -1,6 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing ddrescue..." sudo pacman -S --noconfirm --needed ddrescue +log "Installing f3 (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm f3 +log "Disk recovery tools installed." diff --git a/setup/modules/optional-Modules/apps/docker.sh b/setup/modules/optional-Modules/apps/docker.sh index 571c316..373ec18 100644 --- a/setup/modules/optional-Modules/apps/docker.sh +++ b/setup/modules/optional-Modules/apps/docker.sh @@ -1,7 +1,14 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Docker and Docker Compose..." sudo pacman -S --noconfirm --needed docker docker-compose + +log "Enabling Docker service..." sudo systemctl enable docker.service + +log "Adding $USER to docker group..." sudo usermod -aG docker "$USER" -echo "Docker installed. Log out and back in for group membership to take effect." + +log "Docker installed. Log out and back in for group membership to take effect." diff --git a/setup/modules/optional-Modules/apps/doom.sh b/setup/modules/optional-Modules/apps/doom.sh index 6d1bc01..0148429 100644 --- a/setup/modules/optional-Modules/apps/doom.sh +++ b/setup/modules/optional-Modules/apps/doom.sh @@ -1,5 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" # chocolate-doom: faithful vanilla Doom port; freedoom: free game data (playable without IWADs) +log "Installing Chocolate Doom and Freedoom data..." sudo pacman -S --noconfirm --needed chocolate-doom freedoom +log "Doom installed." diff --git a/setup/modules/optional-Modules/apps/ffmpeg.sh b/setup/modules/optional-Modules/apps/ffmpeg.sh index e557a03..a5494f6 100755 --- a/setup/modules/optional-Modules/apps/ffmpeg.sh +++ b/setup/modules/optional-Modules/apps/ffmpeg.sh @@ -1,6 +1,9 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing FFmpeg extras (thumbnailer + GStreamer codecs)..." sudo pacman -S --noconfirm --needed \ ffmpeg ffmpegthumbnailer \ gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly +log "FFmpeg extras installed." diff --git a/setup/modules/optional-Modules/apps/firefox.sh b/setup/modules/optional-Modules/apps/firefox.sh index e53c71a..c2225fc 100644 --- a/setup/modules/optional-Modules/apps/firefox.sh +++ b/setup/modules/optional-Modules/apps/firefox.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Firefox..." sudo pacman -S --noconfirm --needed firefox +log "Firefox installed." diff --git a/setup/modules/optional-Modules/apps/freeipa-client.sh b/setup/modules/optional-Modules/apps/freeipa-client.sh index 219fdce..4d84f4f 100755 --- a/setup/modules/optional-Modules/apps/freeipa-client.sh +++ b/setup/modules/optional-Modules/apps/freeipa-client.sh @@ -1,5 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Starting FreeIPA client installer..." SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" FREEIPA_DIR="$SCRIPT_DIR/../../FreeipaAnsible" diff --git a/setup/modules/optional-Modules/apps/freeipa-image-builder.sh b/setup/modules/optional-Modules/apps/freeipa-image-builder.sh index 4a09cac..a507cb0 100755 --- a/setup/modules/optional-Modules/apps/freeipa-image-builder.sh +++ b/setup/modules/optional-Modules/apps/freeipa-image-builder.sh @@ -1,5 +1,7 @@ #!/bin/bash # freeipa-image-builder.sh — build a FreeIPA server image for multiple targets +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Starting FreeIPA image builder..." # # Targets (TUI chooser): # docker Build Docker/Podman image and optionally push to a registry diff --git a/setup/modules/optional-Modules/apps/freeipa-server.sh b/setup/modules/optional-Modules/apps/freeipa-server.sh index 6a24732..4d31e21 100755 --- a/setup/modules/optional-Modules/apps/freeipa-server.sh +++ b/setup/modules/optional-Modules/apps/freeipa-server.sh @@ -5,6 +5,9 @@ # and optionally auto-enroll-ansible.sh) ready for distribution. set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Starting FreeIPA server installer..." RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m' BLUE='\033[0;34m'; CYAN='\033[0;36m'; MAGENTA='\033[0;35m'; NC='\033[0m' diff --git a/setup/modules/optional-Modules/apps/geany.sh b/setup/modules/optional-Modules/apps/geany.sh index 3628d0a..d9fecb3 100644 --- a/setup/modules/optional-Modules/apps/geany.sh +++ b/setup/modules/optional-Modules/apps/geany.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Geany and plugins..." sudo pacman -S --noconfirm --needed geany geany-plugins +log "Geany installed." diff --git a/setup/modules/optional-Modules/apps/gimp.sh b/setup/modules/optional-Modules/apps/gimp.sh index bb1dad3..34d275e 100644 --- a/setup/modules/optional-Modules/apps/gimp.sh +++ b/setup/modules/optional-Modules/apps/gimp.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing GIMP..." sudo pacman -S --noconfirm --needed gimp +log "GIMP installed." diff --git a/setup/modules/optional-Modules/apps/gnuplot.sh b/setup/modules/optional-Modules/apps/gnuplot.sh index 5dcf98c..04c520e 100755 --- a/setup/modules/optional-Modules/apps/gnuplot.sh +++ b/setup/modules/optional-Modules/apps/gnuplot.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Gnuplot..." sudo pacman -S --noconfirm --needed gnuplot +log "Gnuplot installed." diff --git a/setup/modules/optional-Modules/apps/himalaya.sh b/setup/modules/optional-Modules/apps/himalaya.sh index 2787861..3baf644 100755 --- a/setup/modules/optional-Modules/apps/himalaya.sh +++ b/setup/modules/optional-Modules/apps/himalaya.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Himalaya (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm himalaya-bin +log "Himalaya installed." diff --git a/setup/modules/optional-Modules/apps/imagemagick.sh b/setup/modules/optional-Modules/apps/imagemagick.sh index fb7b4a2..66deb4f 100755 --- a/setup/modules/optional-Modules/apps/imagemagick.sh +++ b/setup/modules/optional-Modules/apps/imagemagick.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing ImageMagick..." sudo pacman -S --noconfirm --needed imagemagick +log "ImageMagick installed." diff --git a/setup/modules/optional-Modules/apps/inkscape.sh b/setup/modules/optional-Modules/apps/inkscape.sh index 4fb7e6f..e8d84b5 100644 --- a/setup/modules/optional-Modules/apps/inkscape.sh +++ b/setup/modules/optional-Modules/apps/inkscape.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Inkscape..." sudo pacman -S --noconfirm --needed inkscape +log "Inkscape installed." diff --git a/setup/modules/optional-Modules/apps/k8s.sh b/setup/modules/optional-Modules/apps/k8s.sh index b1c33ef..74e6a30 100644 --- a/setup/modules/optional-Modules/apps/k8s.sh +++ b/setup/modules/optional-Modules/apps/k8s.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Kubernetes tools (kubectl, podman-desktop)..." sudo pacman -S --noconfirm --needed kubectl podman-desktop +log "Kubernetes tools installed." diff --git a/setup/modules/optional-Modules/apps/kate.sh b/setup/modules/optional-Modules/apps/kate.sh index c2d6594..43e80c6 100644 --- a/setup/modules/optional-Modules/apps/kate.sh +++ b/setup/modules/optional-Modules/apps/kate.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Kate..." sudo pacman -S --noconfirm --needed kate +log "Kate installed." diff --git a/setup/modules/optional-Modules/apps/kdenlive.sh b/setup/modules/optional-Modules/apps/kdenlive.sh index 0a49008..c4b8c12 100644 --- a/setup/modules/optional-Modules/apps/kdenlive.sh +++ b/setup/modules/optional-Modules/apps/kdenlive.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Kdenlive..." sudo pacman -S --noconfirm --needed kdenlive +log "Kdenlive installed." diff --git a/setup/modules/optional-Modules/apps/krita.sh b/setup/modules/optional-Modules/apps/krita.sh index 7cc95be..da4c0a0 100644 --- a/setup/modules/optional-Modules/apps/krita.sh +++ b/setup/modules/optional-Modules/apps/krita.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Krita..." sudo pacman -S --noconfirm --needed krita +log "Krita installed." diff --git a/setup/modules/optional-Modules/apps/lamco-rdp-server.sh b/setup/modules/optional-Modules/apps/lamco-rdp-server.sh index 5ada75b..40b19a4 100644 --- a/setup/modules/optional-Modules/apps/lamco-rdp-server.sh +++ b/setup/modules/optional-Modules/apps/lamco-rdp-server.sh @@ -1,16 +1,16 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" # lamco-rdp-server — native Wayland RDP server (Rust, H.264, VA-API) # Builds from AUR; requires cargo, clang, cmake, nasm (auto-pulled as makedeps) +log "Installing lamco-rdp-server (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm lamco-rdp-server -# Runs as a systemd user service (session-scoped, D-Bus activated) +log "Enabling lamco-rdp-server as user service..." systemctl --user enable lamco-rdp-server.service -echo "lamco-rdp-server enabled as a user service." -echo "Start it with: systemctl --user start lamco-rdp-server" -echo "Or launch the GUI tray: lamco-rdp-server-gui" -echo "" -echo "Optional: install a matching xdg-desktop-portal for your compositor:" -echo " xdg-desktop-portal-hyprland / -wlr / -gnome / -kde" +log "lamco-rdp-server enabled as a user service." +log "Start it with: systemctl --user start lamco-rdp-server" +log "Or launch the GUI tray: lamco-rdp-server-gui" +warn "Install a matching xdg-desktop-portal for your compositor: xdg-desktop-portal-hyprland / -wlr / -gnome / -kde" diff --git a/setup/modules/optional-Modules/apps/librewolf.sh b/setup/modules/optional-Modules/apps/librewolf.sh index 5ab3713..de8425e 100644 --- a/setup/modules/optional-Modules/apps/librewolf.sh +++ b/setup/modules/optional-Modules/apps/librewolf.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing LibreWolf (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm librewolf-bin +log "LibreWolf installed." diff --git a/setup/modules/optional-Modules/apps/llama-cpp.sh b/setup/modules/optional-Modules/apps/llama-cpp.sh index 034a1c2..5e12877 100755 --- a/setup/modules/optional-Modules/apps/llama-cpp.sh +++ b/setup/modules/optional-Modules/apps/llama-cpp.sh @@ -1,7 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" # Provides standalone llama-cli, llama-server, and related tools. # Ollama bundles its own copy of llama.cpp internally — the two coexist # at the package level but share GPU resources at runtime. +log "Installing llama.cpp (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm llama-cpp +log "llama.cpp installed." diff --git a/setup/modules/optional-Modules/apps/lmms.sh b/setup/modules/optional-Modules/apps/lmms.sh index aef1a53..5de8a28 100644 --- a/setup/modules/optional-Modules/apps/lmms.sh +++ b/setup/modules/optional-Modules/apps/lmms.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing LMMS..." sudo pacman -S --noconfirm --needed lmms +log "LMMS installed." diff --git a/setup/modules/optional-Modules/apps/localsend.sh b/setup/modules/optional-Modules/apps/localsend.sh index ac5bb42..0454412 100644 --- a/setup/modules/optional-Modules/apps/localsend.sh +++ b/setup/modules/optional-Modules/apps/localsend.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing LocalSend (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm localsend +log "LocalSend installed." diff --git a/setup/modules/optional-Modules/apps/localtunnel.sh b/setup/modules/optional-Modules/apps/localtunnel.sh index 6039676..f719613 100755 --- a/setup/modules/optional-Modules/apps/localtunnel.sh +++ b/setup/modules/optional-Modules/apps/localtunnel.sh @@ -1,8 +1,11 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing LocalTunnel..." if command -v npm &>/dev/null; then npm install -g localtunnel else yay -S --answerdiff None --answerclean All --noconfirm localtunnel fi +log "LocalTunnel installed." diff --git a/setup/modules/optional-Modules/apps/min-browser.sh b/setup/modules/optional-Modules/apps/min-browser.sh index d309b43..9b30375 100644 --- a/setup/modules/optional-Modules/apps/min-browser.sh +++ b/setup/modules/optional-Modules/apps/min-browser.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Min browser (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm min +log "Min browser installed." diff --git a/setup/modules/optional-Modules/apps/mixxx.sh b/setup/modules/optional-Modules/apps/mixxx.sh index f4b999c..a9676a6 100644 --- a/setup/modules/optional-Modules/apps/mixxx.sh +++ b/setup/modules/optional-Modules/apps/mixxx.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Mixxx (DJ software)..." sudo pacman -S --noconfirm --needed mixxx +log "Mixxx installed." diff --git a/setup/modules/optional-Modules/apps/mysql.sh b/setup/modules/optional-Modules/apps/mysql.sh index bb706b4..7050df8 100755 --- a/setup/modules/optional-Modules/apps/mysql.sh +++ b/setup/modules/optional-Modules/apps/mysql.sh @@ -1,10 +1,17 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing MariaDB..." sudo pacman -S --noconfirm --needed mariadb if [[ ! -d /var/lib/mysql/mysql ]]; then + log "Initialising MariaDB data directory..." sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql +else + skip "MariaDB data directory already initialised." fi +log "Enabling MariaDB service..." sudo systemctl enable --now mariadb.service +log "MariaDB installed and running." diff --git a/setup/modules/optional-Modules/apps/networking-cli.sh b/setup/modules/optional-Modules/apps/networking-cli.sh index 6d80186..abcc491 100755 --- a/setup/modules/optional-Modules/apps/networking-cli.sh +++ b/setup/modules/optional-Modules/apps/networking-cli.sh @@ -1,6 +1,9 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing networking CLI tools..." sudo pacman -S --noconfirm --needed \ httpie ipcalc mitmproxy mtr net-tools nethogs \ nmap tcpdump traceroute +log "Networking CLI tools installed." diff --git a/setup/modules/optional-Modules/apps/nyxt.sh b/setup/modules/optional-Modules/apps/nyxt.sh index c77f8fa..6d258ec 100644 --- a/setup/modules/optional-Modules/apps/nyxt.sh +++ b/setup/modules/optional-Modules/apps/nyxt.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Nyxt browser (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm nyxt +log "Nyxt installed." diff --git a/setup/modules/optional-Modules/apps/ollama.sh b/setup/modules/optional-Modules/apps/ollama.sh index c911021..d201a12 100755 --- a/setup/modules/optional-Modules/apps/ollama.sh +++ b/setup/modules/optional-Modules/apps/ollama.sh @@ -1,12 +1,15 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" # GPU variants: install ollama-cuda (AUR) for NVIDIA or ollama-rocm (AUR) for AMD. # The base package runs on CPU and auto-uses GPU libs if present at runtime. +log "Installing Ollama..." sudo pacman -S --noconfirm --needed ollama +log "Enabling Ollama service..." sudo systemctl enable --now ollama.service -echo "Ollama running on http://localhost:11434" -echo "Pull models with: ollama pull " -echo "Note: if llama.cpp is also installed, avoid running both GPU-bound at once." +log "Ollama running on http://localhost:11434" +log "Pull models with: ollama pull " +warn "If llama.cpp is also installed, avoid running both GPU-bound at once." diff --git a/setup/modules/optional-Modules/apps/onlyoffice.sh b/setup/modules/optional-Modules/apps/onlyoffice.sh index 8c0d45e..e878198 100644 --- a/setup/modules/optional-Modules/apps/onlyoffice.sh +++ b/setup/modules/optional-Modules/apps/onlyoffice.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing OnlyOffice (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm onlyoffice-bin +log "OnlyOffice installed." diff --git a/setup/modules/optional-Modules/apps/open-webui.sh b/setup/modules/optional-Modules/apps/open-webui.sh index 0842c41..f0da8ec 100755 --- a/setup/modules/optional-Modules/apps/open-webui.sh +++ b/setup/modules/optional-Modules/apps/open-webui.sh @@ -1,10 +1,13 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" # Open WebUI — browser UI for Ollama and other LLM backends. # Ollama module should be installed first for full functionality. +log "Installing Open WebUI (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm open-webui +log "Enabling Open WebUI service..." sudo systemctl enable --now open-webui.service -echo "Open WebUI running at http://localhost:8080" +log "Open WebUI running at http://localhost:8080" diff --git a/setup/modules/optional-Modules/apps/openarena.sh b/setup/modules/optional-Modules/apps/openarena.sh index 7a32af2..f48385a 100644 --- a/setup/modules/optional-Modules/apps/openarena.sh +++ b/setup/modules/optional-Modules/apps/openarena.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing OpenArena..." sudo pacman -S --noconfirm --needed openarena +log "OpenArena installed." diff --git a/setup/modules/optional-Modules/apps/openshot.sh b/setup/modules/optional-Modules/apps/openshot.sh index 1d7cfc3..3101e14 100644 --- a/setup/modules/optional-Modules/apps/openshot.sh +++ b/setup/modules/optional-Modules/apps/openshot.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing OpenShot..." sudo pacman -S --noconfirm --needed openshot +log "OpenShot installed." diff --git a/setup/modules/optional-Modules/apps/podman.sh b/setup/modules/optional-Modules/apps/podman.sh index 418f76f..aad5f32 100644 --- a/setup/modules/optional-Modules/apps/podman.sh +++ b/setup/modules/optional-Modules/apps/podman.sh @@ -1,7 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Podman (rootless containers, buildah, skopeo)..." sudo pacman -S --noconfirm --needed podman podman-compose buildah skopeo -# Enable lingering so rootless containers survive logout + +log "Enabling user lingering so rootless containers survive logout..." loginctl enable-linger "$USER" -echo "Podman installed (rootless, no daemon). User lingering enabled." +log "Podman installed (rootless, no daemon). User lingering enabled." diff --git a/setup/modules/optional-Modules/apps/prismlauncher.sh b/setup/modules/optional-Modules/apps/prismlauncher.sh index baa2faa..a72b539 100644 --- a/setup/modules/optional-Modules/apps/prismlauncher.sh +++ b/setup/modules/optional-Modules/apps/prismlauncher.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing PrismLauncher (Flatpak)..." flatpak install -y flathub org.prismlauncher.PrismLauncher +log "PrismLauncher installed." diff --git a/setup/modules/optional-Modules/apps/productivity.sh b/setup/modules/optional-Modules/apps/productivity.sh index 7030594..0535af4 100755 --- a/setup/modules/optional-Modules/apps/productivity.sh +++ b/setup/modules/optional-Modules/apps/productivity.sh @@ -1,6 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing taskwarrior..." sudo pacman -S --noconfirm --needed task +log "Installing watson and jrnl (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm watson python-jrnl +log "Productivity tools installed." diff --git a/setup/modules/optional-Modules/apps/qemu.sh b/setup/modules/optional-Modules/apps/qemu.sh index d1aa336..bd267e1 100644 --- a/setup/modules/optional-Modules/apps/qemu.sh +++ b/setup/modules/optional-Modules/apps/qemu.sh @@ -1,7 +1,8 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" -# QEMU/KVM + libvirt stack + virt-manager GUI +log "Installing QEMU/KVM + libvirt stack + virt-manager..." sudo pacman -S --noconfirm --needed \ qemu-full \ libvirt \ @@ -13,10 +14,12 @@ sudo pacman -S --noconfirm --needed \ swtpm \ vde2 +log "Enabling libvirtd service..." sudo systemctl enable --now libvirtd.service -# Enable the default NAT network at libvirt startup +log "Configuring default NAT network for autostart..." sudo virsh net-autostart default 2>/dev/null || true +log "Adding $USER to libvirt and kvm groups..." sudo usermod -aG libvirt,kvm "$USER" -echo "QEMU/KVM installed. Log out and back in for group membership to take effect." +log "QEMU/KVM installed. Log out and back in for group membership to take effect." diff --git a/setup/modules/optional-Modules/apps/rdp-client.sh b/setup/modules/optional-Modules/apps/rdp-client.sh index 6add70c..7ac2885 100644 --- a/setup/modules/optional-Modules/apps/rdp-client.sh +++ b/setup/modules/optional-Modules/apps/rdp-client.sh @@ -1,10 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" -# Remmina + protocol plugins +log "Installing Remmina RDP client with FreeRDP and VNC support..." sudo pacman -S --noconfirm --needed \ remmina \ freerdp \ libvncserver - -echo "Remmina installed with RDP (freerdp) and VNC support." +log "Remmina installed with RDP (freerdp) and VNC support." diff --git a/setup/modules/optional-Modules/apps/sauerbraten.sh b/setup/modules/optional-Modules/apps/sauerbraten.sh index d339a7c..6628d75 100644 --- a/setup/modules/optional-Modules/apps/sauerbraten.sh +++ b/setup/modules/optional-Modules/apps/sauerbraten.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Sauerbraten (Cube 2 FPS)..." sudo pacman -S --noconfirm --needed sauerbraten +log "Sauerbraten installed." diff --git a/setup/modules/optional-Modules/apps/shotcut.sh b/setup/modules/optional-Modules/apps/shotcut.sh index 975c809..7cb1d2f 100644 --- a/setup/modules/optional-Modules/apps/shotcut.sh +++ b/setup/modules/optional-Modules/apps/shotcut.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Shotcut..." sudo pacman -S --noconfirm --needed shotcut +log "Shotcut installed." diff --git a/setup/modules/optional-Modules/apps/sox.sh b/setup/modules/optional-Modules/apps/sox.sh index beb91a0..ead2ef2 100755 --- a/setup/modules/optional-Modules/apps/sox.sh +++ b/setup/modules/optional-Modules/apps/sox.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing SoX (audio processing toolkit)..." sudo pacman -S --noconfirm --needed sox +log "SoX installed." diff --git a/setup/modules/optional-Modules/apps/spotify.sh b/setup/modules/optional-Modules/apps/spotify.sh index 59f563f..e8f97a0 100644 --- a/setup/modules/optional-Modules/apps/spotify.sh +++ b/setup/modules/optional-Modules/apps/spotify.sh @@ -1,6 +1,14 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Spotify launcher..." sudo pacman -S --noconfirm --needed spotify-launcher + +log "Installing Spicetify CLI..." curl -fsSL https://raw.githubusercontent.com/spicetify/cli/main/install.sh | sh + +log "Deploying Spicetify config..." rm -rf ~/.config/spicetify cp -r ~/Dotfiles/desktopenvs/hyprland/spicetify ~/.config/ +log "Spotify installed with Spicetify theming." diff --git a/setup/modules/optional-Modules/apps/ssh-server.sh b/setup/modules/optional-Modules/apps/ssh-server.sh index 45f6019..b744a9c 100644 --- a/setup/modules/optional-Modules/apps/ssh-server.sh +++ b/setup/modules/optional-Modules/apps/ssh-server.sh @@ -1,14 +1,17 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing OpenSSH server..." sudo pacman -S --noconfirm --needed openssh -# Harden defaults: disable root login, enforce key auth only +log "Hardening SSH config (disable root login, enforce key auth)..." SSHD_CONF=/etc/ssh/sshd_config sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONF" sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONF" sudo sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' "$SSHD_CONF" +log "Enabling sshd service..." sudo systemctl enable sshd.service -echo "SSH server installed and enabled (key auth only, root login disabled)." -echo "Add your public key to ~/.ssh/authorized_keys before first use." +log "SSH server installed and enabled (key auth only, root login disabled)." +warn "Add your public key to ~/.ssh/authorized_keys before first use." diff --git a/setup/modules/optional-Modules/apps/steam.sh b/setup/modules/optional-Modules/apps/steam.sh index b0ef32c..6babf77 100644 --- a/setup/modules/optional-Modules/apps/steam.sh +++ b/setup/modules/optional-Modules/apps/steam.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Steam..." sudo pacman -S --noconfirm --needed steam +log "Steam installed." diff --git a/setup/modules/optional-Modules/apps/stuntrally.sh b/setup/modules/optional-Modules/apps/stuntrally.sh index b7961e7..ba66aac 100644 --- a/setup/modules/optional-Modules/apps/stuntrally.sh +++ b/setup/modules/optional-Modules/apps/stuntrally.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Stunt Rally (Flatpak)..." flatpak install -y flathub io.github.stuntrally.StuntRally3 +log "Stunt Rally installed." diff --git a/setup/modules/optional-Modules/apps/tetris.sh b/setup/modules/optional-Modules/apps/tetris.sh index 040de3f..86c9e96 100644 --- a/setup/modules/optional-Modules/apps/tetris.sh +++ b/setup/modules/optional-Modules/apps/tetris.sh @@ -1,6 +1,10 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing bastet (Tetris CLI)..." sudo pacman -S --noconfirm --needed bastet +log "Installing vitetris (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm vitetris +log "Tetris CLI tools installed." diff --git a/setup/modules/optional-Modules/apps/timeshift.sh b/setup/modules/optional-Modules/apps/timeshift.sh index 6d07d1b..d877c40 100755 --- a/setup/modules/optional-Modules/apps/timeshift.sh +++ b/setup/modules/optional-Modules/apps/timeshift.sh @@ -1,9 +1,13 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Timeshift and cronie..." sudo pacman -S --noconfirm --needed timeshift cronie -# Auto-snapshot before pacman transactions +log "Installing timeshift-autosnap (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm timeshift-autosnap +log "Enabling cronie service..." sudo systemctl enable --now cronie.service +log "Timeshift installed with autosnap on pacman transactions." diff --git a/setup/modules/optional-Modules/apps/tlp.sh b/setup/modules/optional-Modules/apps/tlp.sh index 07ef5e4..567e9cd 100755 --- a/setup/modules/optional-Modules/apps/tlp.sh +++ b/setup/modules/optional-Modules/apps/tlp.sh @@ -1,8 +1,12 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing TLP (laptop power management)..." sudo pacman -S --noconfirm --needed tlp tlp-rdw +log "Enabling TLP and masking rfkill to avoid conflicts..." sudo systemctl enable --now tlp.service sudo systemctl enable NetworkManager-dispatcher.service sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket +log "TLP installed." diff --git a/setup/modules/optional-Modules/apps/toot.sh b/setup/modules/optional-Modules/apps/toot.sh index 69b9b7b..4a78ace 100755 --- a/setup/modules/optional-Modules/apps/toot.sh +++ b/setup/modules/optional-Modules/apps/toot.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing toot (Mastodon CLI, AUR)..." yay -S --answerdiff None --answerclean All --noconfirm toot +log "toot installed." diff --git a/setup/modules/optional-Modules/apps/vesktop.sh b/setup/modules/optional-Modules/apps/vesktop.sh index c7e0792..e2153e0 100644 --- a/setup/modules/optional-Modules/apps/vesktop.sh +++ b/setup/modules/optional-Modules/apps/vesktop.sh @@ -1,6 +1,12 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Vesktop (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm vesktop + +log "Deploying Vencord config..." rm -rf ~/.config/Vencord ~/.config/vesktop cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/ cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/vesktop +log "Vesktop installed with Vencord theme." diff --git a/setup/modules/optional-Modules/apps/vintagestory.sh b/setup/modules/optional-Modules/apps/vintagestory.sh index 75d57da..1e74293 100644 --- a/setup/modules/optional-Modules/apps/vintagestory.sh +++ b/setup/modules/optional-Modules/apps/vintagestory.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Vintage Story (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm vintagestory +log "Vintage Story installed." diff --git a/setup/modules/optional-Modules/apps/vscodium.sh b/setup/modules/optional-Modules/apps/vscodium.sh index f537713..32e7d7d 100644 --- a/setup/modules/optional-Modules/apps/vscodium.sh +++ b/setup/modules/optional-Modules/apps/vscodium.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing VSCodium (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm vscodium-bin +log "VSCodium installed." diff --git a/setup/modules/optional-Modules/apps/wireshark.sh b/setup/modules/optional-Modules/apps/wireshark.sh index 1c41c94..4b38e48 100644 --- a/setup/modules/optional-Modules/apps/wireshark.sh +++ b/setup/modules/optional-Modules/apps/wireshark.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Wireshark..." sudo pacman -S --noconfirm --needed wireshark-qt +log "Wireshark installed." diff --git a/setup/modules/optional-Modules/apps/xournal.sh b/setup/modules/optional-Modules/apps/xournal.sh index 2209c4a..5cbf6b4 100644 --- a/setup/modules/optional-Modules/apps/xournal.sh +++ b/setup/modules/optional-Modules/apps/xournal.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing Xournal++ (PDF annotator)..." sudo pacman -S --noconfirm --needed xournalpp +log "Xournal++ installed." diff --git a/setup/modules/optional-Modules/apps/yt-dlp.sh b/setup/modules/optional-Modules/apps/yt-dlp.sh index 2b971b3..d0c558c 100755 --- a/setup/modules/optional-Modules/apps/yt-dlp.sh +++ b/setup/modules/optional-Modules/apps/yt-dlp.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" +log "Installing yt-dlp (media downloader)..." sudo pacman -S --noconfirm --needed yt-dlp +log "yt-dlp installed." diff --git a/setup/modules/optional-Modules/apps/zed.sh b/setup/modules/optional-Modules/apps/zed.sh index 4ca0fd9..0c38da1 100644 --- a/setup/modules/optional-Modules/apps/zed.sh +++ b/setup/modules/optional-Modules/apps/zed.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Zed editor..." sudo pacman -S --noconfirm --needed zed +log "Zed installed." diff --git a/setup/modules/optional-Modules/apps/zen-browser.sh b/setup/modules/optional-Modules/apps/zen-browser.sh index 87c99e5..f51e33d 100644 --- a/setup/modules/optional-Modules/apps/zen-browser.sh +++ b/setup/modules/optional-Modules/apps/zen-browser.sh @@ -1,3 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh" + +log "Installing Zen Browser (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm zen-browser-bin +log "Zen Browser installed." diff --git a/setup/modules/optional-Modules/python.sh b/setup/modules/optional-Modules/python.sh index ccd3906..d9b0310 100755 --- a/setup/modules/optional-Modules/python.sh +++ b/setup/modules/optional-Modules/python.sh @@ -1,2 +1,7 @@ #!/bin/bash +set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" + +log "Installing Python tools..." sudo pacman -Syu python pyright python-pynvim python-pipx +log "Python tools installed." diff --git a/setup/modules/optional-Modules/wprs.sh b/setup/modules/optional-Modules/wprs.sh index 06bc546..6424b86 100755 --- a/setup/modules/optional-Modules/wprs.sh +++ b/setup/modules/optional-Modules/wprs.sh @@ -1,4 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" +log "Installing wprs-git (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm wprs-git +log "wprs installed." diff --git a/setup/modules/optional-Modules/zfs.sh b/setup/modules/optional-Modules/zfs.sh index 9f8b564..fe8d38c 100755 --- a/setup/modules/optional-Modules/zfs.sh +++ b/setup/modules/optional-Modules/zfs.sh @@ -1,5 +1,7 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh" -echo "Installing ZFS kernel module..." +log "Installing ZFS kernel module (AUR)..." yay -S --answerdiff None --answerclean All --noconfirm zfs-dkms +log "ZFS installed." diff --git a/setup/modules/package-managers.sh b/setup/modules/package-managers.sh index 66cca03..f17ee79 100644 --- a/setup/modules/package-managers.sh +++ b/setup/modules/package-managers.sh @@ -1,35 +1,39 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh" +log "Updating system and installing Flatpak..." sudo pacman -Syu --noconfirm --needed flatpak # yay if ! command -v yay &>/dev/null; then - echo "Installing yay..." + log "Installing yay..." mkdir -p ~/install-tmp git clone https://aur.archlinux.org/yay.git ~/install-tmp/yay cd ~/install-tmp/yay makepkg -si --noconfirm cd ~ else - echo "yay already installed." + skip "yay already installed." fi # rustup / rust if ! command -v rustup &>/dev/null; then - echo "Installing rustup..." + log "Installing rustup..." sudo pacman -S --noconfirm --needed rustup fi rustup default stable # nvm + Node.js if ! command -v node &>/dev/null; then - echo "Installing nvm and Node.js 22..." + log "Installing nvm and Node.js 22..." if [ ! -d "$HOME/.nvm" ]; then curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash fi . "$HOME/.nvm/nvm.sh" nvm install 22 else - echo "Node.js already installed: $(node -v)" + skip "Node.js already installed: $(node -v)" fi + +log "Package managers ready." diff --git a/setup/modules/shell-setup.sh b/setup/modules/shell-setup.sh index 98ce7b5..9eb1ec8 100755 --- a/setup/modules/shell-setup.sh +++ b/setup/modules/shell-setup.sh @@ -1,18 +1,11 @@ #!/bin/bash set -euo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh" -GREEN="\e[32m" -YELLOW="\e[33m" -RESET="\e[0m" - -log() { echo -e "${GREEN}✔ $1${RESET}"; } -skip() { echo -e "${YELLOW}↷ $1${RESET}"; } - -# Update system log "Updating system..." sudo pacman -Syu --noconfirm -# Install base packages +log "Installing base shell packages..." PACKAGES=(zsh neovim curl pyright bash atftp bash-language-server btop clang fastfetch fzf hyfetch lua-language-server micro nano pulsemixer yazi z qrencode distrobox dysk python python-pip glow) for pkg in "${PACKAGES[@]}"; do if ! pacman -Qi "$pkg" &>/dev/null; then @@ -55,10 +48,9 @@ else skip "Node.js already installed." fi -# git config +log "Configuring git..." git config --global core.editor nvim -# Dotfiles log "Deploying dotfiles..." mkdir -p ~/.config ~/Pictures @@ -69,9 +61,6 @@ ln -sf ~/Dotfiles/starship.toml ~/.config/starship.toml rm -rf ~/.config/micro cp -r ~/Dotfiles/micro ~/.config/ -# nvim — lazy.nvim bootstraps itself on first launch via init.lua -# airline cyberqueer theme lives at nvim/autoload/airline/themes/cyberqueer.vim -# and is discovered automatically via the rtp symlink below rm -rf ~/.config/nvim ln -sf ~/Dotfiles/nvim ~/.config/nvim @@ -91,7 +80,7 @@ else skip "Starship already installed." fi -# oh-my-zsh (RUNZSH=no prevents installer from spawning a new shell) +# oh-my-zsh if [ ! -d "$HOME/.oh-my-zsh" ]; then log "Installing oh-my-zsh..." RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" @@ -102,12 +91,14 @@ fi # oh-my-zsh plugins ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" if [ ! -d "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" ]; then + log "Installing zsh-syntax-highlighting..." git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \ "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" else skip "zsh-syntax-highlighting already installed." fi if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then + log "Installing zsh-autosuggestions..." git clone https://github.com/zsh-users/zsh-autosuggestions \ "$ZSH_CUSTOM/plugins/zsh-autosuggestions" else