nix/moduler/oh-my-posh.nix
2025-11-12 10:12:29 +01:00

138 lines
3.7 KiB
Nix

{ pkgs, lib, config, ... }:
let
palettes = {
latte = {
"os" = "#ACB0BE";
"closer" = "p:os";
"pink" = "#ea76cb";
"lavender" = "#7287FD";
"blue" = "#1e66f5";
"peach" = "#fe640b";
"red" = "#d20f39";
"green" = "#40a02b";
"mauve" = "#8839ef";
};
mocha = {
"os" = "#ACB0BE";
"closer" = "p:os";
"pink" = "#F5BDE6";
"lavender" = "#B7BDF8";
"blue" = "#8aadf4";
"peach" = "#f5a97f";
"red" = "#ed8796";
"green" = "#a6da95";
"mauve" = "#c6a0f6";
};
};
in
with lib;
{
options = {
oh-my-posh = {
enable = mkEnableOption "enable oh-my-posh";
theme = mkOption {
type = types.enum (builtins.attrNames palettes);
default = "latte";
description = "Catppuccin theme variant for oh-my-posh.";
};
};
};
config = mkIf config.oh-my-posh.enable {
programs.oh-my-posh = {
enable = true;
settings = {
"$schema" = "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json";
"palette" = palettes.${config.oh-my-posh.theme};
"blocks" = [
{
"alignment" = "left";
"newline" = true;
"type" = "prompt";
"segments" = [
{
"background" = "transparent";
"foreground" = "p:blue";
"style" = "diamond";
"template" = "{{.Icon}} ";
"type" = "os";
}
{
"foreground" = "p:peach";
"properties" = {
"home_icon" = "~";
"style" = "unique";
};
"style" = "plain";
"template" = "{{ .Path }} ";
"type" = "path";
}
{
"foreground" = "p:green";
"properties" = {
"fetch_status" = false;
"fetch_upstream_icon" = false;
};
"template" = "{{ .HEAD }} ";
"style" = "plain";
"type" = "git";
}
{
"style" = "plain";
"foreground" = "p:closer";
"type" = "text";
}
{
"foreground" = "p:mauve";
"style" = "plain";
"template" = "{{ .UserName }}@";
"type" = "session";
}
{
"foreground" = "p:peach";
"style" = "plain";
"template" = "{{ .HostName }}";
"type" = "session";
}
];
}
{
"type" = "prompt";
"alignment" = "left";
"newline" = true;
"segments" = [
{
"type" = "text";
"style" = "plain";
"background" = "transparent";
"foreground_templates" = [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template" = ">";
}
];
}
];
"final_space" = true;
"version" = 2;
"transient_prompt" = {
"background" = "transparent";
"foreground_templates" = [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template" = ">";
};
"secondary_prompt" = {
"background" = "transparent";
"foreground_templates" = [
"{{if gt .Code 0}}p:red{{end}}"
"{{if eq .Code 0}}p:green{{end}}"
];
"template" = ">";
};
};
};
};
}