Skip to content

Instantly share code, notes, and snippets.

@djavan-bertrand
Last active September 10, 2018 15:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save djavan-bertrand/94cc983ef930e8c44fb621940ee930b4 to your computer and use it in GitHub Desktop.
Save djavan-bertrand/94cc983ef930e8c44fb621940ee930b4 to your computer and use it in GitHub Desktop.
Fish configuration

Install fish and make it default on MacOs

brew install fish
echo "/usr/local/bin/fish" | sudo tee -a /etc/shells
chsh -s `which fish`

Fish prompt: display the path, git head with colors

first edit the function:

funced fish_prompt

then copy the body of the function

set -l last_status $status

if not set -q __fish_prompt_normal
  set -g __fish_prompt_normal (set_color normal)
end

if not set -q -g __fish_classic_git_functions_defined
  set -g __fish_classic_git_functions_defined

  function __fish_repaint_user --on-variable fish_color_user --description "Event handler, repaint when fish_color_user changes"
    if status --is-interactive
      set -e __fish_prompt_user
      commandline -f repaint ^/dev/null
    end
  end

  function __fish_repaint_host --on-variable fish_color_host --description "Event handler, repaint when fish_color_host changes"
    if status --is-interactive
      set -e __fish_prompt_host
      commandline -f repaint ^/dev/null
    end
  end

  function __fish_repaint_status --on-variable fish_color_status --description "Event handler; repaint when fish_color_status changes"
    if status --is-interactive
      set -e __fish_prompt_status
      commandline -f repaint ^/dev/null
    end
  end
end

set -l delim ' $'

switch $USER

  case root

    if not set -q __fish_prompt_cwd
      if set -q fish_color_cwd_root
        set -g __fish_prompt_cwd (set_color $fish_color_cwd_root)
      else
        set -g __fish_prompt_cwd (set_color $fish_color_cwd)
      end
    end

  case '*'

    if not set -q __fish_prompt_cwd
      set -g __fish_prompt_cwd (set_color $fish_color_cwd)
    end

end

set -l prompt_status
if test $last_status -ne 0
  if not set -q __fish_prompt_status
    set -g __fish_prompt_status (set_color $fish_color_status)
  end
  set prompt_status "$__fish_prompt_status [$last_status]$__fish_prompt_normal"
else
  if not set -q __fish_prompt_status_ok
    set -g __fish_prompt_status_ok (set_color 00aa00)
  end
  #set prompt_status "$__fish_prompt_status_ok [OK]$__fish_prompt_normal"
end

if not set -q __fish_prompt_user
  set -g __fish_prompt_user (set_color $fish_color_user)
end
if not set -q __fish_prompt_host
  set -g __fish_prompt_host (set_color $fish_color_host)
end
if not set -q __fish_prompt_git
  set -g __fish_prompt_git (set_color FF8800)
end

echo -n -s "$__fish_prompt_user" "$USER" "$__fish_prompt_normal" ' ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_git" (__fish_git_prompt) "$__fish_prompt_normal" "$prompt_status" "$delim" ' '

then save the function

funcsave fish_prompt

Fish right prompt: display the duration of the last command at the right

first edit the function:

funced fish_right_prompt

then copy the body of the function

set -l last_duration $CMD_DURATION
set -l last_status $status

set -l last_duration_sec (math $last_duration / 1000)

if not set -q __fish_prompt_date_color
  set -g __fish_prompt_date_color (set_color F57C00)
end
if not set -q __fish_prompt_date_color_error
  set -g __fish_prompt_date_color_error (set_color $fish_color_status)
end
if not set -q __fish_prompt_normal
  set -g __fish_prompt_normal (set_color normal)
end


if test $last_status -ne 0
  set right_prompt_color $__fish_prompt_date_color_error
else
  set right_prompt_color $__fish_prompt_date_color
end

set -l now (date '+%X %x')

if [ $last_duration_sec -gt 0 ]
  set -l duration_str ""
  if [ $last_duration_sec -gt 86400 ]
    set duration_str "Over a day"
  else if [ $last_duration_sec -gt 3600 ]
    set duration_str (date -u -r $last_duration_sec +'%-Hh %-Mm %-Ss')
  else if [ $last_duration_sec -gt 60 ]
    set duration_str (date -u -r $last_duration_sec +'%-Mm %-Ss')
  else
    set duration_str (date -u -r $last_duration_sec +'%-Ss')
  end
  echo -n -s "$right_prompt_color" "last command:" "$duration_str" "$__fish_prompt_normal" " - "
end
echo -n -s "$right_prompt_color" "$now" "$__fish_prompt_normal"

then save the function

funcsave fish_right_prompt

Set fish aliases

alias subl="open -a /Applications/Sublime\ Text.app"
funcsave subl
alias lla="ls -la"
funcsave lla
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment