251 lines
7.1 KiB
Bash
Executable File
251 lines
7.1 KiB
Bash
Executable File
#! /bin/bash
|
|
# Cross-distro package manager UI
|
|
|
|
RED="\e[31m"
|
|
GREEN="\e[32m"
|
|
YELLOW="\e[33m"
|
|
BLUE="\e[34m"
|
|
MAGENTA="\e[35m"
|
|
CYAN="\e[36m"
|
|
GRAY="\e[90m"
|
|
|
|
BOLD="\e[1m"
|
|
FAINT="\e[2m"
|
|
ITALIC="\e[3m"
|
|
UNDERLINE="\e[4m"
|
|
|
|
ENDCOLOR="\e[0m"
|
|
|
|
pcheck() {
|
|
local pms=()
|
|
if command -v flatpak >/dev/null 2>&1; then
|
|
pms+=("flatpak")
|
|
fi
|
|
if command -v nix >/dev/null 2>&1; then
|
|
pms+=("nix")
|
|
fi
|
|
if command -v brew >/dev/null 2>&1; then
|
|
pms+=("brew")
|
|
fi
|
|
if command -v apt >/dev/null 2>&1; then
|
|
pms+=("apt")
|
|
elif command -v pacman >/dev/null 2>&1; then
|
|
if command -v paru >/dev/null 2>&1; then
|
|
pms+=("paru")
|
|
fi
|
|
pms+=("pacman")
|
|
elif command -v dnf >/dev/null 2>&1; then
|
|
pms+=("dnf")
|
|
fi
|
|
echo "${pms[@]}"
|
|
}
|
|
|
|
p() (
|
|
packageManagers=($(pcheck))
|
|
|
|
updateP() {
|
|
if [[ ${packageManagers[@]} =~ "flatpak" ]]; then
|
|
flatpak update
|
|
flatpak uninstall --unused --delete-data
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "nix" ]]; then
|
|
nix-channel --update
|
|
sudo nix-channel --update
|
|
nix-collect-garbage --delete-older-than 7d
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "brew" ]]; then
|
|
brew update
|
|
brew doctor
|
|
brew upgrade
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "apt" ]]; then
|
|
sudo apt update
|
|
sudo apt upgrade
|
|
sudo apt dist-upgrade
|
|
sudo apt autoremove
|
|
sudo apt autoclean
|
|
elif [[ ${packageManagers[@]} =~ "pacman" ]]; then
|
|
sudo sed -i 's/^#ParallelDownloads/ParallelDownloads/' /etc/pacman.conf
|
|
if [[ ${packageManagers[@]} =~ "paru" ]]; then
|
|
paru -Syu
|
|
else
|
|
sudo pacman -Syu
|
|
fi
|
|
sudo pacman -Rsn $(pacman -Qdtq)
|
|
if [ ! "$(command -v reflector)" ]; then
|
|
sudo pacman -Sy --noconfirm reflector rsync curl
|
|
iso=$(curl -4 ifconfig.co/country-iso)
|
|
extra="FR"
|
|
sudo reflector -a 48 -c $iso -c $extra -f 5 -l 30 --verbose --sort rate --save /etc/pacman.d/mirrorlist
|
|
fi
|
|
if [ ! "$(command -v paccache)" ]; then
|
|
sudo pacman -Sy --noconfirm pacman-contrib
|
|
fi
|
|
paccache -rk1
|
|
elif [[ ${packageManagers[@]} =~ "dnf" ]]; then
|
|
sudo dnf upgrade --refresh
|
|
sudo dnf autoremove
|
|
fi
|
|
}
|
|
|
|
checkP() {
|
|
app_name=$(echo "$1" | tr '[:upper:]' '[:lower:]')
|
|
app_name=$(echo "$app_name" | tr " " -)
|
|
|
|
if [[ ${packageManagers[@]} =~ "flatpak" ]]; then
|
|
flatpak_apps=$(flatpak list --columns=application)
|
|
echo $flatpak_apps | grep -iq $app_name
|
|
flatpak_success=$?
|
|
if [[ $flatpak_success == 0 ]]; then
|
|
echo -e "${GREEN}${BOLD}Flatpak:${ENDCOLOR}${GREEN} $(echo $flatpak_apps | tr ' ' '\n' | grep -i $app_name)${ENDCOLOR}"
|
|
fi
|
|
fi
|
|
# Some package names are different from the command name
|
|
declare -A altNames=(["neovim"]="nvim" ["python"]="python3" ["nodejs"]="node" ["docker-compose"]="docker compose" ["pip"]="pip3")
|
|
commandName="${altNames[$app_name]:-$app_name}"
|
|
which "$commandName" &>/dev/null
|
|
distro_success=$?
|
|
if [[ $distro_success == 0 ]]; then
|
|
echo -e "${GREEN}${BOLD}Distro:${ENDCOLOR}${GREEN} $app_name is installed.${ENDCOLOR}"
|
|
fi
|
|
|
|
if [[ $flatpak_success != 0 && $nix_success != 0 && $brew_success != 0 && $distro_success != 0 ]]; then
|
|
echo -e "${YELLOW}$app_name not installed.${ENDCOLOR}"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
installP() {
|
|
checkP $1
|
|
if [[ $? != 1 ]]; then
|
|
echo -e "${GREEN}$1 is already installed.${ENDCOLOR}"
|
|
return 0
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "nix" ]]; then
|
|
echo -e "${YELLOW}Attempting nix install...${ENDCOLOR}"
|
|
nix-env -iA nixpkgs.$1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "brew" ]]; then
|
|
echo -e "${YELLOW}Attempting brew install...${ENDCOLOR}"
|
|
brew install $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "apt" ]]; then
|
|
echo -e "${YELLOW}Attempting apt install...${ENDCOLOR}"
|
|
sudo apt install $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
elif [[ ${packageManagers[@]} =~ "paru" ]]; then
|
|
echo -e "${YELLOW}Attempting paru install...${ENDCOLOR}"
|
|
paru -Sy $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
elif [[ ${packageManagers[@]} =~ "pacman" ]]; then
|
|
echo -e "${YELLOW}Attempting pacman install...${ENDCOLOR}"
|
|
sudo pacman -Sy $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
elif [[ ${packageManagers[@]} =~ "dnf" ]]; then
|
|
echo -e "${YELLOW}Attempting dnf install...${ENDCOLOR}"
|
|
sudo dnf install $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "flatpak" ]]; then
|
|
echo -e "${YELLOW}Attempting flatpak install...${ENDCOLOR}"
|
|
flatpak install $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
echo -e "${RED}ERROR - $1 not found.${ENDCOLOR}"
|
|
return 1
|
|
}
|
|
|
|
removeP() {
|
|
checkP $1
|
|
if [[ $? != 0 ]]; then
|
|
echo -e "${YELLOW}$1 is not installed.${ENDCOLOR}"
|
|
return 0
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "flatpak" ]]; then
|
|
echo -e "${YELLOW}Attempting flatpak uninstall...${ENDCOLOR}"
|
|
flatpak uninstall $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "nix" ]]; then
|
|
echo -e "${YELLOW}Attempting nix uninstall...${ENDCOLOR}"
|
|
nix-env --uninstall $1
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "brew" ]]; then
|
|
echo -e "${YELLOW}Attempting brew uninstall...${ENDCOLOR}"
|
|
brew uninstall $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
if [[ ${packageManagers[@]} =~ "apt" ]]; then
|
|
echo -e "${YELLOW}Attempting apt uninstall...${ENDCOLOR}"
|
|
sudo apt remove $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
elif [[ ${packageManagers[@]} =~ "pacman" ]]; then
|
|
echo -e "${YELLOW}Attempting pacman uninstall...${ENDCOLOR}"
|
|
sudo pacman -Rs $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
elif [[ ${packageManagers[@]} =~ "dnf" ]]; then
|
|
echo -e "${YELLOW}Attempting dnf uninstall...${ENDCOLOR}"
|
|
sudo dnf remove $1
|
|
if [[ $? == 0 ]]; then
|
|
return 0
|
|
fi
|
|
fi
|
|
echo -e "${RED}ERROR - Failed to uninstall $1.${ENDCOLOR}"
|
|
return 1
|
|
}
|
|
|
|
# If no parameter or u
|
|
echo "Available package managers: ${packageManagers[@]}"
|
|
if [ -z $1 ] || [ $1 = "u" ]; then
|
|
updateP
|
|
return 0
|
|
elif [ $1 = "i" ]; then # If first parameter is i (install)
|
|
shift
|
|
for package in "$@"; do
|
|
installP $package
|
|
done
|
|
elif [ $1 = "r" ]; then # If first parameter is r (remove)
|
|
shift
|
|
for package in "$@"; do
|
|
removeP $package
|
|
done
|
|
elif [ $1 = "c" ]; then # If first parameter is c (check)
|
|
shift
|
|
for package in "$@"; do
|
|
checkP $package
|
|
done
|
|
else
|
|
echo -e "${YELLOW}${UNDERLINE}[i] Usage:${ENDCOLOR}"
|
|
echo -e "p (u) ${FAINT}- update os${ENDCOLOR}"
|
|
echo -e "p i package ${FAINT}- install package${ENDCOLOR}"
|
|
echo -e "p r package ${FAINT}- remove package${ENDCOLOR}"
|
|
echo -e "p c package ${FAINT}- check if package is installed${ENDCOLOR}"
|
|
echo -e "${FAINT}Supported package managers: flatpak, nix, brew, apt, paru, pacman, dnf${ENDCOLOR}"
|
|
return 1
|
|
fi
|
|
)
|