From eb828a09d5df11287d1bde1a4b876a9712c3fe3f Mon Sep 17 00:00:00 2001 From: rootiest Date: Fri, 12 Jun 2026 00:38:22 -0400 Subject: [PATCH] feat: add catppuccin nim-style fallback fish_prompt --- functions/fish_prompt.fish | 138 +++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 functions/fish_prompt.fish diff --git a/functions/fish_prompt.fish b/functions/fish_prompt.fish new file mode 100644 index 0000000..f600a51 --- /dev/null +++ b/functions/fish_prompt.fish @@ -0,0 +1,138 @@ +# Copyright (C) 2026 Rootiest +# SPDX-License-Identifier: AGPL-3.0-or-later +# +# SYNOPSIS +# fish_prompt +# +# DESCRIPTION +# Catppuccin Mocha fallback prompt (nim-style, two-line). Active whenever +# the starship prompt is not available — either starship is not installed or +# C3 overrides are disabled. Has no external dependencies; uses only fish +# builtins (set_color, fish_git_prompt, prompt_pwd, prompt_hostname). +# +# RETURNS +# 0 Always; outputs the prompt to stdout +# +# EXAMPLE +# # Rendered automatically by fish; not called directly. +function fish_prompt + set -l last_status $status + + # Catppuccin Mocha hex palette + set -l c_green a6e3a1 + set -l c_red f38ba8 + set -l c_yellow f9e2af + set -l c_text cdd6f4 + set -l c_blue 89b4fa + set -l c_teal 94e2d5 + set -l c_pink f5c2e7 + set -l c_dim 6c7086 + set -l c_mauve cba6f7 + + # Line/connector color tracks last exit status; brackets stay bold green + set -l retc $c_green + test $last_status -ne 0; and set retc $c_red + + # Enable upstream arrows in git prompt (↑/↓) + set -q __fish_git_prompt_showupstream + or set -g __fish_git_prompt_showupstream auto + + # ─── First line ─────────────────────────────────────────────────────────── + set_color $retc + echo -n '┬─' + set_color --bold $c_green + echo -n '[' + + # Username: red if root, yellow otherwise + if functions -q fish_is_root_user; and fish_is_root_user + set_color --bold $c_red + else + set_color --bold $c_yellow + end + echo -n $USER + + set_color --bold $c_text + echo -n '@' + + # Hostname: teal if SSH, blue if local + if test -n "$SSH_CLIENT" + set_color --bold $c_teal + else + set_color --bold $c_blue + end + echo -n (prompt_hostname) + + set_color --bold $c_text + echo -n ':' + set_color $c_text + echo -n (prompt_pwd) + set_color --bold $c_green + echo -n ']' + set_color normal + + # Vi-mode segment ─[N/I/R/V] + if test "$fish_key_bindings" = fish_vi_key_bindings + or test "$fish_key_bindings" = fish_hybrid_key_bindings + set -l mode_str + switch $fish_bind_mode + case default + set mode_str (set_color --bold $c_red)'N'(set_color normal) + case insert + set mode_str (set_color --bold $c_green)'I'(set_color normal) + case replace_one replace + set mode_str (set_color --bold $c_teal)'R'(set_color normal) + case visual + set mode_str (set_color --bold $c_mauve)'V'(set_color normal) + end + set_color $retc + echo -n '─' + set_color --bold $c_green + echo -n '[' + echo -n $mode_str + set_color --bold $c_green + echo -n ']' + set_color normal + end + + # Virtual environment segment ─[V:name] + set -q VIRTUAL_ENV_DISABLE_PROMPT + or set -g VIRTUAL_ENV_DISABLE_PROMPT true + if set -q VIRTUAL_ENV + set_color $retc + echo -n '─' + set_color --bold $c_green + echo -n '[' + set_color normal + set_color $retc + echo -n 'V:'(path basename "$VIRTUAL_ENV") + set_color --bold $c_green + echo -n ']' + set_color normal + end + + # Git branch in Catppuccin Pink, wrapped in parens: (main) + set -l git_info (fish_git_prompt '%s') + if test -n "$git_info" + echo -n ' ' + set_color $c_pink + echo -n "($git_info)" + set_color normal + end + + echo # newline + + # Background jobs (one per line, dim) + for job in (jobs) + set_color $retc + echo -n '│ ' + set_color $c_dim + echo $job + end + + # ─── Second line ────────────────────────────────────────────────────────── + set_color $retc + echo -n '╰─>' + set_color --bold $c_red + echo -n '$ ' + set_color normal +end