My Shell Shortcuts
Git Config Commands
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.dt difftool
git config --global alias.mt mergetool
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.lol "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.lola "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short --all"
git config --global alias.fpull 'pull --ff-only --all --prune'
git config --global alias.publish '!git push -u origin $(git symbolic-ref --short HEAD)'
git config --global alias.unpublish '!git push origin --delete $(git symbolic-ref --short HEAD)'
git config --global alias.spush 'push --recurse-submodules=on-demand'
git config --global alias.sdiff "!git diff && git submodule foreach 'git diff'"
git config --global alias.supdate 'submodule update --remote --rebase'
git config --global alias.alias 'config --get-regexp ^alias\.'
git config --global alias.smerge 'merge --squash'
git config --global alias.amend '!git add . && git commit --amend --no-edit && git push -f'
alias a='git add -u'
function ci() {
git commit -m "$*" && git push origin main
}
alias p='git push'
alias c="claude --dangerously-skip-permissions"
alias cc="claude --dangerously-skip-permissions --continue"
alias ccc="claude --dangerously-skip-permissions --continue --chrome"
alias cr="claude --dangerously-skip-permissions --resume"
alias claude="claude --dangerously-skip-permissions"
alias codex="codex --yolo --enable collaboration_modes"
alias o="codex --enable collaboration_modes"
alias oo="codex --enable collaboration_modes --continue"
alias ooo="codex --enable collaboration_modes --continue --chrome"
alias or="codex --enable collaboration_modes --resume" Install Claude Code and Codex
command -v claude >/dev/null 2>&1 || npm install -g @anthropic-ai/claude-code; command -v codex >/dev/null 2>&1 || npm install -g @openai/codex
Auto-accept Claude Code plans (ap)
Installs an ExitPlanMode hook plus a tiny ap command.
ap on = plans execute without the approval dialog (start planning and walk away);
ap off = normal approval; ap t = toggle. Requires jq.
mkdir -p ~/.claude/hooks ~/.local/bin
cat > ~/.claude/hooks/auto-approve-plan.sh <<'APHOOK'
#!/bin/bash
# PreToolUse hook on ExitPlanMode: auto-approve the plan when the flag file exists.
# Toggle with the ap command (~/.local/bin/ap). No flag = normal approval dialog.
FLAG="$HOME/.claude/auto-approve-plans"
if [ -f "$FLAG" ]; then
cat <<'EOF'
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"permissionDecisionReason": "auto-approve-plans flag is set (toggle with ap)"
},
"systemMessage": "Plan auto-approved (ap is ON)"
}
EOF
fi
exit 0
APHOOK
cat > ~/.local/bin/ap <<'AP'
#!/bin/sh
# ap — toggle auto-accepting Claude Code plans (plan-mode ExitPlanMode auto-approve).
# ap show status
# ap on auto-accept plans (walk away during planning)
# ap off require manual plan approval
# ap t toggle
FLAG="$HOME/.claude/auto-approve-plans"
status() { [ -f "$FLAG" ] && echo "auto-accept plans: ON" || echo "auto-accept plans: OFF"; }
case "$1" in
on) touch "$FLAG"; status ;;
off) rm -f "$FLAG"; status ;;
t|toggle) if [ -f "$FLAG" ]; then rm -f "$FLAG"; else touch "$FLAG"; fi; status ;;
""|s|status) status ;;
*) echo "usage: ap [on|off|t|status]" >&2; exit 1 ;;
esac
AP
chmod +x ~/.claude/hooks/auto-approve-plan.sh ~/.local/bin/ap
[ -f ~/.claude/settings.json ] || echo '{}' > ~/.claude/settings.json
tmp=$(jq '.hooks.PreToolUse = ((.hooks.PreToolUse // []) | if any(.matcher? == "ExitPlanMode") then . else . + [{"matcher":"ExitPlanMode","hooks":[{"type":"command","command":"bash ~/.claude/hooks/auto-approve-plan.sh","timeout":5}]}] end)' ~/.claude/settings.json) && echo "$tmp" > ~/.claude/settings.json
ap Paste into terminal to add to ~/.zshrc
cat <<'EOF' >> ~/.zshrc
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.dt difftool
git config --global alias.mt mergetool
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.lol "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.lola "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short --all"
git config --global alias.fpull 'pull --ff-only --all --prune'
git config --global alias.publish '!git push -u origin $(git symbolic-ref --short HEAD)'
git config --global alias.unpublish '!git push origin --delete $(git symbolic-ref --short HEAD)'
git config --global alias.spush 'push --recurse-submodules=on-demand'
git config --global alias.sdiff "!git diff && git submodule foreach 'git diff'"
git config --global alias.supdate 'submodule update --remote --rebase'
git config --global alias.alias 'config --get-regexp ^alias\.'
git config --global alias.smerge 'merge --squash'
git config --global alias.amend '!git add . && git commit --amend --no-edit && git push -f'
alias a='git add -u'
function ci() {
git commit -m "$*" && git push origin main
}
alias p='git push'
alias c="claude --dangerously-skip-permissions"
alias cc="claude --dangerously-skip-permissions --continue"
alias ccc="claude --dangerously-skip-permissions --continue --chrome"
alias cr="claude --dangerously-skip-permissions --resume"
alias claude="claude --dangerously-skip-permissions"
alias codex="codex --yolo --enable collaboration_modes"
alias o="codex --enable collaboration_modes"
alias oo="codex --enable collaboration_modes --continue"
alias ooo="codex --enable collaboration_modes --continue --chrome"
alias or="codex --enable collaboration_modes --resume"
EOF
source ~/.zshrc