#!/usr/bin/env bash [ -z "$DOTCTLCMD" ] && DOTCTLCMD="git --git-dir=$DOTFILEDIR --work-tree=$HOME" case $1 in ls) echo "==> ${DOTFILEBRANCH:=main} <==" $DOTCTLCMD ls-tree --full-tree -r --name-only $DOTFILEBRANCH echo "==> staging <==" $DOTCTLCMD diff --name-only --cached ;; sync) $DOTCTLCMD add -A ~/. echo "==> staging <==" $DOTCTLCMD diff --name-only --cached ;; add) $DOTCTLCMD add -f ${@:2} ;; amend) $DOTCTLCMD commit --amend --no-edit ${@:2} ;; autocheckout) $DOTCTLCMD checkout ${DOTFILEBRANCH:-main} ${@:2} ;; cmd) $DOTCTLCMD ${@:2} ;; commit) $DOTCTLCMD commit ${@:2} ;; diff) $DOTCTLCMD diff --staged ${@:2} ;; log) $DOTCTLCMD log ${@:2} ;; pull) $DOTCTLCMD pull ${@:2} ;; push) $DOTCTLCMD push -u origin ${DOTFILEBRANCH:-main} ;; rm) $DOTCTLCMD rm --cached -r -f ${@:2};; sdiff) $DOTCTLCMD diff --staged ${@:2} ;; *) echo "dotctl - stupid bare git repo wrapper for dotfiles" echo "Setup:" echo " * cerate a bare repo, specify the remote repo and set its path to DOTFILEDIR" echo " * specify a branch as DOTFILEBRANCH or use main by default" echo "Usage: dotctl [OPTION] ([ARGUMENT])" echo "Options:" echo " add [FILE]: add FILE to the repository" echo " amend: amend changes to an existing commit" echo " commit: commit changes" echo " diff: show diff of staged changes" echo " log: same as normal log" echo " ls: list files staging and used branch" echo " push: push to DOTFILEBRANCH (default: main, currently: ${DOTFILEBRANCH:-main})" echo " rm [FILE]: remove FILE from tracking only" echo " sdiff: diff staged changed" echo " sync: add all changes in tracked files" ;; esac