sh/shell/shell.sh

145 lines
2.3 KiB
Bash
Raw Normal View History

2024-11-16 02:21:30 +00:00
PS1="\$(shell_prompt \${?})"
2024-11-16 01:32:58 +00:00
PS2="\
"
2024-11-17 16:40:02 +00:00
SH="$(cat /proc/$$/comm)"
2024-11-16 00:41:42 +00:00
2024-11-16 00:54:13 +00:00
shell_color() {
local code="${1}"
2024-11-16 01:19:41 +00:00
case "${SH}" in
"bash")
2024-11-17 01:05:07 +00:00
printf "\x01\e[0"
2024-11-16 01:19:41 +00:00
if [ -n "${code}" ]; then
printf "%s" ";${code}"
fi
2024-11-17 01:05:07 +00:00
printf "m\x02"
2024-11-16 01:19:41 +00:00
;;
*)
2024-11-16 01:44:04 +00:00
printf "\033["
2024-11-16 01:19:41 +00:00
if [ -n "${code}" ]; then
printf "%s" "${code}"
else
printf "0"
fi
2024-11-17 01:05:07 +00:00
printf "m"
2024-11-16 01:19:41 +00:00
;;
esac
2024-11-16 00:54:13 +00:00
}
2024-11-16 01:32:58 +00:00
SH_BROWN="$(shell_color 33)"
SH_CYAN="$(shell_color 36)"
2024-11-16 01:19:41 +00:00
SH_DEFAULT="$(shell_color)"
SH_GREEN="$(shell_color 31)"
SH_MAGENTA="$(shell_color 35)"
2024-11-16 01:32:58 +00:00
SH_RED="$(shell_color 32)"
2024-11-16 00:54:13 +00:00
2024-11-16 02:21:30 +00:00
shell_configure() {
case "${SH}" in
"bash")
# completion
2024-11-17 17:49:04 +00:00
local root="/usr/share/bash-completion"
local file path
for file in "bash_completion" "completions/git"; do
path="${root}/${file}"
2024-11-17 18:10:18 +00:00
[ -f "${path}" ] && . "${path}"
2024-11-17 17:49:04 +00:00
done
2024-11-16 02:21:30 +00:00
# history
HISTCONTROL="ignorespace"
HISTSIZE=-1
HISTTIMEFORMAT="%Y%m%d %H%M%S "
;;
2024-11-16 02:23:19 +00:00
*) ;;
2024-11-16 02:21:30 +00:00
esac
}
shell_configure
2024-11-15 16:06:29 +00:00
2024-11-16 02:21:30 +00:00
shell_prompt() {
2024-11-16 01:55:41 +00:00
local date host id
2024-11-13 12:14:58 +00:00
local code="${1}"
date="$(date +%H:%M:%S)"
2024-11-12 09:18:44 +00:00
local git
2024-11-13 12:14:58 +00:00
host="$(hostname)"
2024-11-16 00:41:42 +00:00
id="$(id --user)"
2024-11-12 09:18:44 +00:00
local path="${PWD}"
local user="${USER}"
local view="└ "
2024-11-16 01:27:43 +00:00
# code
2024-11-13 12:14:58 +00:00
if [ "${code}" -ne 0 ]; then
2024-11-16 01:19:41 +00:00
view="${view}${SH_GREEN}"
2024-11-12 09:18:44 +00:00
else
2024-11-16 01:19:41 +00:00
view="${view}${SH_RED}"
2024-11-12 09:18:44 +00:00
fi
2024-11-16 01:27:43 +00:00
view="${view}${code}"
# date
view="${view}${SH_DEFAULT} @ "
view="${view}${SH_BROWN}${date}"
# git
2024-11-16 01:55:41 +00:00
if command -v "__git_ps1" >"/dev/null"; then
2024-11-12 09:18:44 +00:00
git="$(__git_ps1)"
2024-11-13 12:10:19 +00:00
if [ -n "${git}" ]; then
2024-11-16 01:27:43 +00:00
view="${view}${SH_DEFAULT}${SH_MAGENTA}${git}"
2024-11-12 09:18:44 +00:00
fi
fi
2024-11-16 01:27:43 +00:00
# new
2024-11-17 00:31:06 +00:00
view="${view}\\n"
2024-11-16 01:27:43 +00:00
# path
view="${view}${SH_CYAN}${path}"
# new
2024-11-17 00:31:06 +00:00
view="${view}\\n"
2024-11-16 01:27:43 +00:00
# frame
2024-11-16 01:32:58 +00:00
view="${view}${SH_DEFAULT}"
2024-11-16 01:27:43 +00:00
# user
2024-11-16 00:41:42 +00:00
if [ "${id}" -eq 0 ]; then
2024-11-16 01:19:41 +00:00
view="${view}${SH_GREEN}"
2024-11-12 09:18:44 +00:00
else
2024-11-16 01:19:41 +00:00
view="${view}${SH_RED}"
2024-11-12 09:18:44 +00:00
fi
2024-11-16 01:27:43 +00:00
view="${view}${user}"
# host
view="${view}${SH_DEFAULT} @ "
2024-11-16 01:43:06 +00:00
view="${view}${SH_BROWN}${host}"
# new
2024-11-17 00:31:06 +00:00
view="${view}\\n"
2024-11-16 01:43:06 +00:00
# prompt
view="${view}${SH_DEFAULT}${PS2}"
# print
2024-11-17 00:32:34 +00:00
printf "%b" "${view}"
2023-08-20 16:33:26 +00:00
}
2024-11-16 02:21:30 +00:00
shell_setup() {
# shell
echo "export ENV=\"${ENV}\"" >"/etc/profile.d/shell.sh"
# bash
local file="/etc/bash.bashrc"
rm --force --recursive "${file}"
ln --symbolic "${ENV}" "${file}"
}
2024-11-17 16:36:25 +00:00
# shorten alias
a() {
alias \
"${@}"
}
# swap directory (current ↔ previous)
sd() {
cd \
- ||
return
}
# exit terminal
x() {
exit \
"${@}"
}
[ "${SH}" = "bash" ] || return
# shellcheck disable=SC3033
..() {
cd ..
}
# shellcheck disable=SC3033
...() {
cd ../..
}