willpower232

willpower232 / bash.bashrc

Last active 1 month ago

Like 0

I am making my .bashrc portable as inspired by this https://www.cyberciti.biz/tips/bash-aliases-mac-centos-linux-unix.html

Revision 5f2565107c59344a2cbaba366cc300152d1f3602

bash.bashrc Raw
1#### Set prompt basics ####
2
3# set variable identifying the chroot you work in (used in the prompt below)
4if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
5 debian_chroot=$(cat /etc/debian_chroot)
6fi
7
8# set a fancy prompt (non-color, unless we know we "want" color)
9case "$TERM" in
10 xterm-color) color_prompt=yes;;
11esac
12
13# uncomment for a colored prompt, if the terminal has the capability; turned
14# off by default to not distract the user: the focus in a terminal window
15# should be on the output of commands, not on the prompt
16force_color_prompt=yes
17
18if [ -n "$force_color_prompt" ]; then
19 if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
20 # We have color support; assume it's compliant with Ecma-48
21 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
22 # a case would tend to support setf rather than setaf.)
23 color_prompt=yes
24 else
25 color_prompt=
26 fi
27fi
28
29#### Set initial prompt ####
30
31ps1_shelllevel='${debian_chroot:+($debian_chroot)}($SHLVL) '
32
33if [ "$color_prompt" = yes ]; then
34 ps1_user='\u@\h {\A} '
35
36 # have to remember to wrap the 0-width characters on the line of the prompt in \[ and \]
37 if [ "$EUID" -ne 0 ]; then
38 ps1_folder='\e[32m[\w]'
39 ps1_prompt='\n\[\e[0m\]$ '
40 else
41 ps1_folder='\e[31m[\w]'
42 ps1_prompt='\n\[\e[0m\]# '
43 fi
44else
45 ps1_user='u@h {a} '
46 ps1_folder='[w]'
47
48 if [ "$EUID" -ne 0 ]; then
49 ps1_prompt='\n$ '
50 else
51 ps1_prompt='\n# '
52 fi
53fi
54
55PS1=$ps1_shelllevel$ps1_user$ps1_folder$ps1_prompt
56
57# don't unset these so they can be used later
58#unset color_prompt force_color_prompt
59
60# not sure what this bit does
61#case "$TERM" in
62# xterm*|rxvt*)
63# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1";;
64# *)
65# ;;
66#esac
67
68#### Colour support ####
69
70if [ -x /usr/bin/dircolors ]; then
71 test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
72 alias ls='ls --color=auto'
73 alias dir='dir --color=auto'
74 alias vdir='vdir --color=auto'
75
76 alias grep='grep --color=auto'
77 alias fgrep='fgrep --color=auto'
78 alias egrep='egrep --color=auto'
79
80 # may be --color=auto in some versions...
81 alias ip='ip -c'
82fi
83
84#### Aliases for all ####
85
86# alias commands that prefix commands
87# so they can prefix your aliases
88# https://askubuntu.com/a/22043
89alias sudo='sudo '
90alias watch='watch '
91
92alias vim='vim -i NONE'
93alias nano='nano --nowrap --smooth -T 4'
94alias plz='sudo '
95alias dammit='sudo !!'
96
97# stop yourself from breaking the server by accident
98alias mv='mv -i'
99alias cp='cp -i'
100alias ln='ln -i'
101alias rm='rm -I --preserve-root'
102alias chown='chown --preserve-root'
103alias chmod='chmod --preserve-root'
104alias chgrp='chgrp --preserve-root'
105
106# I haven't used these in a while since I taught myself to use grep -R
107# don't forget about -i for ignoring case and -l if you just want file names and first matches
108# but you could rewrite these to use ag if you wanted but they also might not follow symlinks
109#function findinfiles() { find ./ -type f -print0 | xargs -0 grep -i "$1"; }
110#function findinphpfiles() { find ./ -type f -name "*.php" -print0 | xargs -0 grep -i "$1"; }
111
112complete -W "$(echo $(grep '^ssh ' ~/.bash_history | sort -u | sed 's/^ssh //'))" ssh
113
114if [ "$(uname)" == "Darwin" ]; then
115 # got pbcopy
116 :
117elif grep -q Microsoft /proc/version; then
118 # route error to /dev/null because thanks microsoft
119 alias pbcopy='clip.exe > /dev/null 2>&1'
120 # todo: pbpaste in wsl
121else
122 # install xclip through apt first
123 alias pbcopy='xclip -selection clipboard'
124 alias pbpaste='xclip -selection clipboard -o'
125fi
126
127# inspired by @jamesdoc https://twitter.com/jamesdoc/status/902829327187931137
128# ref https://github.com/dannyfritz/commit-message-emoji
129alias gc-InitialCommit="printf \"๐ŸŽ‰\" | pbcopy && pbpaste && echo \"\""
130alias gc-VersionTag="printf \"๐Ÿ”–\" | pbcopy && pbpaste && echo \"\""
131alias gc-NewFeature="printf \"โœจ\" | pbcopy && pbpaste && echo \"\""
132alias gc-Bugfix="printf \"๐Ÿ›\" | pbcopy && pbpaste && echo \"\""
133alias gc-SecurityFix="printf \"๐Ÿ”’\" | pbcopy && pbpaste && echo \"\""
134alias gc-Metadata="printf \"๐Ÿ“‡\" | pbcopy && pbpaste && echo \"\""
135alias gc-Refactoring="printf \"โ™ป๏ธ\" | pbcopy && pbpaste && echo \"\""
136alias gc-Documentation="printf \"๐Ÿ“š\" | pbcopy && pbpaste && echo \"\""
137alias gc-Internationalization="printf \"๐ŸŒ\" | pbcopy && pbpaste && echo \"\""
138alias gc-Accessibility="printf \"โ™ฟ\" | pbcopy && pbpaste && echo \"\""
139alias gc-Performance="printf \"๐ŸŽ\" | pbcopy && pbpaste && echo \"\""
140alias gc-Cosmetic="printf \"๐ŸŽจ\" | pbcopy && pbpaste && echo \"\""
141alias gc-Tooling="printf \"๐Ÿ”ง\" | pbcopy && pbpaste && echo \"\""
142alias gc-Tests="printf \"๐Ÿšจ\" | pbcopy && pbpaste && echo \"\""
143alias gc-Deprecation="printf \"๐Ÿ’ฉ\" | pbcopy && pbpaste && echo \"\""
144alias gc-Removal="printf \"๐Ÿ—‘๏ธ\" | pbcopy && pbpaste && echo \"\""
145alias gc-WorkInProgress="printf \"๐Ÿšง\" | pbcopy && pbpaste && echo \"\""
146alias gc-Deforestation="printf \"๐ŸŒฒ\" | pbcopy && pbpaste && echo \"\""
147
148if [ -x /usr/bin/termsaver ]; then
149 alias tsm="termsaver matrix"
150fi
151
152if [ -x /usr/bin/cmatrix ]; then
153 alias etm="cmatrix -a -b -s -C cyan"
154fi
155
156#### Final settings for all ####
157
158# this is needed to enter the passphrase when attempting to gpg-sign git commits
159#export GPG_TTY=$(tty)
160
161# if you're on WSL you may want to see information from MOTD such as pending updates
162#sudo run-parts /etc/update-motd.d/
163
164# if you're on WSL and you want to mount network shares
165#sudo mount -a
166
167# if you want to hide commands from your bash history with space and don't include duplicates
168# you need this but it may already be set elsewhere
169#HISTCONTROL=ignoreboth
170
171# Debian doesn't have bash-completion by default so you need to apt install bash-completion and add the below
172# also don't forget about https://github.com/cykerway/complete-alias
173#if [ -f /etc/bash_completion ]; then
174# . /etc/bash_completion
175#fi
176
177# set PATH so it includes user's private bin if it exists
178# I use a separate bin to backup standalone binaries
179#if [ -d "$HOME/bin" ] ; then
180# PATH="$HOME/bin:$PATH"
181#fi
182
my.bashrc Raw
1# don't need to do this
2# /etc/bash.bashrc
3
4# simple function to output yay or nay based on last status code
5# have to include it directly in PS1 so it reads the right status code
6echo_last_status() {
7 if [ $? = 0 ]; then
8 echo "๐Ÿ‘Œ"
9 else
10 echo "๐Ÿ‘Ž"
11 fi
12 # can't output a newline
13}
14
15# git clone git@github.com:jimeh/git-aware-prompt ~/.bash/git-aware-prompt
16git_branch=
17git_dirty=
18if [ -d ~/.bash/git-aware-prompt ]; then
19 source ~/.bash/git-aware-prompt/prompt.sh
20fi
21
22if [ "$EUID" -ne 0 ]; then
23 if [ "$color_prompt" = yes ]; then
24 ps1_folder='\e[32m[\w] \e[1;34m$git_branch\e[31m$git_dirty'
25 else
26 ps1_folder='[w] $git_branch$git_dirty'
27 fi
28fi
29
30PS1='$(echo_last_status)\n'$ps1_shelllevel$ps1_user$ps1_folder$ps1_prompt
31
32#if [[ "$TERM" == "xterm-256color" && "$SHLVL" == "1" ]]; then
33# echo ""
34# curl --silent --max-time 2 https://wttr.in/lincoln,uk?0Q
35#fi
36
37# lol
38alias nano='vim'
39
40# alias bashphp='docker exec -it -w "$PWD" phpfpm bash'
41# alias bashnode='bash ~/containers/nodejs/interactive.sh'
42# alias bashruby='bash ~/containers/ruby/interactive.sh'
43# alias bashpython='bash ~/containers/python/interactive.sh'
44
45function git {
46 if [[ "$1" == "clone" && "$@" != *"--help"* ]]; then
47
48 # I prefer to not include file permissions when cloning
49 # unfortunately this is more involved than just the below
50 # command git clone --config core.filemode=false "$@"
51
52 curdir="$(pwd)"
53
54 argsarray=($(echo $@ | tr " " "\n"))
55 lastarg=${argsarray[-1]}
56 penultimatearg=${argsarray[-2]}
57
58 # if the penultimate arg contains @ or :// then it must be the repo url
59 if ! case $penultimatearg in *"@"* | *"://"*) false;; esac; then
60 newdir="$lastarg"
61 else
62 newdir="$(basename $lastarg .git)"
63 if case $penultimatearg in *":"*) false;; esac; then
64 newdir=${newdir#*:}
65 fi
66 fi
67
68 # this original way which doesn't support args when clone'ing
69 #if [ -z "$3" ]; then
70 # newdir="$(basename $2 .git)"
71 #else
72 # newdir="$3"
73 #fi
74
75 shift 1
76 command git clone "$@" || return 1
77 cd $newdir
78
79 #case $@ in
80 # *"workgithubname"* | *"WorkGithubName"* | *"othercompanyname"*)
81 # command git config user.email me@work.com && echo "set user for work boss"
82 # ;;
83
84 # *"personalgithubname"* | *"gist.github.com"*)
85 # command git config user.email me@home.com && echo "set user for personal boss"
86 # ;;
87
88 # *)
89 # echo "whoareyou"
90 # ;;
91 #esac
92
93 command git config --unset core.filemode && echo "removed core.filemode setting boss"
94 cd $curdir
95
96 elif [[ "$1" == "branch" && "$@" != *"--help"* && "$@" != *" -r"* && -s "$2" && -z "$3" ]]; then
97 if [[ "$2" == "--random" ]]; then
98 command git fetch --all;
99 while true; do name=$RANDOM; if [ -z "$(command git show-ref refs/heads/$name)" ]; then command git checkout -b $name; break; fi; done;
100 else
101 shift 1
102 echo "switching to checkout..."
103 command git checkout -b "$@" || command git checkout "$@"
104 fi
105
106 else
107 command git "$@"
108 fi
109}
110
111alias g=git
112complete -F _complete_alias g
113alias n=nautilus
114
115function docker {
116 if [[ "$1" == "stop-and-rm" ]]; then
117 shift 1
118 command docker stop "$@"
119 command docker rm "$@"
120 elif [[ "$1" == "login-to-github" ]]; then
121 echo 'ghp_abcd' | docker login ghcr.io -u youruser --password-stdin
122 else
123 command docker "$@"
124 fi
125}
126
127alias d=docker
128complete -F _complete_alias d
129
130# aliases let you put things after the command if you want
131# i.e. get familiar with the flags but type way fewer characters
132# e.g. dcb --no-cache -> rebuild the images without cache
133# e.g. dcu -d -> dc up and detach/background it
134# e.g. dce app bash -> dc exec bash in the service
135# e.g. dcd -v -> dc down and clear volumes too
136
137export DOCKER_BUILDKIT=1
138alias dc="docker-compose"
139alias dcb="docker-compose build --parallel"
140alias dcd="docker-compose down"
141alias dcu="docker-compose up"
142#alias dce="docker-compose exec --user $(id -u):$(id -g) --env HOME=/tmp"
143alias dce="docker-compose exec"
144
145alias dceanrw="dce app npm run watch"
146alias dceapat="dce app php artisan tinker"
147alias dceapa="dce app php artisan"
148alias dcetct="dce testapp composer test"
149alias dcetca="dce testapp composer analyse"
150alias dcetact="dce test-app composer test"
151
152# persisting the changes you've made to your container
153# is a terrible idea and yet here it is
154function dcc {
155 if [ "$#" -ne "1" ]; then
156 echo "Precisely one argument required"
157 return 1
158 fi
159
160 CONTAINER=$(dc images | grep "_$1 " | awk '{print $1;}')
161 TAGNAME=$(dc images | grep "_app " | awk '{print $2;}')
162 TAGVERSION=$(dc images | grep "_app " | awk '{print $3;}')
163
164 if [ "$CONTAINER" = "" ] || [ "$TAGNAME" = "" ] || [ "$TAGVERSION" = "" ]; then
165 echo "Unable to figure out what to do"
166 echo "you will need to dcu -d again if you have already run this command"
167 return 1
168 fi
169
170 COMMAND="docker commit $CONTAINER $TAGNAME:$TAGVERSION"
171 echo $COMMAND
172 eval $COMMAND
173}
174
175#function k8sprod {
176# bash --rcfile ~/.bashrc.k8s
177#}
178
179alias assume="source assume"
180alias tf="terraform"
my.bashrc.k8s Raw
1if [ -f "$HOME/.bashrc" ]; then
2 . "$HOME/.bashrc"
3fi
4
5cd ~/gitrepos/k8s-configs
6
7# https://github.com/ahmetb/kubectx
8k8s_context=
9k8s_namespace=
10find_k8s() {
11 k8s_context="$(kubectx -c)"
12 k8s_namespace="$(kubens -c)"
13}
14
15PROMPT_COMMAND="find_k8s; $PROMPT_COMMAND"
16
17if [ "$EUID" -ne 0 ]; then
18 if [ "$color_prompt" = yes ]; then
19 ps1_folder='\e[32m[\w] \e[1;34m$k8s_context/$k8s_namespace'
20 else
21 ps1_folder='[w] $k8s_context/$k8s_namespace'
22 fi
23fi
24
25PS1='$(echo_last_status)\n'$ps1_shelllevel$ps1_user$ps1_folder$ps1_prompt
26
27export AWS_PROFILE=k8s
28export AWS_SDK_LOAD_CONFIG=1
29export KOPS_STATE_STORE=your-kops-state-store
30
31source <(kubectl completion bash)
32
33# have to manually install other bash completions
34# cd $(pkg-config --variable=completionsdir bash-completion)
35# curl https://raw.githubusercontent.com/ahmetb/kubectx/master/completion/kubectx.bash | sudo tee kubectx
36# curl https://raw.githubusercontent.com/ahmetb/kubectx/master/completion/kubens.bash | sudo tee kubens
37
38alias k=kubectl
39complete -F __start_kubectl k
40#complete -F _complete_alias k
41
42function qk {
43 if [[ "$1" == "token" ]]; then
44 command aws-iam-authenticator token -i your.k8s.cluster -r arn:aws:iam::012345678910:role/OrganizationAccountAccessRole | jq -r .status.token | pbcopy
45 elif [[ "$1" == "dashboard" ]]; then
46 echo "Copying token to clipboard..."
47 qk token
48 echo "Done"
49 echo "When running, visit http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/"
50 k proxy
51 elif [[ "$1" == "watch" ]]; then
52 shift 1
53 if [[ "$1" == "get" ]]; then
54 shift 1
55 k get --watch "$@"
56 else
57 command watch -n 1 kubectl "$@"
58 fi
59 elif [[ "$1" == "podexec" ]]; then
60 shift 1
61 firstpod="$(k get pods --output=jsonpath="{.items[0].metadata.name}" | head -1)"
62 echo "Running in $firstpod"
63 k exec -it $firstpod "$@"
64 elif [[ "$1" == "redeploy" ]]; then
65 shift 1
66 k patch deployment "$1" -p "{\"spec\": {\"template\": {\"metadata\": { \"labels\": { \"redeploy\": \"$(date +%s)\"}}}}}"
67 else
68 command kubectl "$@"
69 fi
70}
71
72alias kbuild='kustomize build --enable-alpha-plugins .'
my.profile Raw
1# if running bash
2if [ -n "$BASH_VERSION" ]; then
3 # include .bashrc if it exists
4 if [ -f "$HOME/.bashrc" ]; then
5 . "$HOME/.bashrc"
6 fi
7fi
8
9# likely to not have a UI so need to sign commits in the terminal
10#export GPG_TTY=$(tty)
11