#!/usr/bin/env fish argparse -n 'install.fish' -X 0 \ 'h/help' \ 'noconfirm' \ 'spotify' \ 'vscode=?!contains -- "$_flag_value" codium code' \ 'discord' \ 'zen' \ -- $argv or exit # Print help if set -q _flag_h echo 'usage: ./install.sh [-h] [--noconfirm] [--spotify] [--vscode] [--discord]' echo echo 'options:' echo ' -h, --help show this help message and exit' echo ' --noconfirm do not confirm package installation' echo ' --spotify install Spotify (Spicetify)' echo ' --vscode=[codium|code] install VSCodium (or VSCode)' echo ' --discord install Discord (OpenAsar + Equicord)' echo ' --zen install Zen browser' exit end # Helper funcs function _out -a colour text set_color $colour # Pass arguments other than text to echo echo $argv[3..] -- ":: $text" set_color normal end function log -a text _out cyan $text $argv[2..] end function input -a text _out blue $text $argv[2..] end function confirm-overwrite -a path if test -e $path -o -L $path # No prompt if noconfirm if set -q noconfirm input "$path already exists. Overwrite? [Y/n]" log 'Removing...' rm -rf $path else # Prompt user read -l -p "input '$path already exists. Overwrite? [Y/n] ' -n" confirm || exit 1 if test "$confirm" = 'n' -o "$confirm" = 'N' log 'Skipping...' return 1 else log 'Removing...' rm -rf $path end end end return 0 end # Variables set -q _flag_noconfirm && set noconfirm '--noconfirm' set -q XDG_CONFIG_HOME && set -l config $XDG_CONFIG_HOME || set -l config $HOME/.config set -q XDG_STATE_HOME && set -l state $XDG_STATE_HOME || set -l state $HOME/.local/state # Startup prompt set_color magenta echo '╭─────────────────────────────────────────────────╮' echo '│ ______ __ __ _ │' echo '│ / ____/___ ____ / /__ _____/ /_(_)___ _ │' echo '│ / / / __ `/ _ \/ / _ \/ ___/ __/ / __ `/ │' echo '│ / /___/ /_/ / __/ / __(__ ) /_/ / /_/ / │' echo '│ \____/\__,_/\___/_/\___/____/\__/_/\__,_/ │' echo '│ │' echo '╰─────────────────────────────────────────────────╯' set_color normal log 'Welcome to the Caelestia dotfiles installer!' log 'Before continuing, please ensure you have made a backup of your config directory.' # Prompt for backup if ! set -q _flag_noconfirm log '[1] Two steps ahead of you! [2] Make one for me please!' read -l -p "input '=> ' -n" choice || exit 1 if contains -- "$choice" 1 2 if test $choice = 2 log "Backing up $config..." if test -e $config.bak -o -L $config.bak read -l -p "input 'Backup already exists. Overwrite? [Y/n] ' -n" overwrite || exit 1 if test "$overwrite" = 'n' -o "$overwrite" = 'N' log 'Skipping...' else rm -rf $config.bak cp -r $config $config.bak end else cp -r $config $config.bak end end else log 'No choice selected. Exiting...' exit 1 end end # Install yay if not already installed if ! pacman -Q yay &> /dev/null log 'Yay not installed. Installing...' # Install sudo pacman -S --needed git base-devel $noconfirm cd /tmp git clone https://aur.archlinux.org/yay.git cd yay makepkg -si cd .. rm -rf yay # Setup yay -Y --gendb yay -Y --devel --save end # Install metapackage for deps log 'Installing metapackage...' yay -S --needed caelestia-meta $noconfirm # Cd into dir cd (dirname (status filename)) || exit 1 # Install hypr* configs if confirm-overwrite $config/hypr log 'Installing hypr* configs...' ln -s (realpath hypr) $config/hypr hyprctl reload end # Starship if confirm-overwrite $config/starship.toml log 'Installing starship config...' ln -s (realpath starship.toml) $config/starship.toml end # Foot if confirm-overwrite $config/foot log 'Installing foot config...' ln -s (realpath foot) $config/foot end # Fish if confirm-overwrite $config/fish log 'Installing fish config...' ln -s (realpath fish) $config/fish end # Fastfetch if confirm-overwrite $config/fastfetch log 'Installing fastfetch config...' ln -s (realpath fastfetch) $config/fastfetch end # Uwsm if confirm-overwrite $config/uwsm log 'Installing uwsm config...' ln -s (realpath uwsm) $config/uwsm end # Btop if confirm-overwrite $config/btop log 'Installing btop config...' ln -s (realpath btop) $config/btop end # Install spicetify if set -q _flag_spotify log 'Installing spotify (spicetify)...' set -l has_spicetify (pacman -Q spicetify-cli 2> /dev/null) yay -S --needed spotify spicetify-cli spicetify-marketplace-bin $noconfirm # Set permissions and init if new install if test -z "$has_spicetify" sudo chmod a+wr /opt/spotify sudo chmod a+wr /opt/spotify/Apps -R spicetify backup apply end # Install configs if confirm-overwrite $config/spicetify log 'Installing spicetify config...' ln -s (realpath spicetify) $config/spicetify # Set spicetify configs spicetify config current_theme caelestia color_scheme caelestia custom_apps marketplace 2> /dev/null spicetify apply end end # Install vscode if set -q _flag_vscode test "$_flag_vscode" = 'code' && set -l prog 'code' || set -l prog 'codium' test "$_flag_vscode" = 'code' && set -l packages 'code' || set -l packages 'vscodium-bin' 'vscodium-bin-marketplace' test "$_flag_vscode" = 'code' && set -l folder 'Code' || set -l folder 'VSCodium' set -l folder $config/$folder/User log "Installing vs$prog..." yay -S --needed $packages $noconfirm # Install configs if confirm-overwrite $folder/settings.json && confirm-overwrite $folder/keybindings.json && confirm-overwrite $config/$prog-flags.conf log "Installing vs$prog config..." ln -s (realpath vscode/settings.json) $folder/settings.json ln -s (realpath vscode/keybindings.json) $folder/keybindings.json ln -s (realpath vscode/flags.conf) $config/$prog-flags.conf # Install extension $prog --install-extension vscode/caelestia-vscode-integration/caelestia-vscode-integration-*.vsix end end # Install discord if set -q _flag_discord log 'Installing discord...' yay -S --needed discord equicord-installer-bin $noconfirm # Install OpenAsar and Equicord sudo Equilotl -install -location /opt/discord sudo Equilotl -install-openasar -location /opt/discord # Remove installer yay -Rns equicord-installer-bin $noconfirm end # Install zen if set -q _flag_zen log 'Installing zen...' yay -S --needed zen-browser-bin $noconfirm # Install userChrome css set -l chrome $HOME/.zen/*/chrome if confirm-overwrite $chrome/userChrome.css log 'Installing zen userChrome...' ln -s (realpath zen/userChrome.css) $chrome/userChrome.css end # Install native app set -l hosts $HOME/.mozilla/native-messaging-hosts set -l lib $HOME/.local/lib/caelestia if confirm-overwrite $hosts/caelestiafox.json log 'Installing zen native app manifest...' mkdir -p $hosts cp zen/native_app/manifest.json $hosts/caelestiafox.json sed -i "s|{{ \$lib }}|$lib|g" $hosts/caelestiafox.json end if confirm-overwrite $lib/caelestiafox log 'Installing zen native app...' mkdir -p $lib ln -s (realpath zen/native_app/app.fish) $lib/caelestiafox end # Prompt user to install extension log 'Please install the CaelestiaFox extension from https://addons.mozilla.org/en-US/firefox/addon/caelestiafox if you have not already done so.' end # Generate scheme stuff if needed if ! test -f $state/caelestia/scheme.json caelestia scheme set -n shadotheme sleep .5 hyprctl reload end # Start the shell caelestia shell -d > /dev/null log 'Done!'