rwx/sh/self.sh
2025-07-06 23:15:48 +02:00

186 lines
3.8 KiB
Bash

# self
# module
# show the cached aliases
#= rca
rwx_code_aliases() {
echo "${RWX_ALIASES}"
}
# show the cached variables
#= rcv
rwx_code_variables() {
echo "${_rwx_code_variables}"
}
# meta doc
#= rd
rwx_doc() {
local name="${1}"
[ -n "${name}" ] || return
printf "%s" "${_rwx_code}" |
awk \
--assign action="doc" \
--assign target="${name}" \
--file "${RWX_AWK}"
}
# ╭──────┬──────────╮
# │ self │ commands │
# ╰──────┴──────────╯
# get commands from root
rwx_self_commands() {
grep \
--directories "recurse" \
--no-filename \
"^${RWX_SELF_COMMAND}" "${RWX_ROOT_SYSTEM}" |
cut --delimiter "(" --fields 1 |
sed "s|^${RWX_SELF_COMMAND}||"
}
# ╭──────┬───────────╮
# │ self │ functions │
# ╰──────┴───────────╯
# get functions from root
rwx_self_functions() {
grep \
--directories "recurse" \
--no-filename \
"()" "${RWX_ROOT_SYSTEM}" |
cut --delimiter "(" --fields 1
}
# ╭──────┬──────╮
# │ self │ help │
# ╰──────┴──────╯
# output help message
rwx_self_help() {
rwx_log \
"rwx_… = functions" \
" a__… = aliases" \
" u__… = user"
}
# ╭──────┬──────╮
# │ self │ init │
# ╰──────┴──────╯
rwx_self_init() {
# run interactive extras
if rwx_shell_interactive; then
# help
rwx_log
rwx_self_help
fi
}
# ╭──────┬─────────╮
# │ self │ install │
# ╰──────┴─────────╯
_rwx_cmd_rwx_install() { rwx_self_install "${@}"; }
rwx_self_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}"
for command in $(rwx_self_commands); do
file="${root}/${command}"
rwx_remove "${file}"
rwx_link "${file}" "${name}"
done
# 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}"
}
# ╭──────┬────────╮
# │ self │ subset │
# ╰──────┴────────╯
rwx_self_subset() {
local argument file root
for argument in "${@}"; do
root="${RWX_ROOT_SYSTEM}/${argument}"
file="${argument}.sh"
if [ -d "${root}" ]; then
local file
for file in $(rwx_find_shell "${root}"); do
echo "${argument}/${file}"
done
elif [ -f "${RWX_ROOT_SYSTEM}/${file}" ]; then
echo "${file}"
fi
done
}
# ╭──────┬──────╮
# │ self │ test │
# ╰──────┴──────╯
#= rst
rwx_self_test() {
local item
set \
"main" \
"alias/git" \
\
"RWX_MAIN_NAME" \
\
"_rwx_code" \
\
"rwx_cache" \
\
"alias/batcat" \
"b" \
for item in "${@}"; do
echo
rwx_doc "${item}"
done
}
# ╭──────┬───────╮
# │ self │ write │
# ╰──────┴───────╯
rwx_self_write() {
local target="${1}"
if [ -n "${target}" ]; then
shift
local file files text
text="#! /usr/bin/env sh
"
files="$(rwx_self_subset "${@}")"
while IFS= read -r file; do
text="${text}
$(cat "${RWX_ROOT_SYSTEM}/${file}")
"
done <<EOF
${files}
EOF
rwx_file_write "${target}" "${text}"
rwx_shfmt "${target}"
rwx_shellcheck_file "${target}"
fi
}