Skip to content

Instantly share code, notes, and snippets.

@LizAinslie
Last active December 19, 2024 18:38
Show Gist options
  • Save LizAinslie/04da8f3622df6c4b35f291f89c0e18dd to your computer and use it in GitHub Desktop.
Save LizAinslie/04da8f3622df6c4b35f291f89c0e18dd to your computer and use it in GitHub Desktop.
A beautiful discord/vencord dev build setup fish function script I wrote for my Arch install.

update_discord.fish

A cheerful & colorful Fish function I wrote to keep my Discord and Vencord installations up to date on my Arch machine.

update_discord help text

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment