{ pkgs, ... }: let unicode = x: builtins.fromJSON ''"${x}"''; script = pkgs.writeShellApplication { name = "jj-prompt"; runtimeInputs = [ pkgs.jujutsu ]; text = let bookmarkMax = 10; tagMax = 10; descriptionMax = 24; in '' jj log -r@ -n1 --ignore-working-copy --no-graph --color never -T ' separate(" ", bookmarks.map(|x| if( x.name().substr(0, ${builtins.toString bookmarkMax}).starts_with(x.name()), "󰃀 " ++ x.name().substr(0, ${builtins.toString bookmarkMax}), "󰃀 " ++ x.name().substr(0, ${builtins.toString (bookmarkMax - 1)}) ++ "…") ).join(" "), tags.map(|x| if( x.name().substr(0, ${builtins.toString tagMax}).starts_with(x.name()), "󰓹 " ++ x.name().substr(0, ${builtins.toString tagMax}), "󰓹 " ++ x.name().substr(0, ${builtins.toString (tagMax - 1)}) ++ "…") ).join(" "), if( description.first_line().substr(0, ${builtins.toString descriptionMax}).starts_with(description.first_line()), "󰍡 " ++ description.first_line().substr(0, ${builtins.toString descriptionMax}), "󰍡 " ++ description.first_line().substr(0, ${ builtins.toString (descriptionMax - 1) }) ++ "…" ), "•", change_id.shortest(), commit_id.shortest(), if(empty, "(empty)"), if(conflict, "(conflict)"), if(divergent, "(divergent)"), if(hidden, "(hidden)"), ) ' ''; }; in { programs.oh-my-posh = { enable = true; settings = { "$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json"; blocks = [ { alignment = "left"; segments = [ { background = "p:lavender"; foreground = "p:black"; leading_diamond = unicode "\\ue0b6"; properties = { display_host = false; }; style = "diamond"; template = " {{ if .SSHSession }}${unicode "\\udb80\\udf18"} {{ end }}{{ if .Env.IN_NIX_SHELL }}${unicode "\\udb84\\udd05"} {{ end }}{{ .UserName }}@{{ .HostName }} "; trailing_diamond = unicode "\\ue0b0"; type = "session"; } { background = "p:orange"; foreground = "p:black"; powerline_symbol = unicode "\\ue0b0"; properties = { home_icon = "~"; style = "folder"; }; style = "powerline"; template = " ${unicode "\\ue613"} {{ path .Path .Location }} "; type = "path"; } { background = "p:green"; background_templates = [ "{{ if or (.Working.Changed) (.Staging.Changed) }}p:yellow{{ end }}" "{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:red{{ end }}" "{{ if gt .Ahead 0 }}#49416D{{ end }}" "{{ if gt .Behind 0 }}#7A306C{{ end }}" ]; foreground = "p:black"; foreground_templates = [ "{{ if or (.Working.Changed) (.Staging.Changed) }}p:black{{ end }}" "{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:white{{ end }}" "{{ if gt .Ahead 0 }}p:white{{ end }}" ]; powerline_symbol = unicode "\\ue0b0"; properties = { branch_max_length = 25; fetch_status = true; fetch_upstream_icon = true; git_icon = unicode "\\ue702"; github_icon = unicode "\\uf408"; upstream_icons = { "codeberg.org" = unicode "\\ue2a6"; "git.jojodev.com" = unicode "\\udb83\\udd9e"; "gitea.com" = unicode "\\udb83\\udd9e"; }; }; style = "powerline"; template = "{{ if not (glob \".jj\")}} {{ if .UpstreamURL }}{{ url .UpstreamIcon .UpstreamURL }} {{ end }}{{ .HEAD }}{{if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{ if .Working.Changed }} ${unicode "\\uf044"} {{ .Working.String }}{{ end }}{{ if .Staging.Changed }} ${unicode "\\uf046"} {{ .Staging.String }}{{ end }} {{ end }}"; type = "git"; } { background = "p:green"; foreground = "p:black"; powerline_symbol = unicode "\\ue0b0"; properties = { script = "${script}/bin/jj-prompt"; }; style = "powerline"; template = "{{ if (glob \".jj\")}} {{ .Output }} {{ end }}"; type = "command"; } { background = "p:blue"; background_templates = [ "{{ if gt .Code 0 }}p:red{{ end }}" ]; foreground = "p:black"; leading_diamond = "${unicode "\\ue0b0"}"; properties = { always_enabled = true; }; style = "diamond"; template = " {{ if gt .Code 0 }}${unicode "\\uf00d"}{{ else }}${unicode "\\uf00c"}{{ end }} "; trailing_diamond = unicode "\\ue0b4"; type = "exit"; } ]; type = "prompt"; } ]; console_title_template = "{{ .Folder }}"; final_space = true; palette = { black = "#1E1E1E"; blue = "#89B4FA"; green = "#A6E3A1"; lavender = "#B4BEFE"; orange = "#FAB387"; red = "#F38BA8"; white = "#CDD6F4"; yellow = "#F9E2AF"; }; version = 2; }; }; }