#! /bin/bash ##################################################################### # ___ __ ___ __ # __| _/ ____ _/ |_ \_ |__ _____ ____ | | ____ ________ # / __ | / __ \\ __\ | __ \\__ \ _/ ___\| |/ / | \____ \ # / /_/ |( \_\ )| | | \_\ \/ __ \_ \___| \| | / |_\ \ # \____ | \____/ |__| |___ /____ /\___ /__|_ \____/| ___/ # \/ \/ \/ \/ \/ |__| # # by danix # ##################################################################### set -euo pipefail # Colors for output GREEN='\033[0;32m' BLUE='\033[0;34m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color ### DIRECTORIES WORKDIR=$(pwd) # Output directory #DEFAULT_OUTPUT_DIR="${HOME}/Programming/GIT/my-dotfiles" DEFAULT_OUTPUT_DIR="/tmp/my-dotfiles" # The list of dotfiles DOTFILES=( # Shell configurations ".bashrc" ".bash_profile" ".bash_aliases" ".bash_functions" ".dir_colors" ".lessfilter" ".profile.d" # Shell history (optional - comment out if you don't want history) # ".bash_history" # Git configuration ".gitconfig" ".gitignore_global" ".gitmessage" # Desktop ".fonts" ".icons" ".local/share/applications" ".local/share/icons" ".user-icon.jpg" # Editors ".config/nvim" ".config/sublime-text" # hyprland ".config/hypr" ".config/wal" ".config/waybar" ".config/qarma.conf" # firefox # ".mozilla" # thunderbird # ".thunderbird" # music players ".config/mpd" ".config/rmpc" ".config/sayonara" ".config/haruna" ".config/harunarc" # other programs ".config/bash-notes.rc" ".config/cherrytree" ".config/conky" ".config/draw.io" ".config/featherpad" ".config/htop" ".config/joplin-desktop" ".config/kitty" ".config/lximage-qt" ".config/lxqt" ".config/mimeapps.list" ".config/pcmanfm-qt" ".config/powerline" ".config/qpdfview" ".config/rofi" # pandoc ".local/share/pandoc/" # my executables "bin" ### SYSTEM FILES # bash completion "/etc/bash_completion.d" ) # helper function to check if a string ($2) begins with another string ($1) beginswith() { case $2 in "$1"*) true ;; *) false ;; esac; } # clear the screen before we output anything clear echo -e "${YELLOW}Local Git Repository: ${NC}" if [[ -d $DEFAULT_OUTPUT_DIR ]]; then echo -e "\t${BLUE}$DEFAULT_OUTPUT_DIR ${GREEN} ${NC}" # it exists, so we check for subdirectories # - home # - system [ -d $DEFAULT_OUTPUT_DIR/home ] || mkdir -p $DEFAULT_OUTPUT_DIR/home [ -d $DEFAULT_OUTPUT_DIR/system ] || mkdir -p $DEFAULT_OUTPUT_DIR/system # check if we are in a git repository cd $DEFAULT_OUTPUT_DIR if [[ $(git rev-parse --is-inside-work-tree) == "true" ]]; then # we are inside a git repo echo -e "${GREEN}Git Repository already initialized.${NC}" else echo -e "${YELLOW}Initializing Git Repository. Don't forget to add your remotes.${NC}" git init git add . fi else echo -e "\t${BLUE}$DEFAULT_OUTPUT_DIR ${RED} ${NC}" # our backup directory doesn't exists, so we make it echo -e "${YELLOW}creating our backup directories${NC}" mkdir -p $DEFAULT_OUTPUT_DIR/{home,system} echo -e "${YELLOW}Initializing Git Repository. Don't forget to add your remotes.${NC}" cd $DEFAULT_OUTPUT_DIR git init git add . fi # reset colors echo -e $NC cd $WORKDIR # we iterate all dotfiles in the list for i in ${DOTFILES[@]}; do # if it's a file in my home if [[ -f ${HOME}/$i ]]; then echo -e "${GREEN}${HOME}/$i\t  ${NC}" # it exists, we copy it to our output directory rsync -a ${HOME}/$i ${DEFAULT_OUTPUT_DIR}/home/ && echo -e "\t ${GREEN}Copied\t  ${NC}" # if it's a directory in my home elif [[ -d ${HOME}/$i ]]; then echo -e "${BLUE}${HOME}/$i\t  ${NC}" # it exists, we copy it to our output directory rsync -a ${HOME}/$i ${DEFAULT_OUTPUT_DIR}/home/ && echo -e "\t ${GREEN}Copied\t  ${NC}" # if it begins with a / it's a system file/directory elif beginswith "/" $i; then # if it's a file if [[ -f $i ]]; then echo -e "${GREEN}$i\t  ${NC}" # it exists, we copy it to our output directory rsync -a $i ${DEFAULT_OUTPUT_DIR}/system/ && echo -e "\t ${GREEN}Copied\t  ${NC}" # if it's a directory elif [[ -d $i ]]; then echo -e "${BLUE}$i\t  ${NC}" # it exists, we copy it to our output directory rsync -a $i ${DEFAULT_OUTPUT_DIR}/system/ && echo -e "\t ${GREEN}Copied\t  ${NC}" fi # if it doesn't exists else echo -e "\n${RED}NOT FOUND: ${i}\t  ${NC}\n" fi done echo -e "\n${GREEN}Adding all copied files to git.${NC}" cd $DEFAULT_OUTPUT_DIR git add . # reset colors before exiting echo -e $NC cd $WORKDIR exit 0