218 lines
7.7 KiB
Fish
218 lines
7.7 KiB
Fish
#!/usr/bin/fish
|
|
#
|
|
# kawasaki.theme
|
|
#
|
|
# A theme for the fish shell.
|
|
#
|
|
# Copyright (c) 2016 Beau Hastings.
|
|
# License: GNU General Public License v2
|
|
#
|
|
# Author: Beau Hastings <beau@saweet.net>
|
|
#
|
|
|
|
function __default_var
|
|
set -q $argv[1]; or set -gx $argv
|
|
end
|
|
|
|
#
|
|
# Notes:
|
|
# To use the theme's virtualenv prompt indicator you should add the following to your init.fish (https://github.com/oh-my-fish/oh-my-fish#dotfiles)
|
|
# set --export VIRTUAL_ENV_DISABLE_PROMPT 1
|
|
|
|
# Override default options
|
|
#
|
|
## Display the local time
|
|
#set -g theme_display_time yes
|
|
#
|
|
## Display the user's current group
|
|
#set -g theme_display_group no
|
|
#
|
|
## Display git branch status
|
|
#set -g theme_display_git no
|
|
#
|
|
## Display job count
|
|
#set -g theme_display_jobs no
|
|
#
|
|
## By default job count won't display if there are no jobs
|
|
#set -g theme_display_jobs_always yes
|
|
#
|
|
## Don't display if the current working directory is readable/writable
|
|
#set -g theme_display_rw no
|
|
#
|
|
## Don't display virtualenv
|
|
#set -g theme_display_virtualenv no
|
|
#
|
|
|
|
# Colors
|
|
# TODO: consider displaying colors in the following order: cyan, green, yellow, orange, purple
|
|
#
|
|
__default_var theme_color_error red
|
|
__default_var theme_color_superuser red
|
|
__default_var theme_color_user white
|
|
__default_var theme_color_group 666666
|
|
__default_var theme_color_host brgreen
|
|
__default_var theme_color_separator brblack
|
|
__default_var theme_color_bracket brblue
|
|
__default_var theme_color_normal normal
|
|
__default_var theme_color_time 666666
|
|
__default_var theme_color_path brwhite
|
|
__default_var theme_color_prompt white
|
|
__default_var theme_color_virtualenv bryellow
|
|
|
|
__default_var theme_color_status_prefix brblue
|
|
__default_var theme_color_status_jobs brgreen
|
|
__default_var theme_color_status_rw brwhite
|
|
|
|
__default_var theme_prompt_char_normal '$'
|
|
__default_var theme_prompt_char_superuser '#'
|
|
__default_var theme_prompt_char "$theme_prompt_char_normal"
|
|
|
|
__default_var theme_prompt_superuser_glyph \u2605
|
|
__default_var theme_prompt_userhost_separator ':'
|
|
|
|
__default_var theme_prompt_segment_separator_char ' '
|
|
__default_var theme_prompt_segment_separator_color normal
|
|
|
|
__default_var theme_prompt_status_jobs_char '%'
|
|
__default_var theme_prompt_status_rw_char '.'
|
|
__default_var theme_prompt_status_separator_char '/'
|
|
|
|
__default_var theme_prompt_virtualenv_char_begin '('
|
|
__default_var theme_prompt_virtualenv_char_end ')'
|
|
__default_var theme_prompt_virtualenv_color_char_begin normal
|
|
__default_var theme_prompt_virtualenv_color_char_end normal
|
|
|
|
__default_var theme_display_time_format '+%I:%M'
|
|
|
|
#__default_var __fish_git_prompt_color_prefix
|
|
#__default_var __fish_git_prompt_color_suffix
|
|
#__default_var __fish_git_prompt_color_bare
|
|
__default_var __fish_git_prompt_color_merging red
|
|
__default_var __fish_git_prompt_color_branch brblue
|
|
#__default_var __fish_git_prompt_color_flags
|
|
#__default_var __fish_git_prompt_color_upstream
|
|
#
|
|
#__fish_git_prompt_describe_style default|contains|describe|branch
|
|
__default_var __fish_git_prompt_showcolorhints yes
|
|
__default_var __fish_git_prompt_show_informative_status yes
|
|
__default_var __fish_git_prompt_char_stateseparator ' '
|
|
|
|
# Unofficial fish_git_prompt settings
|
|
__default_var __fish_git_prompt_char_branch_begin ''
|
|
__default_var __fish_git_prompt_char_branch_end ''
|
|
__default_var __fish_git_prompt_color_branch_begin bryellow
|
|
__default_var __fish_git_prompt_color_branch_end bryellow
|
|
|
|
|
|
function __theme_print_git_status
|
|
[ "$theme_display_git" = 'no' ]; and return
|
|
set -l git_prompt (__fish_git_prompt | command sed -e 's/^ (//' -e 's/)$//')
|
|
|
|
[ "$git_prompt" = "" ]; and return
|
|
|
|
print_colored $__fish_git_prompt_char_branch_begin $__fish_git_prompt_color_branch_begin
|
|
printf '%s' $git_prompt
|
|
print_colored $__fish_git_prompt_char_branch_end $__fish_git_prompt_color_branch_end
|
|
end
|
|
function __theme_print_jobs
|
|
[ "$theme_display_jobs" = 'no' ]; and return
|
|
set -l num_jobs (jobs -c | command wc -l)
|
|
|
|
if [ $num_jobs -gt 0 -o "$theme_display_jobs_always" = "yes" ]
|
|
print_colored "$theme_prompt_status_jobs_char" $theme_color_status_prefix
|
|
print_colored "$theme_prompt_status_separator_char" $theme_color_separator
|
|
print_colored "$num_jobs" $theme_color_status_jobs
|
|
end
|
|
end
|
|
function __theme_print_prompt_char
|
|
print_colored $theme_prompt_char $theme_color_prompt
|
|
end
|
|
function __theme_print_pwd
|
|
print_colored (prompt_pwd) $theme_color_path
|
|
end
|
|
function __theme_print_pwd_rw
|
|
[ "$theme_display_rw" = 'no' ]; and return;
|
|
set -l rw_chars
|
|
|
|
if [ -r . ]; set rw_chars r; end
|
|
if [ -w . ]; set rw_chars $rw_chars"w"; end
|
|
|
|
print_colored $theme_prompt_status_rw_char $theme_color_status_prefix
|
|
print_colored $theme_prompt_status_separator_char $theme_color_separator
|
|
print_colored $rw_chars $theme_color_status_rw
|
|
end
|
|
function __theme_print_superuser
|
|
if [ (command id -u) = "0" ]
|
|
set theme_prompt_char "$theme_prompt_char_superuser"
|
|
print_colored $theme_prompt_superuser_glyph $theme_color_superuser
|
|
else
|
|
set theme_prompt_char "$theme_prompt_char_normal"
|
|
end
|
|
end
|
|
function __theme_print_time
|
|
[ "$theme_display_time" = 'yes' ]; or return;
|
|
print_colored (command date $theme_display_time_format) $theme_color_time
|
|
end
|
|
function __theme_print_userhost
|
|
echo -ns (__theme_print_superuser) $USER (__theme_reset_color)
|
|
|
|
if [ "$theme_display_group" != 'no' ]
|
|
print_colored $theme_prompt_userhost_separator $theme_color_separator
|
|
print_colored (id -gn) $theme_color_group
|
|
end
|
|
|
|
print_colored "@" $theme_color_separator
|
|
print_colored (prompt_hostname) $theme_color_host
|
|
end
|
|
function __theme_print_virtualenv
|
|
[ "$theme_display_virtualenv" = 'no' -o -z "$VIRTUAL_ENV" ]; and return
|
|
|
|
set -l basename (basename "$VIRTUAL_ENV")
|
|
|
|
# special case for Aspen magic directories (http://www.zetadev.com/software/aspen/)
|
|
if test "$basename" = "__"
|
|
set basename (basename (dirname "$VIRTUAL_ENV"))
|
|
end
|
|
|
|
print_colored $theme_prompt_virtualenv_char_begin $theme_prompt_virtualenv_color_char_begin
|
|
print_colored $basename $theme_color_virtualenv
|
|
print_colored $theme_prompt_virtualenv_char_end $theme_prompt_virtualenv_color_char_end
|
|
end
|
|
function __theme_reset_color
|
|
set_color $theme_color_normal
|
|
end
|
|
function print_colored
|
|
set -l bgcolor normal
|
|
set -l fgcolor normal
|
|
set -l text
|
|
|
|
if contains -- -b in $argv[1]
|
|
set bgcolor $argv[2]
|
|
set fgcolor $argv[-1]
|
|
set text $argv[3..-2]
|
|
else
|
|
set fgcolor $argv[-1]
|
|
set text $argv[1..-2]
|
|
end
|
|
|
|
printf '%s%s%s' (set_color -b $bgcolor $fgcolor) (string join " " $text) (__theme_reset_color)
|
|
end
|
|
function fish_prompt
|
|
set -l sep (set_color $theme_prompt_segment_separator_color)$theme_prompt_segment_separator_char(__theme_reset_color)
|
|
set -l line1 (string join "$sep" \
|
|
(__theme_print_time) \
|
|
(__theme_print_userhost) \
|
|
(__theme_print_pwd) \
|
|
(__theme_print_git_status) \
|
|
(__theme_print_jobs) \
|
|
(__theme_print_pwd_rw) \
|
|
)
|
|
set -l line2 (string join " " \
|
|
(__theme_print_virtualenv) \
|
|
(__theme_print_prompt_char)\
|
|
)
|
|
|
|
echo "$line1"
|
|
echo "$line2 "
|
|
end
|