Files
Nivora/parsec/parsecd-wrapper
T
Александр f405ae2bcf feat: create autonomous Nivora package repository
Maintain a validated cross-distribution package catalog.
Automate upstream updates, isolated builds, diagnostics, and direct publication.
Build the official GitHub Desktop sources for Linux with working OAuth.
2026-07-25 00:49:32 +10:00

110 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
real_binary='/usr/lib/parsec/parsecd'
parsec_home="${PARSEC_CONFIG_HOME:-${HOME}/.parsec}"
config_txt="${parsec_home}/config.txt"
config_json="${parsec_home}/config.json"
json_notice='See https://parsec.app/config for documentation and example. JSON must be valid before saving or file be will be erased.'
immersive_enabled() {
case "${PARSEC_NIVORA_IMMERSIVE:-1}" in
0 | false | no | off) return 1 ;;
*) return 0 ;;
esac
}
set_config_txt_immersive() {
mkdir -p "${parsec_home}"
touch "${config_txt}"
if grep -Eq '^[[:space:]]*client_immersive[[:space:]]*=' "${config_txt}"; then
sed -i -E 's/^[[:space:]]*client_immersive[[:space:]]*=.*/client_immersive=2/' "${config_txt}"
else
printf '\nclient_immersive=2\n' >>"${config_txt}"
fi
}
set_config_json_immersive() {
command -v python3 >/dev/null 2>&1 || return 1
mkdir -p "${parsec_home}"
python3 - "${config_json}" "${json_notice}" <<'PY'
import json
import sys
from pathlib import Path
path = Path(sys.argv[1])
notice = sys.argv[2]
data = [notice, {}]
if path.exists() and path.stat().st_size:
try:
with path.open(encoding="utf-8") as fh:
data = json.load(fh)
except json.JSONDecodeError:
raise SystemExit(2)
if isinstance(data, dict):
settings = data
elif isinstance(data, list):
while len(data) < 2:
data.append({})
if not isinstance(data[0], str):
data[0] = notice
if not isinstance(data[1], dict):
data[1] = {}
settings = data[1]
else:
data = [notice, {}]
settings = data[1]
current = settings.get("client_immersive")
value = None
if isinstance(current, dict):
value = current.get("value")
if value in (1, 2, "1", "2"):
immersive_value = int(value)
else:
immersive_value = 2
settings["client_immersive"] = {"value": immersive_value}
tmp = path.with_suffix(path.suffix + ".tmp")
with tmp.open("w", encoding="utf-8") as fh:
json.dump(data, fh, ensure_ascii=False, indent=2, sort_keys=True)
fh.write("\n")
tmp.replace(path)
print(immersive_value)
PY
}
immersive_value=2
if immersive_enabled; then
if ! immersive_value="$(set_config_json_immersive)"; then
set_config_txt_immersive
immersive_value=2
fi
else
exec "${real_binary}" "$@"
fi
for arg in "$@"; do
if [[ "${arg}" == *client_immersive=* ]]; then
exec "${real_binary}" "$@"
fi
done
if (($# == 0)); then
exec "${real_binary}" "client_immersive=${immersive_value}"
fi
if [[ "$1" == *=* ]]; then
first_arg="client_immersive=${immersive_value}:${1}"
shift
exec "${real_binary}" "${first_arg}" "$@"
fi
exec "${real_binary}" "$@"