#!/bin/bash if [ "$EUID" -ne 0 ] then echo "run FE2TY using admin perms." exit fi if [ ! -f /bin/kdialog ] then echo "install KDialog before running." exit fi if [ ! -f /bin/git ] then echo "install git before running." exit fi if [ ! -f /bin/jq ] then echo "install jq before running." exit fi if [ ! -f /bin/qdbus-qt6 ] then echo "install qdbus-qt6 before running." exit fi # By RSCC ## Unlicense main() { case "$(kdialog --combobox "Choose an option:" "Install TyrianOS" "Revert TyrianOS installation")" in "Install TyrianOS") ty.install ;; "Revert TyrianOS installation") ty.revert ;; *) echo "OK!" ;; esac } ty.install() { kdialog --title "FE2TY - Installing TyrianOS" --warningcontinuecancel "By pressing enter, you agree that this tool is not considered an official tool to install TyrianOS and should only be used as a last resort from an existing Fedora installation. Therefore, the creators of this script have absolutely no responsibility in the case of something happening, as it is very experimental. Do you wish to continue?" || exit 1 dbusRef=`kdialog --progressbar "Initializing" 100` limsg s 1 i "Getting current deployment origin ref and backing up..." qdbus-qt6 $dbusRef Set "" value 1 qdbus-qt6 $dbusRef setLabelText "Backing up original ref" rpm-ostree status --booted --json | jq -r '.deployments[] | select(.booted) | ."container-image-reference"' > /etc/FE2TY-BURR.txt || limsg.quit s 1 e "Command failed. Do you have permission to write to /etc/ ?" limsg s 2 i "Cloning to temporary directory..." qdbus-qt6 $dbusRef Set "" value 20 qdbus-qt6 $dbusRef setLabelText "Cloning TyrianOS source to temporary repository" cd "$HOME" || exit 1 mkdir -v "$HOME"/87F9W3845GFG5R894OSEG || true pushd "$HOME"/87F9W3845GFG5R894OSEG || exit 1 git clone https://github.com/Icycoide/TyrianOS || limsg.quit s 2 e "Failed to clone" pushd TyrianOS/ || exit limsg s 2 i "Installing skeleton to all users..." qdbus-qt6 $dbusRef Set "" value 40 qdbus-qt6 $dbusRef setLabelText "Installing skeleton to all users..." cp -vr system_files/etc/skel/* /var/home/*/ limsg s 2 i "Installing skeleton to all users (hidden)..." qdbus-qt6 $dbusRef Set "" value 60 cp -vr system_files/etc/skel/.* /var/home/*/ popd || exit 1 popd || exit 1 limsg s 2 i "Removing temporary directory again..." qdbus-qt6 $dbusRef Set "" value 75 qdbus-qt6 $dbusRef setLabelText "Removing temporary directory" rm -rv 87F9W3845GFG5R894OSEG limsg s 3 i "Switching OS base..." qdbus-qt6 $dbusRef Set "" value 90 qdbus-qt6 $dbusRef setLabelText "Finally rebasing to TyrianOS" rpm-ostree rebase ostree-unverified-registry:ghcr.io/icycoide/tyrianos:latest qdbus-qt6 $dbusRef Set "" value 100 sleep 3 qdbus-qt6 $dbusRef setLabelText "Rebooting..." sleep 1 qdbus-qt6 $dbusRef Set "" value 90 sleep 1 qdbus-qt6 $dbusRef Set "" value 80 sleep 1 qdbus-qt6 $dbusRef Set "" value 70 sleep 1 qdbus-qt6 $dbusRef Set "" value 60 sleep 1 qdbus-qt6 $dbusRef Set "" value 50 sleep 1 qdbus-qt6 $dbusRef Set "" value 40 sleep 1 qdbus-qt6 $dbusRef Set "" value 30 sleep 1 qdbus-qt6 $dbusRef Set "" value 20 sleep 1 qdbus-qt6 $dbusRef Set "" value 10 sleep 1 qdbus-qt6 $dbusRef setLabelText "Rebooting..." qdbus-qt6 $dbusRef close limsg s 4 i "Calling to reboot..." pkexec reboot } ty.revert() { kdialog --title "FE2TY - Reverting install" --warningcontinuecancel "You are about to revert the installation of TyrianOS. Continue?" || exit 1 dbusRef=`kdialog --progressbar "Initializing" 4` limsg s 1 i "Looking for backed up remote reference file..." qdbus-qt6 $dbusRef Set "" value 1 qdbus-qt6 $dbusRef setLabelText "Searching for original remote ref" cat /etc/FE2TY-BURR.txt || limsg.quit s 1 e "The backed up ref could not be found." # shellcheck disable=SC2155 export REF_BACKUP=$(cat /etc/FE2TY-BURR.txt) limsg s 2 i "Attempting rebase..." qdbus-qt6 $dbusRef Set "" value 2 qdbus-qt6 $dbusRef setLabelText "Attempting rebase" rpm-ostree rebase "$REF_BACKUP" || limsg.quit s 2 e "Could not rebase back to original ref" limsg s 3 i "Force deploying image..." qdbus-qt6 $dbusRef Set "" value 3 qdbus-qt6 $dbusRef setLabelText "Force deploying image" ostree admin deploy "$REF_BACKUP" || limsg s 3 w "Unable to force the deployment of the original ref, but it might still have succeeded regardless." qdbus-qt6 $dbusRef Set "" value 4 qdbus-qt6 $dbusRef setLabelText "Rebooting..." qdbus $dbusRef close reboot } function installer.colours() { # Reset Color_Off='\033[0m' # Text Reset # Regular Colors export Black='\033[0;30m' # Black export Red='\033[0;31m' # Red export Green='\033[0;32m' # Green export Yellow='\033[0;33m' # Yellow export Blue='\033[0;34m' # Blue export Purple='\033[0;35m' # Purple export Cyan='\033[0;36m' # Cyan export White='\033[0;37m' # White # Bold export BBlack='\033[1;30m' # Black export BRed='\033[1;31m' # Red export BGreen='\033[1;32m' # Green export BYellow='\033[1;33m' # Yellow export BBlue='\033[1;34m' # Blue export BPurple='\033[1;35m' # Purple export BCyan='\033[1;36m' # Cyan export BWhite='\033[1;37m' # White # Underline export UBlack='\033[4;30m' # Black export URed='\033[4;31m' # Red export UGreen='\033[4;32m' # Green export UYellow='\033[4;33m' # Yellow export UBlue='\033[4;34m' # Blue export UPurple='\033[4;35m' # Purple export UCyan='\033[4;36m' # Cyan export UWhite='\033[4;37m' # White # Background export On_Black='\033[40m' # Black export On_Red='\033[41m' # Red export On_Green='\033[42m' # Green export On_Yellow='\033[43m' # Yellow export On_Blue='\033[44m' # Blue export On_Purple='\033[45m' # Purple export On_Cyan='\033[46m' # Cyan export On_White='\033[47m' # White # High Intensity export IBlack='\033[0;90m' # Black export IRed='\033[0;91m' # Red export IGreen='\033[0;92m' # Green export IYellow='\033[0;93m' # Yellow export IBlue='\033[0;94m' # Blue export IPurple='\033[0;95m' # Purple export ICyan='\033[0;96m' # Cyan export IWhite='\033[0;97m' # White # Bold High Intensity export BIBlack='\033[1;90m' # Black export BIRed='\033[1;91m' # Red export BIGreen='\033[1;92m' # Green export BIYellow='\033[1;93m' # Yellow export BIBlue='\033[1;94m' # Blue export BIPurple='\033[1;95m' # Purple export BICyan='\033[1;96m' # Cyan export BIWhite='\033[1;97m' # White # High Intensity backgrounds export On_IBlack='\033[0;100m' # Black export On_IRed='\033[0;101m' # Red export On_IGreen='\033[0;102m' # Green export On_IYellow='\033[0;103m' # Yellow export On_IBlue='\033[0;104m' # Blue export On_IPurple='\033[0;105m' # Purple export On_ICyan='\033[0;106m' # Cyan export On_IWhite='\033[0;107m' # White echo -e "${Purple}[i] The colour variables have been set.${Color_Off}" } limsg() { export CHECKUSERINPUT case $1 in s) lmsg_one="STAGE" ;; esac lmsg_two=$2 case $3 in i) lmsg_three="${BBlue}INFO" ;; w) lmsg_three="${BYellow}WARN" ;; e) lmsg_three="${BRed}ERRR" ;; *) lmsg_three=$3 ;; esac echo -e "[FE2TY(LiMSG)/${BCyan}${lmsg_one} ${lmsg_two}${Color_Off}/${lmsg_three}${Color_Off}]: $4" export ADD } limsg.quit() { case $1 in s) lmsg_one="STAGE" ;; esac lmsg_two=$2 case $3 in e) lmsg_three="${BRed}ERRR" ;; *) lmsg_three=$3 ;; esac kdialog --error "$4" exit 1 } installer.colours main "$1"