-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Sample prompts: Add a simplified version of my own prompt
Some features: - A nice `►` prompt char with a fallback for non-utf8 systems - The $PWD is colored depending on its sha, so different directories are colored differently, but each directory stays the same - User@Host is only shown if not on the local machine (ssh or virtualization) - A right prompt with a nice git display, date, duration of the last command (if it took over 100ms), and virtualenv
- Loading branch information
Showing
1 changed file
with
80 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# name: Disco | ||
# author: Fabian Homborg | ||
|
||
function fish_prompt | ||
set -l last_status $status | ||
|
||
set -l normal (set_color normal) | ||
set -l usercolor (set_color $fish_color_user) | ||
|
||
set -l delim \U25BA | ||
# If we don't have unicode use a simpler delimiter | ||
string match -qi "*.utf-8" -- $LANG $LC_CTYPE $LC_ALL; or set delim ">" | ||
|
||
fish_is_root_user; and set delim "#" | ||
|
||
set -l cwd (set_color $fish_color_cwd) | ||
if command -sq sha256sum | ||
# randomized cwd color | ||
set -l shas (pwd -P | sha256sum | string sub -l 6 | string match -ra ..) | ||
# Increase color a bit so we don't get super dark colors. | ||
# Really we want some contrast to the background (assuming black). | ||
set -l col (for f in $shas; math --base=hex "min(255, 0x$f + 0x30)"; end | string replace 0x '' | string pad -c 0 -w 2 | string join "") | ||
|
||
set cwd (set_color $col) | ||
end | ||
|
||
# Prompt status only if it's not 0 | ||
set -l prompt_status | ||
test $last_status -ne 0; and set prompt_status (set_color $fish_color_error)"[$last_status]$normal" | ||
|
||
# Only show host if in SSH or container | ||
# Store this in a global variable because it's slow and unchanging | ||
if not set -q prompt_host | ||
set -g prompt_host "" | ||
if set -q SSH_TTY | ||
or begin | ||
command -sq systemd-detect-virt | ||
and systemd-detect-virt -q | ||
end | ||
set -l host (hostname) | ||
set prompt_host $usercolor$USER$normal@(set_color $fish_color_host)$host$normal":" | ||
end | ||
end | ||
|
||
# Shorten pwd if prompt is too long | ||
set -l pwd (prompt_pwd) | ||
|
||
echo -n -s $prompt_host $cwd $pwd $normal $prompt_status $delim | ||
end | ||
|
||
function fish_right_prompt | ||
set -g __fish_git_prompt_showdirtystate 1 | ||
set -g __fish_git_prompt_showuntrackedfiles 1 | ||
set -g __fish_git_prompt_showupstream informative | ||
set -g __fish_git_prompt_showcolorhints 1 | ||
set -g __fish_git_prompt_use_informative_chars 1 | ||
# Unfortunately this only works if we have a sensible locale | ||
string match -qi "*.utf-8" -- $LANG $LC_CTYPE $LC_ALL | ||
and set -g __fish_git_prompt_char_dirtystate \U1F4a9 | ||
set -g __fish_git_prompt_char_untrackedfiles "?" | ||
|
||
set -l vcs (fish_vcs_prompt 2>/dev/null) | ||
|
||
set -l d (set_color brgrey)(date "+%R")(set_color normal) | ||
|
||
set -l duration "$cmd_duration$CMD_DURATION" | ||
if test $duration -gt 100 | ||
set duration (math $duration / 1000)s | ||
else | ||
set duration | ||
end | ||
|
||
set -q VIRTUAL_ENV_DISABLE_PROMPT | ||
or set -g VIRTUAL_ENV_DISABLE_PROMPT true | ||
set -q VIRTUAL_ENV | ||
and set -l venv (string replace -r '.*/' '' -- "$VIRTUAL_ENV") | ||
|
||
set_color reset | ||
string join " " -- $venv $duration $vcs $d | ||
end |