summaryrefslogtreecommitdiff
path: root/home/xyz/.bashrc
blob: 42fb562b60cc76d737d5051a360d3b9ab7b98f4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
#!/bin/bash

# $- meaning see https://stackoverflow.com/questions/42757236/what-does-mean-in-bash
# If not running interactively, don't do anything
#[[ $- != *i* ]] && return
# https://github.com/westscz/.dotfiles/blob/master/system/bashrc
case $- in
	*i*) ;;
	*) return;;
esac

. /usr/share/fzf/completion.bash
. /usr/share/fzf/key-bindings.bash
. /usr/share/bash-complete-alias/complete_alias

# default PS1
#PS1='[\u@\h \W]\$ '

# depreciated
# 0: not bold, 91: bright red
# \e[m act like \e[0m, means reset so commands after it will not be colored 
# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit
# need \[ and \] around color codes so bash ignore color codes when calculating line wraps?
# https://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/#:~:text=you%20also%20need%20to%20put%20%5C%5B%20and%20%5C%5D%20around%20any%20color%20codes%20so%20that%20bash%20does%20not%20take%20them%20into%20account%20when%20calculating%20line%20wraps.
#PS1='\[\e[0;91m\][\u@\h \W]\$ \[\e[0m\]'
# \033 can be used for dash printf, but \e can't? not sure why
#PS1='\[\033[0;91m\][\u@\h \W]\$ \[\033[0m\]'

# tput is better for different terminals? 
# but also need \[ and \] around color code for PS1! but seems no need for printf in script? why?
# setaf and sgr0 see `man terminfo`
PS1="\[$(tput setaf 1)\][\u@\h \W]\$ \[$(tput sgr0)\]"

# https://github.com/LukeSmithxyz/voidrice/blob/master/.config/shell/aliasrc
for cmd in hardcode-fixer ventoy units_cur fbgrab powertop nft rpi-imager fdisk dmesg; do
	alias $cmd="sudo $cmd"
done
for cmd in pacdiff visudo; do
	alias $cmd="sudo -E $cmd"
done
for cmd in loop o 'watch -c'; do
	alias ${cmd%% *}="$cmd "
done
unset cmd

# different name
alias a=alarm
# /dev/ttyACM0 can be in config file, or as environmantal variable, see /usr/share/doc/adafruit-ampy/README.md
#alias ap='ampy -p /dev/ttyACM0'
alias b='lsblk -o NAME,FSTYPE,FSVER,LABEL,UUID,FSAVAIL,FSUSED,FSUSE%,MOUNTPOINTS'
alias c=cfg
# for cherry pick
alias ccp='ssh-add -l >/dev/null || ssh-add; o alacritty -e ssh ia; o alacritty -e ssh ka; o alacritty -e ssh studio; o alacritty -e ssh pp; o alacritty -e "$EDITOR" +/"last checked commit" "$XDG_DOCUMENTS_DIR/notes/others/recurring_maintenance.md"; cfg -l log -p; cfg -s log -p'
#alias cr=curl
alias cri='curl -Is'
alias crig='curl -Is www.google.com'
alias d='sdcv --color'
alias e='"$PAGER"'
# https://superuser.com/a/1202867
alias fdu="find . -maxdepth 1 -execdir du -sh '{}' \+ | sort -h"
alias g=git
alias gcd='git clone --depth=1'
alias gr='grep --color=auto -i'
alias grr='grep --color=auto -iIR'
alias h=htop
alias i=nsxiv
alias j=journalctl
alias l='ls --color=auto -A --group-directories-first'
alias ll='ls --color=auto -lAh --group-directories-first'
#alias lo=loop
alias lop='loop ping'
alias lopd='loop ping 9.9.9.9'
alias m=man
alias p=pacman
alias pt=pactree
alias pu=paru
alias qre='qrencode -t utf8i -m 1'
alias r='rem -cu+2 -@'
# https://askubuntu.com/a/22043
alias s='sudo '
alias sca='ssh ca'
alias se='sudo -E '
alias sia='ssh ia'
alias ska='ssh ka'
alias sp='ssh pp'
alias spd='speedtest; librespeed-cli'
alias sst='ssh studio'
alias sv=sudoedit
alias y=systemctl
alias yd='systemctl list-dependencies --all'
alias ydr='systemctl list-dependencies --all --reverse'
alias ye='systemctl list-unit-files --state=enabled'
alias ys='systemctl status'
alias yu='systemctl --user'
alias yue='systemctl --user list-unit-files --state=enabled'
alias yus='systemctl --user status'
alias u='ssh-add -l >/dev/null || ssh-add; o alacritty -e ssh ca; o alacritty -e ssh ia; o alacritty -e ssh ka; o alacritty -e ssh studio; o alacritty -e ssh pp; upd'
alias v='"$EDITOR"'
alias va='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/computer/arch_install.md"'
alias vc='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/computer/cli_notes.md"'
alias vd='vidir'
alias vd2='vidir2 --linktargets'
alias vq='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/others/questions_ideas_tips.md"'
alias vn='"$EDITOR" "$(find "$XDG_DOCUMENTS_DIR/notes" -mindepth 1 -path "*/\.git" -prune -o -type f -print | fzf)"'
alias vr='"$EDITOR" "$DOTREMINDERS"'
alias vrc='"$EDITOR" +e\ \$MYVIMRC'
alias vrm='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/others/recurring_maintenance.md"'
alias vt='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/others/tmp_mobile_notes.md"'
alias xmr='monero-wallet-cli --config-file="$HOME/.bitmonero/monero-wallet-cli.conf"'
alias xmrds='monerod status; monerod print_net_stats'
alias za='zoxide add'
#alias zq='zoxide query'
#alias zqi='zoxide query -i'

# same name
alias absolutely-proprietary='echo n | absolutely-proprietary -f'
alias alsamixer='alsamixer -V all'
# I can't find a quick and easy way to temperory disable cloc config file except to change config file. Using an alias can disable --vcs with just \cloc.
alias cloc='cloc --vcs auto'
alias diff='diff --color=auto'
alias glmark2='glmark2 --fullscreen --annotate'
alias grep='grep --color=auto'
#alias info='info --vi-keys'
alias ls='ls --color=auto'
alias radeontop='radeontop -c'
alias rem='rem -@'
alias remind='remind -@'
alias rm='rm -I'
alias sdcv='sdcv --color'
alias shellcheck='shellcheck -x'
alias tree='tree -aC -I .git | "$PAGER"'
alias uname='uname -a'
alias vkmark='vkmark --fullscreen'

# depreciated
# all green color, no auto turn off color when pipe to nvim
#alias pactree='pactree -c'

#eval "$(zoxide init posix --hook prompt --no-aliases)"
# if no --no-aliases, when tab complete a dir name contain spaces, bash will not escape spaces, don't know why, maybe bug?
eval "$(zoxide init bash --no-aliases)"

z () {
	if  __zoxide_z "$@"; then
		l
		echo "$PWD"
	fi
}

zi () {
	if __zoxide_zi "$@"; then
		l
		echo "$PWD"
	fi
}

# steal from fzf: https://github.com/junegunn/fzf/blob/master/shell/key-bindings.bash
# READLINE_LINE and READLINE_POINT see `man bash`
zqi_key () {
	# fzf uses printf '%q' to escape output, but attention %q is not POSIX
	# well we use bash here so whatever
	selected="$(printf '%q' "$(zoxide query -i)")"
	# if don't want to use bash builtin printf:
	#selected=$(/usr/bin/printf '%q' "$(zoxide query -i)")
	# no "''" if select nothing
	if ! [ "$selected" = "''" ]; then
	# another way:
	#selected=$(zoxide query -i | tr '\n' '\0' | xargs -0 printf '%q')
	#if [ "$selected" ]; then
		READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected ${READLINE_LINE:$READLINE_POINT}"
		READLINE_POINT=$((READLINE_POINT+${#selected}+1))
	fi
}
bind -m vi-command -x '"\C-o":zqi_key'
bind -m vi-insert -x '"\C-o":zqi_key'

# more about bash completion see https://unix.stackexchange.com/a/529357/459013
complete -c wh
# tldr-sh-client readme 
complete -W "$(tldr 2>/dev/null -l -p all)" tldr
# https://unix.stackexchange.com/questions/216748/how-to-re-use-existing-completion-with-recent-bash-completion
_completion_loader info
eval "$(complete -p info | sed 's/\(.*\)info$/\1vinfo/')"
_completion_loader git
eval "$(complete -p git | sed 's/\(.*\)git$/\1cfg/')"
_completion_loader pass
eval "$(complete -p pass | sed 's/\(.*\)pass$/\1prp/')"
# complete-alias readme
complete -F _complete_alias "${!BASH_ALIASES[@]}"