Files
nixos-blueprint/modules/home/programs/shell/oh-my-posh.nix
2025-04-07 12:42:15 +03:00

133 lines
3.9 KiB
Nix

{
config,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.shell.oh-my-posh;
in {
options = {
shell.oh-my-posh.enable =
mkEnableOption "enable oh my posh";
};
config = mkIf cfg.enable {
programs.oh-my-posh = {
enable = true;
settings = {
# version = 2;
final_space = true;
shell_integration = true;
console_title_template = "{{ .Shell }} in {{ .Folder }}";
blocks = [
{
type = "prompt";
alignment = "left";
overflow = "hidden";
segments = [
{
type = "path";
style = "plain";
background = "transparent";
foreground = "blue";
template = "{{ .Path }}";
properties = {
style = "full";
};
}
{
type = "text";
style = "plain";
background = "transparent";
template = "{{ if .Env.BW_SESSION }} 󰞀{{ end }}";
}
{
type = "nix-shell";
style = "plain";
background = "transparent";
template = "{{ if ne .Type \"unknown\" }} {{ end }}";
}
{
type = "git";
style = "plain";
foreground = "p:grey";
background = "transparent";
template = " {{ .HEAD }}{{ if or (.Working.Changed) (.Staging.Changed) }}*{{ end }} <cyan>{{ if gt .Behind 0 }}{{ end }}{{ if gt .Ahead 0 }}{{ end }}</>";
properties = {
branch_icon = "";
commit_icon = "@";
fetch_status = true;
};
}
];
}
{
type = "prompt";
alignment = "right";
segments = [
{
type = "session";
style = "plain";
foreground = "white";
background = "transparent";
template = "{{ if .SSHSession }} {{ .UserName }}@{{ .HostName }}{{ end }}";
}
{
style = "plain";
foreground = "white";
background = "transparent";
properties = {
charged_icon = "󰁹";
charging_icon = "󱟡";
discharging_icon = "󱟟";
};
template = "{{ if not .Error }} {{ .Icon }} {{ .Percentage }}%{{ end }}";
type = "battery";
}
];
}
{
type = "rprompt";
overflow = "hidden";
segments = [
{
type = "executiontime";
style = "plain";
foreground = "yellow";
background = "transparent";
template = "{{.FormattedMs}}";
properties = {
threshold = 5000;
};
}
];
}
{
type = "prompt";
alignment = "left";
newline = true;
segments = [
{
type = "text";
style = "plain";
foreground_templates = ["{{if gt .Code 0}}red{{end}}" "{{if eq .Code 0}}magenta{{end}}"];
background = "transparent";
template = ">";
}
];
}
];
transient_prompt = {
foreground_templates = ["{{if gt .Code 0}}red{{end}}" "{{if eq .Code 0}}magenta{{end}}"];
background = "transparent";
template = "> ";
};
secondary_prompt = {
foreground = "magenta";
background = "transparent";
template = "-> ";
};
};
};
};
}