config/.config/fish/config.fish

149 lines
3.6 KiB
Fish

# Solomon Laings config.fish
set fish_greeting
set TERM "xterm-256color"
set -gx EDITOR (type -p nano)
set -gx VISUAL (type -p code)
# my bashrc stuff
alias ..='cd ..'
alias lsa='ls -lah --color=auto'
alias ll='ls -alF --color=auto'
alias la='ls -A --color=auto'
alias l='ls -CF --color=auto'
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias config='/usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME'
alias logout='/usr/bin/kill -9 -1'
## fish misc functions start ##
function ip-addr
curl api.ipify.org
end
function move-last-download
mv ~/Downloads/(ls -t -A ~/Downloads/ | head -1) .
end
function search
open https://duckduckgo.com/"$argv"
end
function batt
acpi | egrep 'Bat(.)+remaining'
end
function sms
kdeconnect-sms &disown
end
## fish misc functions end ##
# fish does not support !! and !$ so functions are needed
## !! and !$ operators start ##
function __history_previous_command
switch (commandline -t)
case "!"
commandline -t $history[1]; commandline -f repaint
case "*"
commandline -i !
end
end
function __history_previous_command_arguments
switch (commandline -t)
case "!"
commandline -t ""
commandline -f history-token-search-backward
case "*"
commandline -i '$'
end
end
bind ! __history_previous_command
bind '$' __history_previous_command_arguments
## !! and !$ operators end ##
## fish prompt start ##
# name: sashimi
function fish_prompt
set -l last_status $status
set -l cyan (set_color -o cyan)
set -l yellow (set_color -o yellow)
set -g red (set_color -o red)
set -g blue (set_color -o blue)
set -l green (set_color -o green)
set -g normal (set_color normal)
set -l ahead (_git_ahead)
set -g whitespace ' '
if test $last_status = 0
set initial_indicator "$green@"
set status_indicator "$green-:"
else
set initial_indicator "$red $last_status x"
set status_indicator "$red:-"
end
set -l cwd $green(cat /etc/hostname) " -> " $cyan(pwd)
# set -l cwd $cyan(pwd)
if [ (_git_branch_name) ]
if test (_git_branch_name) = 'master'
set -l git_branch (_git_branch_name)
set git_info "$normal git:($red$git_branch$normal)"
else
set -l git_branch (_git_branch_name)
set git_info "$normal git:($blue$git_branch$normal)"
end
if [ (_is_git_dirty) ]
set -l dirty "$yellow"
set git_info "$git_info$dirty"
end
end
# Notify if a command took more than 5 minutes
if [ "$CMD_DURATION" -gt 300000 ]
echo The last command took (math "$CMD_DURATION/1000") seconds.
end
echo -n -s $initial_indicator $whitespace $cwd $git_info $whitespace $ahead $status_indicator $whitespace
end
function _git_ahead
set -l commits (command git rev-list --left-right '@{upstream}...HEAD' 2>/dev/null)
if [ $status != 0 ]
return
end
set -l behind (count (for arg in $commits; echo $arg; end | grep '^<'))
set -l ahead (count (for arg in $commits; echo $arg; end | grep -v '^<'))
switch "$ahead $behind"
case '' # no upstream
case '0 0' # equal to upstream
return
case '* 0' # ahead of upstream
echo "$blue$normal_c$ahead$whitespace"
case '0 *' # behind upstream
echo "$red$normal_c$behind$whitespace"
case '*' # diverged from upstream
echo "$blue$normal$ahead $red$normal_c$behind$whitespace"
end
end
function _git_branch_name
echo (command git symbolic-ref HEAD 2>/dev/null | sed -e 's|^refs/heads/||')
end
function _is_git_dirty
echo (command git status -s --ignore-submodules=dirty 2>/dev/null)
end
## fish prompt end ##