def "is even" [] { $in mod 2 == 0 } # TODO: flag stuff as module to be used in other stuff in shell const TRANS = [ 5BCEFA F5A9B8 FFFFFF F5A9B8 5BCEFA ]; const LESBIAN = [ D52D00 EF7627 FF9A56 FFFFFF D162A4 B55690 A30262 ]; const ENBY = [ FCF434 FFFFFF 9C59D1 2C2C2C ]; def flag [ colors: list character = "=" width = -1, ] { use std; let out_size = if ($width == -1) { term size | get columns } else { $width }; let col_size = $out_size / ($colors | length) | math floor; mut rest = $out_size - ($col_size * ($colors | length)); mut cols = $colors | wrap color | insert width $col_size | flatten; let last = ($colors | length) - 1; if not ($rest | is even) { $rest = $rest - 1; $cols = (if not ($colors | length | is even) { $cols | update (($colors | length) / 2 | math floor) { $in | update width {|w| ($w.width + 1)}} } else { $cols | update $last { $in | update width {|w| ($w.width + 1)}} }); }; std assert ($rest | is even); let amount = $rest / 2; $cols = ($cols | update 0 { $in | update width {|w| ($w.width + $amount) } } | update $last { $in | update width {|w| ($w.width + $amount) } }); $cols | each {|col| $character | std repeat $col.width | prepend (ansi {fg: $"#($col.color)" }) | str join } | prepend (ansi attr_bold) | append (ansi reset) | str join } def main [] { print (flag $TRANS); let next_events = open ~/Docs/dates.csv | update datetime {|ev| $ev.datetime | into datetime } | sort-by datetime | first | each {|ev| $"(ansi attr_bold)($ev.event)(ansi reset) in (ansi attr_bold)(tfmt ($ev.datetime - (date now)))s(ansi reset)" }; print $"Hi jade, you're on HRT for (ansi reset)(ansi attr_bold)((date now) - ('2024-02-18T20:53' | into datetime) | format duration month)s(ansi reset) now! | Next Event: ($next_events)"; # print (flag $LESBIAN); } def tfmt [dur: duration] { if ($dur < 1hr) { return ($dur | format duration min); } else if ($dur < 1day) { return ($dur | format duration hr); } else { return ($dur | format duration day); } }