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 #!/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" echo "Running Core installation Scripts"
bash ~/Dotfiles/setup/modules/package-managers.sh 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/zfs.sh
# bash ~/Dotfiles/setup/modules/optional-Modules/wprs.sh # bash ~/Dotfiles/setup/modules/optional-Modules/wprs.sh
printf "\nDone. Log: %s\n" "$LOG"

View File

@ -1,9 +1,8 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
echo "=== COSMIC Desktop Installer ===" log "Installing COSMIC desktop..."
echo "[+] Installing COSMIC..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
cosmic \ cosmic \
pipewire wireplumber pipewire-alsa pipewire-jack pipewire-pulse \ pipewire wireplumber pipewire-alsa pipewire-jack pipewire-pulse \
@ -11,7 +10,7 @@ sudo pacman -S --noconfirm --needed \
bluez bluez-utils \ bluez bluez-utils \
flatpak flatpak
echo "[+] Enabling services..." log "Enabling services..."
# cosmic-greeter is COSMIC's own display manager; fall back to sddm if absent # cosmic-greeter is COSMIC's own display manager; fall back to sddm if absent
if pacman -Qi cosmic-greeter &>/dev/null; then if pacman -Qi cosmic-greeter &>/dev/null; then
sudo systemctl enable cosmic-greeter.service sudo systemctl enable cosmic-greeter.service
@ -22,4 +21,4 @@ fi
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
sudo systemctl enable bluetooth.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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
echo "=== GNOME Installer ===" log "Installing GNOME desktop..."
echo "[+] Installing GNOME..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
gnome \ gnome \
gnome-tweaks \ gnome-tweaks \
@ -12,8 +11,8 @@ sudo pacman -S --noconfirm --needed \
networkmanager \ networkmanager \
flatpak flatpak
echo "[+] Enabling services..." log "Enabling services..."
sudo systemctl enable gdm.service sudo systemctl enable gdm.service
sudo systemctl enable NetworkManager.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 #!/bin/bash
set -e 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 # 1. Update system and install Flatpak
echo "Updating system and installing Flatpak..." log "Updating system and installing Flatpak..."
sudo pacman -Syu --noconfirm --needed flatpak sudo pacman -Syu --noconfirm --needed flatpak
# 2. Install required packages # 2. Install required packages
echo "Installing required packages..." log "Installing required packages..."
sudo pacman -Syu --noconfirm --needed \ sudo pacman -Syu --noconfirm --needed \
hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \ hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \
nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \ 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 hyprpolkitagent pavucontrol playerctl wf-recorder sound-theme-freedesktop
# 3. Enable essential services # 3. Enable essential services
echo "Enabling essential services..." log "Enabling essential services..."
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
sudo systemctl disable getty@tty1.service || true sudo systemctl disable getty@tty1.service || true
sudo systemctl enable ly@tty1.service sudo systemctl enable ly@tty1.service
sudo systemctl enable udisks2.service sudo systemctl enable udisks2.service
# 4. Install AUR packages # 4. Install AUR packages
echo "Installing AUR packages..." log "Installing AUR packages..."
rustup default stable rustup default stable
yay -Syu --answerdiff None --answerclean All --noconfirm \ yay -Syu --answerdiff None --answerclean All --noconfirm \
hyprland-workspaces vicinae-bin bluetuith wvkbd iwmenu pinta \ hyprland-workspaces vicinae-bin bluetuith wvkbd iwmenu pinta \
@ -43,7 +44,7 @@ yay -Syu --answerdiff None --answerclean All --noconfirm \
wofi-calc bri chamel wofi-calc bri chamel
# 5. EWW bar selection and compilation # 5. EWW bar selection and compilation
echo "Setting up EWW bar..." log "Setting up EWW bar..."
rm -rf ~/.config/eww rm -rf ~/.config/eww
read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit
echo echo
@ -51,10 +52,10 @@ case $doit in
n|N) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww/ ~/.config/ ;; n|N) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww/ ~/.config/ ;;
p|P) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-nobattery/ ~/.config/eww ;; p|P) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-nobattery/ ~/.config/eww ;;
t|T) cp -rf ~/Dotfiles/desktopenvs/hyprland/eww-touch/ ~/.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 esac
echo "Compiling EWW..." log "Compiling EWW..."
mkdir -p ~/install-tmp mkdir -p ~/install-tmp
cd ~/install-tmp cd ~/install-tmp
git clone https://github.com/elkowar/eww git clone https://github.com/elkowar/eww
@ -65,6 +66,7 @@ sudo cp target/release/eww /usr/bin/
cd ~ cd ~
# 6. Theme and icon setup # 6. Theme and icon setup
log "Installing themes and icons..."
sudo cp -r ~/Dotfiles/gtk-themes/cyberqueer /usr/share/themes 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 ~/Dotfiles/desktopenvs/hyprland/btop/themes/cyberqueer.theme /usr/share/btop/themes
sudo cp -f ~/Dotfiles/etc-ly-config.ini /etc/ly/config.ini 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 sudo ln -sf /usr/bin/ksshaskpass /usr/lib/ssh/ssh-askpass
# 7. Cursor setup # 7. Cursor setup
log "Installing cursor theme..."
mkdir -p ~/.icons mkdir -p ~/.icons
wget -O ~/install-tmp/Nordzy-cursors-lefthand.tar.gz \ 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 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/ tar -zxf ~/install-tmp/Nordzy-cursors-lefthand.tar.gz -C ~/.icons/
# 8. Enable Bluetooth and wireless services # 8. Enable Bluetooth and wireless services
log "Enabling Bluetooth and wireless services..."
sudo systemctl enable bluez sudo systemctl enable bluez
sudo systemctl enable bluetooth.service sudo systemctl enable bluetooth.service
sudo systemctl enable iwd.service sudo systemctl enable iwd.service
@ -88,7 +92,7 @@ sudo systemctl enable iwd.service
# hyprpm add https://github.com/hyprwm/hyprland-plugins # hyprpm add https://github.com/hyprwm/hyprland-plugins
# 10. Copy configs # 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) 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 for cfg in "${CONFIGS[@]}"; do
rm -rf ~/.config/"$cfg" rm -rf ~/.config/"$cfg"
@ -99,16 +103,18 @@ cp ~/Dotfiles/desktopenvs/hyprland/hypr-usr/* ~/.config/
cp ~/Dotfiles/colors.conf ~/.config/colors.conf cp ~/Dotfiles/colors.conf ~/.config/colors.conf
# 11. Wallpaper and resources # 11. Wallpaper and resources
log "Copying wallpaper and resources..."
mkdir -p ~/Pictures mkdir -p ~/Pictures
cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg
wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg
# 12. Python venv for scripts # 12. Python venv for scripts
log "Setting up Python venv for scripts..."
python -m venv ~/.config/python-script python -m venv ~/.config/python-script
~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime ~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime
# 13. Udiskie icon fix # 13. Udiskie icon fix
echo "Applying Udiskie icon fix..." log "Applying Udiskie icon fix..."
PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status" PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status"
HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status" HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status"
if [ -d "$PAPIRUS_DIR" ]; then 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 ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg"
sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor
else else
echo "Papirus-Dark not found — skipping udiskie icon fix." warn "Papirus-Dark not found — skipping udiskie icon fix."
fi fi
# 14. Enable udiskie # 14. Enable udiskie
log "Enabling udiskie service..."
sudo systemctl enable udiskie.service sudo systemctl enable udiskie.service
sudo systemctl start udiskie.service sudo systemctl start udiskie.service
# 15. Install config updater and theme script # 15. Install config updater and theme script
log "Installing config updater and theme script..."
mkdir -p ~/.config/config-updater 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/updater.conf ~/.config/config-updater/updater.conf
ln -sf ~/Dotfiles/desktopenvs/hyprland/config-updater/update-configs.sh ~/update-configs.sh 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 \ # | grep -Po '"browser_download_url": "\K[^"]+' | grep WallRizz)" | tar -xz \
# && sudo mv WallRizz /usr/bin/ # && 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 #!/bin/bash
set -e 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 # 1. Update system and install Flatpak
echo "Updating system and installing Flatpak..." log "Updating system and installing Flatpak..."
sudo pacman -Syu --noconfirm --needed flatpak sudo pacman -Syu --noconfirm --needed flatpak
# 2. Install required packages # 2. Install required packages
echo "Installing required packages..." log "Installing required packages..."
sudo pacman -Syu --noconfirm --needed \ sudo pacman -Syu --noconfirm --needed \
hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \ hyprland hyprcursor wl-clipboard hyprpaper hyprlock wofi kitty dunst \
nwg-dock-hyprland nwg-drawer nwg-menu nwg-look \ 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 hyprpolkitagent pavucontrol playerctl wf-recorder sound-theme-freedesktop
# 3. Enable essential services # 3. Enable essential services
echo "Enabling essential services..." log "Enabling essential services..."
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
sudo systemctl disable getty@tty1.service || true sudo systemctl disable getty@tty1.service || true
sudo systemctl enable ly@tty1.service sudo systemctl enable ly@tty1.service
sudo systemctl enable udisks2.service sudo systemctl enable udisks2.service
# 4. Install AUR packages # 4. Install AUR packages
echo "Installing AUR packages..." log "Installing AUR packages..."
rustup default stable rustup default stable
yay -Syu --answerdiff None --answerclean All --noconfirm \ yay -Syu --answerdiff None --answerclean All --noconfirm \
hyprland-workspaces vicinae-bin bluetuith wvkbd iwmenu pinta \ hyprland-workspaces vicinae-bin bluetuith wvkbd iwmenu pinta \
@ -43,7 +44,7 @@ yay -Syu --answerdiff None --answerclean All --noconfirm \
wofi-calc bri chamel wofi-calc bri chamel
# 5. EWW bar selection and compilation # 5. EWW bar selection and compilation
echo "Setting up EWW bar..." log "Setting up EWW bar..."
rm -rf ~/.config/eww rm -rf ~/.config/eww
read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit read -n1 -p "Install eww bar for PC, Notebook or Tablet [P/N/T]: " doit
echo echo
@ -51,10 +52,10 @@ case $doit in
n|N) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww/ ~/.config/ ;; n|N) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww/ ~/.config/ ;;
p|P) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww-nobattery/ ~/.config/eww ;; p|P) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww-nobattery/ ~/.config/eww ;;
t|T) cp -rf ~/Dotfiles/desktopenvs/hyprlua/eww-touch/ ~/.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 esac
echo "Compiling EWW..." log "Compiling EWW..."
mkdir -p ~/install-tmp mkdir -p ~/install-tmp
cd ~/install-tmp cd ~/install-tmp
git clone https://github.com/elkowar/eww git clone https://github.com/elkowar/eww
@ -65,6 +66,7 @@ sudo cp target/release/eww /usr/bin/
cd ~ cd ~
# 6. Theme and icon setup # 6. Theme and icon setup
log "Installing themes and icons..."
sudo cp -r ~/Dotfiles/gtk-themes/cyberqueer /usr/share/themes 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 ~/Dotfiles/desktopenvs/hyprlua/btop/themes/cyberqueer.theme /usr/share/btop/themes
sudo cp -f ~/Dotfiles/etc-ly-config.ini /etc/ly/config.ini 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' gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
# 7. Cursor setup # 7. Cursor setup
log "Installing cursor theme..."
mkdir -p ~/.icons mkdir -p ~/.icons
wget -O ~/install-tmp/Nordzy-cursors-lefthand.tar.gz \ 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 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/ tar -zxf ~/install-tmp/Nordzy-cursors-lefthand.tar.gz -C ~/.icons/
# 8. Enable Bluetooth and wireless services # 8. Enable Bluetooth and wireless services
log "Enabling Bluetooth and wireless services..."
sudo systemctl enable bluez sudo systemctl enable bluez
sudo systemctl enable bluetooth.service sudo systemctl enable bluetooth.service
sudo systemctl enable iwd.service sudo systemctl enable iwd.service
@ -90,7 +94,7 @@ sudo systemctl enable iwd.service
# hyprpm add https://github.com/hyprwm/hyprland-plugins # hyprpm add https://github.com/hyprwm/hyprland-plugins
# 10. Copy configs # 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) 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 for cfg in "${CONFIGS[@]}"; do
rm -rf ~/.config/"$cfg" rm -rf ~/.config/"$cfg"
@ -105,16 +109,18 @@ cp ~/Dotfiles/desktopenvs/hyprlua/hypr-usr/wallpaper.conf ~/.config/
cp ~/Dotfiles/colors.conf ~/.config/colors.conf cp ~/Dotfiles/colors.conf ~/.config/colors.conf
# 11. Wallpaper and resources # 11. Wallpaper and resources
log "Copying wallpaper and resources..."
mkdir -p ~/Pictures mkdir -p ~/Pictures
cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg cp ~/Dotfiles/resources/fflogo.svg ~/Pictures/fflogo.svg
wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg wget "https://cloud.abdelbaki.eu/apps/theming/image/background?v=15" -O ~/Pictures/background.jpg
# 12. Python venv for scripts # 12. Python venv for scripts
log "Setting up Python venv for scripts..."
python -m venv ~/.config/python-script python -m venv ~/.config/python-script
~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime ~/.config/python-script/bin/pip install speedtest-cli requests pint simpleeval parsedatetime
# 13. Udiskie icon fix # 13. Udiskie icon fix
echo "Applying Udiskie icon fix..." log "Applying Udiskie icon fix..."
PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status" PAPIRUS_DIR="/usr/share/icons/Papirus-Dark/status"
HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status" HICOLOR_DIR="/usr/share/icons/hicolor/scalable/status"
if [ -d "$PAPIRUS_DIR" ]; then 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 ln -sf "$PAPIRUS_DIR/checkbox-unchecked.svg" "$HICOLOR_DIR/udiskie-checkbox-unchecked.svg"
sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor sudo gtk-update-icon-cache -f -t /usr/share/icons/hicolor
else else
echo "Papirus-Dark not found — skipping udiskie icon fix." warn "Papirus-Dark not found — skipping udiskie icon fix."
fi fi
# 14. Enable udiskie # 14. Enable udiskie
log "Enabling udiskie service..."
sudo systemctl enable udiskie.service sudo systemctl enable udiskie.service
sudo systemctl start udiskie.service sudo systemctl start udiskie.service
# 15. Install config updater and theme script # 15. Install config updater and theme script
log "Installing config updater and theme script..."
mkdir -p ~/.config/config-updater 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/updater.conf ~/.config/config-updater/updater.conf
ln -sf ~/Dotfiles/desktopenvs/hyprlua/config-updater/update-configs.sh ~/update-configs.sh ln -sf ~/Dotfiles/desktopenvs/hyprlua/config-updater/update-configs.sh ~/update-configs.sh
cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh
chmod +x ~/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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
echo "=== KDE Plasma Installer ===" log "Installing KDE Plasma desktop..."
echo "[+] Installing KDE Plasma..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
plasma-meta \ plasma-meta \
sddm sddm-kcm \ sddm sddm-kcm \
@ -16,9 +15,9 @@ sudo pacman -S --noconfirm --needed \
power-profiles-daemon \ power-profiles-daemon \
flatpak flatpak
echo "[+] Enabling services..." log "Enabling services..."
sudo systemctl enable sddm.service sudo systemctl enable sddm.service
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
sudo systemctl enable bluetooth.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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
echo "=== LXQt Installer ===" log "Installing LXQt desktop..."
echo "[+] Installing LXQt..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
lxqt \ lxqt \
openbox obconf-qt \ openbox obconf-qt \
@ -17,9 +16,9 @@ sudo pacman -S --noconfirm --needed \
gvfs gvfs-smb gvfs-mtp \ gvfs gvfs-smb gvfs-mtp \
flatpak flatpak
echo "[+] Enabling services..." log "Enabling services..."
sudo systemctl enable sddm.service sudo systemctl enable sddm.service
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
sudo systemctl enable bluetooth.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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
echo "=== Sway Environment Installer ===" log "Starting Sway installer..."
# 1. Install packages # 1. Install packages
echo "Installing required packages..." log "Installing required packages..."
sudo pacman -Syu --noconfirm --needed \ sudo pacman -Syu --noconfirm --needed \
brightnessctl btop dmenu foot glfw grim \ brightnessctl btop dmenu foot glfw grim \
greetd-tuigreet gst-plugin-pipewire imagemagick iwd libpulse \ greetd-tuigreet gst-plugin-pipewire imagemagick iwd libpulse \
@ -18,15 +19,16 @@ sudo pacman -Syu --noconfirm --needed \
zram-generator zram-generator
# 2. Enable services # 2. Enable services
echo "Enabling services..." log "Enabling services..."
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
# 3. greetd config # 3. greetd config
log "Deploying greetd config..."
sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml
sudo systemctl enable greetd.service sudo systemctl enable greetd.service
# 4. Copy DE configs # 4. Copy DE configs
echo "Copying configs..." log "Copying Sway configs..."
CONFIGS=(sway alacritty) CONFIGS=(sway alacritty)
for cfg in "${CONFIGS[@]}"; do for cfg in "${CONFIGS[@]}"; do
rm -rf ~/.config/"$cfg" rm -rf ~/.config/"$cfg"
@ -37,4 +39,4 @@ cp ~/Dotfiles/colors.conf ~/.config/colors.conf
cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh cp ~/Dotfiles/apply-theme.sh ~/apply-theme.sh
chmod +x ~/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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../lib/logging.sh"
echo "=== XFCE Installer ===" log "Installing XFCE desktop..."
echo "[+] Installing XFCE..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
xfce4 xfce4-goodies \ xfce4 xfce4-goodies \
lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \ lightdm lightdm-gtk-greeter lightdm-gtk-greeter-settings \
@ -15,9 +14,9 @@ sudo pacman -S --noconfirm --needed \
gvfs gvfs-smb gvfs-mtp \ gvfs gvfs-smb gvfs-mtp \
flatpak flatpak
echo "[+] Enabling services..." log "Enabling services..."
sudo systemctl enable lightdm.service sudo systemctl enable lightdm.service
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
sudo systemctl enable bluetooth.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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh"
log "Installing core packages..."
sudo pacman -Syu --noconfirm --needed \ sudo pacman -Syu --noconfirm --needed \
7zip arch-install-scripts atftp atool \ 7zip arch-install-scripts atftp atool \
base base-devel bc bind bluez btrfs-progs btop \ 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 \ vim vnstat wget whois wireplumber wireless_tools wpa_supplicant wprs \
yazi zip unzip zram-generator yazi zip unzip zram-generator
log "Installing AUR packages..."
yay -S --aur --noconfirm --needed pamtester yay -S --aur --noconfirm --needed pamtester
log "Core packages installed."

View File

@ -1,16 +1,21 @@
#!/bin/bash #!/bin/bash
set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh"
#networkmanager setup log "Enabling NetworkManager..."
echo "enabling NetworkManager"
sudo systemctl enable NetworkManager.service sudo systemctl enable NetworkManager.service
#cron setup log "Enabling cronie..."
echo "enabling cronie"
sudo systemctl enable cronie.service sudo systemctl enable cronie.service
#greetd setup log "Deploying greetd config..."
echo "Installing greetd"
sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml sudo cp -f ~/Dotfiles/desktopenvs/hyprland/greetd-tuigreet/config.toml /etc/greetd/config.toml
sudo systemctl enable greetd.service sudo systemctl enable greetd.service
log "Enabling fail2ban..."
sudo systemctl enable fail2ban.service sudo systemctl enable fail2ban.service
log "Enabling udisks2..."
sudo systemctl enable udisks2.service 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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing anti-malware tools (clamav, clamtk, rkhunter)..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
clamav clamtk rkhunter clamav clamtk rkhunter
log "Installing chkrootkit (AUR)..."
yay -S --aur --noconfirm --needed chkrootkit yay -S --aur --noconfirm --needed chkrootkit
# initialise ClamAV database (first run) # initialise ClamAV database (first run)
if [[ ! -f /var/lib/clamav/main.cvd ]] && [[ ! -f /var/lib/clamav/main.cld ]]; then 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 sudo freshclam
else
skip "ClamAV database already present."
fi fi
# cron job: update virus definitions twice a day # cron job: update virus definitions twice a day
CRON_FILE=/etc/cron.d/freshclam CRON_FILE=/etc/cron.d/freshclam
if [[ ! -f "$CRON_FILE" ]]; then if [[ ! -f "$CRON_FILE" ]]; then
echo "Installing freshclam cron job..." log "Installing freshclam cron job (twice daily)..."
sudo tee "$CRON_FILE" > /dev/null <<'EOF' sudo tee "$CRON_FILE" > /dev/null <<'EOF'
# Update ClamAV virus definitions twice a day # Update ClamAV virus definitions twice a day
0 */12 * * * root /usr/bin/freshclam --quiet 2>/dev/null 0 */12 * * * root /usr/bin/freshclam --quiet 2>/dev/null
EOF EOF
sudo chmod 644 "$CRON_FILE" sudo chmod 644 "$CRON_FILE"
else
skip "freshclam cron job already configured."
fi fi
log "Anti-malware tools installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Ardour (professional DAW)..."
sudo pacman -S --noconfirm --needed ardour sudo pacman -S --noconfirm --needed ardour
log "Ardour installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Audacity (audio editor)..."
sudo pacman -S --noconfirm --needed audacity sudo pacman -S --noconfirm --needed audacity
log "Audacity installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Blender and POV-Ray..."
sudo pacman -S --noconfirm --needed blender povray sudo pacman -S --noconfirm --needed blender povray
log "Blender and POV-Ray installed."

View File

@ -1,6 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing btrfs-progs..."
sudo pacman -S --noconfirm --needed btrfs-progs sudo pacman -S --noconfirm --needed btrfs-progs
log "Installing butter (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm butter yay -S --answerdiff None --answerclean All --noconfirm butter
log "butter installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Cecilia (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm cecilia yay -S --answerdiff None --answerclean All --noconfirm cecilia
log "Cecilia installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Chromium..."
sudo pacman -S --noconfirm --needed chromium sudo pacman -S --noconfirm --needed chromium
log "Chromium installed."

View File

@ -1,9 +1,13 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Claude Code via npm..."
if ! command -v npm &>/dev/null; then if ! command -v npm &>/dev/null; then
log "Sourcing nvm to get npm..."
export NVM_DIR="$HOME/.nvm" export NVM_DIR="$HOME/.nvm"
[[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh" [[ -s "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
fi fi
npm install -g @anthropic-ai/claude-code npm install -g @anthropic-ai/claude-code
log "Claude Code installed."

View File

@ -1,17 +1,19 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 \ sudo pacman -S --noconfirm --needed \
cockpit \ cockpit \
cockpit-pcp \ cockpit-pcp \
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 \ yay -S --answerdiff None --answerclean All --noconfirm \
cockpit-machines \ cockpit-machines \
cockpit-podman \ cockpit-podman \
cockpit-navigator cockpit-navigator
log "Enabling Cockpit socket..."
sudo systemctl enable 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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Code::Blocks..."
sudo pacman -S --noconfirm --needed codeblocks sudo pacman -S --noconfirm --needed codeblocks
log "Code::Blocks installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing croc (file transfer)..."
sudo pacman -S --noconfirm --needed croc sudo pacman -S --noconfirm --needed croc
log "croc installed."

View File

@ -1,6 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing pgcli..."
sudo pacman -S --noconfirm --needed pgcli sudo pacman -S --noconfirm --needed pgcli
log "Installing mycli (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm mycli yay -S --answerdiff None --answerclean All --noconfirm mycli
log "DB clients installed."

View File

@ -1,6 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing ddrescue..."
sudo pacman -S --noconfirm --needed ddrescue sudo pacman -S --noconfirm --needed ddrescue
log "Installing f3 (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm f3 yay -S --answerdiff None --answerclean All --noconfirm f3
log "Disk recovery tools installed."

View File

@ -1,7 +1,14 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 sudo pacman -S --noconfirm --needed docker docker-compose
log "Enabling Docker service..."
sudo systemctl enable docker.service sudo systemctl enable docker.service
log "Adding $USER to docker group..."
sudo usermod -aG docker "$USER" 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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
# chocolate-doom: faithful vanilla Doom port; freedoom: free game data (playable without IWADs) # 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 sudo pacman -S --noconfirm --needed chocolate-doom freedoom
log "Doom installed."

View File

@ -1,6 +1,9 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing FFmpeg extras (thumbnailer + GStreamer codecs)..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
ffmpeg ffmpegthumbnailer \ ffmpeg ffmpegthumbnailer \
gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-libav gst-plugins-good gst-plugins-bad gst-plugins-ugly
log "FFmpeg extras installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Firefox..."
sudo pacman -S --noconfirm --needed firefox sudo pacman -S --noconfirm --needed firefox
log "Firefox installed."

View File

@ -1,5 +1,8 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Starting FreeIPA client installer..."
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FREEIPA_DIR="$SCRIPT_DIR/../../FreeipaAnsible" FREEIPA_DIR="$SCRIPT_DIR/../../FreeipaAnsible"

View File

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
# freeipa-image-builder.sh — build a FreeIPA server image for multiple targets # 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): # Targets (TUI chooser):
# docker Build Docker/Podman image and optionally push to a registry # 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. # and optionally auto-enroll-ansible.sh) ready for distribution.
set -euo pipefail 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' 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' BLUE='\033[0;34m'; CYAN='\033[0;36m'; MAGENTA='\033[0;35m'; NC='\033[0m'

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Geany and plugins..."
sudo pacman -S --noconfirm --needed geany geany-plugins sudo pacman -S --noconfirm --needed geany geany-plugins
log "Geany installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing GIMP..."
sudo pacman -S --noconfirm --needed gimp sudo pacman -S --noconfirm --needed gimp
log "GIMP installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Gnuplot..."
sudo pacman -S --noconfirm --needed gnuplot sudo pacman -S --noconfirm --needed gnuplot
log "Gnuplot installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Himalaya (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm himalaya-bin yay -S --answerdiff None --answerclean All --noconfirm himalaya-bin
log "Himalaya installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing ImageMagick..."
sudo pacman -S --noconfirm --needed imagemagick sudo pacman -S --noconfirm --needed imagemagick
log "ImageMagick installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Inkscape..."
sudo pacman -S --noconfirm --needed inkscape sudo pacman -S --noconfirm --needed inkscape
log "Inkscape installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 sudo pacman -S --noconfirm --needed kubectl podman-desktop
log "Kubernetes tools installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Kate..."
sudo pacman -S --noconfirm --needed kate sudo pacman -S --noconfirm --needed kate
log "Kate installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Kdenlive..."
sudo pacman -S --noconfirm --needed kdenlive sudo pacman -S --noconfirm --needed kdenlive
log "Kdenlive installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Krita..."
sudo pacman -S --noconfirm --needed krita sudo pacman -S --noconfirm --needed krita
log "Krita installed."

View File

@ -1,16 +1,16 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
# lamco-rdp-server — native Wayland RDP server (Rust, H.264, VA-API) # lamco-rdp-server — native Wayland RDP server (Rust, H.264, VA-API)
# Builds from AUR; requires cargo, clang, cmake, nasm (auto-pulled as makedeps) # 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 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 systemctl --user enable lamco-rdp-server.service
echo "lamco-rdp-server enabled as a user service." log "lamco-rdp-server enabled as a user service."
echo "Start it with: systemctl --user start lamco-rdp-server" log "Start it with: systemctl --user start lamco-rdp-server"
echo "Or launch the GUI tray: lamco-rdp-server-gui" log "Or launch the GUI tray: lamco-rdp-server-gui"
echo "" warn "Install a matching xdg-desktop-portal for your compositor: xdg-desktop-portal-hyprland / -wlr / -gnome / -kde"
echo "Optional: install a matching xdg-desktop-portal for your compositor:"
echo " xdg-desktop-portal-hyprland / -wlr / -gnome / -kde"

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LibreWolf (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm librewolf-bin yay -S --answerdiff None --answerclean All --noconfirm librewolf-bin
log "LibreWolf installed."

View File

@ -1,7 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
# Provides standalone llama-cli, llama-server, and related tools. # Provides standalone llama-cli, llama-server, and related tools.
# Ollama bundles its own copy of llama.cpp internally — the two coexist # Ollama bundles its own copy of llama.cpp internally — the two coexist
# at the package level but share GPU resources at runtime. # at the package level but share GPU resources at runtime.
log "Installing llama.cpp (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm llama-cpp yay -S --answerdiff None --answerclean All --noconfirm llama-cpp
log "llama.cpp installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LMMS..."
sudo pacman -S --noconfirm --needed lmms sudo pacman -S --noconfirm --needed lmms
log "LMMS installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LocalSend (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm localsend yay -S --answerdiff None --answerclean All --noconfirm localsend
log "LocalSend installed."

View File

@ -1,8 +1,11 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing LocalTunnel..."
if command -v npm &>/dev/null; then if command -v npm &>/dev/null; then
npm install -g localtunnel npm install -g localtunnel
else else
yay -S --answerdiff None --answerclean All --noconfirm localtunnel yay -S --answerdiff None --answerclean All --noconfirm localtunnel
fi fi
log "LocalTunnel installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Min browser (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm min yay -S --answerdiff None --answerclean All --noconfirm min
log "Min browser installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Mixxx (DJ software)..."
sudo pacman -S --noconfirm --needed mixxx sudo pacman -S --noconfirm --needed mixxx
log "Mixxx installed."

View File

@ -1,10 +1,17 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing MariaDB..."
sudo pacman -S --noconfirm --needed mariadb sudo pacman -S --noconfirm --needed mariadb
if [[ ! -d /var/lib/mysql/mysql ]]; then if [[ ! -d /var/lib/mysql/mysql ]]; then
log "Initialising MariaDB data directory..."
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
else
skip "MariaDB data directory already initialised."
fi fi
log "Enabling MariaDB service..."
sudo systemctl enable --now mariadb.service sudo systemctl enable --now mariadb.service
log "MariaDB installed and running."

View File

@ -1,6 +1,9 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing networking CLI tools..."
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
httpie ipcalc mitmproxy mtr net-tools nethogs \ httpie ipcalc mitmproxy mtr net-tools nethogs \
nmap tcpdump traceroute nmap tcpdump traceroute
log "Networking CLI tools installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Nyxt browser (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm nyxt yay -S --answerdiff None --answerclean All --noconfirm nyxt
log "Nyxt installed."

View File

@ -1,12 +1,15 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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. # 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. # The base package runs on CPU and auto-uses GPU libs if present at runtime.
log "Installing Ollama..."
sudo pacman -S --noconfirm --needed ollama sudo pacman -S --noconfirm --needed ollama
log "Enabling Ollama service..."
sudo systemctl enable --now ollama.service sudo systemctl enable --now ollama.service
echo "Ollama running on http://localhost:11434" log "Ollama running on http://localhost:11434"
echo "Pull models with: ollama pull <model>" log "Pull models with: ollama pull <model>"
echo "Note: if llama.cpp is also installed, avoid running both GPU-bound at once." warn "If llama.cpp is also installed, avoid running both GPU-bound at once."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing OnlyOffice (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm onlyoffice-bin yay -S --answerdiff None --answerclean All --noconfirm onlyoffice-bin
log "OnlyOffice installed."

View File

@ -1,10 +1,13 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
# Open WebUI — browser UI for Ollama and other LLM backends. # Open WebUI — browser UI for Ollama and other LLM backends.
# Ollama module should be installed first for full functionality. # Ollama module should be installed first for full functionality.
log "Installing Open WebUI (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm open-webui yay -S --answerdiff None --answerclean All --noconfirm open-webui
log "Enabling Open WebUI service..."
sudo systemctl enable --now 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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing OpenArena..."
sudo pacman -S --noconfirm --needed openarena sudo pacman -S --noconfirm --needed openarena
log "OpenArena installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing OpenShot..."
sudo pacman -S --noconfirm --needed openshot sudo pacman -S --noconfirm --needed openshot
log "OpenShot installed."

View File

@ -1,7 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 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" 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 #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing PrismLauncher (Flatpak)..."
flatpak install -y flathub org.prismlauncher.PrismLauncher flatpak install -y flathub org.prismlauncher.PrismLauncher
log "PrismLauncher installed."

View File

@ -1,6 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing taskwarrior..."
sudo pacman -S --noconfirm --needed task sudo pacman -S --noconfirm --needed task
log "Installing watson and jrnl (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm watson python-jrnl yay -S --answerdiff None --answerclean All --noconfirm watson python-jrnl
log "Productivity tools installed."

View File

@ -1,7 +1,8 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 \ sudo pacman -S --noconfirm --needed \
qemu-full \ qemu-full \
libvirt \ libvirt \
@ -13,10 +14,12 @@ sudo pacman -S --noconfirm --needed \
swtpm \ swtpm \
vde2 vde2
log "Enabling libvirtd service..."
sudo systemctl enable --now 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 sudo virsh net-autostart default 2>/dev/null || true
log "Adding $USER to libvirt and kvm groups..."
sudo usermod -aG libvirt,kvm "$USER" 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 #!/bin/bash
set -euo pipefail 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 \ sudo pacman -S --noconfirm --needed \
remmina \ remmina \
freerdp \ freerdp \
libvncserver libvncserver
log "Remmina installed with RDP (freerdp) and VNC support."
echo "Remmina installed with RDP (freerdp) and VNC support."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Sauerbraten (Cube 2 FPS)..."
sudo pacman -S --noconfirm --needed sauerbraten sudo pacman -S --noconfirm --needed sauerbraten
log "Sauerbraten installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Shotcut..."
sudo pacman -S --noconfirm --needed shotcut sudo pacman -S --noconfirm --needed shotcut
log "Shotcut installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing SoX (audio processing toolkit)..."
sudo pacman -S --noconfirm --needed sox sudo pacman -S --noconfirm --needed sox
log "SoX installed."

View File

@ -1,6 +1,14 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Spotify launcher..."
sudo pacman -S --noconfirm --needed 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 curl -fsSL https://raw.githubusercontent.com/spicetify/cli/main/install.sh | sh
log "Deploying Spicetify config..."
rm -rf ~/.config/spicetify rm -rf ~/.config/spicetify
cp -r ~/Dotfiles/desktopenvs/hyprland/spicetify ~/.config/ cp -r ~/Dotfiles/desktopenvs/hyprland/spicetify ~/.config/
log "Spotify installed with Spicetify theming."

View File

@ -1,14 +1,17 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing OpenSSH server..."
sudo pacman -S --noconfirm --needed openssh 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 SSHD_CONF=/etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONF" sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' "$SSHD_CONF"
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONF" sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONF"
sudo sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' "$SSHD_CONF" sudo sed -i 's/^#\?PubkeyAuthentication.*/PubkeyAuthentication yes/' "$SSHD_CONF"
log "Enabling sshd service..."
sudo systemctl enable sshd.service sudo systemctl enable sshd.service
echo "SSH server installed and enabled (key auth only, root login disabled)." log "SSH server installed and enabled (key auth only, root login disabled)."
echo "Add your public key to ~/.ssh/authorized_keys before first use." warn "Add your public key to ~/.ssh/authorized_keys before first use."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Steam..."
sudo pacman -S --noconfirm --needed steam sudo pacman -S --noconfirm --needed steam
log "Steam installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Stunt Rally (Flatpak)..."
flatpak install -y flathub io.github.stuntrally.StuntRally3 flatpak install -y flathub io.github.stuntrally.StuntRally3
log "Stunt Rally installed."

View File

@ -1,6 +1,10 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing bastet (Tetris CLI)..."
sudo pacman -S --noconfirm --needed bastet sudo pacman -S --noconfirm --needed bastet
log "Installing vitetris (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm vitetris yay -S --answerdiff None --answerclean All --noconfirm vitetris
log "Tetris CLI tools installed."

View File

@ -1,9 +1,13 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Timeshift and cronie..."
sudo pacman -S --noconfirm --needed timeshift 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 yay -S --answerdiff None --answerclean All --noconfirm timeshift-autosnap
log "Enabling cronie service..."
sudo systemctl enable --now cronie.service sudo systemctl enable --now cronie.service
log "Timeshift installed with autosnap on pacman transactions."

View File

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 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 --now tlp.service
sudo systemctl enable NetworkManager-dispatcher.service sudo systemctl enable NetworkManager-dispatcher.service
sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket sudo systemctl mask systemd-rfkill.service systemd-rfkill.socket
log "TLP installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 yay -S --answerdiff None --answerclean All --noconfirm toot
log "toot installed."

View File

@ -1,6 +1,12 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Vesktop (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm vesktop yay -S --answerdiff None --answerclean All --noconfirm vesktop
log "Deploying Vencord config..."
rm -rf ~/.config/Vencord ~/.config/vesktop rm -rf ~/.config/Vencord ~/.config/vesktop
cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/ cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/
cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/vesktop cp -r ~/Dotfiles/desktopenvs/hyprland/Vencord ~/.config/vesktop
log "Vesktop installed with Vencord theme."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Vintage Story (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm vintagestory yay -S --answerdiff None --answerclean All --noconfirm vintagestory
log "Vintage Story installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing VSCodium (AUR)..."
yay -S --answerdiff None --answerclean All --noconfirm vscodium-bin yay -S --answerdiff None --answerclean All --noconfirm vscodium-bin
log "VSCodium installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Wireshark..."
sudo pacman -S --noconfirm --needed wireshark-qt sudo pacman -S --noconfirm --needed wireshark-qt
log "Wireshark installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Xournal++ (PDF annotator)..."
sudo pacman -S --noconfirm --needed xournalpp sudo pacman -S --noconfirm --needed xournalpp
log "Xournal++ installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing yt-dlp (media downloader)..."
sudo pacman -S --noconfirm --needed yt-dlp sudo pacman -S --noconfirm --needed yt-dlp
log "yt-dlp installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/../../lib/logging.sh"
log "Installing Zed editor..."
sudo pacman -S --noconfirm --needed zed sudo pacman -S --noconfirm --needed zed
log "Zed installed."

View File

@ -1,3 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 yay -S --answerdiff None --answerclean All --noconfirm zen-browser-bin
log "Zen Browser installed."

View File

@ -1,2 +1,7 @@
#!/bin/bash #!/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 sudo pacman -Syu python pyright python-pynvim python-pipx
log "Python tools installed."

View File

@ -1,4 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 yay -S --answerdiff None --answerclean All --noconfirm wprs-git
log "wprs installed."

View File

@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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 yay -S --answerdiff None --answerclean All --noconfirm zfs-dkms
log "ZFS installed."

View File

@ -1,35 +1,39 @@
#!/bin/bash #!/bin/bash
set -euo pipefail set -euo pipefail
source "$(dirname "${BASH_SOURCE[0]}")/lib/logging.sh"
log "Updating system and installing Flatpak..."
sudo pacman -Syu --noconfirm --needed flatpak sudo pacman -Syu --noconfirm --needed flatpak
# yay # yay
if ! command -v yay &>/dev/null; then if ! command -v yay &>/dev/null; then
echo "Installing yay..." log "Installing yay..."
mkdir -p ~/install-tmp mkdir -p ~/install-tmp
git clone https://aur.archlinux.org/yay.git ~/install-tmp/yay git clone https://aur.archlinux.org/yay.git ~/install-tmp/yay
cd ~/install-tmp/yay cd ~/install-tmp/yay
makepkg -si --noconfirm makepkg -si --noconfirm
cd ~ cd ~
else else
echo "yay already installed." skip "yay already installed."
fi fi
# rustup / rust # rustup / rust
if ! command -v rustup &>/dev/null; then if ! command -v rustup &>/dev/null; then
echo "Installing rustup..." log "Installing rustup..."
sudo pacman -S --noconfirm --needed rustup sudo pacman -S --noconfirm --needed rustup
fi fi
rustup default stable rustup default stable
# nvm + Node.js # nvm + Node.js
if ! command -v node &>/dev/null; then 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 if [ ! -d "$HOME/.nvm" ]; then
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.2/install.sh | bash
fi fi
. "$HOME/.nvm/nvm.sh" . "$HOME/.nvm/nvm.sh"
nvm install 22 nvm install 22
else else
echo "Node.js already installed: $(node -v)" skip "Node.js already installed: $(node -v)"
fi fi
log "Package managers ready."

View File

@ -1,18 +1,11 @@
#!/bin/bash #!/bin/bash
set -euo pipefail 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..." log "Updating system..."
sudo pacman -Syu --noconfirm 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) 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 for pkg in "${PACKAGES[@]}"; do
if ! pacman -Qi "$pkg" &>/dev/null; then if ! pacman -Qi "$pkg" &>/dev/null; then
@ -55,10 +48,9 @@ else
skip "Node.js already installed." skip "Node.js already installed."
fi fi
# git config log "Configuring git..."
git config --global core.editor nvim git config --global core.editor nvim
# Dotfiles
log "Deploying dotfiles..." log "Deploying dotfiles..."
mkdir -p ~/.config ~/Pictures mkdir -p ~/.config ~/Pictures
@ -69,9 +61,6 @@ ln -sf ~/Dotfiles/starship.toml ~/.config/starship.toml
rm -rf ~/.config/micro rm -rf ~/.config/micro
cp -r ~/Dotfiles/micro ~/.config/ 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 rm -rf ~/.config/nvim
ln -sf ~/Dotfiles/nvim ~/.config/nvim ln -sf ~/Dotfiles/nvim ~/.config/nvim
@ -91,7 +80,7 @@ else
skip "Starship already installed." skip "Starship already installed."
fi fi
# oh-my-zsh (RUNZSH=no prevents installer from spawning a new shell) # oh-my-zsh
if [ ! -d "$HOME/.oh-my-zsh" ]; then if [ ! -d "$HOME/.oh-my-zsh" ]; then
log "Installing oh-my-zsh..." log "Installing oh-my-zsh..."
RUNZSH=no CHSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 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 # oh-my-zsh plugins
ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}" ZSH_CUSTOM="${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}"
if [ ! -d "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" ]; then 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 \ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git \
"$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting"
else else
skip "zsh-syntax-highlighting already installed." skip "zsh-syntax-highlighting already installed."
fi fi
if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then
log "Installing zsh-autosuggestions..."
git clone https://github.com/zsh-users/zsh-autosuggestions \ git clone https://github.com/zsh-users/zsh-autosuggestions \
"$ZSH_CUSTOM/plugins/zsh-autosuggestions" "$ZSH_CUSTOM/plugins/zsh-autosuggestions"
else else