Expand local_machine docs and automation for connectivity, games, and ops.

Add proxy/VPN/telegram launchd and emergency runbooks; reorganize apps docs;
document JA3 CrossOver runbook and Wine troubleshooting; add GOG/HoMM game
scripts, disk cleanup guides, and gitea push-via-proxy helper. Ignore temp/.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ahauimix
2026-06-01 08:12:19 +03:00
parent a39ef89125
commit 1938b7c743
135 changed files with 9933 additions and 388 deletions

View File

@@ -0,0 +1,100 @@
#!/usr/bin/env bash
# GOG Galaxy в GOG-bottle без Wine-Inno (gdi32/botva2). Как install-gog-galaxy.sh для HoMM.
set -euo pipefail
GOG_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=config.sh
source "${GOG_DIR}/config.sh"
GAMES_DIR="$(cd "${GOG_DIR}/.." && pwd)"
GOG_SETUP="${GAMES_CACHE_DIR:-${GAMES_DIR}/cache}/setup_galaxy.exe"
EXTRACT_DIR="${GAMES_CACHE_DIR:-${GAMES_DIR}/cache}/gog-galaxy-extract-gog-bottle"
GOG_PF="${BOTTLE_DIR}/drive_c/Program Files (x86)/GOG Galaxy"
GOG_PD="${BOTTLE_DIR}/drive_c/ProgramData/GOG.com/Galaxy"
MARKER="${BOTTLE_DIR}/.gog_galaxy_extract_installed"
gog_galaxy_exe() {
if [[ -f "${GOG_PF}/GalaxyClient.exe" ]]; then
echo "${GOG_PF}/GalaxyClient.exe"
return 0
fi
local found
found="$(find "${BOTTLE_DIR}/drive_c/Program Files"* -maxdepth 3 -name 'GalaxyClient.exe' 2>/dev/null | head -1)"
[[ -n "${found}" ]] && echo "${found}" && return 0
return 1
}
homm_gog_setup_url() {
if [[ -n "${GOG_SETUP_URL:-}" ]]; then
echo "${GOG_SETUP_URL}"
return 0
fi
local json url
json="$(curl -fsSL "https://remote-config.gog.com/components/webinstaller?component_version=2.0.0")"
url="$(python3 -c 'import json,sys; d=json.load(sys.stdin); print(d["content"]["windows"]["downloadLink"])' <<<"${json}" 2>/dev/null)" || true
if [[ -z "${url}" ]]; then
url="https://content-system.gog.com/open_link/download?path=/open/galaxy/client/setup_galaxy_2.0.100.1.exe"
fi
echo "${url}"
}
main() {
gog_wine_check
gog_disk_guard 3 || exit 1
if gog_galaxy_exe >/dev/null 2>&1; then
echo "GOG Galaxy уже в bottle: $(gog_galaxy_exe)"
exit 0
fi
if [[ ! -f "${GOG_SETUP}" ]]; then
mkdir -p "$(dirname "${GOG_SETUP}")"
dl_url="$(homm_gog_setup_url)"
echo "Скачиваю setup_galaxy.exe (~290 MB)…"
curl -L --fail --retry 3 -C - -o "${GOG_SETUP}" "${dl_url}"
fi
if ! command -v innoextract >/dev/null 2>&1; then
echo "Нужен innoextract: brew install innoextract"
exit 1
fi
echo "Распаковка GOG Galaxy (innoextract) → ${BOTTLE_NAME}"
rm -rf "${EXTRACT_DIR}"
mkdir -p "${EXTRACT_DIR}"
innoextract -e -d "${EXTRACT_DIR}" "${GOG_SETUP}"
mkdir -p "${GOG_PF}" "${GOG_PD}"
cp -R "${EXTRACT_DIR}/app/." "${GOG_PF}/"
local pd_src
pd_src="$(find "${EXTRACT_DIR}" -type d -path '*/GOG.com/Galaxy' 2>/dev/null | head -1)"
if [[ -n "${pd_src}" ]]; then
cp -R "${pd_src}/." "${GOG_PD}/"
fi
if ! gog_galaxy_exe >/dev/null 2>&1; then
echo "❌ GalaxyClient.exe не найден после распаковки"
exit 1
fi
echo "VC++ redist (из setup_galaxy)…"
local vc_x86="${EXTRACT_DIR}/tmp/VC_redist.x86.exe"
local vc_x64="${EXTRACT_DIR}/tmp/VC_redist.x64.exe"
if [[ -f "${vc_x86}" ]]; then
export_wine_env_gog
cp -f "${vc_x86}" "${BOTTLE_DIR}/drive_c/VC_redist.x86.exe"
cp -f "${vc_x64}" "${BOTTLE_DIR}/drive_c/VC_redist.x64.exe"
"${WINE64}" C:\\VC_redist.x86.exe /install /quiet /norestart
"${WINE64}" C:\\VC_redist.x64.exe /install /quiet /norestart
fi
local fonts_dst="${BOTTLE_DIR}/drive_c/windows/Fonts"
mkdir -p "${fonts_dst}"
cp -f "${EXTRACT_DIR}"/fonts/*.ttf "${fonts_dst}/" 2>/dev/null || true
bash "${GOG_DIR}/register-galaxy-registry.sh"
date -u +%Y-%m-%dT%H:%M:%SZ >"${MARKER}"
echo "OK: $(gog_galaxy_exe)"
}
main "$@"