225 lines
5.5 KiB
Bash
Executable File
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
|