#!/usr/bin/env bash unset GUI if [[ "$(uname -s 2>/dev/null)" == Darwin ]]; then OS=macos GUI=1 elif [[ "$(lsb_release -i -s 2>/dev/null)" == Ubuntu ]]; then OS=ubuntu if dpkg -l ubuntu-desktop &>/dev/null; then GUI=1; fi elif [[ "$(lsb_release -i -s 2>/dev/null)" == ManjaroLinux ]]; then OS=manjaro if dpkg -l ubuntu-desktop &>/dev/null; then GUI=1; fi elif [[ "$(lsb_release -i -s 2>/dev/null)" == Debian ]]; then OS=debian # TODO detect GUI support in debian here else OS=unknown fi # Install dependencies based on file system function install_deps { # For macOS, just use Homebrew if [[ "$OS" == macos ]]; then if [[ -f Brewfile ]]; then echo '--- Installing dependencies via Homebrew' brew bundle fi return fi # Read dependencies local deps case "$OS" in debian) if [[ ! -f Debian ]]; then return; fi mapfile -t deps < Debian ;; ubuntu) if [[ ! -f Ubuntu ]]; then return; fi mapfile -t deps < Ubuntu ;; *) echo "!!! Unsupported OS to install dependencies: $OS" return 1 ;; esac # Filter dependencies based on criteria local exclude local cleanup if [[ -n "$GUI" ]]; then exclude=NOGUI cleanup=GUI else exclude=GUI cleanup=NOGUI fi deps=${deps[*]//*\($exclude\)/} deps=${deps//\($cleanup\)/} # Execute case $OS in debian | ubuntu) if ! dpkg-query -s $deps &>/dev/null; then echo '--- Installing dependencies via apt' sudo apt -y install $deps fi ;; esac if [[ $? -ne 0 ]]; then echo '!!! Failed to install dependencies' exit 1 fi } # Remove functions used only for installation function cleanup_helpers { unset -f cleanup_helpers unset -f install_deps }