diff --git a/rave b/rave
new file mode 100644
index 0000000..f76efa2
--- /dev/null
+++ b/rave
@@ -0,0 +1,307 @@
+#!/usr/bin/env bash
+
+# Text modifiers
+bold=$(tput bold)      # ${bold}
+normal=$(tput sgr0)    # ${normal}
+yellow=$(tput setaf 3) # ${yellow}
+
+# RaveOS update wrapper using nala/flatpak
+# (c) AlexC
+
+appver="0.1-alpha"
+CALLCOMMAND="rave"
+
+#functions
+function help() {
+	echo "USAGE:"
+	echo "	$CALLCOMMAND [option] [options for the option]"
+	echo "	EXAMPLE: $CALLCOMMAND search qemu"
+	echo "AVAILABLE OPTIONS:"
+	echo "	init - Setup environment and install all dependencies"
+	echo "	install - install a package."
+	echo "	install-local - install local packages."
+	echo "	remove - uninstall a package."
+	echo "	purge - uninstall a package along with its configuration files."
+	echo "	search - search a package."
+	echo "	find - 'apt-file search'."
+	echo "	update - apt update"
+	echo "	upgrade - apt upgrade"
+	echo "	full-upgrade - update + upgrade + clean + flatpak update"
+	echo "	autoclean - clean up apt caches."
+	echo "	clean - same as 'autoclean'."
+	echo "	autoremove - remove packages that are no longer needed."
+	echo "	show - show the information of a package that is installed."
+	echo "	list-installed - list all installed packages."
+	echo "	help - show this help."
+	echo "	install-flatpak - Install a flatpak package"
+	echo "	search-flatpak - Search a flatpak package"
+	echo "	update-flatpak - Update flatpak packages"
+	echo "	remove-flatpak - Remove flatpak packages"
+	echo "	version - show version and about information."
+	echo "SETTINGS:"
+	echo "	--learning-mode=<on|off> - accepts 'on' or 'off' as values. turns learning mode on or off."
+	echo "You can also use the environment variable 'RAVE_LEARN' to toggle learning mode: if it equals 1, learning mode is on."
+	echo " "
+	echo -e "\e[1mIf you don't supply any option, the help and about will be printed.\e[0m"
+}
+function about() {
+	echo "      RAVE      "
+	echo "  ==============  "
+	echo "A simple wrapper for nala/apt/flatpak with a syntax similar to apt for ease of use."
+	echo -e "Version: $appver\n"
+	echo "License: MIT"
+	echo "Copyright (c) 2023 AlexC"
+}
+
+function config() {
+#	SAVE:
+#	$1=save
+#	$2=setting to add to config
+#	$3=optional text to printed
+#	DELETE:
+#	$1=delete
+#	$2=setting to delete
+#	$3=optional text to print.
+#	LOAD:
+#	$1=load
+#	$2=setting to load
+#	$3=setting name when loading
+#
+	local DIR="$(pwd)"
+	if [[ ! -d "${HOME}/.config/rave/" ]]; then
+		mkdir -p "${HOME}/.config/rave/"
+	fi
+	local CONF="${HOME}/.config/rave/"
+	cd "$CONF"
+	if [[ ! -f config ]]; then
+		touch config
+	fi
+	if [[ "$1" == "save" ]]; then
+		echo "$2" >> config
+		if [[ ! -z "$3" ]]; then
+			echo -e "$3"
+		fi
+	elif [[ "$1" == "delete" ]]; then
+		sed -i "/$2/d" config
+		if [[ ! -z "$3" ]]; then
+			echo -e "$3"
+		fi
+	elif [[ "$1" == "load" ]]; then
+		if cat config | grep $2 >/dev/null ; then
+			SETTING=$3
+		else
+			echo -e "\e[31m\e[1mERROR: \e[0m\e[31mfailed to find requested setting!\e[0m"
+			exit 1
+		fi
+	elif [[ "$1" == "load-all" ]]; then
+		SETTING="$(cat config)"
+	elif [[ "$1" == "delete-all" ]]; then
+		echo -n "" > config
+	fi
+	cd "$DIR"
+}
+
+if [[ "$1" == '' ]]; then
+	echo -e "\e[31m\e[1mERROR:\e[0m\e[31m no operation specified!\e[0m"
+	echo -e "\e[1mrun \"$CALLCOMMAND --help\" for help\e[0m"
+	exit 0
+fi
+if [[ "$RAVE_LEARN" == 1 ]]; then
+	LEARN=1
+fi
+while [[ "$1" != '' ]]; do
+	config load-all
+	case $SETTING in
+		learn)
+			LEARN=1
+		;;
+	esac
+	case ${1,,} in
+		--learning-mode*)
+			MODE=$(echo $1 | sed -e 's/^[^=]*=//g')
+			if [[ "$MODE" == "on" ]]; then
+				config save "learn"
+				echo -e "learning mode on"
+			elif [[ "$MODE" == "off" ]]; then
+				config delete "learn"
+				echo "learning mode off"
+			else
+				echo -e "\e[31m\e[1mERROR:\e[0m\e[31m Invalid option '$MODE' for option '--learning-mode'!\e[0m"
+			fi
+			shift
+		;;
+		--config)
+			case $2 in
+				clear)
+					config delete-all || exit 1
+					echo "configuration cleared succesfully!"
+					break
+				;;
+				*)
+				echo -e "\e[31m\e[1mERROR:\e[0m\e[31m Invalid option '$MODE' for option '--config'!\e[0m"
+				break
+				;;
+			esac
+			shift
+		;;
+		install)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo nala install \"$@\"\e[0m"
+			fi
+			sudo nala install "$@"
+			break
+		;;
+		install-local)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is \e[1msudo dpkg -i \"$@\"\e[0m"
+			fi
+			sudo dpkg -i "$@"
+			break
+		;;
+		remove)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo nala remove \"$@\"\e[0m"
+			fi
+			sudo nala remove "$@"
+			break
+		;;
+		purge)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo apt purge \"$@\"\e[0m"
+			fi
+			sudo apt purge "$@"
+			break
+		;;
+		search)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mapt search \"$@\"\e[0m"
+			fi
+			apt search "$@"
+			break
+		;;
+		find)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo apt-file search \"$@\"\e[0m"
+			fi
+			sudo apt-file search "$@"
+			break
+		;;
+		update)
+			if [[ $LEARN == 1 ]]; then
+				echo -e "The command being run is: \e[1mapt update\e[0m"
+			fi
+			sudo nala update
+			break
+		;;
+		upgrade)
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo pacman -Su\e[0m"
+			fi
+			sudo nala upgrade
+			break
+		;;
+		full-upgrade)
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "Performing full system upgrade"
+			fi
+			yay -Syyu --noconfirm
+			sudo pacman -Rns $(pacman -Qtdq) --noconfirm
+			sudo pacman -Sc --noconfirm
+			flatpak update -y
+			flatpak uninstall --unused -y
+            su - $USER -c "flatpak update -y"
+			su - $USER -c "flatpak uninstall --unused -y"
+			hblock
+			echo ${bold}${yellow}RaveOS Gaming Linux fully updated!${normal}
+			break
+		;;
+		autoclean|clean)
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mapt autoclean\e[0m"
+			fi
+			sudo apt autoclean
+			break
+		;;
+		autoremove)
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo apt autoremove \"$@\"\e[0m"
+			fi
+			sudo apt autoremove
+			break
+		;;
+		list-installed)
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mapt list --installed\e[0m"
+			fi
+			sudo apt list --installed
+			break
+		;;
+		show)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1msudo apt show \"$@\"\e[0m"
+			fi
+			sudo apt show "$@"
+			break
+		;;
+		install-flatpak)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mflatpak install \"$@\"\e[0m"
+			fi
+			flatpak install "$@"
+			break
+		;;
+		update-flatpak)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mflatpak update \e[0m"
+			fi
+			flatpak update
+			break
+		;;
+		remove-flatpak)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mflatpak remove \"$@\"\e[0m"
+			fi
+			flatpak remove "$@"
+			break
+		;;
+		search-flatpak)
+			shift
+			if [[ "$LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mflatpak search \"$@\"\e[0m"
+			fi
+			flatpak search "$@"
+			break
+		;;
+		init)
+			shift
+			if [[ "LEARN" == 1 ]]; then
+				echo -e "The command being run is: \e[1mrave init\e[0m"
+			fi
+			sudo apt install nala flatpak -y
+			flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
+			break
+		;;
+		help|-h|--help|-help)
+			help
+			exit 0
+		;;
+		version|-v|--version)
+            about
+            exit 0
+        ;;
+        *)
+            echo -e "\e[1m\e[31minvalid option \"$1\"!\e[0m"
+            exit 0
+	esac
+	#shift
+done
\ No newline at end of file