#!/bin/bash

# Universal updater by Andrew Schott andrew@schotty.com
# Will detect and update via various packaging formats for distros I currently use.

# Globals
# edit as needed to set colors and soforth
# presuming echo thus tput is chosen here as default\

# tput text formatting
#   bold=bold          dim=dimmed
#   rev=reverse        bel=bell sound
#   smul=underline on  rmul=underline off
#   setaf=foreground   setab=background
#   sgr0=clear  
#
#  Colors
#     0 Black   1 Red      2 Green   3 Yellow
#     4 Blue    5 Magenta  6 Cyan    7  White
#
# Default is 
#   * green for a true finding
#   * yellow for a false finding
#   * clear at the end to resume normal output for said command's output

CMD_NOTIFY="tput rev bold setaf 7 setab 0"
CMD_TRUE="tput rev bold setaf 2 setab 0"
CMD_FALSE="tput rev bold setaf 1 setab 7"
CMD_CLEAR="tput sgr0"

echo $($CMD_NOTIFY)"Looking for native package managers"$($CMD_CLEAR)

# apt -- Debian and derivatives
if `which apt &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found apt.  Updating: ($(which apt))"$($CMD_CLEAR)
  sudo apt udate -y
  sudo apt upgrade -y
else
  echo $($CMD_FALSE)"apt not found/needed"$($CMD_CLEAR)
fi

# dnf -- RHEL 8+, Fedora, Openmandriva, and derivatives
if `which dnf &> /dev/null 2>&1`
then 
  echo $($CMD_TRUE)"Found dnf.  Updating: ($(which dnf))"$($CMD_CLEAR)
  sudo dnf --refresh --skip-broken --nobest -y update
else
  echo $($CMD_FALSE)"dnf not found/needed"$($CMD_CLEAR)
fi

# pacman -- arch & arch derivatives
if `which pacman &> /dev/null 2>&1`
then 
  echo $($CMD_TRUE)"Found pacman.  Updating: ($(which pacman))"$($CMD_CLEAR)
  sudo pacman -Syu
else
  echo $($CMD_FALSE)"pacman not found/needed"$($CMD_CLEAR)
fi

# yum -- RHEL 7 >  (Ignored if dnf is present)
if `which yum &> /dev/null 2>&1` && ! `which dnf &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found yum.  Updating: ($(which yum))"$($CMD_CLEAR)
  sudo yum --refresh --skip-broken --nobest -y update
else 
  echo $($CMD_FALSE)"yum not found/needed"$($CMD_CLEAR)
fi

# urpmi -- Mageia
if `which urpmi &> /dev/null 2>&1` && ! `which dnf &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found urpmi.  Updating: ($(which urpmi))"$($CMD_CLEAR)
  sudo urpmi --auto-update -y
else 
  echo $($CMD_FALSE)"urpmi not found/needed"$($CMD_CLEAR)
fi

# zypper -- SuSE products
if `which zypper &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found zypper.  Updating: ($(which zypper))"$($CMD_CLEAR)
  sudo zypper in -y
else
  echo $($CMD_FALSE)"zypper not found/needed"$($CMD_CLEAR)
fi

echo $($CMD_NOTIFY)"Looking for sandboxed package managers"$($CMD_CLEAR)

# flatpak
if `which flatpak &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found flatpak.  Updating: ($(which flatpak))"$($CMD_CLEAR)
  flatpak update --user -y
  sudo flatpak update -y
else
  echo $($CMD_FALSE)"flatpak not found/needed"$($CMD_CLEAR)
fi

# snap
if `which snap &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found snap.  Updating: ($(which snap))"$($CMD_CLEAR)
  sudo snap refresh -y
else
  echo $($CMD_FALSE)"snap not found/needed"$($CMD_CLEAR)
fi

# pip
if `which pip-review &> /dev/null 2>&1`
then
  echo $($CMD_TRUE)"Found pip-review.  Updating: ($(pip-review))"$($CMD_CLEAR)
  pip-review --auto --local --user
else
  echo $($CMD_FALSE)"pip-review not found/needed"$($CMD_CLEAR)
fi
