#!/usr/bin/env fish function main argparse 'd/desktop' 'g/git' -- $argv set -l start_dir (pwd) and set -l tmp_dir (mktemp --directory 2>/dev/null; or mktemp -d -t 'dotfiles') and set -l cwd (string match -r '\w+$' $start_dir) and set -l uname (uname) or return $status log 'Syncing shell environment configurations' set_color grey setup_tmp_space $cwd $tmp_dir and sync_terminal_env and set_fish_universal_vars and install_fisher_packages and install_nvim_plugins if test -n "$_flag_d" set_color normal log 'Syncing desktop environment configurations' set_color grey sync_desktop_env $uname set_kitty_font_size $uname end if test -n "$_flag_g" set_color normal log 'Sync git config' sync_git_config set_color grey end clean_up_tmp_space $cwd $start_dir $tmp_dir or return $status set_color normal echo -s \n 'Done syncing.' end function setup_tmp_space -a cwd tmp_dir if test ! "$cwd" = 'dotfiles' git clone --recurse-submodules https://github.com/mitchell/dotfiles.git $tmp_dir and cd $tmp_dir end end function sync_terminal_env if ! test -e ~/.config mkdir ~/.config end rsync -aP ./.config/fish ~/.config/ and rsync -aP ./.config/nvim ~/.config/ and rsync -aP ./.tmux-line.conf ~/ and rsync -aP ./.tmux.conf ~/ and rsync -aP ./.vim ~/ and rsync -aP ./.vimrc ~/ and rsync -aP ./.taskrc ~/ end function sync_desktop_env -a uname rsync -aP ./.config/kitty ~/.config/ and rsync -aP ./.config/qutebrowser ~/.config/ and rsync -aP ./.ideavimrc ~/ or return 1 switch $uname case Darwin rsync -aP ./.yabairc ~/ and rsync -aP ./.skhdrc ~/ case Linux rsync -aP ./.config/bspwm ~/.config/ and rsync -aP ./.config/sxhkd ~/.config/ and rsync -aP ./.config/picom ~/.config/ and rsync -aP ./.config/polybar ~/.config/ and rsync -aP ./.config/conky ~/.config/ end end function set_kitty_font_size -a uname if test "$uname" = 'Darwin' sed -i '' -e 's/font_size 11\.0/font_size 13\.0/' ~/.config/kitty/kitty.conf end end function install_fisher_packages eval fisher end function install_nvim_plugins command -q nvim; and nvim +PlugUpgrade +PlugUpdate +qa end function sync_git_config rsync -aP ./.gitconfig ~/ echo 'Please set your git user:' read -P 'name: ' name read -P 'email: ' email git config --global user.name $name git config --global user.email $email end function set_fish_universal_vars source ./fish_universal_vars.fish end function clean_up_tmp_space -a cwd start_dir tmp_dir if test ! "$cwd" = 'dotfiles' cd $start_dir and rm -r $tmp_dir end end function log -a message echo \n"--- $message ---"\n end main $argv