function help() { echo "" echo "bizdev" | figlet | lolcat echo "" echo " bild compile code" echo " ci run all builds and tests" echo " deps manage dependencies with niv" echo " ghci start ghci with correct options" echo " help show this message" echo " hero compile and start a dev server for herocomics.app" echo " lint auto-lint all changed files" echo " pie product improvement engine" echo " push send a namespace to the cloud" echo " ship lint, bild, and push one (or all) namespace(s)" } alias runghc="runghc --ghc-arg=-i$BIZ_ROOT" alias tree="tree -I _" function bild() { runghc Biz.Bild $@ } function deps() { niv --sources-file $BIZ_ROOT/Biz/Bild/Sources.json $@ } alias ghci="ghci -i$BIZ_ROOT -ghci-script $BIZ_ROOT/.ghci" function hero() { export HERO_PORT=3000 export HERO_KEEP=$BIZ_ROOT/_/keep export HERO_SKEY=$BIZ_ROOT/_/skey bild="runghc Biz.Bild" if [[ ! -z "${IN_NIX_SHELL}" ]] then out="_/bild/dev" # in dev mode, mmc.js is a directory of js assets export HERO_NODE=$BIZ_ROOT/$out/static/mmc.js rg --files \ | entr -rcs \ "$bild Hero.Host.hs && $bild Hero.Node.hs && $out/bin/mmc" else out="_/bild/nix" export HERO_NODE=$BIZ_ROOT/$out/Hero.Node/static rg --files \ | entr -rcs \ "$bild Hero.Host && $bild Hero.Node && $out/Hero.Host/bin/mmc" fi } alias lint=$BIZ_ROOT/Biz/Lint.py function pie() { runghc Biz.Pie $@ } # TODO: convert to haskell, see: # - https://github.com/awakesecurity/nix-deploy/blob/master/src/Main.hs # - http://www.haskellforall.com/2018/08/nixos-in-production.html function push() { prefix=$(echo $PWD | sed -e "s|^$BIZ_ROOT/*||g") if [[ "$prefix" == "" ]] then target="$1" else target="$prefix.$1" fi what=$(realpath "$BIZ_ROOT/_/bild/nix/$target") # hack: get the domain from the activation script. there does not seem # to be a way to get it from nix-instantiate where=$(rg -r '$2' -e '(domainname ")(.*)(")' "$what/activate") nix copy --to ssh://root@$where $what ssh root@$where $what/bin/switch-to-configuration switch ssh root@$where nix-env --profile /nix/var/nix/profiles/system --set $what } # TODO: convert to haskell function ship() { $BIZ_ROOT/Biz/Lint.py stuff=(${1}) if [[ ${#stuff[@]} -eq 0 ]] then stuff=( Biz.Cloud Biz.Dev Que.Prod Hero.Prod ) fi for thing in ${stuff[@]} do bild $thing done for thing in ${stuff[@]} do push $thing done } # Poor man's ci function ci() { set -e lint stuff=( Biz/Pie.hs Biz/Pie.nix Biz/Devalloc.hs Biz/Que/Site.hs Biz/Que/Host.hs Biz/Que/Prod.nix Biz/Cloud.nix Biz/Dev.nix Hero/Host.hs Hero/Node.hs Hero/Prod.nix ) for thing in ${stuff[@]} do bild "$thing" done set +e } help # ftags - search ctags ftags() { local line if [[ -e tags ]] then line=$( awk 'BEGIN { FS="\t" } !/^!/ {print toupper($4)"\t"$1"\t"$2"\t"$3}' tags | \ cut -c1-80 | fzf --nth=1,2 ) ${EDITOR:-vim} \ $(cut -f3 <<< "$line") -c "set nocst" \ -c "silent tag $(cut -f2 <<< "$line")" fi }