#!/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' : ${XDG_CONFIG_HOME=$HOME/.config} 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' mkdir -p $XDG_CONFIG_HOME/pkg cat > $XDG_CONFIG_HOME/pkg/pkg.conf <<- flurbl PKG_ROOT='$PKG_ROOT' PKG_DIR=\"${PKG_DIR/$HOME/\$HOME}\" flurbl 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 }