From c269458b0ea2e9df2b11e03dc32f73c416acc700 Mon Sep 17 00:00:00 2001 From: serxoz Date: Fri, 12 Aug 2022 12:44:33 +0200 Subject: [PATCH] fish prompt --- fish/clean.sh | 1 + fish/functions/fish_greeting.fish | 2 + fish/functions/fish_prompt.fish | 111 ++++++++++++++++++++++++++ fish/functions/fish_right_prompt.fish | 6 ++ fish/functions/ll.fish | 3 + fish/install.sh | 3 + 6 files changed, 126 insertions(+) create mode 100644 fish/functions/fish_greeting.fish create mode 100644 fish/functions/fish_prompt.fish create mode 100644 fish/functions/fish_right_prompt.fish create mode 100644 fish/functions/ll.fish diff --git a/fish/clean.sh b/fish/clean.sh index 08909d7..a74cfa1 100644 --- a/fish/clean.sh +++ b/fish/clean.sh @@ -1,3 +1,4 @@ #!/bin/sh rm -rf ~/.config/fish/conf.d +rm -rf ~/.config/fish/functions diff --git a/fish/functions/fish_greeting.fish b/fish/functions/fish_greeting.fish new file mode 100644 index 0000000..018520b --- /dev/null +++ b/fish/functions/fish_greeting.fish @@ -0,0 +1,2 @@ +function fish_greeting +end diff --git a/fish/functions/fish_prompt.fish b/fish/functions/fish_prompt.fish new file mode 100644 index 0000000..e872be8 --- /dev/null +++ b/fish/functions/fish_prompt.fish @@ -0,0 +1,111 @@ +# Based on top of fish's built-in "informative" shell style (see fish_config) +# I actually forgot what it's called exactly +# +# Most is the same. Only thing different is that it: +# - prints leading space because my head is tired from moving to the left in +# internet articles, terminal programs, and prompt +# - changes the suffix to ">" +# - fixes git clean state char +# - makes base name blue +# - print user@hostname in right prompt (see fish_right_prompt) +function fish_prompt --description 'Write out the prompt' + set -l last_pipestatus $pipestatus + + if not set -q __fish_git_prompt_show_informative_status + set -g __fish_git_prompt_show_informative_status 1 + end + if not set -q __fish_git_prompt_hide_untrackedfiles + set -g __fish_git_prompt_hide_untrackedfiles 1 + end + if not set -q __fish_git_prompt_color_branch + set -g __fish_git_prompt_color_branch magenta --bold + end + if not set -q __fish_git_prompt_showupstream + set -g __fish_git_prompt_showupstream "informative" + end + if not set -q __fish_git_prompt_char_upstream_ahead + set -g __fish_git_prompt_char_upstream_ahead "↑" + end + if not set -q __fish_git_prompt_char_upstream_behind + set -g __fish_git_prompt_char_upstream_behind "↓" + end + if not set -q __fish_git_prompt_char_upstream_prefix + set -g __fish_git_prompt_char_upstream_prefix "" + end + if not set -q __fish_git_prompt_char_stagedstate + set -g __fish_git_prompt_char_stagedstate "●" + end + if not set -q __fish_git_prompt_char_dirtystate + set -g __fish_git_prompt_char_dirtystate "✚" + end + if not set -q __fish_git_prompt_char_untrackedfiles + set -g __fish_git_prompt_char_untrackedfiles "…" + end + if not set -q __fish_git_prompt_char_invalidstate + set -g __fish_git_prompt_char_invalidstate "✖" + end + if not set -q __fish_git_prompt_char_cleanstate + # Switch from the check symbol to = because this fixes the width + # calculation problem where where the last char at the right prompt + # will be wrapped to the next line. + # Solution from stack overflow obviously, lost link though + set -g __fish_git_prompt_char_cleanstate "=" + end + if not set -q __fish_git_prompt_color_dirtystate + set -g __fish_git_prompt_color_dirtystate blue + end + if not set -q __fish_git_prompt_color_stagedstate + set -g __fish_git_prompt_color_stagedstate yellow + end + if not set -q __fish_git_prompt_color_invalidstate + set -g __fish_git_prompt_color_invalidstate red + end + if not set -q __fish_git_prompt_color_untrackedfiles + set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal + end + if not set -q __fish_git_prompt_color_cleanstate + set -g __fish_git_prompt_color_cleanstate green --bold + end + + set -l color_cwd + set -l prefix + set -l suffix + switch "$USER" + case root toor + if set -q fish_color_cwd_root + set color_cwd $fish_color_cwd_root + set color_cwd_base $fish_color_cwd_root + else + set color_cwd $fish_color_cwd + set color_cwd_base blue + end + set suffix ' #' + case '*' + set color_cwd $fish_color_cwd + set color_cwd_base blue + set suffix '>' + end + + # NOW we print the prompt :p + + # PWD + set wd (prompt_pwd) + set_color $color_cwd + if not [ $wd = '~' ] + # Make basename blue just because + echo -n (dirname $wd)'/' + set_color $color_cwd_base + echo -n (basename $wd) + else + echo -n ' ~' + end + set_color normal + + printf '%s' (fish_vcs_prompt) + + set -l pipestatus_string (__fish_print_pipestatus "[" "] " "|" (set_color $fish_color_status) (set_color --bold $fish_color_status) $last_pipestatus) + echo -n $pipestatus_string + set_color normal + + echo -n "$suffix " +end diff --git a/fish/functions/fish_right_prompt.fish b/fish/functions/fish_right_prompt.fish new file mode 100644 index 0000000..cd121e3 --- /dev/null +++ b/fish/functions/fish_right_prompt.fish @@ -0,0 +1,6 @@ +function fish_right_prompt + set_color $fish_color_autosuggestion 2> /dev/null; or set_color 555 + printf "%s@%s " $USER (hostname) + date "+%H:%M:%S" + set_color normal +end diff --git a/fish/functions/ll.fish b/fish/functions/ll.fish new file mode 100644 index 0000000..a7663d1 --- /dev/null +++ b/fish/functions/ll.fish @@ -0,0 +1,3 @@ +function ll + ls -al $argv +end diff --git a/fish/install.sh b/fish/install.sh index aaf4ea5..aadf04b 100644 --- a/fish/install.sh +++ b/fish/install.sh @@ -1,4 +1,7 @@ #!/bin/sh rm -rf ~/.config/fish/conf.d +rm -rf ~/.config/fish/functions + ln -s $HOME/dotfiles/fish/conf.d $HOME/.config/fish/conf.d +ln -s $HOME/dotfiles/fish/functions $HOME/.config/fish/functions