#!/usr/bin/env bash if [[ -z "$XDG_CONFIG_HOME" ]]; then export XDG_CONFIG_HOME="$HOME/.config" fi dfp=$(cd "$(dirname "${BASH_SOURCE[0]}" )/" && pwd) ALERT_AGREEMENT_FILE="$dfp/.agreed-to-erasing-files.lock" # Let user know that this script will delete their current configuration and # that they should read this script before running. We'll use a lock file so # the user only needs to agree once. if [ -f "$ALERT_AGREEMENT_FILE" ]; then # User agreed already - do nothing echo "Linking..." else echo "Running this script may delete existing personal configuration files." echo "Please view this script's source, fully understand it, and backup any" echo "files before continuing." echo "Seriously. Like... entire directories. Just gone." read -r -p "Are you sure you want to continue? [y/N] " response response=${response,,} # to lower case if [[ $response =~ ^(yes|y)$ ]]; then echo "agreed" > "$ALERT_AGREEMENT_FILE" else exit 1 fi fi # TODO: make sure we have an even number, here links=( # desktop environment files "$dfp/de/sway/config" "$XDG_CONFIG_HOME/sway/config" "$dfp/de/bspwm/bspwmrc" "$XDG_CONFIG_HOME/bspwm/bspwmrc" "$dfp/de/sxhkd/sxhkdrc" "$XDG_CONFIG_HOME/sxhkd/sxhkdrc" "$dfp/de/x/resources" "$HOME/.Xresources" "$dfp/de/x/initrc" "$HOME/.xinitrc" "$dfp/de/x/profile" "$HOME/.xprofile" "$dfp/de/x/modmap" "$HOME/.xmodmap" "$dfp/de/compton/compton.conf" "$XDG_CONFIG_HOME/compton.conf" "$dfp/scripts/colors/xresources" "$HOME/.Xresources.colors" # shell files "$dfp/shell/bash/bashrc" "$HOME/.bashrc" "$dfp/shell/bash/bash_profile" "$HOME/.bash_profile" "$dfp/shell/tmux/tmux.conf" "$HOME/.tmux.conf" "$dfp/shell/tmux/layouts" "$HOME/.tmux/layouts" # text editor files "$dfp/apps/neovim/" "$XDG_CONFIG_HOME/nvim" "$dfp/apps/neovim/" "$HOME/.vim" "$dfp/apps/neovim/init.vim" "$HOME/.vimrc" "$dfp/scripts/colors/vim" "$XDG_CONFIG_HOME/nvim/colors/base16-donokai.vim" # gtk configuration files "$dfp/de/gtk/2rc" "$HOME/.gtkrc-2.0" "$dfp/de/gtk/2rc" "$HOME/.gtkrc" "$dfp/de/gtk/3settings.ini" "$XDG_CONFIG_HOME/gtk-3.0/settings.ini" # irc files "$dfp/apps/irssi/" "$HOME/.irssi" "$dfp/apps/weechat/" "$HOME/.weechat" # qutebrowser config files "$dfp/apps/qutebrowser/qutebrowser.conf" "$XDG_CONFIG_HOME/qutebrowser/qutebrowser.conf" "$dfp/apps/qutebrowser/keys.conf" "$XDG_CONFIG_HOME/qutebrowser/keys.conf" # document viewer "$dfp/apps/zathura/" "$XDG_CONFIG_HOME/zathura" # terminal emulator "$dfp/apps/alacritty/" "$XDG_CONFIG_HOME/alacritty" # rofi config "$dfp/apps/rofi/config" "$XDG_CONFIG_HOME/rofi/config" # bar files "$dfp/de/bar/polybar-config" "$XDG_CONFIG_HOME/polybar/config" # ranger config "$dfp/apps/ranger/" "$XDG_CONFIG_HOME/ranger" # mutt config "$dfp/apps/mutt/muttrc" "$XDG_CONFIG_HOME/.muttrc" "$dfp/apps/mutt/muttrc" "$HOME/.muttrc" # neofetch config "$dfp/apps/neofetch/config" "$XDG_CONFIG_HOME/neofetch/config" # git config "$dfp/apps/git/config" "$HOME/.gitconfig" # fontconfig "$dfp/de/fontconfig/" "$XDG_CONFIG_HOME/fontconfig" # XDG user directories "$dfp/shell/user-dirs" "$XDG_CONFIG_HOME/user-dirs.dirs" ) source="" for i in "${links[@]}"; do if [ -n "$source" ]; then if [ -L "$i" ]; then # if symlink exists, delete it rm -rf "$i" fi if [ -f "$i" ]; then # if file exists, delete it rm -rf "$i" fi if [ -d "$i" ]; then # if directory exists, delete it rm -rf "$i" fi # check if the directory that will contain the link exists DIR_TO_LINK=$(dirname "$i") if [ -d "$DIR_TO_LINK" ]; then : else mkdir -p "$DIR_TO_LINK" fi ln -s "$source" "$i" echo "Linked $(basename $source) to $i." source="" else source="$i" fi done echo "Done."