diff --git a/v2/arch-minimal.sh b/v2/arch-minimal.sh new file mode 100755 index 0000000..4e06803 --- /dev/null +++ b/v2/arch-minimal.sh @@ -0,0 +1,74 @@ +#!/bin/bash +set -euo pipefail + +########################## +# Color helpers (printf-safe, no tput) +########################## +RED="\033[0;31m" +GREEN="\033[0;32m" +YELLOW="\033[0;33m" +CYAN="\033[0;36m" +GRAY="\033[0;37m" +BOLD="\033[1m" +RESET="\033[0m" + +# Disable colors if output is not a terminal +if [ ! -t 1 ]; then + RED="" GREEN="" YELLOW="" CYAN="" GRAY="" BOLD="" RESET="" +fi + +say_red() { printf "\n"; printf "%b%s%b\n" "$RED" "$*" "$RESET"; } +say_green() { printf "\n"; printf "%b%s%b\n" "$GREEN" "$*" "$RESET"; } +say_yellow() { printf "\n"; printf "%b%s%b\n" "$YELLOW" "$*" "$RESET"; } +say_cyan() { printf "\n"; printf "%b%s%b\n" "$CYAN" "$*" "$RESET"; } +say_gray() { printf "\n"; printf "%b%s%b\n" "$GRAY" "$*" "$RESET"; } +say_bold() { printf "\n"; printf "%b%s%b\n" "$BOLD" "$*" "$RESET"; } + +########################## +# Use exported variables from main detection script +########################## +OS="${DETECTED_OS:-debian}" +DDE="${DETECTED_DE}" +DE="${SELECTED_DE:-none}" +TWM="${SELECTED_TWM:-none}" +INSTALL_LEVEL="${INSTALL_LEVEL:-minimal}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +########################## +# Helper functions +########################## +install_packages() { sudo pacman -Sy; sudo pacman -S --noconfirm --needed "$1"; } +is_package_installed() { pacman -Qi "$1" &>/dev/null; } +remove_packages() { sudo pacman -Rs --noconfirm "$1"; } + +say_yellow "Starting minimal setup..." + +# Create user directories +mkdir -p "$HOME"/{.bin,.fonts,.icons,.themes,DATA} "$HOME/.local/share/"{icons,themes,applications} "$HOME/.config/"{autostart,gtk-{3.0,4.0},variety,fish,neofetch} + +# Install essential tools +install_packages wget curl nano fastfetch lolcat bash-completion starship alacritty hwinfo lshw man-db tree xdg-user-dirs rsync time bat chrony unzip chromium + +# Optionally handle fonts +FONT_DIR="$HOME/.local/share/fonts" +FONT_NAME="RobotoMonoNerdFont" # Changed name to reflect the installed files +FONT_ZIP="/tmp/RobotoMono.zip" # Use original ZIP name for download +DOWNLOAD_NAME="RobotoMono" +if ! find "$FONT_DIR" -name "${FONT_NAME}*.ttf" -print -quit 2>/dev/null; then + say_yellow "Installing ${DOWNLOAD_NAME} Nerd Font..." + mkdir -p "$FONT_DIR" + curl -L "https://github.com/ryanoasis/nerd-fonts/releases/latest/download/${DOWNLOAD_NAME}.zip" -o "$FONT_ZIP" + unzip -oq "$FONT_ZIP" -d "$FONT_DIR" + fc-cache -fv + rm "$FONT_ZIP" + say_green "${DOWNLOAD_NAME} installed." +else + say_yellow "${DOWNLOAD_NAME} Nerd Font is already installed in $FONT_DIR. Skipping installation." +fi + +# Enable basic services +sudo systemctl enable chrony +sudo systemctl enable fstrim.timer + +# End of script +say_green "Minimal setup completed." \ No newline at end of file diff --git a/v2/arch-xfce.sh b/v2/arch-xfce.sh new file mode 100755 index 0000000..649ea04 --- /dev/null +++ b/v2/arch-xfce.sh @@ -0,0 +1,108 @@ +#!/bin/bash +set -euo pipefail + +########################## +# Color helpers (printf-safe, no tput) +########################## +RED="\033[0;31m" +GREEN="\033[0;32m" +YELLOW="\033[0;33m" +CYAN="\033[0;36m" +GRAY="\033[0;37m" +BOLD="\033[1m" +RESET="\033[0m" + +# Disable colors if output is not a terminal +if [ ! -t 1 ]; then + RED="" GREEN="" YELLOW="" CYAN="" GRAY="" BOLD="" RESET="" +fi + +say_red() { printf "\n"; printf "%b%s%b\n" "$RED" "$*" "$RESET"; } +say_green() { printf "\n"; printf "%b%s%b\n" "$GREEN" "$*" "$RESET"; } +say_yellow() { printf "\n"; printf "%b%s%b\n" "$YELLOW" "$*" "$RESET"; } +say_cyan() { printf "\n"; printf "%b%s%b\n" "$CYAN" "$*" "$RESET"; } +say_gray() { printf "\n"; printf "%b%s%b\n" "$GRAY" "$*" "$RESET"; } +say_bold() { printf "\n"; printf "%b%s%b\n" "$BOLD" "$*" "$RESET"; } + +########################## +# Use exported variables from main detection script +########################## +OS="${DETECTED_OS}" +DDE="${DETECTED_DE}" +DE="${SELECTED_DE:-none}" +TWM="${SELECTED_TWM:-none}" +INSTALL_LEVEL="${INSTALL_LEVEL:-minimal}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + +########################## +# Helper functions +########################## +install_packages() { + sudo pacman -S --noconfirm --needed "$1" +} + +remove_packages() { + sudo pacman -Rs --noconfirm "$1" +} + +is_package_installed() { + pacman -Qi "$1" &>/dev/null +} + +detect_de() { + if command -v xfce4-session >/dev/null 2>&1; then + echo "xfce" + else + echo "" + fi +} + +detect_display_manager() { + if [ -f /etc/X11/default-display-manager ]; then + basename "$(cat /etc/X11/default-display-manager)" + else + echo "" + fi +} + +enable_graphical_target() { + sudo systemctl enable sddm + sudo systemctl set-default graphical.target +} + +########################## +# Start installation +########################## +say_yellow -e "Starting XFCE installation..." + +CURRENT_DE="$(detect_de)" +CURRENT_DM="$(detect_display_manager)" + +if [[ -z "$CURRENT_DE" ]]; then + say_cyan -e "No Desktop Environment detected. Installing XFCE (light setup with SDDM)..." + + install_packages sddm xfce4 xfce4-goodies + enable_graphical_target + + say_green -e "XFCE with SDDM installed successfully. You can reboot now to start XFCE." +else + say_cyan -e "Detected existing Desktop Environment: $CURRENT_DE" + + if [[ "$CURRENT_DM" == "lightdm" ]]; then + say_yellow -e "LightDM is currently active. Replacing with SDDM..." + + sudo systemctl disable lightdm + sudo apt purge -y lightdm lightdm-gtk-greeter + + install_packages sddm + enable_graphical_target + + say_green -e "LightDM removed and replaced with SDDM." + else + say_cyan -e "Current display manager: ${CURRENT_DM:-none}. Leaving unchanged." + fi +fi + +# End of script +say_green -e "XFCE / SDDM setup completed." + diff --git a/v2/arch.sh b/v2/arch.sh index 5d0a2ad..eb74c53 100755 --- a/v2/arch.sh +++ b/v2/arch.sh @@ -2,25 +2,27 @@ set -euo pipefail ########################## -# Color helpers (no tput) +# Color helpers (printf-safe, no tput) ########################## -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[0;33m' -CYAN='\033[0;36m' -BOLD='\033[1m' -RESET='\033[0m' +RED="\033[0;31m" +GREEN="\033[0;32m" +YELLOW="\033[0;33m" +CYAN="\033[0;36m" +GRAY="\033[0;37m" +BOLD="\033[1m" +RESET="\033[0m" # Disable colors if output is not a terminal if [ ! -t 1 ]; then - RED='' GREEN='' YELLOW='' CYAN='' BOLD='' RESET='' + RED="" GREEN="" YELLOW="" CYAN="" GRAY="" BOLD="" RESET="" fi -color_red() { printf '%b' "$RED"; } -color_green() { printf '%b' "$GREEN"; } -color_yellow() { printf '%b' "$YELLOW"; } -color_cyan() { printf '%b' "$CYAN"; } -color_reset() { printf '%b' "$RESET"; } +say_red() { printf "\n"; printf "%b%s%b\n" "$RED" "$*" "$RESET"; } +say_green() { printf "\n"; printf "%b%s%b\n" "$GREEN" "$*" "$RESET"; } +say_yellow() { printf "\n"; printf "%b%s%b\n" "$YELLOW" "$*" "$RESET"; } +say_cyan() { printf "\n"; printf "%b%s%b\n" "$CYAN" "$*" "$RESET"; } +say_gray() { printf "\n"; printf "%b%s%b\n" "$GRAY" "$*" "$RESET"; } +say_bold() { printf "\n"; printf "%b%s%b\n" "$BOLD" "$*" "$RESET"; } ########################## # Use exported variables from main detection script @@ -30,13 +32,25 @@ DDE="${DETECTED_DE}" DE="${SELECTED_DE:-none}" TWM="${SELECTED_TWM:-none}" INSTALL_LEVEL="${INSTALL_LEVEL:-minimal}" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -color_cyan echo -echo "Starting Arch Linux setup..." -color_reset +say_cyan "Starting Debian setup..." echo -echo "DE: $DE, TWM: $TWM, Install Level: $INSTALL_LEVEL" +say_gray "DE: $DE, TWM: $TWM, Install Level: $INSTALL_LEVEL" + +########################## +# Helper functions +########################## +install_packages() { + local packages=("$@") + sudo apt update + sudo apt install -y --no-install-recommends "${packages[@]}" +} + +is_package_installed() { + dpkg -s "$1" &>/dev/null +} ########################## # 0. Ensure base is ready for installation @@ -45,149 +59,120 @@ installed_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" pkg_dir="packages" if [[ ! -d "$pkg_dir" ]]; then - echo "Directory not found: $pkg_dir" + say_red "Directory not found: $pkg_dir" exit 1 fi if ! command -v curl >/dev/null 2>&1; then - color_yellow - echo - echo "curl is not installed. Installing..." - color_reset - sudo pacman -Sy --noconfirm curl + say_yellow "curl is not installed. Installing..." + sudo pacman -Sy + install_packages curl fi # Install all local packages using pacman find "$pkg_dir" -maxdepth 1 -name '*.pkg.tar.zst' -print0 | sudo xargs -0 pacman -U --noconfirm ########################## -# 1. Add repositories if missing +# 1. Add repositories if missing and update system ########################## -color_yellow -echo -echo "Checking pacman.conf and sources..." -color_reset - +say_yellow "Checking pacman.conf and sources..." sudo cp /etc/pacman.conf /etc/pacman.conf.bak.$(date +%s) sudo cp -v "$installed_dir/config-files/pacman.conf" /etc/pacman.conf # Update the system -color_green -echo -echo "################################################################################" -echo "Updating the system - sudo pacman -Syyu" -echo "################################################################################" -color_reset +say_gray "Updating the system - sudo pacman -Syyu" echo sudo pacman -Syyu --noconfirm ########################## -# Fix missing console font +# 2. Fix missing console font ########################## -color_yellow -echo -echo "################################################################" -echo "Fix missing console font" -echo "################################################################" -color_reset +say_yellow "Fix missing console font" if grep -q FONT= /etc/vconsole.conf; then - color_green - echo - echo "Font is already set in /etc/vconsole.conf" - color_reset + say_green "Font is already set in /etc/vconsole.conf" else - color_green - echo - echo "Setting console font in /etc/vconsole.conf" - color_reset + say_green "Setting console font in /etc/vconsole.conf" echo 'FONT=gr737c-8x14' | sudo tee -a /etc/vconsole.conf fi ########################## -# Detected OS / DE / TWM info +# 3. Detected OS / DE / TWM info ########################## -color_yellow -echo -echo "################################################################################" -echo "Detected OS / Desktop Environment / Tiling Window Manager" -echo "################################################################################" -color_reset +say_yellow "Detected OS / Desktop Environment / Tiling Window Manager" echo +say_gray "Installing OS-specific packages..." +say_gray "Selected DE: $DE" +say_gray "Selected TWM: $TWM" +say_gray "Installation Level: $INSTALL_LEVEL" -echo "Installing OS-specific packages..." -echo "Selected DE: $DE" -echo "Selected TWM: $TWM" -echo "Installation Level: $INSTALL_LEVEL" +########################## +# 4. Desktop Environment installation +########################## +case "$DE" in + xfce|plasma|gnome) + say_yellow "Preparing to install $DE..." + SCRIPT_NAME="$SCRIPT_DIR/${OS}-${DE}.sh" + if [[ -f "$SCRIPT_NAME" ]]; then + say_cyan "Running $SCRIPT_NAME..." + bash "$SCRIPT_NAME" + else + say_red "Error: $SCRIPT_NAME not found!" + exit 1 + fi + ;; + none) + say_gray "No Desktop Environment selected, skipping DE installation." + ;; +esac -# Desktop Environment installation -if [[ "$DE" == "xfce" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing XFCE4" - echo "################################################################################" - color_reset - echo "Installing XFCE packages..." -fi +########################## +# 5. Tiling Window Manager installation +########################## +case "$TWM" in + chadwm|hyprland) + say_yellow "Installing $TWM..." + SCRIPT_NAME="$SCRIPT_DIR/${OS}-${TWM}.sh" + if [[ -f "$SCRIPT_NAME" ]]; then + say_cyan "Running $SCRIPT_NAME..." + bash "$SCRIPT_NAME" + else + say_red "Error: $SCRIPT_NAME not found!" + exit 1 + fi + ;; + none) + say_gray "No tiling window manager selected." + ;; +esac -if [[ "$DE" == "plasma" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing KDE Plasma 6" - echo "################################################################################" - color_reset - echo "Installing Plasma packages..." -fi +########################## +# 6. Installation level handling +########################## +case "$INSTALL_LEVEL" in + minimal|full|workstation|server) + say_cyan "Installation level: $INSTALL_LEVEL" + SCRIPT_NAME="$SCRIPT_DIR/${OS}-${INSTALL_LEVEL}.sh" + if [[ -f "$SCRIPT_NAME" ]]; then + say_cyan "Running $SCRIPT_NAME..." + bash "$SCRIPT_NAME" + else + say_red "Error: $SCRIPT_NAME not found!" + exit 1 + fi + ;; +esac -if [[ "$DE" == "gnome" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing Gnome 48" - echo "################################################################################" - color_reset - echo "Installing Gnome packages..." -fi - -if [[ "$DE" == "none" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing no Desktop Environment" - echo "################################################################################" - color_reset - echo "Installing no Desktop Environment packages..." -fi - -# Tiling Window Manager installation -if [[ "$TWM" == "chadwm" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing Chadwm" - echo "################################################################################" - color_reset - echo "Installing CHADWM..." -fi - -if [[ "$TWM" == "hyprland" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing Hyprland" - echo "################################################################################" - color_reset - echo "Installing Hyprland..." -fi - -if [[ "$TWM" == "none" ]]; then - color_green - echo - echo "################################################################################" - echo "Installing no Tiling Window Manager" - echo "################################################################################" - color_reset - echo "Installing no Tiling Window Manager packages..." -fi +say_green "Arch setup complete." +say_red "The installation has finished. A reboot is recommended before continuing." +read -rp "Reboot now? [y/N]: " reboot_choice +case "${reboot_choice,,}" in + y|yes) + say_red "Rebooting now." + sudo reboot + ;; + *) + say_yellow "Skipping reboot. Make sure to reboot manually before continuing upgrades." + exit 0 + ;; +esac \ No newline at end of file diff --git a/v2/debian-xfce.sh b/v2/debian-xfce.sh index 436a974..5713917 100755 --- a/v2/debian-xfce.sh +++ b/v2/debian-xfce.sh @@ -90,7 +90,7 @@ else say_yellow -e "LightDM is currently active. Replacing with SDDM..." sudo systemctl disable lightdm - sudo apt purge -y lightdm lightdm-gtk-greeter + sudo pacman -Rns lightdm lightdm-gtk-greeter install_packages sddm enable_graphical_target