rwx/sh/shell.sh

126 lines
2.4 KiB
Bash
Raw Normal View History

2024-11-19 16:38:20 +01:00
_sh_shell_color() {
2024-11-16 01:54:13 +01:00
local code="${1}"
2024-11-19 16:15:12 +01:00
case "${SH_SHELL}" in
2024-11-16 02:19:41 +01:00
"bash")
2024-11-17 02:05:07 +01:00
printf "\x01\e[0"
2024-11-16 02:19:41 +01:00
if [ -n "${code}" ]; then
printf "%s" ";${code}"
fi
2024-11-17 02:05:07 +01:00
printf "m\x02"
2024-11-16 02:19:41 +01:00
;;
*)
2024-11-16 02:44:04 +01:00
printf "\033["
2024-11-16 02:19:41 +01:00
if [ -n "${code}" ]; then
printf "%s" "${code}"
else
printf "0"
fi
2024-11-17 02:05:07 +01:00
printf "m"
2024-11-16 02:19:41 +01:00
;;
esac
2024-11-16 01:54:13 +01:00
}
2024-11-20 14:29:42 +01:00
SH_COLOR_BROWN="$(_sh_shell_color 33)"
SH_COLOR_CYAN="$(_sh_shell_color 36)"
SH_COLOR_DEFAULT="$(_sh_shell_color)"
SH_COLOR_GREEN="$(_sh_shell_color 31)"
SH_COLOR_MAGENTA="$(_sh_shell_color 35)"
SH_COLOR_RED="$(_sh_shell_color 32)"
2024-11-16 01:54:13 +01:00
2024-11-20 14:39:01 +01:00
sh_shell_configure() {
2024-11-25 17:32:44 +01:00
[ -n "${ENV}" ] || ENV="${SH_MAIN}"
export ENV
# prompt
PS1="\$(sh_shell_prompt \${?})"
PS2="├ "
# specific
2024-11-19 16:15:12 +01:00
case "${SH_SHELL}" in
2024-11-16 03:21:30 +01:00
"bash")
# completion
2024-11-17 18:49:04 +01:00
local root="/usr/share/bash-completion"
2024-11-17 19:23:24 +01:00
local file="bash_completion"
local path="${root}/${file}"
2024-11-25 14:27:23 +01:00
# shellcheck disable=SC1090
2024-11-17 19:23:24 +01:00
[ -f "${path}" ] && . "${path}"
root="${root}/completions"
if [ -d "${root}" ]; then
set \
"git" \
"tar"
for file in "${@}"; do
path="${root}/${file}"
2024-11-25 14:27:23 +01:00
# shellcheck disable=SC1090
2024-11-17 19:23:24 +01:00
[ -f "${path}" ] && . "${path}"
done
fi
2024-11-16 03:21:30 +01:00
# history
HISTCONTROL="ignorespace"
HISTSIZE=-1
HISTTIMEFORMAT="%Y%m%d %H%M%S "
;;
2024-11-16 03:23:19 +01:00
*) ;;
2024-11-16 03:21:30 +01:00
esac
}
2024-11-20 14:39:01 +01:00
sh_shell_configure
2024-11-15 17:06:29 +01:00
2024-11-19 16:40:11 +01:00
sh_shell_prompt() {
2024-11-16 02:55:41 +01:00
local date host id
2024-11-13 13:14:58 +01:00
local code="${1}"
date="$(date +%H:%M:%S)"
2024-11-12 10:18:44 +01:00
local git
2024-11-13 13:14:58 +01:00
host="$(hostname)"
2024-11-16 01:41:42 +01:00
id="$(id --user)"
2024-11-12 10:18:44 +01:00
local path="${PWD}"
local user="${USER}"
local view="└ "
2024-11-16 02:27:43 +01:00
# code
2024-11-13 13:14:58 +01:00
if [ "${code}" -ne 0 ]; then
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_GREEN}"
2024-11-12 10:18:44 +01:00
else
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_RED}"
2024-11-12 10:18:44 +01:00
fi
2024-11-16 02:27:43 +01:00
view="${view}${code}"
# date
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_DEFAULT} @ "
view="${view}${SH_COLOR_BROWN}${date}"
2024-11-16 02:27:43 +01:00
# git
2024-11-16 02:55:41 +01:00
if command -v "__git_ps1" >"/dev/null"; then
2024-11-12 10:18:44 +01:00
git="$(__git_ps1)"
2024-11-13 13:10:19 +01:00
if [ -n "${git}" ]; then
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_DEFAULT}${SH_COLOR_MAGENTA}${git}"
2024-11-12 10:18:44 +01:00
fi
fi
2024-11-16 02:27:43 +01:00
# new
2024-11-17 01:31:06 +01:00
view="${view}\\n"
2024-11-16 02:27:43 +01:00
# path
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_CYAN}${path}"
2024-11-16 02:27:43 +01:00
# new
2024-11-17 01:31:06 +01:00
view="${view}\\n"
2024-11-16 02:27:43 +01:00
# frame
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_DEFAULT}"
2024-11-16 02:27:43 +01:00
# user
2024-11-16 01:41:42 +01:00
if [ "${id}" -eq 0 ]; then
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_GREEN}"
2024-11-12 10:18:44 +01:00
else
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_RED}"
2024-11-12 10:18:44 +01:00
fi
2024-11-16 02:27:43 +01:00
view="${view}${user}"
# host
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_DEFAULT} @ "
view="${view}${SH_COLOR_BROWN}${host}"
2024-11-16 02:43:06 +01:00
# new
2024-11-17 01:31:06 +01:00
view="${view}\\n"
2024-11-16 02:43:06 +01:00
# prompt
2024-11-20 14:29:42 +01:00
view="${view}${SH_COLOR_DEFAULT}${PS2}"
2024-11-16 02:43:06 +01:00
# print
2024-11-17 01:32:34 +01:00
printf "%b" "${view}"
2023-08-20 18:33:26 +02:00
}
2024-11-16 03:21:30 +01:00
2024-11-20 14:36:41 +01:00
sh_shell_setup() {
2024-11-16 03:21:30 +01:00
# shell
2024-11-17 22:31:13 +01:00
echo "export ENV=\"${ENV}\"" >"/etc/profile.d/sh.sh"
2024-11-16 03:21:30 +01:00
# bash
local file="/etc/bash.bashrc"
rm --force --recursive "${file}"
ln --symbolic "${ENV}" "${file}"
}