diff --git a/core.sh b/core.sh deleted file mode 100644 index 3def78e..0000000 --- a/core.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -# ============================================ -# Core Bootstrap -# ============================================ - -WGCTL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -source "${WGCTL_DIR}/core/log.sh" -source "${WGCTL_DIR}/core/context.sh" -source "${WGCTL_DIR}/core/utils.sh" -source "${WGCTL_DIR}/core/module.sh" -source "${WGCTL_DIR}/core/command.sh" -source "${WGCTL_DIR}/core/command_mixins.sh" -source "${WGCTL_DIR}/core/flag.sh" -source "${WGCTL_DIR}/core/json.sh" -source "${WGCTL_DIR}/core/ui.sh" -source "${WGCTL_DIR}/core/color.sh" -source "${WGCTL_DIR}/core/fmt.sh" -source "${WGCTL_DIR}/core/test/test.sh" - -command::_load_mixins diff --git a/core/__pycache__/json_helper.cpython-311.pyc b/core/__pycache__/json_helper.cpython-311.pyc deleted file mode 100644 index 54cb7e6..0000000 Binary files a/core/__pycache__/json_helper.cpython-311.pyc and /dev/null differ diff --git a/core/context.sh b/core/app/context.sh similarity index 81% rename from core/context.sh rename to core/app/context.sh index 6a7afaf..45ff0b9 100644 --- a/core/context.sh +++ b/core/app/context.sh @@ -4,11 +4,8 @@ # Static Context — resolved once at source time # ============================================ -_CTX_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" _CTX_WG="/etc/wireguard" -_CTX_CORE="${_CTX_ROOT}/core" -_CTX_MODULES="${_CTX_ROOT}/modules" -_CTX_COMMANDS="${_CTX_ROOT}/commands" +_CTX_WGCTL="/etc/wireguard/wgctl" _CTX_CLIENTS="${_CTX_WG}/clients" # ── Directory layout ────────────────────────────────── @@ -17,10 +14,10 @@ _CTX_CLIENTS="${_CTX_WG}/clients" # data/ ← all persistent data (rules, identities, etc.) # daemon/ ← runtime files (logs, caches) -_CTX_WGCTL="${_CTX_WG}/.wgctl" -_CTX_CONFIG="${_CTX_WGCTL}/config" -_CTX_DATA="${_CTX_WGCTL}/data" -_CTX_DAEMON="${_CTX_WGCTL}/daemon" +_CTX_WGCTL_ARTIFACT="${_CTX_WG}/.wgctl" +_CTX_CONFIG="${_CTX_WGCTL_ARTIFACT}/config" +_CTX_DATA="${_CTX_WGCTL_ARTIFACT}/data" +_CTX_DAEMON="${_CTX_WGCTL_ARTIFACT}/daemon" # ── Data subdirs ────────────────────────────────────── _CTX_RULES="${_CTX_DATA}/rules" @@ -44,15 +41,11 @@ _CTX_CONFIG_FILE="${_CTX_CONFIG}/wgctl.json" # Accessors # ============================================ -function ctx::root() { echo "$_CTX_ROOT"; } -function ctx::core() { echo "$_CTX_CORE"; } -function ctx::modules() { echo "$_CTX_MODULES"; } -function ctx::commands() { echo "$_CTX_COMMANDS"; } function ctx::wg() { echo "$_CTX_WG"; } function ctx::clients() { echo "$_CTX_CLIENTS"; } # Top-level dirs -function ctx::wgctl() { echo "$_CTX_WGCTL"; } +function ctx::wgctl() { echo "$_CTX_WGCTL_ARTIFACT"; } # needs to change to ctx::wgctl_artifact or ctx::artifact function ctx::config() { echo "$_CTX_CONFIG"; } function ctx::data() { echo "$_CTX_DATA"; } function ctx::daemon() { echo "$_CTX_DAEMON"; } @@ -83,9 +76,9 @@ function ctx::endpoint_cache() { echo "${_CTX_DAEMON}/endpoint_cache.json"; function ctx::accept_events_log() { echo "${_CTX_DAEMON}/accept_events.log"; } # Tool paths -function ctx::json_helper() { echo "${_CTX_CORE}/json_helper.py"; } -function ctx::monitor_script() { echo "${_CTX_ROOT}/daemon/wgctl-monitor.py"; } -function ctx::lib() { echo "${_CTX_CORE}/lib"; } +function ctx::json_helper() { echo "${_CTX_WGCTL}/core/json_helper.py"; } +function ctx::monitor_script() { echo "${_CTX_WGCTL}/daemon/wgctl-monitor.py"; } +function ctx::lib() { echo "${_CTX_WGCTL}/core/lib"; } function ctx::block_history() { echo "${_CTX_DATA}/block-history"; } diff --git a/core/app/core.sh b/core/app/core.sh new file mode 100644 index 0000000..ca828ba --- /dev/null +++ b/core/app/core.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +_APP_CORE_DIR="$(dirname "${BASH_SOURCE[0]}")" + +# ============================================ +# Core Bootstrap +# ============================================ + +source "${_APP_CORE_DIR}/context.sh" +source "${_APP_CORE_DIR}/json.sh" + +export PYTHONPATH="$(ctx::core):${PYTHONPATH:-}" + +function app::_load_mixins() { + local mixin_file + for mixin_file in "${WGCTL_DIR}/commands/mixins/"*.mixin.sh; do + [[ -f "$mixin_file" ]] && source "$mixin_file" + done +} +app::_load_mixins \ No newline at end of file diff --git a/core/json.sh b/core/app/json.sh similarity index 99% rename from core/json.sh rename to core/app/json.sh index bdad396..457c6f1 100644 --- a/core/json.sh +++ b/core/app/json.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash -JSON_HELPER="${_CTX_ROOT}/core/json_helper.py" +JSON_HELPER="$(ctx::app)/json_helper.py" +# echo "JSON_HELPER: $JSON_HELPER" function json::get() { python3 "$JSON_HELPER" get "$@"