ambevar-dotfiles/.save

264 lines
6.1 KiB
Bash
Executable File

#!/bin/bash
################################################################################
## Home Config Backup Script
## 2012-09-01
################################################################################
## Note for Zsh: because of the Ksh-style arrays (index starting at 0), you
## cannot use array index to append elements to arrays -- otherwise the
## KSH_ARRAYS option for zsh must be used.
##==============================================================================
## Options
##==============================================================================
## Set Debug mode on
DEBUG=no
if [ "$DEBUG" = "yes" ]; then
set -x
fi
## Variables
OLDPATH="$(pwd)"
cd "$HOME"
SCRIPTPATH="$(readlink -f $(dirname "$0"))"
COMPRESSION="gz"
ARCHIVENAME="$HOME/home-config-$(date "+%y-%m-%d-%H%M%S")"
ARCEXT="tar.gz"
ARCOPT="cvzf"
print_help()
{
echo "Synopsis:"
echo " $1 [-o ARCHIVENAME] [-m COMPRESSION]"
echo
echo "Usage:"
echo " default: "
echo " -h:\t\tDisplay this help."
echo " -m: compression method among"
echo " * gz (default)"
echo " * xz"
echo " -o: output archive name (without extension)."
echo ""
echo "Note: xz is not available on older Unices."
}
while getopts ":hm:o:" opt; do
case $opt in
h)
print_help "$0"
exit 1
;;
m)
COMPRESSION="$OPTARG"
;;
o)
ARCHIVENAME="${OLDPATH}/$OPTARG"
;;
?)
print_help "$0"
exit 1
;;
:)
echo "Missing argument."
echo "Use $0 -h for help."
exit 1
;;
esac
done
shift $(($OPTIND - 1))
case $COMPRESSION in
"gz")
ARCEXT="tar.gz"
ARCOPT="cvzf"
;;
"xz")
ARCEXT="tar.xz"
ARCOPT="cvJf"
;;
*)
ARCEXT="tar.gz"
ARCOPT="cvzf"
;;
esac
if [ "${DEBUG}" = "yes" ]; then
echo "COMPRESSION=[$COMPRESSION]"
echo "ARCHIVENAME=[$ARCHIVENAME]"
echo "ARCEXT=[$ARCEXT]"
echo "ARCOPT=[$ARCOPT]"
fi
if [ -e "${ARCHIVENAME}.${ARCEXT}" ]; then
echo "Error: ${ARCHIVENAME}.${ARCEXT} already exists!">&2
exit 0
fi
##==============================================================================
## Arch Linux packages list
##==============================================================================
if [ -e "/usr/bin/pacman" ]; then
HOST=$(hostname)
ARCH_PKG_OFFICIAL="$HOME/.pkg-arch-official"
ARCH_PKG_EXPLICIT="$HOME/.pkg-arch-explicit"
ARCH_PKG_AUR="$HOME/.pkg-arch-aur"
PKG_LOCAL='pacman -Qq | sort'
PKG_FOREIGN='pacman -Qmq | sort'
PKG_EXPLICIT='pacman -Qeq | sort'
diff <(eval "${PKG_LOCAL}") <(eval "${PKG_FOREIGN}") --new-line-format='' --unchanged-group-format='%>' >"${ARCH_PKG_OFFICIAL}-${HOST}"
eval "${PKG_EXPLICIT}" >"${ARCH_PKG_EXPLICIT}-${HOST}"
eval "${PKG_FOREIGN}" >"${ARCH_PKG_AUR}-${HOST}"
fi
##==============================================================================
## Let's fill the file list:
##==============================================================================
FILELIST=()
## Distro + TeXlive Package list
for i in $(find . -maxdepth 1 -name '.pkg*' -exec basename {} \;)
do
FILELIST=(${FILELIST[*]} "$i")
done
## Awesome
for i in $(find .config/awesome \( -name "*.lua" -o -name "*.sh" \) -type f)
do
FILELIST=(${FILELIST[*]} "$i")
done
## cmus
# FILELIST=(${FILELIST[*]} "$(ls .cmus/{autosave,*.theme}) ")
FILELIST=(${FILELIST[*]} ".cmus/autosave")
## Conky
FILELIST=(${FILELIST[*]} ".conkyrc")
## Emacs
FILELIST=(${FILELIST[*]} ".emacs")
FILELIST=(${FILELIST[*]} ".emacs.d/plugins")
FILELIST=(${FILELIST[*]} ".emacs.d/snippets")
FILELIST=(${FILELIST[*]} ".emacs.d/abbrev_defs")
## GnuPG
FILELIST=(${FILELIST[*]} ".gnupg/gpg-agent.conf")
## GTK
FILELIST=(${FILELIST[*]} ".gtkrc-2.0")
FILELIST=(${FILELIST[*]} ".config/gtk-3.0/settings.ini")
## Git
FILELIST=(${FILELIST[*]} ".gitconfig")
## Homeinit
FILELIST=(${FILELIST[*]} ".homeinit")
## Irssi
# FILELIST=(${FILELIST[*]} ".irssi")
## Luakit
FILELIST=(${FILELIST[*]} ".config/luakit/")
## LXTerminal
# FILELIST=(${FILELIST[*]} ".config/lxterminal/lxterminal.conf")
## MPlayer
# FILELIST=(${FILELIST[*]} ".mplayer")
## Mutt
FILELIST=(${FILELIST[*]} ".muttrc")
for i in $(ls -ad --indicator-style=none .mutt.d/* | grep -vi 'cache')
do
FILELIST=(${FILELIST[*]} "$i")
done
## Nano
# FILELIST=(${FILELIST[*]} ".nanorc")
## Netinit
FILELIST=(${FILELIST[*]} ".netinit")
## Ranger
for i in $(ls -ad --indicator-style=none .config/ranger/* | grep -vi 'pycache\|bookmarks\|history\|tagged')
do
FILELIST=(${FILELIST[*]} "$i")
done
## README
FILELIST=(${FILELIST[*]} "README")
## rtorrent
FILELIST=(${FILELIST[*]} ".rtorrent.rc")
## Shells
FILELIST=(${FILELIST[*]} ".bash_profile")
FILELIST=(${FILELIST[*]} ".zshrc")
for i in $(ls -a .shell.d/*|grep -vi 'bhistory')
do
FILELIST=(${FILELIST[*]} "$i")
done
## Taskwarrior
FILELIST=(${FILELIST[*]} ".taskrc")
## Terminfo
# FILELIST=(${FILELIST[*]} ".terminfo/x/xterm")
## TeXlive
# for i in $(find texmf -type f|grep -vi 'moderncv/examples\|moderncv/manual\|.bzr')
# do
# FILELIST=(${FILELIST[*]} "$i")
# done
## Urlview
# FILELIST=(${FILELIST[*]} ".urlview")
## Vim
FILELIST=(${FILELIST[*]} ".vimrc")
## WMFS
# FILELIST=(${FILELIST[*]} ".config/wmfs")
## Xinit
FILELIST=(${FILELIST[*]} ".xinitrc")
## Xresource
FILELIST=(${FILELIST[*]} ".Xresources")
## Xscreensaver
# FILELIST=(${FILELIST[*]} ".xscreensaver")
##==============================================================================
## Archiving
##==============================================================================
if [ "$DEBUG" = "yes" ]; then
tar ${ARCOPT} "$ARCHIVENAME" -C "$HOME" ${FILELIST[*]} -C "$SCRIPTPATH" "$(basename "$0")" --exclude-vcs
else
tar ${ARCOPT} "${ARCHIVENAME}.${ARCEXT}" -C "$HOME" ${FILELIST[*]} -C "$SCRIPTPATH" "$(basename "$0")" --exclude-vcs >/dev/null
fi
##==============================================================================
## Cleaning
##==============================================================================
cd "${OLDPATH}"
## Set Debug mode off
if [ "$DEBUG" = "yes" ]; then
set +x
fi