Update dots to handle the new renaming stuff
This commit is contained in:
parent
8010ad7359
commit
d1c45a82e8
3 changed files with 3 additions and 2 deletions
100
local/bin/dots
Executable file
100
local/bin/dots
Executable file
|
@ -0,0 +1,100 @@
|
|||
#!/usr/bin/env zsh
|
||||
|
||||
bootstrap() {
|
||||
echo 'Bootstrapping your dotfiles...' >&2
|
||||
mkdir -p $DOTFILES
|
||||
touch $DOTFILES/.stow
|
||||
if ! hash stow 2>/dev/null; then
|
||||
echo 'GNU Stow is not installed, fetching it...' >&2
|
||||
clone-one stow || return $?
|
||||
STOW=$DOTFILES/stow/local/bin/stow
|
||||
fi
|
||||
|
||||
clone dots git vim zsh || return $?
|
||||
link
|
||||
}
|
||||
|
||||
clone() {
|
||||
echo "Requested packages: $argv" >&2
|
||||
for package in $argv; do
|
||||
clone-one $package || return $?
|
||||
done
|
||||
}
|
||||
|
||||
clone-one() {
|
||||
local url=$1
|
||||
local package=${${url##*/}%.git}
|
||||
# Simple package names are fetched from my GitHub repos.
|
||||
[[ $url != */* ]] && url=$GITHUB_USER/dot-$package
|
||||
# user/repo packages are fetched from that user's repos.
|
||||
[[ $url != *:* ]] && url=https://github.com/$url
|
||||
if [[ -d $DOTFILES/$package ]]; then
|
||||
echo "Looks like you already have $package cloned." >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Retrieving $package from $url now..." >&2
|
||||
git clone $url $DOTFILES/$package
|
||||
}
|
||||
|
||||
link() {
|
||||
local packages=($argv)
|
||||
if (( $#packages == 0 )); then
|
||||
packages=( $DOTFILES/*(N:t) )
|
||||
if (( $#packages == 0 )); then
|
||||
echo "No installed packages! Do you want to clone some first?" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Linking all packages ($packages) into $HOME now..." >&2
|
||||
else
|
||||
echo "Linking $packages into $HOME now..." >&2
|
||||
fi
|
||||
|
||||
for nofold in $DOTFILES/${^packages}/.stow-no-folding(N); process-stow-no-folding $nofold
|
||||
|
||||
$STOW -d $DOTFILES -t ~ $packages
|
||||
}
|
||||
|
||||
process-stow-no-fold() {
|
||||
zmodload zsh/mapfile
|
||||
for file in ${(f)mapfile[$1]}; do
|
||||
file=~/$file
|
||||
[[ -e $file ]] && continue
|
||||
mkdir -p ${file:h}
|
||||
touch $file
|
||||
done
|
||||
}
|
||||
|
||||
status() {
|
||||
local packages=($argv)
|
||||
(( $#packages == 0 )) && packages=( $DOTFILES/*(N:t) )
|
||||
local length=${#${(O@)packages//?/X}[1]}
|
||||
cd $DOTFILES
|
||||
for p in $packages; do
|
||||
pushd $p
|
||||
printf "%${length}s " $p
|
||||
if [[ -z "$(command git status --porcelain --ignore-submodules -unormal)" ]]; then
|
||||
print -P "%F{green}clean%f"
|
||||
else
|
||||
print -P "%F{red}unclean%f"
|
||||
fi
|
||||
popd
|
||||
done
|
||||
}
|
||||
|
||||
: ${DOTFILES:=~/dotfiles} ${STOW:=stow} ${GITHUB_USER:=00dani}
|
||||
|
||||
comm=$1
|
||||
if (( $# == 0 )); then
|
||||
if [[ -d $DOTFILES ]]; then
|
||||
comm=status
|
||||
else
|
||||
comm=bootstrap
|
||||
fi
|
||||
fi
|
||||
|
||||
case $comm in
|
||||
bootstrap) bootstrap ;;
|
||||
clone) clone ${argv[2,-1]} ;;
|
||||
link) link ${argv[2,-1]} ;;
|
||||
st|status) status ${argv[2,-1]} ;;
|
||||
esac
|
Loading…
Add table
Add a link
Reference in a new issue