256 lines
6.5 KiB
Bash
Executable File
256 lines
6.5 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
################################################################################
|
|
## Home Config Backup Script
|
|
## 2012-11-01
|
|
################################################################################
|
|
|
|
## This script should be compatible with ksh, bash and zsh. Issue with sh
|
|
## however: we use arrays. Therefore we do not comply with POSIX and use some
|
|
## extended syntax for arrays and file input -- the <(...) syntax.
|
|
|
|
## 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="czf"
|
|
|
|
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="czf"
|
|
;;
|
|
"xz")
|
|
ARCEXT="tar.xz"
|
|
ARCOPT="cJf"
|
|
;;
|
|
*)
|
|
ARCEXT="tar.gz"
|
|
ARCOPT="czf"
|
|
;;
|
|
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
|
|
|
|
##==============================================================================
|
|
## Packages list
|
|
##==============================================================================
|
|
|
|
HOST=$(hostname)
|
|
|
|
## Arch Linux
|
|
if [ -e "/usr/bin/pacman" ]; then
|
|
|
|
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'
|
|
|
|
comm -3 <(eval "${PKG_LOCAL}") <(eval "${PKG_FOREIGN}") >"${ARCH_PKG_OFFICIAL}-${HOST}"
|
|
|
|
eval "${PKG_EXPLICIT}" >"${ARCH_PKG_EXPLICIT}-${HOST}"
|
|
eval "${PKG_FOREIGN}" >"${ARCH_PKG_AUR}-${HOST}"
|
|
fi
|
|
|
|
## FreeBSD
|
|
if [ "$(uname)" = "FreeBSD" ]; then
|
|
pkg_info | cut -f1 -d' ' >"$HOME/.pkg-freebsd-${HOST}"
|
|
fi
|
|
|
|
## TeXlive
|
|
if type tlmgr >/dev/null 2>&1; then
|
|
HOST=$(hostname)
|
|
|
|
## We use <TAB> in the sed expressions.
|
|
TEXLIVE_BASIC="$(tlmgr info collection-basic --list | sed -n '/^ /{s/ //g;p;}' | sort)"
|
|
TEXLIVE_ALL="$(tlmgr info --only-installed | grep -v 'x86_64\|amd64' | cut -d' ' -f2 | cut -f1 -d':' | sort)"
|
|
|
|
comm -3 <(echo "$TEXLIVE_BASIC") <(echo "$TEXLIVE_ALL") | sed 's/ //g' >"$HOME/.pkg-texlive-$(uname)-${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
|
|
FILELIST=(${FILELIST[*]} ".config/awesome/rc.lua")
|
|
FILELIST=(${FILELIST[*]} ".config/awesome/themes/custom/theme.lua")
|
|
|
|
## cmus
|
|
FILELIST=(${FILELIST[*]} ".cmus/rc")
|
|
|
|
## DWB
|
|
FILELIST=(${FILELIST[*]} ".config/dwb/searchengines")
|
|
FILELIST=(${FILELIST[*]} ".config/dwb/settings")
|
|
|
|
## Emacs
|
|
FILELIST=(${FILELIST[*]} ".emacs")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/abbrev_defs")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/functions.el")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/main.el")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/modes.el")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/plugins.el")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/snippets")
|
|
FILELIST=(${FILELIST[*]} ".emacs.d/theme.el")
|
|
|
|
## GTK
|
|
FILELIST=(${FILELIST[*]} ".gtkrc-2.0")
|
|
# FILELIST=(${FILELIST[*]} ".config/gtk-3.0/settings.ini")
|
|
|
|
## Git
|
|
FILELIST=(${FILELIST[*]} ".gitconfig")
|
|
|
|
## Homeinit
|
|
FILELIST=(${FILELIST[*]} ".homeinit")
|
|
|
|
## Luakit
|
|
FILELIST=(${FILELIST[*]} ".config/luakit/rc.lua")
|
|
FILELIST=(${FILELIST[*]} ".config/luakit/globals.lua")
|
|
|
|
## Mutt
|
|
FILELIST=(${FILELIST[*]} ".muttrc")
|
|
FILELIST=(${FILELIST[*]} ".mutt.d/colors.ambrevar")
|
|
FILELIST=(${FILELIST[*]} ".mutt.d/colorset.sh")
|
|
FILELIST=(${FILELIST[*]} ".mutt.d/mailcap")
|
|
|
|
## Netinit
|
|
FILELIST=(${FILELIST[*]} ".netinit")
|
|
|
|
## Ranger
|
|
FILELIST=(${FILELIST[*]} ".config/ranger/apps.py")
|
|
FILELIST=(${FILELIST[*]} ".config/ranger/options.py")
|
|
FILELIST=(${FILELIST[*]} ".config/ranger/rc.conf")
|
|
FILELIST=(${FILELIST[*]} ".config/ranger/scope.sh")
|
|
|
|
## README
|
|
FILELIST=(${FILELIST[*]} "README")
|
|
|
|
## rtorrent
|
|
FILELIST=(${FILELIST[*]} ".rtorrent.rc")
|
|
|
|
## Shells
|
|
FILELIST=(${FILELIST[*]} ".bash_profile")
|
|
FILELIST=(${FILELIST[*]} ".bashrc")
|
|
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
|
|
FILELIST=(${FILELIST[*]} ".texmf")
|
|
|
|
## Vim
|
|
FILELIST=(${FILELIST[*]} ".vimrc")
|
|
|
|
## Xinit
|
|
FILELIST=(${FILELIST[*]} ".xinitrc")
|
|
|
|
## XKB
|
|
FILELIST=(${FILELIST[*]} ".xkb")
|
|
|
|
## Xresource
|
|
FILELIST=(${FILELIST[*]} ".Xresources")
|
|
|
|
##==============================================================================
|
|
## Archiving
|
|
##==============================================================================
|
|
|
|
tar ${ARCOPT} "${ARCHIVENAME}.${ARCEXT}" -C "$HOME" ${FILELIST[*]} -C "$SCRIPTPATH" "$(basename "$0")"
|
|
|
|
##==============================================================================
|
|
## Cleaning
|
|
##==============================================================================
|
|
cd "${OLDPATH}"
|
|
|
|
## Set Debug mode off
|
|
if [ "$DEBUG" = "yes" ]; then
|
|
set +x
|
|
fi
|