Still a work in progress. I want to add better directory support when in a jj workspace.
3ES66BCQSCHJG45HZVJKJ52SY2MDO26ECM5A3ZSTTJUSXOOJVJZAC EVYNB5QGW3AVM7YMM7E6VTXSEDTUINE7657LIDVQNYWJA3C7E5ZAC A3KCM3RK3HEFXYM7PQMMFKNYZLPFGOP7GZHWKRDP37O67TIFV7MAC RD33YTPZLEKDDSO3GCKKTY6T23BJ5J246Y2GVRFD2JDJVB5VEQOQC FVB3AQTQUXDVHE6EER4PJZ5645J7EVIDHTJM5LXDGSMLIYFGMFDAC 2FLYAQX37OQP2ILAMX6ETLA7LVRSINC5DJMOKFCCRGAOHXZL4ANQC 5G7WRBMWKG6DMCOHE6WQHTYZACUHO2UPBZRWN72CFH7P45NN5E7QC SCB7IK7YNYAR3WTV2XYGPYCGCUW2GPJSWAA5S2ZGCYSZ5AZKXIDAC QRPPLHLL6YZU3Z35JNJFXHMBY3BX4THHN4AMWDFCUSFHYAHWTRHAC S7QHUU535A7WVBF6M22V2Q4RD7IRECIMH7AYOJIFOUZ2IP6HYNGQC IMZAASBFWJXJOKGMWOHVTIINT72OD637B4AFOZDTT62TZXOAHMGQC ZX7NPAFI3QWHLELRPQ6X3OUZYEHFXXJ6FOXIUVKQB2JRKUZDEBWAC BLBVBDCZIZYYFTYXDOI4RZXBYKYSDNGAIW5BIPSIAUGDY3YFZPIQC RXJH46XLP6AFSIZZD4WEQA5A5YZLKHZ54ZUGCRH7TRAOH2Z4Q2VQC AHAA7UNL2RRXP7KERGVCC42GB564WS5BYSSFEOXW3EKVMB2UVEOAC WRZ7ISE3YY7EIZPX3YOQOGZ3R6O3E5XEFB7SV74JC3WBSWZZAEVQC HQ4UTQK5UQXMEUZRYQSCTEKW73UZLJQHPA4YD75FCKBKHS5NMJOAC format = "[┏━](success_color)$status[━](success_color) [\\[$username$hostname\\]](hostname_color) $directory [━┫](success_color) \${custom.jj} [┣━](success_color) $cmd_duration$line_break$character";# old for reference# format = "[┏━](success_color)$status[━](success_color) $hostname $directory [━┫](success_color) $git_branch$git_state$git_status$git_metrics [┣━━┫](success_color) \${custom.jj} [┣━](success_color) $cmd_duration$line_break$character";
format = "[━](success_color)$status[━](success_color)[$username$hostname](hostname_color) $directory [━┫](success_color) \${custom.jj} [┣━](success_color) $cmd_duration$line_break$line_break";
# Custom Nushell prompt.def prompt [--transient]: nothing -> string {let exit_code = $env.LAST_EXIT_CODElet status = if not ($exit_code == 0) or $transient {$"(ansi '${base0D}')┫(ansi rst)(if $exit_code == 0 { ansi '${base0D}' } else { ansi '${base08}' })($exit_code)(ansi rst)(ansi '${base0D}')┣(ansi rst)"} else {$"(ansi '${base0D}')━(ansi rst)"}let host = if ($env.SSH_CONNECTION? | is-not-empty) {$"(ansi '${base0B}')(hostname)(ansi rst)"} else { "" }# TODO: Add to prompt.let jj_root = try {jj workspace root err> /dev/null} catch { "" }let dir = if $env.PWD == $env.HOME { "~" } else { ($env.PWD | path basename) }let directory = $"(ansi '${base0A}')($dir)(ansi rst)"let jj_info = if (which jj | is-not-empty) {try {let jj_output = (^jj --quiet --color always --ignore-working-copy log --no-graph --revisions @ --template 'separate(" ",bookmarks.join(", "),if(empty, label("empty", "(empty)")),coalesce(surround("\"", "\"",if(description.first_line().substr(0, 16).starts_with(description.first_line()),description.first_line().substr(0, 16),description.first_line().substr(0, 15) ++ "…")),label(if(empty, "empty"), "")),change_id.shortest(),commit_id.shortest(),if(conflict, label("conflict", "(conflict)")),if(divergent, label("divergent prefix", "(divergent)")),if(hidden, label("hidden prefix", "(hidden)")),if(immutable, label("immutable", "(immutable)")),)' err> /dev/null | str trim)if ($jj_output | is-not-empty) {$" ($jj_output)"} else { "" }} catch { "" }} else { "" }let ms = ($env.CMD_DURATION_MS | into int)let duration = if $transient or $ms > 1000 {let secs = $ms / 1000 | math floorif $transient and $ms < 1000 {$" (ansi '${base0A}')($ms)ms"} else {$" (ansi '${base0A}')($secs)s"}} else { "" }let bar = $"(ansi '${base0D}')(ansi attr_bold)━(ansi rst)"let prompt_line = [(char nl)$bar$status$bar$host" "$directory" "(if ($jj_info | is-not-empty) {[$"(ansi '${base0D}')━┫(ansi rst)"$jj_info$" (ansi '${base0D}')┣━(ansi rst)"] | str join} else {[$bar$bar$bar] | str join})$duration(char nl)] | str join$prompt_line}# Set prompt$env.PROMPT_COMMAND = { || prompt }$env.PROMPT_COMMAND_RIGHT = ""$env.TRANSIENT_PROMPT_COMMAND = { || prompt --transient }$env.TRANSIENT_PROMPT_COMMAND_RIGHT = ""$env.PROMPT_INDICATOR = " "$env.PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR$env.PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR$env.PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = $env.PROMPT_INDICATOR$env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = $env.PROMPT_INDICATOR