summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorDaniel Friesel <derf@derf.homelinux.org>2010-02-07 16:47:02 +0100
committerDaniel Friesel <derf@derf.homelinux.org>2010-02-07 16:49:33 +0100
commita25dc638eae1a78ec60ec291c5f83c68c1cdbd0d (patch)
tree1964c2484b2162101efb8a854fa8c3e80ba346ba /examples
parent3e96241318cd5dcef69bf00a43be14bf58a72097 (diff)
Move bootstrap and pkglist to examples/
Diffstat (limited to 'examples')
-rwxr-xr-xexamples/bootstrap118
-rwxr-xr-xexamples/pkglist34
2 files changed, 152 insertions, 0 deletions
diff --git a/examples/bootstrap b/examples/bootstrap
new file mode 100755
index 0000000..6d4013e
--- /dev/null
+++ b/examples/bootstrap
@@ -0,0 +1,118 @@
+#!/usr/bin/env zsh
+# bootstrap - populate a home with the most necessary scripts
+# After running this, other packages can be installed using 'ct'
+# Note: Since caretaker 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
+
+setopt err_exit
+trap "print -P '\n%N:%i: bootstrap failed ($?)'" ZERR
+typeset -i rcempty=0 pkglist_cgi=0
+typeset PKG_ROOT PKG_DIR default_path='~/packages'
+: ${XDG_CONFIG_HOME=$HOME/.config}
+
+while [[ $1 == --* ]] {
+ case $1 in
+ --pkglist-cgi)
+ pkglist_cgi=1
+ pkglist_cgi_url=$2
+ shift
+ ;;
+ esac
+ shift
+}
+
+if [[ -n $1 ]] {
+ PKG_ROOT=$1
+ PKG_DIR=${~${2-$default_path}}
+} else {
+ cat <<- meow
+ Usage: ./bootstrap [options] 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 caretaker and all further packages will be installed,
+ by default $default_path
+
+ Options:
+
+ --pkglist-cgi URL
+ Get the package list from URL - most useful with a git:// PKG_ROOT
+ 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
+}
+
+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 caretaker package...'
+cd $PKG_DIR
+git clone $PKG_ROOT/caretaker caretaker
+cd caretaker
+
+echo "Writing $XDG_CONFIG_HOME/caretaker/caretaker.conf"
+mkdir -p $XDG_CONFIG_HOME/caretaker
+
+cat > $XDG_CONFIG_HOME/caretaker/caretaker.conf <<- flurbl
+ PKG_ROOT=($PKG_ROOT)
+ PKG_DIR="${PKG_DIR/$HOME/\$HOME}"
+flurbl
+
+if (( pkglist_cgi )) {
+
+ if which curl &> /dev/null; then
+ getcmd='curl -s'
+ elif which wget &> /dev/null; then
+ getcmd='wget -q -O -'
+ else
+ print STDERR "Unable to find a proper download program, fix $PKG_DIR/.pkglist\n"
+ getcmd='echo fixme >&2; exit 1;'
+ fi
+
+ cat >> $XDG_CONFIG_HOME/caretaker/caretaker.conf <<-flurbl
+ PKGLIST_LOCAL=1
+ PKGLIST_PATH=$PKG_DIR/.pkglist
+ flurbl
+
+ cat > $PKG_DIR/.pkglist <<-flurbl
+ #!/bin/sh
+ $getcmd $pkglist_cgi_url
+ flurbl
+
+ chmod +x $PKG_DIR/.pkglist
+}
+
+echo 'Installing caretaker package'
+rehash
+
+bin/checklinks
+bin/ct eval update_collected caretaker
+bin/ct eval exec_hook caretaker post-add
+bin/ct update
+
+if (( rcempty )) {
+ echo 'Removing empty zshrc'
+ rm ~/.zshrc
+}
+
+if [[ $PATH != *$HOME/bin* ]] {
+ cat <<- tac
+ Note: You may need to change your PATH to include ~/bin,
+ otherwise certain parts of caretaker will not work.
+ tac
+}
diff --git a/examples/pkglist b/examples/pkglist
new file mode 100755
index 0000000..95696a2
--- /dev/null
+++ b/examples/pkglist
@@ -0,0 +1,34 @@
+#!/usr/bin/env zsh
+## on the PKG_HOST: list available packages
+## used by ct update remote
+## the PKG_PATH (package root path) is given as first argument ($1)
+
+if [[ ! -d $1 ]] {
+ echo "$0: package root directory '$1' does not exist!" >&2
+ exit 1
+}
+
+setopt err_exit
+
+cd $1
+shift
+
+for i in *(-/); {
+
+ # git repo
+ if [[ -d $i/.git ]] {
+ echo -n "$i git "
+ echo -n ${$(git --git-dir=$i/.git log -n 1)[2]}
+ echo " $*"
+
+ # bare git repo
+ } elif [[ -d $i/objects && -d $i/refs ]] {
+ echo -n "$i git "
+ echo -n ${$(git --git-dir=$i log -n 1)[2]}
+ echo " $*"
+
+ # unknown
+ } else {
+ echo "$i: Unsupported or no repository" >&2
+ }
+}