Operand

do no harem.

gram: page

> ./diagram.nu

Lenses
(coming soon!)


#!/usr/bin/env nu

source ~/.config/nushell/nix.nu
source ~/.config/nushell/grammar.nu

def preamble [] { '
style.fill: "transparent"

classes: {
  done: {
    style: {
      fill: green;
      stroke-width: 4
    }
  }

  ready: {
    style: {
      stroke: green;
      stroke-width: 8
    }
  }

  bridge: {
    style: {
      stroke: purple
      stroke-width: 4
    }
  }
}

style.fill: "transparent";
(* -> *)[*]: { class: bridge }

# --------------------

' }

def main [...labels: string] {
  mkdir share
  try { rm diagram/_.d2 }

  let l = $labels | replace ($labels | is-empty) { (glob diagram/*.d2 | path parse).stem }
  $l | each {|name|
    preamble | save -f diagram/_.d2
    open $"diagram/($name).d2" | save -a diagram/_.d2

    let done = $"share/($name).svg"
    d2 -l elk -t 8 -s diagram/_.d2 $done | print
    $done
  } |
  str join "\n" |
  tee { try { rm diagram/_.d2 } }
}