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 <noreply@anthropic.com>
main
Amir Alexander Abdelbaki 2026-05-22 01:44:31 +02:00
parent 242a544909
commit 0c88a09a0f
87 changed files with 411 additions and 110 deletions

View File

@ -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"

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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; }

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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"

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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"

View File

@ -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

View File

@ -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'

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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"

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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 <model>"
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 <model>"
warn "If llama.cpp is also installed, avoid running both GPU-bound at once."

View File

@ -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."

View File

@ -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"

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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."

View File

@ -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