#!/usr/bin/env bash # Check for sudo if [ ! -f "/sbin/sudo" ]; then echo ":: Error: \"/sbin/sudo\" not found, please install sudo" exit 1 fi # Clear variables #PACMAN_FLAGS= INSTALL_GUI_PACKAGES= # Parse arguments for arg in "${@}"; do case "${arg}" in "--noconfirm") # I don't know what shellcheck is seeing here... # shellcheck disable=SC2037 PACMAN_FLAGS=${PACMAN_FLAGS} --noconfirm ;; "--gui") INSTALL_GUI_PACKAGES=true ;; *) echo ":: Warning: Unknown argument \"${arg}\"" esac done # Source /etc/os-release echo ":: Detecting distribution" if [ -f "/etc/os-release" ]; then # shellcheck disable=SC1091 source /etc/os-release fi # Perform actions based on distro case "$ID" in "arch") echo ":: Detected Arch Linux, installing packages automatically" # Check for paru if [ ! -f "/sbin/paru" ]; then echo ":: Error: \"/sbin/paru\" not found, please install paru" exit 1 fi # Install required packages (command line) # shellcheck disable=SC2086 paru --removemake --batchinstall --sudoloop --mflags "--ignorearch" -Syu --needed ${PACMAN_FLAGS} \ nano ncurses moar fireplace sl fortune-mod cowsay lolcat \ moar yt-dlp-git tar zstd bzip zip unrar unzip 7-zip \ rustup binutils base-devel cpupower # Install required packages packages (graphical) # shellcheck disable=SC2086 [[ -n "${INSTALL_GUI_PACKAGES}" ]] && \ paru --removemake --batchinstall --sudoloop --mflags "--ignorearch" -Syu --needed ${PACMAN_FLAGS} \ hyprland-git hyprpaper-git hyprlock hypridle waybar fnott \ bemenu-wayland cliphist j4-dmenu-desktop polkit-kde-agent \ polkit-qt6 xdg-desktop-portal-{hyprland-git,kde} \ qt6ct qt6-wayland qt5-wayland xwaylandvideobridge pipewire \ wireplumber # Install/update Rust toolchains and Rust-based software ( # Update installed toolchains rustup update # Install nightly and stable toolchains rustup install stable rustup install nightly # Switch to stable toolchain rustup default nightly # Install software cargo install eza cargo-audit ) # Install SDKMAN! and Java ( # Download & install SDKMAN! curl -s "https://get.sdkman.io" | bash # Initialize SDKMAN! for subshell export SDKMAN_DIR="$HOME/.sdkman" # shellcheck disable=SC1091 [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh" # Update SDKMAN! and installed candidates sdk selfupdate sdk update # Install Java versions specified in array # We use the Temurin distribution of Java. java_versions=( '22.0.1' '21.0.3' '17.0.11' '8.0.412' ) for version in "${java_versions[@]}"; do sdk install java "${version}-tem" done # Default to Java 21 sdk default java 21.0.3-tem ) # Install Hyprland plugins ( # Install Hyprland headers & update existing plugins hyprpm update # Add hyprland-plugins repository yes | hyprpm add https://github.com/hyprwm/hyprland-plugins # Enable plugins hyprpm enable csgo-vulkan-fix ) ;; "archarm") echo ":: Arch Linux ARM is not yet supported" echo " (but will soon be). Just wait a little!" ;; *) echo ":: Hmm... your distribution isn't supported" echo " You can do the following:" echo " - Create an issue" echo " - Look into the source for this script" echo " and install the required software yourself" ;; esac