Files
2026-03-23 23:50:58 +00:00

134 lines
3.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#autoload
# Helper: backup a file via a dummy backup script/command
confe_backup_file() {
emulate -L zsh
local file=${1:A}
if [[ -z $file ]]; then
print -u2 "confe: no file passed to confe_backup_file"
return 1
fi
if [[ ! -e $file ]]; then
print -u2 "confe: cannot backup, file does not exist: $file"
return 1
fi
# You can override this with: CONFE_BACKUP_CMD=your-script
local backup_cmd=${CONFE_BACKUP_CMD:-echo}
# Dummy backup – replace with your real backup script
"$backup_cmd" "$file"
}
# Helper: stage a file in its git repository (if there is one)
confe_stage_file() {
emulate -L zsh
local file=${1:A}
if [[ -z $file ]]; then
print -u2 "confe: no file passed to confe_stage_file"
return 1
fi
if [[ ! -e $file ]]; then
print -u2 "confe: cannot stage, file does not exist: $file"
return 1
fi
local dir=${file:h}
if git -C "$dir" rev-parse --is-inside-work-tree &>/dev/null; then
git -C "$dir" add "$file"
else
print -u2 "confe: $file is not inside a git repository"
return 1
fi
}
confe() {
emulate -L zsh
# Main executable for editing – define here.
# You can also override with CONFE_EDIT_CMD in your env.
local edit_cmd=${CONFE_EDIT_CMD:-${EDITOR:-vim}}
[[ -z $edit_cmd ]] && edit_cmd=nvim
local do_backup=false
local do_staged=false
local -a positional
# Option parsing: --backup/-b, --staged/-s
while (( $# > 0 )); do
case "$1" in
--backup|-b)
do_backup=true
;;
--staged|-s)
do_staged=true
;;
--)
shift
positional+=("$@")
break
;;
--*)
print -u2 "confe: unknown option: $1"
return 1
;;
-*)
print -u2 "confe: unknown short option: $1"
return 1
;;
*)
positional+=("$1")
;;
esac
shift
done
set -- "${positional[@]}"
local topic=$1
if [[ -z $topic ]]; then
print -u2 "usage: confe [--backup|-b] [--staged|-s] (alias|keybindings|options|path|packages|ssh|brewfile)"
return 1
fi
# Associative array: topic → file path
local -A CONFE_FILES=(
alias "$ZDOTDIR/alias.zsh"
keybindings "$ZDOTDIR/keybindings.zsh"
options "$ZDOTDIR/options.zsh"
path "$ZDOTDIR/path.zsh"
packages "$DOTFILES/antidote/zsh_plugins.txt"
ssh "$HOME/.ssh/config"
brewfile "$DOTFILES/00-homebrew/Brewfile"
)
local file=${CONFE_FILES[$topic]}
if [[ -z $file ]]; then
print -u2 "confe: unknown topic: $topic"
print -u2 "valid topics: ${(j:, :)${(k)CONFE_FILES}}"
return 1
fi
# Run backup first if requested
if $do_backup; then
confe_backup_file "$file" || return $?
fi
# Main dummy command – you replace by setting edit_cmd / CONFE_EDIT_CMD
eval "$edit_cmd" $file(:P) || return $?
if [[ "${file}(:e)" == "zsh" ]]; then
source $file(:P)
fi
# Stage changes if requested
if $do_staged; then
confe_stage_file "$file" || return $?
fi
}
confe ${1:-ssh}