# THIS IS CURRENTLY EXPERIMENTAL. REVIEW AND TEST FIRST. NEVER RUN ON MAIN # MACHINE WITHOUT A BACKUP OF VIMFILES AND DOTFILES # Links configuration files to the ones listed here. Backup and remove your's # and then run this script while inside repo directory. # # In Windows it has to be run with git-bash. # # Note: This solution is lazy and causes some problems. Like not being able to # track vim pluggins. # # As always, ArchLinux's Wiki has a great article explaining dotfiles and how # people usually manage them. # https://wiki.archlinux.org/title/Dotfiles # FIXME: This is broken since I moved the directories. Change all $PWD with # $PWD/config and it should work. But make this simpler. The "copy" # mode is useless. Each user should have a copy of this and then use the # "slink" mode. That way you can keep track of changes made, and then # even add a branch (e.g., pulse15, x220) to the repo. exit # Config # ====== mode=$1 # copy,slink # Prepare # ======= # HOME variable must be available if [[ -z $XDG_CONFIG_HOME ]]; then XDG_CONFIG_HOME="$HOME/.config" mkdir -p $XDG_CONFIG_HOME fi if [[ $mode = "--help" ]]; then echo "You might want to first run: $0 echo" echo "Revise the output" echo "And only then run: $0 slink" exit elif [[ $mode = "copy" ]]; then cp_or_ln="cp" echo Why? Custom modifications will be difficult to track. echo Maybe not a good idea. Good bye. exit elif [[ $mode = "slink" ]]; then cp_or_ln="ln -siv" # if you are fearless add the `-f` option elif [[ $mode = "echo" ]]; then cp_or_ln="echo ln -siv" else echo "Usage: $0 copy|slink|echo" exit fi prompt() { read -p "Install $1 configuration files? [Y/n/e(exit)] " yesno yesno=$(echo $yesno | tr '[:upper:]' '[:lower:]') case $yesno in y | yes | "" ) return 0;; e | exit ) exit;; * ) return 1;; esac } # Install # ======= # FIXME: If $PWD has spaces in it, this might fail. # Filewise # -------- if prompt "bash"; then eval $cp_or_ln " ${PWD}/bash/bash_profile $HOME/.bash_profile" eval $cp_or_ln " ${PWD}/bash/bashrc $HOME/.bashrc" eval $cp_or_ln " ${PWD}/bash/bash_aliases $HOME/.bash_aliases" eval $cp_or_ln " ${PWD}/bash/inputrc $HOME/.inputrc" fi if prompt "vim"; then # `~/.vimrc` takes priority over `~/.vim/vimrc`. Remove the former if it # exists. # # In windows it's `%userprofile%/vimfiles/` VIMFILES="$HOME/.vim" mkdir -p $VIMFILES/{undo,swap,backup,plugins} chmod 0700 $VIMFILES/swap eval $cp_or_ln " ${PWD}/vim/vimrc $VIMFILES/vimrc" eval $cp_or_ln " ${PWD}/vim/fun.vim $VIMFILES/fun.vim" fi if prompt "Xorg"; then eval $cp_or_ln " ${PWD}/xorg/xinitrc $HOME/.xinitrc" eval $cp_or_ln " ${PWD}/xorg/xbindkeysrc $HOME/.xbindkeysrc" fi # Directorywise # ------------- if prompt "nvim"; then eval $cp_or_ln " ${PWD}/nvim $XDG_CONFIG_HOME" fi if prompt "tmux"; then eval $cp_or_ln " ${PWD}/tmux $XDG_CONFIG_HOME" fi if prompt "git"; then eval $cp_or_ln " ${PWD}/git $XDG_CONFIG_HOME" eval $cp_or_ln " ${PWD}/git/git-prompt.sh $HOME/.git-prompt.sh" fi if prompt "zathura"; then eval $cp_or_ln " ${PWD}/zathura $XDG_CONFIG_HOME" fi if prompt "mpv"; then eval $cp_or_ln " ${PWD}/mpv $XDG_CONFIG_HOME" fi echo "all done :)"