237 lines
5.1 KiB
Bash
237 lines
5.1 KiB
Bash
# ╭──────╮
|
|
# │ code │
|
|
# ╰──────╯
|
|
|
|
# ╭──────┬───────────╮
|
|
# │ code │ variables │
|
|
# ╰──────┴───────────╯
|
|
|
|
# TODO variablize
|
|
# path to the entrypoint main file of the project
|
|
RWX_MAIN_PATH="${RWX_ROOT_SYSTEM}/${RWX_MAIN_NAME}"
|
|
# user root directory of the project
|
|
RWX_SELF_USER="${HOME}/${RWX_SELF_NAME}"
|
|
|
|
# cache for the parsing awk script
|
|
_rwx_code_awk="$(cat "${RWX_ROOT_SYSTEM}/code.awk")"
|
|
# cache for code aliases
|
|
_rwx_code_aliases=""
|
|
# cache for code aliases functions
|
|
_rwx_code_aliases_functions=""
|
|
# cache for code commands
|
|
_rwx_code_commands=""
|
|
# cache for code constants
|
|
_rwx_code_constants=""
|
|
# cache for code functions
|
|
_rwx_code_functions=""
|
|
# cache for code variables
|
|
_rwx_code_variables=""
|
|
|
|
# ╭──────┬──────╮
|
|
# │ code │ help │
|
|
# ╰──────┴──────╯
|
|
|
|
# output help message
|
|
rwx_code_help() {
|
|
rwx_log \
|
|
"rwx_… = functions" \
|
|
" a__… = aliases" \
|
|
" u__… = user"
|
|
}
|
|
|
|
# ╭──────┬─────────╮
|
|
# │ code │ install │
|
|
# ╰──────┴─────────╯
|
|
|
|
#/ rwx_install
|
|
rwx_code_install() {
|
|
local target="${1}"
|
|
local command file name root
|
|
# code
|
|
if [ -n "${target}" ]; then
|
|
root="${target}${RWX_ROOT_SYSTEM}"
|
|
rwx_remove "${root}"
|
|
cp --recursive "${RWX_ROOT_SYSTEM}" "${root}"
|
|
fi
|
|
# commands
|
|
root="${target}/usr/local/bin"
|
|
name="${RWX_SELF_NAME}.sh"
|
|
file="${root}/${name}"
|
|
rwx_remove "${file}"
|
|
rwx_link "${file}" "${RWX_MAIN_PATH}"
|
|
while IFS= read -r command; do
|
|
file="${root}/${command}"
|
|
rwx_remove "${file}"
|
|
rwx_link "${file}" "${name}"
|
|
done <<EOF
|
|
${_rwx_code_commands}
|
|
EOF
|
|
# sh
|
|
file="${target}/etc/profile.d/${RWX_SELF_NAME}.sh"
|
|
rwx_remove "${file}"
|
|
rwx_file_write "${file}" "\
|
|
export ENV=\"${RWX_MAIN_PATH}\"
|
|
"
|
|
# bash
|
|
file="${target}/etc/bash.bashrc"
|
|
rwx_remove "${file}"
|
|
rwx_link "${file}" "${RWX_MAIN_PATH}"
|
|
}
|
|
|
|
# ╭──────┬───────╮
|
|
# │ code │ parts │
|
|
# ╰──────┴───────╯
|
|
|
|
# show the cached code
|
|
#= rc
|
|
rwx_code() {
|
|
echo "${_rwx_code}"
|
|
}
|
|
|
|
# show the cached awk script
|
|
rwx_code_awk() {
|
|
echo "${_rwx_code_awk}"
|
|
}
|
|
|
|
# show the cached aliases
|
|
#= rca
|
|
rwx_code_aliases() {
|
|
echo "${_rwx_code_aliases}"
|
|
}
|
|
|
|
# find aliased function
|
|
rwx_code_alias_function() {
|
|
local target="${1}"
|
|
local line name
|
|
while IFS= read -r line; do
|
|
name="$(echo "${line}" | awk "{print \$1}")"
|
|
if [ "${name}" = "${target}" ]; then
|
|
echo "${line}" |
|
|
awk "{print \$2}"
|
|
fi
|
|
done <<EOF
|
|
${_rwx_code_aliases_functions}
|
|
EOF
|
|
}
|
|
|
|
# show the cached aliases and functions
|
|
#= rcaf
|
|
rwx_code_aliases_functions() {
|
|
echo "${_rwx_code_aliases_functions}"
|
|
}
|
|
|
|
# show the cached commands
|
|
rwx_code_commands() {
|
|
echo "${_rwx_code_commands}"
|
|
}
|
|
|
|
# show the cached constants
|
|
#= rcc
|
|
rwx_code_constants() {
|
|
echo "${_rwx_code_constants}"
|
|
}
|
|
|
|
# show the cached functions
|
|
#= rcf
|
|
rwx_code_functions() {
|
|
echo "${_rwx_code_functions}"
|
|
}
|
|
|
|
# show the cached variables
|
|
#= rcv
|
|
rwx_code_variables() {
|
|
echo "${_rwx_code_variables}"
|
|
}
|
|
|
|
# ╭──────┬───────╮
|
|
# │ code │ parse │
|
|
# ╰──────┴───────╯
|
|
|
|
# check source code
|
|
rwx_code_check() {
|
|
# check format
|
|
rwx_log
|
|
rwx_shfmt "${RWX_ROOT_SYSTEM}"
|
|
# check syntax
|
|
rwx_log
|
|
rwx_shellcheck "${RWX_ROOT_SYSTEM}"
|
|
}
|
|
|
|
# fetch matching doc for given name
|
|
#= rcd
|
|
rwx_code_doc() {
|
|
local name="${1}"
|
|
[ -n "${name}" ] || return
|
|
rwx_code |
|
|
awk \
|
|
--assign action="doc" \
|
|
--assign target="${name}" \
|
|
"${_rwx_code_awk}"
|
|
}
|
|
|
|
rwx_code_load() {
|
|
# parse aliases
|
|
_rwx_code_aliases="$(rwx_code_parse "aliases")"
|
|
# parse aliases functions
|
|
local line text
|
|
_rwx_code_aliases_functions="$(rwx_code_parse "aliases functions")"
|
|
while IFS= read -r line; do
|
|
text="$(echo "${line}" | sed "s| |() { |")"
|
|
text="${text} \"\${@}\"; }"
|
|
eval "${text}"
|
|
done <<EOF
|
|
${_rwx_code_aliases_functions}
|
|
EOF
|
|
# parse commands
|
|
_rwx_code_commands="$(rwx_code_parse "commands")"
|
|
# parse constants
|
|
_rwx_code_constants="$(rwx_code_parse "constants")"
|
|
# parse functions
|
|
_rwx_code_functions="$(rwx_code_parse "functions")"
|
|
# parse variables
|
|
_rwx_code_variables="$(rwx_code_parse "variables")"
|
|
}
|
|
|
|
rwx_code_parse() {
|
|
local action="${1}"
|
|
rwx_code |
|
|
awk \
|
|
--assign action="${action}" \
|
|
"${_rwx_code_awk}"
|
|
}
|
|
|
|
# ╭──────┬──────╮
|
|
# │ code │ main │
|
|
# ╰──────┴──────╯
|
|
|
|
rwx_code_main() {
|
|
# source user root
|
|
rwx_source "${RWX_SELF_USER}"
|
|
# load code cache
|
|
rwx_code_load
|
|
# context / command
|
|
local command
|
|
# command name used to run
|
|
# (stripped from hyphen interactive flag)
|
|
command="$(basename "${0}" | sed "s|^-||")"
|
|
case "${command}" in
|
|
"bash" | "dash" | "sh") unset command ;;
|
|
*) ;;
|
|
esac
|
|
if [ -n "${command}" ]; then
|
|
local function
|
|
# find the matching function
|
|
function="$(rwx_code_alias_function "${command}")"
|
|
if [ -n "${function}" ]; then
|
|
"${function}" "${@}"
|
|
fi
|
|
# context / shell
|
|
else
|
|
# run interactive extras
|
|
if rwx_shell_interactive; then
|
|
# help
|
|
rwx_log
|
|
rwx_code_help
|
|
fi
|
|
fi
|
|
}
|