mirror of
https://github.com/Matir/skel.git
synced 2026-05-25 21:19:09 -07:00
59 lines
1.6 KiB
Bash
59 lines
1.6 KiB
Bash
#!/bin/zsh
|
|
#
|
|
# Skelify -- move a file to my .skel and setup symlinks
|
|
|
|
function skelify {
|
|
local -A opts
|
|
zparseopts -D -A opts -overlay:
|
|
|
|
local overlay_name="${opts[--overlay]}"
|
|
local base_skel_dir="${HOME}/.skel/dotfiles"
|
|
local extra_args=()
|
|
if [[ -n "${overlay_name}" ]]; then
|
|
base_skel_dir="${HOME}/.skel/dotfile_overlays/${overlay_name}"
|
|
extra_args=(--overlay "${overlay_name}")
|
|
fi
|
|
|
|
local target
|
|
local whichdir
|
|
local relhome
|
|
local fname
|
|
local fulltarget
|
|
for target in $~@; do
|
|
if test -d ${target} ; then
|
|
skelify "${extra_args[@]}" ${target}/* || return 1
|
|
elif test -f ${target} ; then
|
|
if ! whichdir=$(cd $(dirname $target) && pwd); then
|
|
echo Could not find directory for $target >/dev/stderr
|
|
return 1
|
|
fi
|
|
fname=$(basename ${target})
|
|
fulltarget="${whichdir}/${fname}"
|
|
if [[ ${whichdir} == ${HOME} ]] ; then
|
|
relhome=""
|
|
elif [[ ${whichdir} == ${HOME}/* ]] ; then
|
|
relhome=${whichdir#${HOME}/}
|
|
else
|
|
echo ${whichdir} is not in home >/dev/stderr
|
|
return 1
|
|
fi
|
|
if [[ ${relhome:0:1} == "." ]] ; then
|
|
relhome=${relhome:1}
|
|
elif [[ ${fname:0:1} == "." ]] ; then
|
|
fname=${fname:1}
|
|
else
|
|
echo skelify only supports dotfiles >/dev/stderr
|
|
return 1
|
|
fi
|
|
echo ${target}
|
|
local skeldir="${base_skel_dir}/${relhome}"
|
|
mkdir -p "${skeldir}"
|
|
mv ${target} "${skeldir}/${fname}"
|
|
ln -s "${skeldir}/${fname}" "${fulltarget}"
|
|
else
|
|
echo ${target} is not a directory or file. >/dev/stderr
|
|
return 1
|
|
fi
|
|
done
|
|
}
|