Allow for update to not check for package updates unless explicitly told. Fixed bugs
151 lines
4.1 KiB
Bash
151 lines
4.1 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
if [[ $(id -u) -eq 0 ]]
|
|
then
|
|
echo "Please don't run script with root privilages."
|
|
exit 1
|
|
fi
|
|
|
|
HYPRSOLUS_PATH="/usr/src/hyprsolus"
|
|
[[ ! -d "$HYPRSOLUS_PATH" ]] && exit 1
|
|
|
|
# create cache folder for Hyprland metadata
|
|
cache="$HOME/.cache/hyprsolus"
|
|
[[ ! -d "$cache" ]] && mkdir -p "$cache" >/dev/null
|
|
|
|
check () {
|
|
>&2 echo "Checking for Hyprland upgrades..."
|
|
# ensure that Hyprland is even running
|
|
if ! pidof hyprland
|
|
then
|
|
>&2 echo "Could not find Hyprland process. Is it even running?"
|
|
exit 255
|
|
fi
|
|
# get the releases from the origin
|
|
origin=$(curl -sL \
|
|
https://api.github.com/repos/hyprwm/Hyprland/releases)
|
|
exit_code=$?
|
|
# check if the cURL was successful
|
|
if [[ $exit_code -ne 0 ]]
|
|
then
|
|
>&2 echo "Failed to contact GitHub API. Check Internet connection and \
|
|
try again."
|
|
exit 254
|
|
fi
|
|
# latest tag release in origin and current Hyprland version
|
|
origin_vers=$(echo "$origin" | jq -r ".[0].tag_name")
|
|
hyprland_vers=$(hyprctl version | sed -nr 's/Tag: (.*),.*/\1/p')
|
|
|
|
[[ ! -e "$cache/metadata.json" ]] && echo "$origin" \
|
|
| jq -r ".[] | select(.tag_name == \"$hyprland_vers\")" \
|
|
>"$cache/metadata.json"
|
|
|
|
if [[ "$origin_vers" != "$hyprland_vers" ]]
|
|
then
|
|
echo "$origin" | jq -r ".[0]" >"$cache/release-metadata.json"
|
|
notify-send -a "Hyprsolus" "Hyprland Update Available" \
|
|
"A new version of Hyprland is available ($origin_vers)."
|
|
else
|
|
>&2 echo "No upgrade available. Ensuring most recent metadata..."
|
|
[[ -f "$cache/release-metadata.json" ]] && \
|
|
mv "$cache/release-metadata.json" "$cache/metadata.json"
|
|
fi
|
|
}
|
|
|
|
info () {
|
|
while test $# -ne 0
|
|
do
|
|
case $1 in
|
|
--local) shift ; release=0 ;;
|
|
--json) shift ; json=0 ;;
|
|
--) shift ; glow_args="$*" ; break ;;
|
|
*) echo "Ignoring argument $1" ;;
|
|
esac
|
|
done
|
|
|
|
# Initialise defaults if no flags given
|
|
release=${release:-1}
|
|
json=${json:-1}
|
|
|
|
if [[ -e "$cache/release-metadata.json" && $release -eq 1 ]]
|
|
then
|
|
[[ ! -s "$cache/release-metadata.json" ]] && exit 2
|
|
[[ $json -eq 0 ]] && cat "$cache/release-metadata.json" && exit 0
|
|
jq -r ".body" < "$cache/release-metadata.json" | glow "$glow_args" -
|
|
elif [[ -e "$cache/metadata.json" ]]
|
|
then
|
|
[[ ! -s "$cache/metadata.json" ]] && exit 2
|
|
[[ $json -eq 0 ]] && cat "$cache/metadata.json" && exit 0
|
|
jq -r ".body" "$cache/metadata.json" | glow "$glow_args" -
|
|
else
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
update () {
|
|
while test $# -ne 0
|
|
do
|
|
case $1 in
|
|
--ensure-deps-latest) shift ; deps_update=0 ;;
|
|
*) echo "Ignoring argument $1" ;;
|
|
esac
|
|
done
|
|
deps_update=${deps_update:-1}
|
|
|
|
cd "$HYPRSOLUS_PATH"
|
|
# Fetch new content from remote
|
|
git fetch --all
|
|
git pull origin main
|
|
|
|
echo "(hyprsolus) Updating additional scripts if needed."
|
|
sudo cp -u "${HYPRSOLUS_PATH}/hyprsolusctl" "/usr/local/bin"
|
|
sudo cp -ru "${HYPRSOLUS_PATH}/systemd" "$HOME/.config/systemd/"
|
|
systemctl --user daemon-reload
|
|
|
|
echo "(hyprsolus) Updating the dependencies if needed."
|
|
if [[ $deps_update -eq 0 ]]
|
|
then
|
|
sudo sh "${HYPRSOLUS_PATH}/requirements.sh"
|
|
fi
|
|
|
|
}
|
|
|
|
upgrade () {
|
|
while test $# -ne 0
|
|
do
|
|
case $1 in
|
|
--ensure-integrity) shift ; eopkg_check=0 ;;
|
|
--ensure-deps-latest) shift ; deps_update=0 ;;
|
|
*) echo "Ignoring argument $1" ;;
|
|
esac
|
|
done
|
|
|
|
eopkg_check=${eopkg_check:-1}
|
|
if [[ $eopkg_check -eq 0 ]]
|
|
then
|
|
echo -n "Check package intergity..."
|
|
while read -r line
|
|
do
|
|
check=$(eopkg check --no-color "$line" | grep -o "OK")
|
|
if [[ $check != OK ]]
|
|
then
|
|
>&2 echo -e "failed.\n[FATAL] The following package is corrupt: $line."\
|
|
"Aborting upgrade."
|
|
exit 3
|
|
fi
|
|
done < <(cat "${HYPRSOLUS_PATH}/depends.txt")
|
|
echo "ok."
|
|
fi
|
|
|
|
# TODO: Implement calls to make build system
|
|
}
|
|
|
|
case $1 in
|
|
check) check ;;
|
|
update) shift ; update "$@" ;;
|
|
upgrade) shift ; upgrade "$@" ;;
|
|
info) shift ; info "$@" ;;
|
|
*) exit 1 ;;
|
|
esac
|
|
exit 0
|