mirror of
https://github.com/Cheviiot/Nivora.git
synced 2026-08-03 15:51:12 +00:00
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.
110 lines
2.7 KiB
Bash
Executable File
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}" "$@"
|