(mirror) personal dotfiles
github.com/crescentrose/dotfiles
1export def "info" [message: string] {
2 log info $message
3}
4
5export def "done" [message: string] {
6 log done $message
7}
8
9export def "debug" [message: string] {
10 log debug $message
11}
12
13export def "warn" [message: string] {
14 log warn $message
15}
16
17export def "error" [message: string] {
18 log error $message
19}
20
21export def "fatal" [message: string, exitValue: int = 1] {
22 log error $message
23 log error "💔 Previous error was fatal; terminating!"
24 exit $exitValue
25}
26
27export def "timed" [name: string, block: closure] {
28 let start = date now
29
30 try {
31 do $block
32 } catch { |err|
33 log error $err.msg
34 print -e $err.rendered
35 log error $"🌧️ ($name) failed in (time-since $start)."
36 return
37 }
38
39 log done $"✨ ($name) completed in (time-since $start)!"
40}
41
42def time-since [start: datetime] {
43 let end = date now
44
45 let diff = ($end - $start)
46 if $diff >= 1min {
47 $diff | format duration "min"
48 } else {
49 $diff | format duration "sec"
50 }
51}
52
53def log [level: string, message: string] {
54 let desiredLogLevel = ($env.VLOG_LEVEL? | default "info")
55 if (log-level $level) < (log-level $desiredLogLevel) {
56 return
57 }
58
59 let message = $"(ansi default_bold)($message)(ansi reset)"
60
61 let parts = [
62 (current-timestamp)
63 # (current-script)
64 (log-badge $level)
65 ($message)
66 ]
67
68 print -e ($parts | str join ' ')
69}
70
71def current-timestamp [] {
72 $"(ansi dark_gray)(date now | format date '%Y-%m-%d %H:%M:%S')(ansi reset)"
73}
74
75def current-script [] {
76 $env.CURRENT_FILE
77 $"(ansi light_gray)($env.CURRENT_FILE)(ansi reset)"
78}
79
80def log-badge [level: string] {
81 match $level {
82 "debug" => $"(ansi black_reverse) DEBG (ansi reset)",
83 "done" => $"(ansi purple_reverse) DONE (ansi reset)",
84 "info" => $"(ansi green_reverse) INFO (ansi reset)",
85 "warn" => $"(ansi warn_reverse) WARN (ansi reset)",
86 "error" => $"(ansi red_reverse) OOPS (ansi reset)",
87 _ => $"(ansi black_reverse) UNKN (ansi reset)",
88 }
89}
90
91def log-level [level: string] {
92 match $level {
93 "debug" => -1,
94 "done" => 0,
95 "info" => 0,
96 "warn" => 1,
97 "error" => 2,
98 _ => 0
99 }
100}
101