Last active
October 2, 2025 04:16
-
-
Save wassupluke/5e5bc4c9a0b618aa5493758317277e1b to your computer and use it in GitHub Desktop.
My .bashrc configuration file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # | |
| # ~/.bash_alises | |
| # | |
| alias c='clear' | |
| alias r='fc -s' | |
| alias rr='fc -s -2' | |
| alias h=history | |
| alias cd..='cd ..' | |
| alias ls='ls --color=always' | |
| alias la='ls -a --color=always' | |
| alias ll='ls -alF --color=always' | |
| alias grep='grep --color=always' | |
| alias mkdir='mkdir -pv' | |
| alias gs='git fetch && git status' | |
| alias ga='git add' | |
| alias gc='git commit' | |
| alias vim='nvim' | |
| alias pylint="pylint --rcfile=~/.config/.pylintrc" | |
| alias make50='make CC=clang CFLAGS="-fsanitize=signed-integer-overflow -fsanitize=undefined -ggdb3 -O0 -std=c11 -Wall -Werror -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-variable -Wshadow" LDLIBS="-lcrypt -lcs50 -lm"' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ~/.bashrc: executed by bash(1) for non-login shells. | |
| # see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) | |
| # for examples | |
| # If not running interactively, don't do anything | |
| case $- in | |
| *i*) ;; | |
| *) return;; | |
| esac | |
| # don't put duplicate lines or lines starting with space in the history. | |
| # See bash(1) for more options | |
| HISTCONTROL=ignoreboth | |
| # append to the history file, don't overwrite it | |
| shopt -s histappend | |
| # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) | |
| HISTSIZE=1000 | |
| HISTFILESIZE=2000 | |
| # check the window size after each command and, if necessary, | |
| # update the values of LINES and COLUMNS. | |
| shopt -s checkwinsize | |
| # If set, the pattern "**" used in a pathname expansion context will | |
| # match all files and zero or more directories and subdirectories. | |
| #shopt -s globstar | |
| # make less more friendly for non-text input files, see lesspipe(1) | |
| #[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" | |
| # set variable identifying the chroot you work in (used in the prompt below) | |
| if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then | |
| debian_chroot=$(cat /etc/debian_chroot) | |
| fi | |
| # set a fancy prompt (non-color, unless we know we "want" color) | |
| case "$TERM" in | |
| xterm-color|*-256color) color_prompt=yes;; | |
| esac | |
| # uncomment for a colored prompt, if the terminal has the capability; turned | |
| # off by default to not distract the user: the focus in a terminal window | |
| # should be on the output of commands, not on the prompt | |
| #force_color_prompt=yes | |
| if [ -n "$force_color_prompt" ]; then | |
| if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then | |
| # We have color support; assume it's compliant with Ecma-48 | |
| # (ISO/IEC-6429). (Lack of such support is extremely rare, and such | |
| # a case would tend to support setf rather than setaf.) | |
| color_prompt=yes | |
| else | |
| color_prompt= | |
| fi | |
| fi | |
| # Username line with git branch | |
| # https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh | |
| source ~/.git-prompt.sh | |
| if [ "$color_prompt" = yes ]; then | |
| PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$\[\033[01;36m\]$(__git_ps1 " (%s)") \[\033[00m\]' | |
| else | |
| PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ $(__git_ps1 "(%s)") ' | |
| fi | |
| unset color_prompt force_color_prompt | |
| # If this is an xterm set the title to user@host:dir | |
| case "$TERM" in | |
| xterm*|rxvt*) | |
| PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" | |
| ;; | |
| *) | |
| ;; | |
| esac | |
| # enable color support of ls and also add handy aliases | |
| if [ -x /usr/bin/dircolors ]; then | |
| test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | |
| 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' | |
| fi | |
| # colored GCC warnings and errors | |
| #export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' | |
| # some more ls aliases | |
| #alias ll='ls -l' | |
| #alias la='ls -A' | |
| #alias l='ls -CF' | |
| # Alias definitions. | |
| # You may want to put all your additions into a separate file like | |
| # ~/.bash_aliases, instead of adding them here directly. | |
| # See /usr/share/doc/bash-doc/examples in the bash-doc package. | |
| if [ -f ~/.bash_aliases ]; then | |
| . ~/.bash_aliases | |
| fi | |
| # enable programmable completion features (you don't need to enable | |
| # this, if it's already enabled in /etc/bash.bashrc and /etc/profile | |
| # sources /etc/bash.bashrc). | |
| if ! shopt -oq posix; then | |
| if [ -f /usr/share/bash-completion/bash_completion ]; then | |
| . /usr/share/bash-completion/bash_completion | |
| elif [ -f /etc/bash_completion ]; then | |
| . /etc/bash_completion | |
| fi | |
| fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Configuration file for dircolors, a utility to help you set the | |
| # LS_COLORS environment variable used by GNU ls with the --color option. | |
| # Copyright (C) 1996-2025 Free Software Foundation, Inc. | |
| # Copying and distribution of this file, with or without modification, | |
| # are permitted provided the copyright notice and this notice are preserved. | |
| # | |
| # The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the | |
| # slackware version of dircolors) are recognized but ignored. | |
| # Global config options can be specified before TERM or COLORTERM entries | |
| # =================================================================== | |
| # Terminal filters | |
| # =================================================================== | |
| # Below are TERM or COLORTERM entries, which can be glob patterns, which | |
| # restrict following config to systems with matching environment variables. | |
| COLORTERM ?* | |
| TERM Eterm | |
| TERM ansi | |
| TERM *color* | |
| TERM con[0-9]*x[0-9]* | |
| TERM cons25 | |
| TERM console | |
| TERM cygwin | |
| TERM *direct* | |
| TERM dtterm | |
| TERM gnome | |
| TERM hurd | |
| TERM jfbterm | |
| TERM konsole | |
| TERM kterm | |
| TERM linux | |
| TERM linux-c | |
| TERM mlterm | |
| TERM putty | |
| TERM rxvt* | |
| TERM screen* | |
| TERM st | |
| TERM terminator | |
| TERM tmux* | |
| TERM vt100 | |
| TERM vt220 | |
| TERM xterm* | |
| # =================================================================== | |
| # Basic file attributes | |
| # =================================================================== | |
| # Below are the color init strings for the basic file types. | |
| # One can use codes for 256 or more colors supported by modern terminals. | |
| # The default color codes use the capabilities of an 8 color terminal | |
| # with some additional attributes as per the following codes: | |
| # Attribute codes: | |
| # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed | |
| # Text color codes: | |
| # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white | |
| # Background color codes: | |
| # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white | |
| #NORMAL 00 # no color code at all | |
| #FILE 00 # regular file: use no color at all | |
| RESET 0 # reset to "normal" color | |
| DIR 01;34 # directory | |
| LINK 01;36 # symbolic link. (If you set this to 'target' instead of a | |
| # numerical value, the color is as for the file pointed to.) | |
| MULTIHARDLINK 00 # regular file with more than one link | |
| FIFO 40;33 # pipe | |
| SOCK 01;35 # socket | |
| DOOR 01;35 # door | |
| BLK 40;33;01 # block device driver | |
| CHR 40;33;01 # character device driver | |
| ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ... | |
| MISSING 00 # ... and the files they point to | |
| SETUID 37;41 # regular file that is setuid (u+s) | |
| SETGID 30;43 # regular file that is setgid (g+s) | |
| CAPABILITY 00 # regular file with capability (very expensive to lookup) | |
| STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w) | |
| OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky | |
| STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable | |
| # This is for regular files with execute permission: | |
| EXEC 01;32 | |
| # =================================================================== | |
| # File extension attributes | |
| # =================================================================== | |
| # List any file extensions like '.gz' or '.tar' that you would like ls | |
| # to color below. Put the suffix, a space, and the color init string. | |
| # (and any comments you want to add after a '#'). | |
| # Suffixes are matched case insensitively, but if you define different | |
| # init strings for separate cases, those will be honored. | |
| # | |
| # If you use DOS-style suffixes, you may want to uncomment the following: | |
| #.cmd 01;32 # executables (bright green) | |
| #.exe 01;32 | |
| #.com 01;32 | |
| #.btm 01;32 | |
| #.bat 01;32 | |
| # Or if you want to color scripts even if they do not have the | |
| # executable bit actually set. | |
| #.sh 01;32 | |
| #.csh 01;32 | |
| # archives or compressed (bright red) | |
| .7z 01;31 | |
| .ace 01;31 | |
| .alz 01;31 | |
| .apk 01;31 | |
| .arc 01;31 | |
| .arj 01;31 | |
| .bz 01;31 | |
| .bz2 01;31 | |
| .cab 01;31 | |
| .cpio 01;31 | |
| .crate 01;31 | |
| .deb 01;31 | |
| .drpm 01;31 | |
| .dwm 01;31 | |
| .dz 01;31 | |
| .ear 01;31 | |
| .egg 01;31 | |
| .esd 01;31 | |
| .gz 01;31 | |
| .jar 01;31 | |
| .lha 01;31 | |
| .lrz 01;31 | |
| .lz 01;31 | |
| .lz4 01;31 | |
| .lzh 01;31 | |
| .lzma 01;31 | |
| .lzo 01;31 | |
| .pyz 01;31 | |
| .rar 01;31 | |
| .rpm 01;31 | |
| .rz 01;31 | |
| .sar 01;31 | |
| .swm 01;31 | |
| .t7z 01;31 | |
| .tar 01;31 | |
| .taz 01;31 | |
| .tbz 01;31 | |
| .tbz2 01;31 | |
| .tgz 01;31 | |
| .tlz 01;31 | |
| .txz 01;31 | |
| .tz 01;31 | |
| .tzo 01;31 | |
| .tzst 01;31 | |
| .udeb 01;31 | |
| .war 01;31 | |
| .whl 01;31 | |
| .wim 01;31 | |
| .xz 01;31 | |
| .z 01;31 | |
| .zip 01;31 | |
| .zoo 01;31 | |
| .zst 01;31 | |
| # image formats | |
| .avif 01;35 | |
| .jpg 01;35 | |
| .jpeg 01;35 | |
| .jxl 01;35 | |
| .mjpg 01;35 | |
| .mjpeg 01;35 | |
| .gif 01;35 | |
| .bmp 01;35 | |
| .pbm 01;35 | |
| .pgm 01;35 | |
| .ppm 01;35 | |
| .tga 01;35 | |
| .xbm 01;35 | |
| .xpm 01;35 | |
| .tif 01;35 | |
| .tiff 01;35 | |
| .png 01;35 | |
| .svg 01;35 | |
| .svgz 01;35 | |
| .mng 01;35 | |
| .pcx 01;35 | |
| .mov 01;35 | |
| .mpg 01;35 | |
| .mpeg 01;35 | |
| .m2v 01;35 | |
| .mkv 01;35 | |
| .webm 01;35 | |
| .webp 01;35 | |
| .ogm 01;35 | |
| .mp4 01;35 | |
| .m4v 01;35 | |
| .mp4v 01;35 | |
| .vob 01;35 | |
| .qt 01;35 | |
| .nuv 01;35 | |
| .wmv 01;35 | |
| .asf 01;35 | |
| .rm 01;35 | |
| .rmvb 01;35 | |
| .flc 01;35 | |
| .avi 01;35 | |
| .fli 01;35 | |
| .flv 01;35 | |
| .gl 01;35 | |
| .dl 01;35 | |
| .xcf 01;35 | |
| .xwd 01;35 | |
| .yuv 01;35 | |
| .cgm 01;35 | |
| .emf 01;35 | |
| # https://wiki.xiph.org/MIME_Types_and_File_Extensions | |
| .ogv 01;35 | |
| .ogx 01;35 | |
| # audio formats | |
| .aac 00;36 | |
| .au 00;36 | |
| .flac 00;36 | |
| .m4a 00;36 | |
| .mid 00;36 | |
| .midi 00;36 | |
| .mka 00;36 | |
| .mp3 00;36 | |
| .mpc 00;36 | |
| .ogg 00;36 | |
| .ra 00;36 | |
| .wav 00;36 | |
| # https://wiki.xiph.org/MIME_Types_and_File_Extensions | |
| .oga 00;36 | |
| .opus 00;36 | |
| .spx 00;36 | |
| .xspf 00;36 | |
| # backup files | |
| *~ 00;90 | |
| *# 00;90 | |
| .bak 00;90 | |
| .crdownload 00;90 | |
| .dpkg-dist 00;90 | |
| .dpkg-new 00;90 | |
| .dpkg-old 00;90 | |
| .dpkg-tmp 00;90 | |
| .old 00;90 | |
| .orig 00;90 | |
| .part 00;90 | |
| .rej 00;90 | |
| .rpmnew 00;90 | |
| .rpmorig 00;90 | |
| .rpmsave 00;90 | |
| .swp 00;90 | |
| .tmp 00;90 | |
| .ucf-dist 00;90 | |
| .ucf-new 00;90 | |
| .ucf-old 00;90 | |
| # | |
| # Subsequent TERM or COLORTERM entries, can be used to add / override | |
| # config specific to those matching environment variables. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # bash/zsh git prompt support | |
| # | |
| # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org> | |
| # Distributed under the GNU General Public License, version 2.0. | |
| # | |
| # This script allows you to see repository status in your prompt. | |
| # | |
| # To enable: | |
| # | |
| # 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). | |
| # 2) Add the following line to your .bashrc/.zshrc/.profile: | |
| # . ~/.git-prompt.sh # dot path/to/this-file | |
| # 3a) Change your PS1 to call __git_ps1 as | |
| # command-substitution: | |
| # Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' | |
| # ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' | |
| # the optional argument will be used as format string. | |
| # 3b) Alternatively, for a slightly faster prompt, __git_ps1 can | |
| # be used for PROMPT_COMMAND in Bash or for precmd() in Zsh | |
| # with two parameters, <pre> and <post>, which are strings | |
| # you would put in $PS1 before and after the status string | |
| # generated by the git-prompt machinery. e.g. | |
| # Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "' | |
| # will show username, at-sign, host, colon, cwd, then | |
| # various status string, followed by dollar and SP, as | |
| # your prompt. | |
| # ZSH: precmd () { __git_ps1 "%n" ":%~$ " "|%s" } | |
| # will show username, pipe, then various status string, | |
| # followed by colon, cwd, dollar and SP, as your prompt. | |
| # Optionally, you can supply a third argument with a printf | |
| # format string to finetune the output of the branch status | |
| # | |
| # See notes below about compatibility with other shells. | |
| # | |
| # The repository status will be displayed only if you are currently in a | |
| # git repository. The %s token is the placeholder for the shown status. | |
| # | |
| # The prompt status always includes the current branch name. | |
| # | |
| # In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value, | |
| # unstaged (*) and staged (+) changes will be shown next to the branch | |
| # name. You can configure this per-repository with the | |
| # bash.showDirtyState variable, which defaults to true once | |
| # GIT_PS1_SHOWDIRTYSTATE is enabled. | |
| # | |
| # You can also see if currently something is stashed, by setting | |
| # GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed, | |
| # then a '$' will be shown next to the branch name. | |
| # | |
| # If you would like to see if there're untracked files, then you can set | |
| # GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked | |
| # files, then a '%' will be shown next to the branch name. You can | |
| # configure this per-repository with the bash.showUntrackedFiles | |
| # variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is | |
| # enabled. | |
| # | |
| # If you would like to see the difference between HEAD and its upstream, | |
| # set GIT_PS1_SHOWUPSTREAM="auto". A "<" indicates you are behind, ">" | |
| # indicates you are ahead, "<>" indicates you have diverged and "=" | |
| # indicates that there is no difference. You can further control | |
| # behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list | |
| # of values: | |
| # | |
| # verbose show number of commits ahead/behind (+/-) upstream | |
| # name if verbose, then also show the upstream abbrev name | |
| # legacy don't use the '--count' option available in recent | |
| # versions of git-rev-list | |
| # git always compare HEAD to @{upstream} | |
| # svn always compare HEAD to your SVN upstream | |
| # | |
| # By default, __git_ps1 will compare HEAD to your SVN upstream if it can | |
| # find one, or @{upstream} otherwise. Once you have set | |
| # GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by | |
| # setting the bash.showUpstream config variable. | |
| # | |
| # You can change the separator between the branch name and the above | |
| # state symbols by setting GIT_PS1_STATESEPARATOR. The default separator | |
| # is SP. | |
| # | |
| # When there is an in-progress operation such as a merge, rebase, | |
| # revert, cherry-pick, or bisect, the prompt will include information | |
| # related to the operation, often in the form "|<OPERATION-NAME>". | |
| # | |
| # When the repository has a sparse-checkout, a notification of the form | |
| # "|SPARSE" will be included in the prompt. This can be shortened to a | |
| # single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted | |
| # by setting GIT_PS1_OMITSPARSESTATE. | |
| # | |
| # If you would like to see a notification on the prompt when there are | |
| # unresolved conflicts, set GIT_PS1_SHOWCONFLICTSTATE to "yes". The | |
| # prompt will include "|CONFLICT". | |
| # | |
| # If you would like to see more information about the identity of | |
| # commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE | |
| # to one of these values: | |
| # | |
| # contains relative to newer annotated tag (v1.6.3.2~35) | |
| # branch relative to newer tag or branch (master~4) | |
| # describe relative to older annotated tag (v1.6.3.1-13-gdd42c2f) | |
| # tag relative to any older tag (v1.6.3.1-13-gdd42c2f) | |
| # default exactly matching tag | |
| # | |
| # If you would like a colored hint about the current dirty state, set | |
| # GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on | |
| # the colored output of "git status -sb". | |
| # | |
| # If you would like __git_ps1 to do nothing in the case when the current | |
| # directory is set up to be ignored by git, then set | |
| # GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the | |
| # repository level by setting bash.hideIfPwdIgnored to "false". | |
| # | |
| # Compatibility with other shells (beyond bash/zsh): | |
| # | |
| # We require posix-ish shell plus "local" support, which is most | |
| # shells (even pdksh), but excluding ksh93 (because no "local"). | |
| # | |
| # Prompt integration might differ between shells, but the gist is | |
| # to load it once on shell init with '. path/to/git-prompt.sh', | |
| # set GIT_PS1* vars once as needed, and either place $(__git_ps1..) | |
| # inside PS1 once (0/1 args), or, before each prompt is displayed, | |
| # call __git_ps1 (2/3 args) which sets PS1 with the status embedded. | |
| # | |
| # Many shells support the 1st method of command substitution, | |
| # though some might need to first enable cmd substitution in PS1. | |
| # | |
| # When using colors, each escape sequence is wrapped between byte | |
| # values 1 and 2 (control chars SOH, STX, respectively), which are | |
| # invisible at the output, but for bash/readline they mark 0-width | |
| # strings (SGR color sequences) when calculating the on-screen | |
| # prompt width, to maintain correct input editing at the prompt. | |
| # | |
| # To replace or disable the 0-width markers, set GIT_PS1_COLOR_PRE | |
| # and GIT_PS1_COLOR_POST to other markers, or empty (nul) to not | |
| # use markers. For instance, some shells support '\[' and '\]' as | |
| # start/end markers in PS1 - when invoking __git_ps1 with 3/4 args, | |
| # but it may or may not work in command substitution mode. YMMV. | |
| # | |
| # If the shell doesn't support 0-width markers and editing behaves | |
| # incorrectly when using colors in __git_ps1, then, other than | |
| # disabling color, it might be solved using multi-line prompt, | |
| # where the git status is not at the last line, e.g.: | |
| # PS1='\n\w \u@\h$(__git_ps1 " (%s)")\n\$ ' | |
| # check whether printf supports -v | |
| __git_printf_supports_v= | |
| printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1 | |
| # like __git_SOH=$'\001' etc but works also in shells without $'...' | |
| eval "$(printf ' | |
| __git_SOH="\001" __git_STX="\002" __git_ESC="\033" | |
| __git_LF="\n" __git_CRLF="\r\n" | |
| ')" | |
| # stores the divergence from upstream in $p | |
| # used by GIT_PS1_SHOWUPSTREAM | |
| __git_ps1_show_upstream () | |
| { | |
| local key value | |
| local svn_remotes="" svn_url_pattern="" count n | |
| local upstream_type=git legacy="" verbose="" name="" | |
| local LF="$__git_LF" | |
| # get some config options from git-config | |
| local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')" | |
| while read -r key value; do | |
| case "$key" in | |
| bash.showupstream) | |
| GIT_PS1_SHOWUPSTREAM="$value" | |
| if [ -z "${GIT_PS1_SHOWUPSTREAM}" ]; then | |
| p="" | |
| return | |
| fi | |
| ;; | |
| svn-remote.*.url) | |
| svn_remotes=${svn_remotes}${value}${LF} # URI\nURI\n... | |
| svn_url_pattern="$svn_url_pattern\\|$value" | |
| upstream_type=svn+git # default upstream type is SVN if available, else git | |
| ;; | |
| esac | |
| done <<-OUTPUT | |
| $output | |
| OUTPUT | |
| # parse configuration values | |
| local option | |
| for option in ${GIT_PS1_SHOWUPSTREAM-}; do | |
| case "$option" in | |
| git|svn) upstream_type="$option" ;; | |
| verbose) verbose=1 ;; | |
| legacy) legacy=1 ;; | |
| name) name=1 ;; | |
| esac | |
| done | |
| # Find our upstream type | |
| case "$upstream_type" in | |
| git) upstream_type="@{upstream}" ;; | |
| svn*) | |
| # successful svn-upstream resolution: | |
| # - get the list of configured svn-remotes ($svn_remotes set above) | |
| # - get the last commit which seems from one of our svn-remotes | |
| # - confirm that it is from one of the svn-remotes | |
| # - use $GIT_SVN_ID if set, else "git-svn" | |
| # get upstream from "git-svn-id: UPSTRM@N HASH" in a commit message | |
| # (git-svn uses essentially the same procedure internally) | |
| local svn_upstream="$( | |
| git log --first-parent -1 \ | |
| --grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null | |
| )" | |
| if [ -n "$svn_upstream" ]; then | |
| # extract the URI, assuming --grep matched the last line | |
| svn_upstream=${svn_upstream##*$LF} # last line | |
| svn_upstream=${svn_upstream#*: } # UPSTRM@N HASH | |
| svn_upstream=${svn_upstream%@*} # UPSTRM | |
| case ${LF}${svn_remotes} in | |
| *"${LF}${svn_upstream}${LF}"*) | |
| # grep indeed matched the last line - it's our remote | |
| # default branch name for checkouts with no layout: | |
| upstream_type=${GIT_SVN_ID:-git-svn} | |
| ;; | |
| *) | |
| # the commit message includes one of our remotes, but | |
| # it's not at the last line. is $svn_upstream junk? | |
| upstream_type=${svn_upstream#/} | |
| ;; | |
| esac | |
| elif [ "svn+git" = "$upstream_type" ]; then | |
| upstream_type="@{upstream}" | |
| fi | |
| ;; | |
| esac | |
| # Find how many commits we are ahead/behind our upstream | |
| if [ -z "$legacy" ]; then | |
| count="$(git rev-list --count --left-right \ | |
| "$upstream_type"...HEAD 2>/dev/null)" | |
| else | |
| # produce equivalent output to --count for older versions of git | |
| local commits | |
| if commits="$(git rev-list --left-right "$upstream_type"...HEAD 2>/dev/null)" | |
| then | |
| local commit behind=0 ahead=0 | |
| for commit in $commits | |
| do | |
| case "$commit" in | |
| "<"*) behind=$((behind+1)) ;; | |
| *) ahead=$((ahead+1)) ;; | |
| esac | |
| done | |
| count="$behind $ahead" | |
| else | |
| count="" | |
| fi | |
| fi | |
| # calculate the result | |
| if [ -z "$verbose" ]; then | |
| case "$count" in | |
| "") # no upstream | |
| p="" ;; | |
| "0 0") # equal to upstream | |
| p="=" ;; | |
| "0 "*) # ahead of upstream | |
| p=">" ;; | |
| *" 0") # behind upstream | |
| p="<" ;; | |
| *) # diverged from upstream | |
| p="<>" ;; | |
| esac | |
| else # verbose, set upstream instead of p | |
| case "$count" in | |
| "") # no upstream | |
| upstream="" ;; | |
| "0 0") # equal to upstream | |
| upstream="|u=" ;; | |
| "0 "*) # ahead of upstream | |
| upstream="|u+${count#0 }" ;; | |
| *" 0") # behind upstream | |
| upstream="|u-${count% 0}" ;; | |
| *) # diverged from upstream | |
| upstream="|u+${count#* }-${count% *}" ;; | |
| esac | |
| if [ -n "$count" ] && [ -n "$name" ]; then | |
| __git_ps1_upstream_name=$(git rev-parse \ | |
| --abbrev-ref "$upstream_type" 2>/dev/null) | |
| if [ "$pcmode" = yes ] && [ "$ps1_expanded" = yes ]; then | |
| upstream="$upstream \${__git_ps1_upstream_name}" | |
| else | |
| upstream="$upstream ${__git_ps1_upstream_name}" | |
| # not needed anymore; keep user's | |
| # environment clean | |
| unset __git_ps1_upstream_name | |
| fi | |
| fi | |
| fi | |
| } | |
| # Helper function that is meant to be called from __git_ps1. It | |
| # injects color codes into the appropriate gitstring variables used | |
| # to build a gitstring. Colored variables are responsible for clearing | |
| # their own color. | |
| __git_ps1_colorize_gitstring () | |
| { | |
| if [ -n "${ZSH_VERSION-}" ]; then | |
| local c_red='%F{red}' | |
| local c_green='%F{green}' | |
| local c_lblue='%F{blue}' | |
| local c_clear='%f' | |
| else | |
| # \001 (SOH) and \002 (STX) are 0-width substring markers | |
| # which bash/readline identify while calculating the prompt | |
| # on-screen width - to exclude 0-screen-width esc sequences. | |
| local c_pre="${GIT_PS1_COLOR_PRE-$__git_SOH}${__git_ESC}[" | |
| local c_post="m${GIT_PS1_COLOR_POST-$__git_STX}" | |
| local c_red="${c_pre}31${c_post}" | |
| local c_green="${c_pre}32${c_post}" | |
| local c_lblue="${c_pre}1;34${c_post}" | |
| local c_clear="${c_pre}0${c_post}" | |
| fi | |
| local bad_color="$c_red" | |
| local ok_color="$c_green" | |
| local flags_color="$c_lblue" | |
| local branch_color="" | |
| if [ "$detached" = no ]; then | |
| branch_color="$ok_color" | |
| else | |
| branch_color="$bad_color" | |
| fi | |
| if [ -n "$c" ]; then | |
| c="$branch_color$c$c_clear" | |
| fi | |
| b="$branch_color$b$c_clear" | |
| if [ -n "$w" ]; then | |
| w="$bad_color$w$c_clear" | |
| fi | |
| if [ -n "$i" ]; then | |
| i="$ok_color$i$c_clear" | |
| fi | |
| if [ -n "$s" ]; then | |
| s="$flags_color$s$c_clear" | |
| fi | |
| if [ -n "$u" ]; then | |
| u="$bad_color$u$c_clear" | |
| fi | |
| } | |
| # Helper function to read the first line of a file into a variable. | |
| # __git_eread requires 2 arguments, the file path and the name of the | |
| # variable, in that order. | |
| __git_eread () | |
| { | |
| test -r "$1" && IFS=$__git_CRLF read -r "$2" <"$1" | |
| } | |
| # see if a cherry-pick or revert is in progress, if the user has committed a | |
| # conflict resolution with 'git commit' in the middle of a sequence of picks or | |
| # reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read | |
| # the todo file. | |
| __git_sequencer_status () | |
| { | |
| local todo | |
| if test -f "$g/CHERRY_PICK_HEAD" | |
| then | |
| r="|CHERRY-PICKING" | |
| return 0; | |
| elif test -f "$g/REVERT_HEAD" | |
| then | |
| r="|REVERTING" | |
| return 0; | |
| elif __git_eread "$g/sequencer/todo" todo | |
| then | |
| case "$todo" in | |
| p[\ \ ]|pick[\ \ ]*) | |
| r="|CHERRY-PICKING" | |
| return 0 | |
| ;; | |
| revert[\ \ ]*) | |
| r="|REVERTING" | |
| return 0 | |
| ;; | |
| esac | |
| fi | |
| return 1 | |
| } | |
| # __git_ps1 accepts 0 or 1 arguments (i.e., format string) | |
| # when called from PS1 using command substitution | |
| # in this mode it prints text to add to bash PS1 prompt (includes branch name) | |
| # | |
| # __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc) | |
| # in that case it _sets_ PS1. The arguments are parts of a PS1 string. | |
| # when two arguments are given, the first is prepended and the second appended | |
| # to the state string when assigned to PS1. | |
| # The optional third parameter will be used as printf format string to further | |
| # customize the output of the git-status string. | |
| # In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true | |
| __git_ps1 () | |
| { | |
| # preserve exit status | |
| local exit="$?" | |
| local pcmode=no | |
| local detached=no | |
| local ps1pc_start='\u@\h:\w ' | |
| local ps1pc_end='\$ ' | |
| local printf_format=' (%s)' | |
| case "$#" in | |
| 2|3) pcmode=yes | |
| ps1pc_start="$1" | |
| ps1pc_end="$2" | |
| printf_format="${3:-$printf_format}" | |
| # set PS1 to a plain prompt so that we can | |
| # simply return early if the prompt should not | |
| # be decorated | |
| PS1="$ps1pc_start$ps1pc_end" | |
| ;; | |
| 0|1) printf_format="${1:-$printf_format}" | |
| ;; | |
| *) return "$exit" | |
| ;; | |
| esac | |
| # ps1_expanded: This variable is set to 'yes' if the shell | |
| # subjects the value of PS1 to parameter expansion: | |
| # | |
| # * bash does unless the promptvars option is disabled | |
| # * zsh does not unless the PROMPT_SUBST option is set | |
| # * POSIX shells always do | |
| # | |
| # If the shell would expand the contents of PS1 when drawing | |
| # the prompt, a raw ref name must not be included in PS1. | |
| # This protects the user from arbitrary code execution via | |
| # specially crafted ref names. For example, a ref named | |
| # 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the | |
| # shell to execute 'sudo rm -rf /' when the prompt is drawn. | |
| # | |
| # Instead, the ref name should be placed in a separate global | |
| # variable (in the __git_ps1_* namespace to avoid colliding | |
| # with the user's environment) and that variable should be | |
| # referenced from PS1. For example: | |
| # | |
| # __git_ps1_foo=$(do_something_to_get_ref_name) | |
| # PS1="...stuff...\${__git_ps1_foo}...stuff..." | |
| # | |
| # If the shell does not expand the contents of PS1, the raw | |
| # ref name must be included in PS1. | |
| # | |
| # The value of this variable is only relevant when in pcmode. | |
| # | |
| # Assume that the shell follows the POSIX specification and | |
| # expands PS1 unless determined otherwise. (This is more | |
| # likely to be correct if the user has a non-bash, non-zsh | |
| # shell and safer than the alternative if the assumption is | |
| # incorrect.) | |
| # | |
| local ps1_expanded=yes | |
| [ -z "${ZSH_VERSION-}" ] || eval '[[ -o PROMPT_SUBST ]]' || ps1_expanded=no | |
| [ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no | |
| local repo_info rev_parse_exit_code | |
| repo_info="$(git rev-parse --git-dir --is-inside-git-dir \ | |
| --is-bare-repository --is-inside-work-tree --show-ref-format \ | |
| --short HEAD 2>/dev/null)" | |
| rev_parse_exit_code="$?" | |
| if [ -z "$repo_info" ]; then | |
| return "$exit" | |
| fi | |
| local LF="$__git_LF" | |
| local short_sha="" | |
| if [ "$rev_parse_exit_code" = "0" ]; then | |
| short_sha="${repo_info##*$LF}" | |
| repo_info="${repo_info%$LF*}" | |
| fi | |
| local ref_format="${repo_info##*$LF}" | |
| repo_info="${repo_info%$LF*}" | |
| local inside_worktree="${repo_info##*$LF}" | |
| repo_info="${repo_info%$LF*}" | |
| local bare_repo="${repo_info##*$LF}" | |
| repo_info="${repo_info%$LF*}" | |
| local inside_gitdir="${repo_info##*$LF}" | |
| local g="${repo_info%$LF*}" | |
| if [ "true" = "$inside_worktree" ] && | |
| [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] && | |
| [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] && | |
| git check-ignore -q . | |
| then | |
| return "$exit" | |
| fi | |
| local sparse="" | |
| if [ -z "${GIT_PS1_COMPRESSSPARSESTATE-}" ] && | |
| [ -z "${GIT_PS1_OMITSPARSESTATE-}" ] && | |
| [ "$(git config --bool core.sparseCheckout)" = "true" ]; then | |
| sparse="|SPARSE" | |
| fi | |
| local r="" | |
| local b="" | |
| local step="" | |
| local total="" | |
| if [ -d "$g/rebase-merge" ]; then | |
| __git_eread "$g/rebase-merge/head-name" b | |
| __git_eread "$g/rebase-merge/msgnum" step | |
| __git_eread "$g/rebase-merge/end" total | |
| r="|REBASE" | |
| else | |
| if [ -d "$g/rebase-apply" ]; then | |
| __git_eread "$g/rebase-apply/next" step | |
| __git_eread "$g/rebase-apply/last" total | |
| if [ -f "$g/rebase-apply/rebasing" ]; then | |
| __git_eread "$g/rebase-apply/head-name" b | |
| r="|REBASE" | |
| elif [ -f "$g/rebase-apply/applying" ]; then | |
| r="|AM" | |
| else | |
| r="|AM/REBASE" | |
| fi | |
| elif [ -f "$g/MERGE_HEAD" ]; then | |
| r="|MERGING" | |
| elif __git_sequencer_status; then | |
| : | |
| elif [ -f "$g/BISECT_LOG" ]; then | |
| r="|BISECTING" | |
| fi | |
| if [ -n "$b" ]; then | |
| : | |
| elif [ -h "$g/HEAD" ]; then | |
| # symlink symbolic ref | |
| b="$(git symbolic-ref HEAD 2>/dev/null)" | |
| else | |
| local head="" | |
| case "$ref_format" in | |
| files) | |
| if ! __git_eread "$g/HEAD" head; then | |
| return "$exit" | |
| fi | |
| case $head in | |
| "ref: "*) | |
| head="${head#ref: }" | |
| ;; | |
| *) | |
| head="" | |
| esac | |
| ;; | |
| *) | |
| head="$(git symbolic-ref HEAD 2>/dev/null)" | |
| ;; | |
| esac | |
| if test -z "$head"; then | |
| detached=yes | |
| b="$( | |
| case "${GIT_PS1_DESCRIBE_STYLE-}" in | |
| (contains) | |
| git describe --contains HEAD ;; | |
| (branch) | |
| git describe --contains --all HEAD ;; | |
| (tag) | |
| git describe --tags HEAD ;; | |
| (describe) | |
| git describe HEAD ;; | |
| (* | default) | |
| git describe --tags --exact-match HEAD ;; | |
| esac 2>/dev/null)" || | |
| b="$short_sha..." | |
| b="($b)" | |
| else | |
| b="$head" | |
| fi | |
| fi | |
| fi | |
| if [ -n "$step" ] && [ -n "$total" ]; then | |
| r="$r $step/$total" | |
| fi | |
| local conflict="" # state indicator for unresolved conflicts | |
| if [ "${GIT_PS1_SHOWCONFLICTSTATE-}" = "yes" ] && | |
| [ "$(git ls-files --unmerged 2>/dev/null)" ]; then | |
| conflict="|CONFLICT" | |
| fi | |
| local w="" | |
| local i="" | |
| local s="" | |
| local u="" | |
| local h="" | |
| local c="" | |
| local p="" # short version of upstream state indicator | |
| local upstream="" # verbose version of upstream state indicator | |
| if [ "true" = "$inside_gitdir" ]; then | |
| if [ "true" = "$bare_repo" ]; then | |
| c="BARE:" | |
| else | |
| b="GIT_DIR!" | |
| fi | |
| elif [ "true" = "$inside_worktree" ]; then | |
| if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] && | |
| [ "$(git config --bool bash.showDirtyState)" != "false" ] | |
| then | |
| git diff --no-ext-diff --quiet || w="*" | |
| git diff --no-ext-diff --cached --quiet || i="+" | |
| if [ -z "$short_sha" ] && [ -z "$i" ]; then | |
| i="#" | |
| fi | |
| fi | |
| if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] && | |
| git rev-parse --verify --quiet refs/stash >/dev/null | |
| then | |
| s="$" | |
| fi | |
| if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] && | |
| [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] && | |
| git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null | |
| then | |
| u="%${ZSH_VERSION+%}" | |
| fi | |
| if [ -n "${GIT_PS1_COMPRESSSPARSESTATE-}" ] && | |
| [ "$(git config --bool core.sparseCheckout)" = "true" ]; then | |
| h="?" | |
| fi | |
| if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then | |
| __git_ps1_show_upstream | |
| fi | |
| fi | |
| local z="${GIT_PS1_STATESEPARATOR- }" | |
| b=${b##refs/heads/} | |
| if [ "$pcmode" = yes ] && [ "$ps1_expanded" = yes ]; then | |
| __git_ps1_branch_name=$b | |
| b="\${__git_ps1_branch_name}" | |
| fi | |
| if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then | |
| __git_ps1_colorize_gitstring | |
| fi | |
| local f="$h$w$i$s$u$p" | |
| local gitstring="$c$b${f:+$z$f}${sparse}$r${upstream}${conflict}" | |
| if [ "$pcmode" = yes ]; then | |
| if [ "${__git_printf_supports_v-}" != yes ]; then | |
| gitstring=$(printf -- "$printf_format" "$gitstring") | |
| else | |
| printf -v gitstring -- "$printf_format" "$gitstring" | |
| fi | |
| PS1="$ps1pc_start$gitstring$ps1pc_end" | |
| else | |
| printf -- "$printf_format" "$gitstring" | |
| fi | |
| return "$exit" | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| cp ~/.bashrc ~/.bashrc.bak | |
| cp ~/.bash_aliases ~/.bash_aliases.bak | |
| cp ~/.dircolors ~/.dircolors.bak | |
| cp .bashrc .bash_aliases .dircolors .git-prompt.sh ~/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment