mirror of https://git.jolheiser.com/dotnix.git
153 lines
5.9 KiB
Nix
153 lines
5.9 KiB
Nix
{ 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 = "<transparent,background>${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;
|
|
};
|
|
};
|
|
}
|