-
-
Save gak/5747159 to your computer and use it in GitHub Desktop.
function _common_section | |
printf $c1 | |
printf $argv[1] | |
printf $c0 | |
printf ":" | |
printf $c2 | |
printf $argv[2] | |
printf $argv[3] | |
printf $c0 | |
printf ", " | |
end | |
function section | |
_common_section $argv[1] $c3 $argv[2] $ce | |
end | |
function error | |
_common_section $argv[1] $ce $argv[2] $ce | |
end | |
function fish_prompt | |
# $status gets nuked as soon as something else is run, e.g. set_color | |
# so it has to be saved asap. | |
set -l last_status $status | |
# c0 to c4 progress from dark to bright | |
# ce is the error colour | |
set -g c0 (set_color 005284) | |
set -g c1 (set_color 0075cd) | |
set -g c2 (set_color 009eff) | |
set -g c3 (set_color 6dc7ff) | |
set -g c4 (set_color ffffff) | |
set -g ce (set_color $fish_color_error) | |
# Clear the line because fish seems to emit the prompt twice. The initial | |
# display, then when you press enter. | |
printf "\033[K" | |
# Current time | |
printf (date "+$c2%H$c0:$c2%M$c0:$c2%S, ") | |
if [ $last_status -ne 0 ] | |
error last $last_status | |
set -ge status | |
end | |
# Track the last non-empty command. It's a bit of a hack to make sure | |
# execution time and last command is tracked correctly. | |
set -l cmd_line (commandline) | |
if test -n "$cmd_line" | |
set -g last_cmd_line $cmd_line | |
set -ge new_prompt | |
else | |
set -g new_prompt true | |
end | |
# Show last execution time and growl notify if it took long enough | |
set -l now (date +%s) | |
if test $last_exec_timestamp | |
set -l taken (math $now - $last_exec_timestamp) | |
if test $taken -gt 10 -a -n "$new_prompt" | |
error taken $taken | |
echo "Returned $last_status, took $taken seconds" | \ | |
growlnotify -s $last_cmd_line | |
# Clear the last_cmd_line so pressing enter doesn't repeat | |
set -ge last_cmd_line | |
end | |
end | |
set -g last_exec_timestamp $now | |
# Show loadavg when too high | |
set -l load1m (uptime | grep -o '[0-9]\+\.[0-9]\+' | head -n1) | |
set -l load1m_test (math $load1m \* 100 / 1) | |
if test $load1m_test -gt 100 | |
error load $load1m | |
end | |
# Show disk usage when low | |
set -l du (df / | tail -n1 | sed "s/ */ /g" | cut -d' ' -f 5 | cut -d'%' -f1) | |
if test $du -gt 80 | |
error du $du%% | |
end | |
# Virtual Env | |
if set -q VIRTUAL_ENV | |
section env (basename "$VIRTUAL_ENV") | |
end | |
# Git branch and dirty files | |
git_branch | |
if set -q git_branch | |
set out $git_branch | |
if test $git_dirty_count -gt 0 | |
set out "$out$c0:$ce$git_dirty_count" | |
end | |
section git $out | |
end | |
# Current Directory | |
# 1st sed for colourising forward slashes | |
# 2nd sed for colourising the deepest path (the 'm' is the last char in the | |
# ANSI colour code that needs to be stripped) | |
printf $c1 | |
printf (pwd | sed "s,/,$c0/$c1,g" | sed "s,\(.*\)/[^m]*m,\1/$c3,") | |
# Prompt on a new line | |
printf $c4 | |
printf "\n> " | |
end |
I used fish 6 years ago and have been back to zsh since. Sorry, I don't remember question 1, but IIRC the scripting language is fish.
Just as you would write bash functions using bash syntax, fish scripts are written using fish syntax. 😉
@gak can you update the article link or explain your code?
@backermanbd The website is long gone. You can find it on archive.org. As for explanation, it's been 8 years since I used fish--sorry but I don't remember any of it. I don't even know if it's still compatible with the current fish releases.
@gak can you share your current terminal theme/shell prompt?
I couldn't find it in archive.org
@backermanbd I use zsh with fzf, nothing too complex.
@backermanbd I use zsh with fzf, nothing too complex.
I am using kitty terminal with fish shell.
Btw still i can't configure the proper shell prompt
can you look into this blog & help me understand it?
https://schlining.medium.com/a-simple-useful-fish-shell-prompt-for-java-python-programmers-9d19cc2e6c1
Do i need to install any theme or the fish_prompt.config code will do all the work?
Hey just curious, I have some questions.
Thanks