diff --git a/container-README.md b/container-README.md index 86db2261..f93542c1 100644 --- a/container-README.md +++ b/container-README.md @@ -89,7 +89,102 @@ Since the docker commands can be a bit verbose, the included Makefile automates some of the frequent steps in the workflow, although it can be replaced by shell functions quite easily; - +```zsh + +function prezto-container () { +# latest source at https://gist.github.com/hlecuanda/78a6a39877c9753230a11c2d8832f4b6 + + local opts withvals + + zmodload zsh/zutil || { <<< 'Requires zparseopts'; false; return } + + [ -z $commands[docker] ] && { <<< 'Requires Docker'; false; return } + + zparseopts -D -E -M -a opts -A withvals - \ + h=hlp -help=h \ + i: -image=i \ + N: -name=N \ + n -dry-run=n \ + p -persistant=p \ + r -run=r \ + -zdotdir: \ + -zpreztodir: + + if (( $#hlp == 1 )) ; then + <<-USAGE + ${0}: create an ephemeral prezto container using docker + + usage: + ${0} [options] -- [addtl-args] + + options: + -h, --help : print this message + -p, --persistant : make a persistant container + -N NAME, --name=NAME : set container name to NAME (default: prezto) + -n, --dry-run : see what command would be run without doing so + -r 'CMD' --run 'CMD' : run 'CMD' on the container (quote CMD) + -i IMG, --image=IMG : create container from image IMG (default hlecuanda/prezto-dev) + -zdotdir=PATH : use dotfiles from local PATH + -zpreztodir : override default prezto to local PATH + + example: + ${0} -n myruncoms -zdotdir=$HOME + + creates an ephemeral container named myruncoms using + dotfiles found in ${HOME} + + ${0} -n illbeback -p + + creates a persistant container named illbeback if such + container exists, then startit and attach to it + + ${0} -n ivebeenback -r 'apk add python' + + spins up the a container named ivebeenback, and runs + the comand 'apk add python'. the container stops when + done. + + USAGE + fi + + local image="hlecuanda/prezto-dev" + local name="prezto" + local persistant="--rm" + local zdotdir="" + local zpreztodir="" + local dockercmd='docker run' + local dockerpull="" + + for opt in ${(k)withvals} + case $opt in + -i) + image="$withvals[-i]" ;; + -n) + local dryrun="print --" ;; + -N) + name="$withvals[-n]" ;; + -p) + persistant="" ;; + -zdotdir) + zdotdir="-v ${(qq)withvals[-zdotdir]}:/home/prezto/zdotdir -e 'ZDOTDIR=/home/prezto/zdotdir " ;; + -zpreztodir) + zpreztodir="-v ${(qq)withvals[-zpreztodir]}:/home/prezto/zpreztodir -e 'ZPREZTODIR=/home/prezto/zpreztodir " ;; + esac + + docker images \ + | grep prezto-dev \ + &>>! /dev/null || dockerpull="docker pull $image && " + + dockercmd="$dryrun $dockerpull $dockercmd $persistant -h $name " + dockercmd="$dockercmd -name $name $zdotdir $zpreztodir $image" + + cmd=$(echo $dockercmd | tr -s \ ) + + ${(z)cmd} +} + +# vim: set ft=zsh sw=2 tw=0 fdm=manual et : +``` hope this turns out to be useful. [1]:https://alpinelinux.org diff --git a/prezto-container.zsh b/prezto-container.zsh new file mode 100755 index 00000000..de290ade --- /dev/null +++ b/prezto-container.zsh @@ -0,0 +1,91 @@ +#!/usr/bin/env zsh + local opts withvals + + zmodload zsh/zutil || { <<< 'Requires zparseopts'; false; return } + + [ -z $commands[docker] ] && { <<< 'Requires Docker'; false; return } + + zparseopts -D -E -M -a opts -A withvals - \ + h=hlp -help=h \ + i: -image=i \ + N: -name=N \ + n -dry-run=n \ + p -persistant=p \ + r -run=r \ + -zdotdir: \ + -zpreztodir: + + if (( $#hlp == 1 )) ; then + <<-USAGE + ${0}: create an ephemeral prezto container using docker + + usage: + ${0} [options] -- [addtl-args] + + options: + -h, --help : print this message + -p, --persistant : make a persistant container + -N NAME, --name=NAME : set container name to NAME (default: prezto) + -n, --dry-run : see what command would be run without doing so + -r 'CMD' --run 'CMD' : run 'CMD' on the container (quote CMD) + -i IMG, --image=IMG : create container from image IMG (default hlecuanda/prezto-dev) + -zdotdir=PATH : use dotfiles from local PATH + -zpreztodir : override default prezto to local PATH + + example: + ${0} -n myruncoms -zdotdir=$HOME + + creates an ephemeral container named myruncoms using + dotfiles found in ${HOME} + + ${0} -n illbeback -p + + creates a persistant container named illbeback if such + container exists, then startit and attach to it + + ${0} -n ivebeenback -r 'apk add python' + + spins up the a container named ivebeenback, and runs + the comand 'apk add python'. the container stops when + done. + + USAGE + fi + + local image="hlecuanda/prezto-dev" + local name="prezto" + local persistant="--rm" + local zdotdir="" + local zpreztodir="" + local dockercmd='docker run' + local dockerpull="" + + for opt in ${(k)withvals} + case $opt in + -i) + image="$withvals[-i]" ;; + -n) + local dryrun="print --" ;; + -N) + name="$withvals[-n]" ;; + -p) + persistant="" ;; + -zdotdir) + zdotdir="-v ${(qq)withvals[-zdotdir]}:/home/prezto/zdotdir -e 'ZDOTDIR=/home/prezto/zdotdir " ;; + -zpreztodir) + zpreztodir="-v ${(qq)withvals[-zpreztodir]}:/home/prezto/zpreztodir -e 'ZPREZTODIR=/home/prezto/zpreztodir " ;; + esac + + docker images \ + | grep prezto-dev \ + &>>! /dev/null || dockerpull="docker pull $image && " + + dockercmd="$dryrun $dockerpull $dockercmd $persistant -h $name " + dockercmd="$dockercmd -name $name $zdotdir $zpreztodir $image" + + cmd=$(echo $dockercmd | tr -s \ ) + + ${(z)cmd} + + +# vim: set ft=zsh sw=2 tw=0 fdm=manual et :