diff --git a/home/.bashrc b/home/.bashrc index fa8122c7..5815b1a0 100644 --- a/home/.bashrc +++ b/home/.bashrc @@ -52,4 +52,5 @@ set completion-ignore-case On export OFLAGS="--ozone-platform-hint=auto" -export PATH=$PATH:/home/trude/.local/bin +export PATH=$PATH:$HOME/.local/bin +source $HOME/.local/bin/p.sh diff --git a/install.sh b/install.sh index 45700120..d7d41cab 100755 --- a/install.sh +++ b/install.sh @@ -132,6 +132,16 @@ else echo -e "${GREEN}[I] Dotfiles installed successfully.${NC}" fi +# Copy scripts +echo -e "${YELLOW}[+] Installing Scripts...${NC}" +mkdir -p $HOME/.local/bin +cp -r $HOME/dotfiles/scripts/. $HOME/.local/bin/ +if [ $? -ne 0 ]; then + echo -e "${RED}[E] Error copying Scripts.${NC}" +else + echo -e "${GREEN}[I] Scripts installed successfully.${NC}" +fi + # Install fonts echo -e "${YELLOW}[+] Installing fonts...${NC}" if [[ "$OSTYPE" == "darwin"* ]]; then diff --git a/scripts/p.sh b/scripts/p.sh new file mode 100755 index 00000000..15cb7740 --- /dev/null +++ b/scripts/p.sh @@ -0,0 +1,252 @@ +#! /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" + +p() ( + packageManagers=() + if [ "$(command -v flatpak)" ]; then + packageManagers+=("flatpak") + fi + if [ "$(command -v nix)" ]; then + packageManagers+=("nix") + fi + if [ "$(command -v brew)" ]; then + packageManagers+=("brew") + fi + if [ "$(command -v apt)" ]; then + packageManagers+=("apt") + elif [ "$(command -v pacman)" ]; then + packageManagers+=("pacman") + elif [ "$(command -v dnf)" ]; then + packageManagers+=("dnf") + fi + + 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 + sudo pacman -Syu + sudo pacman -Rsn $(pacman -Qdtq) + if [ ! "$(command -v reflector)" ]; then + sudo pacman -Sy --noconfirm reflector rsync curl + fi + 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 + 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 + if [[ ${packageManagers[@]} =~ "nix" ]]; then + nix_apps=$(nix-env -q) + echo $nix_apps | grep -iq $app_name + nix_success=$? + if [[ $nix_success == 0 ]]; then + echo -e "${GREEN}${BOLD}Nix:${ENDCOLOR}${GREEN} $(echo $nix_apps | tr ' ' '\n' | grep -i $app_name)${ENDCOLOR}" + fi + fi + if [[ ${packageManagers[@]} =~ "brew" ]]; then + brew_apps=$(brew list) + echo $brew_apps | grep -iq $app_name + brew_success=$? + if [[ $brew_success == 0 ]]; then + echo -e "${GREEN}${BOLD}Brew:${ENDCOLOR}${GREEN} $(echo $brew_apps | tr ' ' '\n' | grep -i $app_name)${ENDCOLOR}" + fi + fi + if [[ ${packageManagers[@]} =~ "apt" ]]; then + distro_apps=$(dpkg-query -l | grep '^ii' | awk '{print $2}') + elif [[ ${packageManagers[@]} =~ "pacman" ]]; then + distro_apps=$(pacman -Q) + elif [[ ${packageManagers[@]} =~ "dnf" ]]; then + distro_apps=$(dnf list) + fi + + echo $distro_apps | grep -Eiq "(^|\s)$app_name($|\s)" + distro_success=$? + if [[ $distro_success == 0 ]]; then + echo -e "${GREEN}${BOLD}Distro:${ENDCOLOR}${GREEN} $(echo $distro_apps | tr ' ' '\n' | grep -Ei "(^|\s)$app_name($|\s)")${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 "$1 is already installed." + return 0 + fi + if [[ ${packageManagers[@]} =~ "nix" ]]; then + echo "Attempting nix install..." + nix-env -iA nixpkgs.$1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + if [[ ${packageManagers[@]} =~ "brew" ]]; then + echo "Attempting brew install..." + brew install $1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + if [[ ${packageManagers[@]} =~ "apt" ]]; then + echo "Attempting apt install..." + sudo apt install $1 + if [[ $? == 0 ]]; then + return 0 + fi + elif [[ ${packageManagers[@]} =~ "pacman" ]]; then + echo "Attempting pacman install..." + sudo pacman -Sy $1 + if [[ $? == 0 ]]; then + return 0 + fi + elif [[ ${packageManagers[@]} =~ "dnf" ]]; then + echo "Attempting dnf install..." + sudo dnf install $1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + if [[ ${packageManagers[@]} =~ "flatpak" ]]; then + echo "Attempting flatpak install..." + flatpak install $1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + echo "ERROR - $1 not found." + return 1 + } + + removeP() { + checkP $1 + if [[ $? != 0 ]]; then + echo "$1 is not installed." + return 0 + fi + if [[ ${packageManagers[@]} =~ "flatpak" ]]; then + echo "Attempting flatpak uninstall..." + flatpak uninstall $1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + if [[ ${packageManagers[@]} =~ "nix" ]]; then + echo "Attempting nix uninstall..." + nix-env --uninstall $1 + fi + if [[ ${packageManagers[@]} =~ "brew" ]]; then + echo "Attempting brew uninstall..." + brew uninstall $1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + if [[ ${packageManagers[@]} =~ "apt" ]]; then + echo "Attempting apt uninstall..." + sudo apt remove $1 + if [[ $? == 0 ]]; then + return 0 + fi + elif [[ ${packageManagers[@]} =~ "pacman" ]]; then + echo "Attempting pacman uninstall..." + sudo pacman -Rs $1 + if [[ $? == 0 ]]; then + return 0 + fi + elif [[ ${packageManagers[@]} =~ "dnf" ]]; then + echo "Attempting dnf uninstall..." + sudo dnf remove $1 + if [[ $? == 0 ]]; then + return 0 + fi + fi + echo "ERROR - Failed to uninstall $1." + 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}" + return 1 + fi +)