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 |