A cheerful & colorful Fish function I wrote to keep my Discord and Vencord installations up to date on my Arch machine.
This function assumes that you have the following installed:
- git
- node
- pnpm
- wget
- sudo
- tar
- and of course, fish
set -gx DISCORD_HOME "/usr/share/discord" | |
set -gx VENCORD_HOME "$HOME/.vencord" | |
function update_discord --description "My Discord & Vencord maintenance script because AUR yucky" | |
set -l initial_dir "$(pwd)" | |
argparse --name=update_discord h/help skip-vencord d/dev v/verbose i/inject-only -- $argv | |
# exit if argparse failed | |
or return | |
if set -ql _flag_help | |
echo "$(set_color -o magenta)update_discord$(set_color normal)$(set_color brblack) [$(set_color yellow)-h$(set_color brblack)|$(set_color yellow)--help$(set_color brblack)] [$(set_color yellow)--skip-vencord$(set_color brblack)] [$(set_color yellow)-d$(set_color brblack)|$(set_color yellow)--dev$(set_color brblack)] [$(set_color yellow)-v$(set_color brblack)|$(set_color yellow)--verbose$(set_color brblack)] [$(set_color yellow)-i$(set_color brblack)|$(set_color yellow)--inject-only$(set_color brblack)]" | |
echo "" | |
echo "$(set_color -o -u magenta)Arguments:$(set_color normal)" | |
set_color brblack | |
echo " $(set_color yellow)-h$(set_color brblack),$(set_color yellow)--help$(set_color brblack) : $(set_color brwhite)Show this menu" | |
echo " $(set_color yellow)--skip-vencord$(set_color brblack) : $(set_color brwhite)Skip Vencord steps" | |
echo " $(set_color yellow)-d$(set_color brblack),$(set_color yellow)--dev$(set_color brblack) : $(set_color brwhite)Build Vencord in developer mode" | |
echo " $(set_color yellow)-v$(set_color brblack),$(set_color yellow)--verbose$(set_color brblack) : $(set_color brwhite)Log aggressively" | |
echo " $(set_color yellow)-i$(set_color brblack),$(set_color yellow)--inject-only$(set_color brblack) : $(set_color brwhite)Only inject Vencord, do nothing else" | |
set_color normal | |
return 0 | |
end | |
# Log a message only when -v/--verbose is set | |
function log_verbose -V _flag_verbose | |
if set -q _flag_verbose | |
echo $argv | |
set_color normal | |
end | |
end | |
# Same thing but shorthand for logging what command we run | |
function log_verbose_command | |
log_verbose "$(set_color blue)Running Command: $(set_color brblack)$argv" | |
end | |
# todo: fixme! | |
function log_time | |
set -l millis (math $CMD_DURATION % 1000) | |
set -l seconds (math "($CMD_DURATION - $millis) / 1000") | |
set -l time_color "green" | |
if test $millis -gt 10000 | |
set -l time_color "yellow" | |
else if test $millis -gt 20000 | |
set -l time_color "red" | |
end | |
printf "$(set_color brwhite)π Done! $(set_color brblack)Elapsed time: " | |
if test $seconds -gt 0 | |
printf "$(set_color $time_color)$seconds$(set_color brblack)s " $seconds | |
end | |
printf "$(set_color $time_color)$millis$(set_color brblack)ms\n" | |
set_color normal | |
end | |
function inject_vencord | |
log_verbose_command 'cd $VENCORD_HOME' | |
cd $VENCORD_HOME | |
echo "$(set_color -o magenta)π Injecting Vencord..." | |
set_color normal | |
log_verbose_command 'pnpm run inject' | |
pnpm run inject | |
end | |
log_verbose "$(set_color brblack) [$(set_color blue)Verbose logging enabled$(set_color normal)$(set_color brblack)]" (set_color normal) | |
if set -ql _flag_inject_only | |
inject_vencord | |
return 0 | |
end | |
echo "$(set_color -o magenta)π Downloading Discord..." | |
set_color normal | |
log_verbose_command 'wget -O /tmp/discord.tgz "https://discord.com/api/download?platform=linux&format=tar.gz"' | |
wget -O /tmp/discord.tgz "https://discord.com/api/download?platform=linux&format=tar.gz" | |
#log_time | |
# Ensure DISCORD_HOME exists | |
log_verbose_command 'sudo mkdir -p $DISCORD_HOME' | |
sudo mkdir -p $DISCORD_HOME | |
echo "$(set_color -o magenta)π Unzipping files..." | |
set_color normal | |
log_verbose_command 'mkdir -p /tmp/discord' | |
mkdir -p /tmp/discord | |
log_verbose_command 'tar -xf /tmp/discord.tgz -C /tmp/discord' | |
tar -xf /tmp/discord.tgz -C /tmp/discord | |
#log_time | |
echo "$(set_color -o magenta)π Copying files..." | |
set_color normal | |
log_verbose_command 'sudo cp -R /tmp/discord/Discord/* $DISCORD_HOME/' | |
sudo cp -R /tmp/discord/Discord/* $DISCORD_HOME/ | |
log_verbose_command 'sudo chmod -R a+rwx $DISCORD_HOME' | |
sudo chmod -R a+rwx $DISCORD_HOME | |
# Create .desktop symlink | |
log_verbose_command 'ln -sf $DISCORD_HOME/Discord/discord.desktop $XDG_DATA_HOME/applications/discord.desktop' | |
ln -sf $DISCORD_HOME/discord.desktop $XDG_DATA_HOME/applications/discord.desktop | |
echo "$(set_color -o magenta)π Running post-install script..." | |
set_color normal | |
log_verbose_command 'sh -c $DISCORD_HOME/Discord/postinst.sh' | |
sh -c $DISCORD_HOME/postinst.sh | |
echo "$(set_color green)π Discord is up to date!" | |
set_color normal | |
# Vencord shit | |
if not set -ql _flag_no_vencord | |
echo "$(set_color -o magenta)π Installing Vencord..." | |
set_color normal | |
# Ensure $VENCORD_HOME exists and move to it | |
log_verbose_command 'mkdir -p $VENCORD_HOME; cd $VENCORD_HOME' | |
mkdir -p $VENCORD_HOME; cd $VENCORD_HOME | |
# Ensure vencord is properly cloned and up to date | |
if test -d .git | |
echo "$(set_color -o magenta)π Fetching latest changes from git..." | |
set_color normal | |
log_verbose_command 'git pull' | |
git pull | |
#log_time | |
else | |
echo "$(set_color yellow)β‘ Vencord directory ($VENCORD_HOME) is empty, cloning from git..." | |
set_color normal | |
log_verbose_command 'git clone https://github.com/Vendicated/Vencord $VENCORD_HOME --depth=1' | |
git clone https://github.com/Vendicated/Vencord $VENCORD_HOME --depth=1 | |
#log_time | |
end | |
echo "$(set_color -o magenta)π Installing dependencies..." | |
set_color normal | |
log_verbose_command 'pnpm install --frozen-lockfile' | |
pnpm install --frozen-lockfile | |
#log_time | |
echo "$(set_color -o magenta)π Building Vencord..." | |
set_color normal | |
set -l build_flags "" | |
if set -ql _flag_developer; or set -ql _flag_d | |
echo "$(set_color yellow)β‘ Developer Mode Enabled!" | |
set_color normal | |
set -l build_flags "$build_flags --dev" | |
end | |
log_verbose_command "pnpm run build $build_flags" | |
pnpm run build $build_flags | |
#log_time | |
inject_vencord | |
echo "$(set_color -o green)π Vencord is up to date!" | |
end | |
# Be courteous to the user, go back to the path they started from | |
cd $initial_dir | |
end | |
fish_add_path $DISCORD_HOME |