ambevar-dotfiles/.save

225 lines
5.5 KiB
Bash
Executable File

#!/bin/bash
################################################################################
## Home Config Backup Script
## 2012-05-12
################################################################################
## Note for Zsh: because of the KSH-style arrays (index starting at 0), the
## KSH_ARRAYS option must be used.
##==============================================================================
## Options
##==============================================================================
## Set Debug mode on
DEBUG=no
if [ "$DEBUG" = "yes" ]; then
set -x
fi
## Variables
OLDPATH="$(pwd)" # Enclose into a sub or use $OLDPATH
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="$(pwd)/$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
ARCH_PKG_OFFICIAL="$HOME/.arch-pkg-official"
ARCH_PKG_EXPLICIT="$HOME/.arch-pkg-explicit"
ARCH_PKG_AUR="$HOME/.arch-pkg-aur"
ARCH_MIRRORS="$HOME/.arch-mirrors"
PKG_LOCAL='pacman -Qq | sort'
PKG_FOREIGN='pacman -Qmq | sort'
PKG_EXPLICIT='pacman -Qeq | sort'
PKG_FILTER='grep \< | cut -f2 -d" "'
diff <(eval "${PKG_LOCAL}") <(eval "${PKG_FOREIGN}") | eval "${PKG_FILTER}" >"${ARCH_PKG_OFFICIAL}-$(hostname)"
eval "${PKG_EXPLICIT}" >"${ARCH_PKG_EXPLICIT}-$(hostname)"
eval "${PKG_FOREIGN}" >"${ARCH_PKG_AUR}-$(hostname)"
cat /etc/pacman.conf | grep "^\[">"${ARCH_MIRRORS}-$(hostname)"
fi
##==============================================================================
## Let's fill the file list:
##==============================================================================
FILELIST=()
# Arch Linux package list
if [ -e "/usr/bin/pacman" ]; then
FILELIST[${#FILELIST[*]}]="$(find . -maxdepth 1 -name '.arch*' -exec basename {} \;)"
fi
# Awesome
FILELIST[${#FILELIST[*]}]="$(find .config/awesome \( -name "*.lua" -o -name "*.sh" \) -type f)"
# cmus
FILELIST[${#FILELIST[*]}]="$(ls .cmus/{autosave,*.theme}) "
# Conky
FILELIST[${#FILELIST[*]}]=".conkyrc"
# Emacs
FILELIST[${#FILELIST[*]}]=".emacs"
FILELIST[${#FILELIST[*]}]=".emacs.d/plugins"
FILELIST[${#FILELIST[*]}]=".emacs.d/abbrev_defs"
# GTK
FILELIST[${#FILELIST[*]}]=".gtkrc-2.0"
FILELIST[${#FILELIST[*]}]=".config/gtk-3.0/settings.ini"
# Luakit
FILELIST[${#FILELIST[*]}]=".config/luakit/"
# LXTerminal
FILELIST[${#FILELIST[*]}]=".config/lxterminal/lxterminal.conf"
# MPlayer
FILELIST[${#FILELIST[*]}]=".mplayer"
# Mutt
# FILELIST[${#FILELIST[*]}]=".muttrc"
# Nano
FILELIST[${#FILELIST[*]}]=".nanorc"
# Netinit
FILELIST[${#FILELIST[*]}]=".netinit"
# Ranger
FILELIST[${#FILELIST[*]}]="$(ls -d --indicator-style=none .config/ranger/*|grep -vi 'pycache\|bookmarks\|history\|tagged')"
# rtorrent
FILELIST[${#FILELIST[*]}]=".rtorrent.rc"
# Shells
FILELIST[${#FILELIST[*]}]=".bashrc"
FILELIST[${#FILELIST[*]}]=".zshrc"
FILELIST[${#FILELIST[*]}]="$(ls .shell.d/*|grep -vi 'bhistory')"
# Taskwarrior
FILELIST[${#FILELIST[*]}]=".taskrc"
# TeXlive
FILELIST[${#FILELIST[*]}]="$(find texmf -type f|grep -vi 'moderncv/examples\|moderncv/manual\|.bzr')"
# 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 -zcvf "$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