~xdavidwu/dotfiles

ref: ba28ab189086fda515a600405cad946e0a43c75b dotfiles/.bashrc -rw-r--r-- 4.0 KiB
ba28ab18Pinghao Wu vim: ale: bump to v4.0.0 29 days ago
                                                                                
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
#
# ~/.bashrc
#

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

shopt -s histappend extglob
set +H

# sanitize
unset _GCOMPAT_PRELOAD

if [ "$OSTYPE" = msys ]; then
	export LC_ALL=zh_TW.UTF-8
	PATH="/usr/bin:/bin:/mingw64/bin:$PATH"
	EXECIGNORE="*.!(exe)"
elif [ "$OSTYPE" = "linux-musl" ]; then
	_GCOMPAT_PRELOAD="LD_PRELOAD=/lib/libgcompat.so.0"
fi

HISTFILE="$XDG_CACHE_HOME/bash_history"
HISTCONTROL=ignoreboth
HISTSIZE=2048
HISTFILESIZE=2048
HISTIGNORE="history:exit:top:ls:clear"

# aliases
if [ "${OSTYPE%%-*}" = "linux" ] || [ "$OSTYPE" = "msys" ];then
	# coreutils
	alias ls='ls --color=auto'
	alias diff='diff --color=auto'
elif [ "${OSTYPE%%[0-9]*}" = "freebsd" ];then
	alias ls='ls -G'
fi
alias mvi='mpv --config-dir=$HOME/.config/mvi'
# non-posix, but exists on freebsd
alias rm='rm -I'
alias grep='grep --color=auto'

alias sftp='sftp -p -o Compression=no'

if command -v nvimpager >/dev/null;then
	alias less=nvimpager
elif command -v vimpager >/dev/null;then
	alias less=vimpager
fi
command -v nvim >/dev/null && alias vim=nvim
alias sway="env LC_ALL=zh_TW.utf8 XDG_CURRENT_DESKTOP=sway sway"
alias mcshl="env ALSOFT_DRIVERS=alsa $_GCOMPAT_PRELOAD _JAVA_OPTIONS=\"-Dawt.useSystemAAFontSettings=lcd -Xmn512m -Xms2G -Xmx2G -XX:+UseTransparentHugePages -XX:MaxGCPauseMillis=50 -XX:+UseZGC $_JAVA_OPTIONS\" mcshl"

alias dl="curl -OJLR --compressed"
alias errno="grep -h '^#define[[:space:]]*E' /usr/include/asm-generic/errno* | sed 's|^#define[[:space:]]*||'"
alias signal="grep -h '^#define SIG' /usr/include/asm/signal.h | sed 's|^#define ||'"
alias timesync='doas busybox ntpd -dqn -p time.stdtime.gov.tw && doas busybox hwclock -wu'
alias notify="printf '\x1b]777;notify;title;%s\x1b'"

sleepto() {
	sleep $(($(date --date="$1" +%s) - $EPOCHSECONDS))
}

desecret() {
	yq '.data |= (to_entries | map(.value |= @base64d) | from_entries)'
}

# application envs
export GPG_TTY=$(tty 2>/dev/null)

# shell level prompt
# PTERM: poisoned TERM, $TERM/$LVLSTR, ssh passes TERM by default
# if $PPID is a GUI term, treat it as a fresh start
# if $TERM contains /, it is $PTERM passed from ssh
case "$TERM" in
	*/*)
		PTERM=$TERM
		TERM=${TERM%%/*}
		;;
esac
# bash complains if $() faces null
[ -f "/proc/$PPID/cmdline" ] && PCMD=$(tr -d '\000' < /proc/$PPID/cmdline)
[ -z "$PTERM" ] && INITLVL=1
PTERM=${PTERM:-$TERM/}
case "$PCMD" in
	SCREEN*)
		PTERM="${PTERM}S"
		;;
	sshd*)
		PTERM="${PTERM}s"
		;;
	dvtm*)
		PTERM="${PTERM}d"
		;;
	*term*|foot*)
		PTERM="$TERM/"
		;;
	*)
		[ -z "$INITLVL" ] && PTERM="${PTERM}n"
		;;
esac
LVLSTR=${PTERM##*/}
PS1A=
PS1AO=
while [ -n "$LVLSTR" ];do
	case "$LVLSTR" in
		S*)
			PS1A="$PS1A\[\e[44m\]>"
			PS1AO="$PS1AO>"
			;;
		s*)
			PS1A="$PS1A\[\e[45m\]>"
			PS1AO="$PS1AO>"
			;;
		d*)
			PS1A="$PS1A\[\e[42m\]>"
			PS1AO="$PS1AO>"
			;;
		n*)
			PS1A="$PS1A\[\e[0m\]>"
			PS1AO="$PS1AO>"
			;;
	esac
	LVLSTR=${LVLSTR#?}
done
PS1="\[\e]133;A\e\\\\\]\[\e[01;32m\]\u@\h${ABDUCO_SESSION:+>$ABDUCO_SESSION}${STY:+>${STY#*\.}} \[\e[01;34m\]\w\[\e[31m\]\${?#0}\[\e[0m\]\\$ "
PS1="\[\e]2;$PS1AO\u@\h${ABDUCO_SESSION:+>$ABDUCO_SESSION}${STY:+>${STY#*\.}} \w\e\\\\\]$PS1A\[\e[0m\]$PS1"
PROMPT_DIRTRIM=2
export PTERM
alias rssh="command ssh"
alias ssh="env TERM=$PTERM ssh"

if ! type _completion_loader >/dev/null 2>&1; then
	if [ -f /usr/share/bash-completion/bash_completion ]; then
		. /usr/share/bash-completion/bash_completion
	elif [ -f /usr/local/share/bash-completion/bash_completion ]; then
		. /usr/local/share/bash-completion/bash_completion
	elif [ -f /data/data/com.termux/files/usr/share/bash-completion/bash_completion ]; then
		. /data/data/com.termux/files/usr/share/bash-completion/bash_completion
	fi
fi

get_completion() {
	type _comp_cmd_$1 >/dev/null 2>&1 && echo _comp_cmd_$1 || echo _$1
}

_completion_loader ssh 2>/dev/null
[ $? -eq 124 ] && complete -F "$(get_completion ssh)" rssh

_completion_loader sudo 2>/dev/null
[ $? -eq 124 ] && complete -F "$(get_completion sudo)" doas

_completion_loader symfony-autocomplete 2>/dev/null
[ $? -eq 124 ] && complete -F _symfony artisan composer
true