dotfiles

my shiny new dotfiles
git clone git://git.jakekoroman.com/dotfiles
Log | Files | Refs | README

commit f8314f269403a7011e78007bdd83e54ff2d22ac7
parent 31564fb970b7102f4c81c70069d24dcbc7870a3a
Author: Jake Koroman <jakekoroman@proton.me>
Date:   Mon,  2 Dec 2024 17:23:23 -0500

fish: new aliases

Diffstat:
A.config/fish/functions/cp.fish | 4++++
A.config/fish/functions/fish_right_prompt.fish | 161+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/fish/functions/mkdir.fish | 4++++
A.config/fish/functions/mv.fish | 4++++
A.config/fish/functions/rm.fish | 4++++
5 files changed, 177 insertions(+), 0 deletions(-)

diff --git a/.config/fish/functions/cp.fish b/.config/fish/functions/cp.fish @@ -0,0 +1,4 @@ +function cp --description 'alias cp cp -iv' + command cp -iv $argv + +end diff --git a/.config/fish/functions/fish_right_prompt.fish b/.config/fish/functions/fish_right_prompt.fish @@ -0,0 +1,161 @@ +function fish_right_prompt + set -l cmd_status $status + if test $cmd_status -ne 0 + echo -n (set_color red)"✘ $cmd_status" + end + + if not command -sq git + set_color normal + return + end + + # Get the git directory for later use. + # Return if not inside a Git repository work tree. + if not set -l git_dir (command git rev-parse --git-dir 2>/dev/null) + set_color normal + return + end + + # Get the current action ("merge", "rebase", etc.) + # and if there's one get the current commit hash too. + set -l commit '' + if set -l action (fish_print_git_action "$git_dir") + set commit (command git rev-parse HEAD 2> /dev/null | string sub -l 7) + end + + # Get either the branch name or a branch descriptor. + set -l branch_detached 0 + if not set -l branch (command git symbolic-ref --short HEAD 2>/dev/null) + set branch_detached 1 + set branch (command git describe --contains --all HEAD 2>/dev/null) + end + + # Get the commit difference counts between local and remote. + command git rev-list --count --left-right 'HEAD...@{upstream}' 2>/dev/null \ + | read -d \t -l status_ahead status_behind + if test $status -ne 0 + set status_ahead 0 + set status_behind 0 + end + + # Get the stash status. + # (git stash list) is very slow. => Avoid using it. + set -l status_stashed 0 + if test -f "$git_dir/refs/stash" + set status_stashed 1 + else if test -r "$git_dir/commondir" + read -l commondir <"$git_dir/commondir" + if test -f "$commondir/refs/stash" + set status_stashed 1 + end + end + + # git-status' porcelain v1 format starts with 2 letters on each line: + # The first letter (X) denotes the index state. + # The second letter (Y) denotes the working directory state. + # + # The following table presents the possible combinations: + # * The underscore character denotes whitespace. + # * The cell values stand for the following file states: + # a: added + # d: deleted + # m: modified + # r: renamed + # u: unmerged + # t: untracked + # * Cells with more than one letter signify that both states + # are simultaneously the case. This is possible since the git index + # and working directory operate independently of each other. + # * Cells which are empty are unhandled by this code. + # * T (= type change) is undocumented. + # See Git v1.7.8.2 release notes for more information. + # + # \ Y→ + # X \ + # ↓ | A | C | D | M | R | T | U | X | B | ? | _ + # ----+----+----+----+----+----+----+----+----+----+----+---- + # A | u | | ad | am | r | am | u | | | | a + # C | | | ad | am | r | am | u | | | | a + # D | | | u | am | r | am | u | | | | a + # M | | | ad | am | r | am | u | | | | a + # R | r | r | rd | rm | r | rm | ur | r | r | r | r + # T | | | ad | am | r | am | u | | | | a + # U | u | u | u | um | ur | um | u | u | u | u | u + # X | | | | m | r | m | u | | | | + # B | | | | m | r | m | u | | | | + # ? | | | | m | r | m | u | | | t | + # _ | | | d | m | r | m | u | | | | + set -l porcelain_status (command git status --porcelain 2>/dev/null | string sub -l2) + + set -l status_added 0 + if string match -qr '[ACDMT][ MT]|[ACMT]D' $porcelain_status + set status_added 1 + end + set -l status_deleted 0 + if string match -qr '[ ACMRT]D' $porcelain_status + set status_deleted 1 + end + set -l status_modified 0 + if string match -qr '[MT]$' $porcelain_status + set status_modified 1 + end + set -l status_renamed 0 + if string match -qe R $porcelain_status + set status_renamed 1 + end + set -l status_unmerged 0 + if string match -qr 'AA|DD|U' $porcelain_status + set status_unmerged 1 + end + set -l status_untracked 0 + if string match -qe '\?\?' $porcelain_status + set status_untracked 1 + end + + set_color -o + + if test -n "$branch" + if test $branch_detached -ne 0 + set_color brmagenta + else + set_color green + end + echo -n " $branch" + end + if test -n "$commit" + echo -n ' '(set_color yellow)"$commit" + end + if test -n "$action" + set_color normal + echo -n (set_color white)':'(set_color -o brred)"$action" + end + if test $status_ahead -ne 0 + echo -n ' '(set_color brmagenta)'⬆' + end + if test $status_behind -ne 0 + echo -n ' '(set_color brmagenta)'⬇' + end + if test $status_stashed -ne 0 + echo -n ' '(set_color cyan)'✭' + end + if test $status_added -ne 0 + echo -n ' '(set_color green)'✚' + end + if test $status_deleted -ne 0 + echo -n ' '(set_color red)'✖' + end + if test $status_modified -ne 0 + echo -n ' '(set_color blue)'✱' + end + if test $status_renamed -ne 0 + echo -n ' '(set_color magenta)'➜' + end + if test $status_unmerged -ne 0 + echo -n ' '(set_color yellow)'═' + end + if test $status_untracked -ne 0 + echo -n ' '(set_color white)'◼' + end + + set_color normal +end diff --git a/.config/fish/functions/mkdir.fish b/.config/fish/functions/mkdir.fish @@ -0,0 +1,4 @@ +function mkdir --description 'alias mkdir mkdir -pv' + command mkdir -pv $argv + +end diff --git a/.config/fish/functions/mv.fish b/.config/fish/functions/mv.fish @@ -0,0 +1,4 @@ +function mv --description 'alias mv mv -iv' + command mv -iv $argv + +end diff --git a/.config/fish/functions/rm.fish b/.config/fish/functions/rm.fish @@ -0,0 +1,4 @@ +function rm --description 'alias rm rm -vI' + command rm -vI $argv + +end