From eb0206575a1bc12ca5bc003f77af651e3bfe0b47 Mon Sep 17 00:00:00 2001 From: David Tomaschik Date: Sat, 19 Oct 2019 12:47:14 -0700 Subject: [PATCH] Add skelify function. --- dotfiles/zshrc.d/skelify.zsh | 43 ++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 dotfiles/zshrc.d/skelify.zsh diff --git a/dotfiles/zshrc.d/skelify.zsh b/dotfiles/zshrc.d/skelify.zsh new file mode 100644 index 0000000..0535453 --- /dev/null +++ b/dotfiles/zshrc.d/skelify.zsh @@ -0,0 +1,43 @@ +#!/bin/zsh +# +# Skelify -- move a file to my .skel and setup symlinks + +function skelify { + local target + local whichdir + local relhome + local fname + local fulltarget + for target in $~@; do + if test -d ${target} ; then + skelify ${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}) + relhome=${whichdir#${HOME}/} + fulltarget="${whichdir}/${fname}" + if [[ ${relhome} == ${whichdir} ]] ; then + 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} + mkdir -p ${HOME}/.skel/${relhome} + mv ${target} ${HOME}/.skel/${relhome}/${fname} + ln -s ${fulltarget} ${HOME}/.skel/${relhome}/${fname} + else + echo ${target} is not a directory or file. >/dev/stderr + return 1 + fi + done +}