#!/usr/bin/env zsh
# bootstrap - populate a home with the most necessary scripts
# After running this, other packages can be installed using 'pkg'
# Note: Since pkg is written in zsh, this script also is.
# This way, I don't have to check for zsh somewhere in the script,
# and also have an excuse for using zsh here :P

typeset -i rcempty=0
typeset PKG_ROOT PKG_DIR default_path='~/packages'

if [[ -n $1 ]] {
	PKG_ROOT=$1
	PKG_DIR=${~${2-$default_path}}
} else {
	cat <<- meow
		Usage: ./bootstrap PKG_ROOT [PKG_DIR]
		PKG_ROOT is an URI, either of the form proto://host/path, or just /path
		         Note: The path must be absolute, it may not contain a literal ~
		PKG_DIR is the path where pkg and all further packages will be installed,
		        by default $default_path
	meow
	exit 100
}

# zsh keeps complaining about not having a configuration,
# so let's be kind and give it an empty one.
if ! [[ -e ~/.zshrc ]] {
	echo 'Creating empty zshrc'
	rcempty=1
	touch ~/.zshrc
}

# Make basic dirctories
echo 'Creating the basic directory structure'
mkdir -p ~/bin
path=(~/bin $path)
mkdir -p $PKG_DIR/.collected/man/man{1..8}

if ! which git &> /dev/null; then
	echo 'It appears that git is not available on this system.'
	echo '-Installation aborted-'
	exit 200
fi

echo 'Fetching the core package...'
cd $PKG_DIR
git clone $PKG_ROOT/core
cd core || exit 1

echo 'Writing pkg.conf'
echo "PKG_ROOT='$PKG_ROOT'" > ~/.pkg.conf
echo "PKG_DIR=\"${PKG_DIR/$HOME/\$HOME}\"" >> ~/.pkg.conf

echo 'Installing core package'
rehash
bin/checklinks
bin/pkg eval populate_collected core
bin/pkg eval exec_hook core post-add

bin/pkg update

if (( rcempty )) {
	echo 'Removing empty zshrc'
	rm ~/.zshrc
}