You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dotbare/dotbare

71 lines
2.6 KiB
Plaintext

4 years ago
#!/usr/bin/env bash
#
# Main entry script for dotbare, used to route command to appropriate scripts
#
# @params
# Globals
# ${mydir}: string, directory of the executing script, used for sourcing helpers
# Arguments
# action_command: sub commands dotbare should run
# General git command: log, status etc
# dotbare specific commands: fadd | frm | fpop | freset | fcheckout | help etc
# option flags:
# check sub commands for available option flags
mydir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
source "${mydir}"/helper/set_variable.sh
4 years ago
function usage() {
echo -e "Usage: dotbare [-h] [-v] [COMMANDS] [OPTIONS] ...\n"
echo -e "Interactively manage dotfiles with the help of fzf and git bare repository."
echo -e "To see all dotbare specific COMMANDS, run dotbare without any arguments.\n"
echo -e "optional arguments:"
echo -e " -h, --help\t\tshow this help message and exit."
echo -e " -v, --version\t\tshow dotbare current version.\n"
echo -e "Available commands:"
echo -e " All git commands are available, treat dotbare as git."
echo -e " fadd \t\tstage files/directories interactively."
echo -e " freset \t\treset(unstage) files or commit interactively."
echo -e " funtrack \t\tuntrack files interactively."
echo -e " fstash \t\tmanage stash interactively."
echo -e " fcheckout \t\tcheckout branch/files/commit interactively."
echo -e " fstat \t\tinteractive menu to toggle stage/unstage."
echo -e " fedit \t\tinteractively select files/commit and edit."
echo -e " flog \t\tmanage commits interactively."
echo -e " fbackup \t\tperform backup for tracked files."
echo -e " fupgrade \t\tupdate dotbare to the latest master."
echo -e " finit \t\tinitialise dotbare or migrate dotfiles to a new machine."
}
# if no argument, display all possible actions
if [[ "$#" -eq 0 ]]; then
find "${mydir}"/scripts/* -type f -print0 \
| xargs -I __ -0 basename __ \
| fzf --no-multi --header='Available commands' --preview="${mydir}/dotbare {} -h" \
| xargs -I __ "${mydir}"/dotbare __ -h
exit 0
fi
[[ "$*" == 'add --all' ]] && \
echo 'If you intend to stage all modified file, run dotbare add -u' && \
echo "dotbare disabled add --all option as this will stage every single file in ${DOTBARE_TREE}" && \
exit 1
case "$1" in
--help|-h)
usage
exit 0
;;
-v|--version)
echo "Current dotbare version: ${DOTBARE_VERSION}"
exit 0
;;
*)
if [[ -x "${mydir}/scripts/$1" ]]; then
exec "${mydir}/scripts/$1" "${@:2}"
fi
;;
esac
/usr/bin/git --git-dir="${DOTBARE_DIR}" --work-tree="${DOTBARE_TREE}" "$@"