|
|
|
@ -18,20 +18,36 @@ |
|
|
|
|
# attribute set to null. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ stdenv, writeScript, buildFHSUserEnv |
|
|
|
|
, xplanePathStr |
|
|
|
|
{ stdenv, writeScript, buildFHSUserEnv, lib |
|
|
|
|
, xplanePathStr, unzip |
|
|
|
|
, addons ? []}: |
|
|
|
|
|
|
|
|
|
let |
|
|
|
|
inherit (stdenv.lib) concatMapStrings optionalString unique; |
|
|
|
|
inherit (lib) concatMapStrings optionalString unique; |
|
|
|
|
runScript = writeScript "x-plane-script" '' |
|
|
|
|
#!${stdenv.shell} |
|
|
|
|
usage() { |
|
|
|
|
cat <<EOF >&2 |
|
|
|
|
x-plane-env OPT |
|
|
|
|
X-Plane run X-Plane (default) |
|
|
|
|
Airfoil run Airfoil Maker |
|
|
|
|
Plane run Plane Maker |
|
|
|
|
Installer run Installer |
|
|
|
|
SHELL run bash inside FHS environment |
|
|
|
|
prepare prepare all currently activated addons |
|
|
|
|
revert [ADDON]... remove modifications from named addons |
|
|
|
|
navdata FILE [OLDCYCLE] update navigation DB |
|
|
|
|
/abs/path [ARG]... run /abs/path inside FHS environment |
|
|
|
|
rel/path [ARG]... run $XPLANEPATH/rel/path inside FHS environment |
|
|
|
|
EOF |
|
|
|
|
} |
|
|
|
|
sys=${stdenv.targetPlatform.system} |
|
|
|
|
sys=''${sys%-linux} |
|
|
|
|
bin=$1 |
|
|
|
|
: ''${XPLANEPATH:=${xplanePathStr}} |
|
|
|
|
export XPLANEPATH |
|
|
|
|
case "$bin" in |
|
|
|
|
--help) usage; exit ;; |
|
|
|
|
X-Plane) exec "''${XPLANEPATH}/X-Plane-$sys" ;; |
|
|
|
|
Airfoil*) exec "''${XPLANEPATH}/Airfoil Maker-$sys" ;; |
|
|
|
|
Plane*) exec "''${XPLANEPATH}/Plane Maker-$sys" ;; |
|
|
|
@ -40,6 +56,7 @@ let |
|
|
|
|
SHELL) exec "bash" ;; |
|
|
|
|
prepare) exec ${prepareScript} ;; |
|
|
|
|
revert) shift; exec ${revertScript} "$@" ;; |
|
|
|
|
navdata) shift; exec ${navdbScript} "$@" ;; |
|
|
|
|
/*) exec "$@" ;; |
|
|
|
|
*) shift; exec "''${XPLANEPATH}/$bin" "$@" ;; |
|
|
|
|
esac |
|
|
|
@ -68,7 +85,7 @@ let |
|
|
|
|
${addon.passthru.prepare} |
|
|
|
|
'' + (if (addon.passthru ? revert) then '' |
|
|
|
|
cat <<'EOF' >"$XPLANEPATH/.addons/revert-${addon.pname}" |
|
|
|
|
#!${stdenv.shell} |
|
|
|
|
#!/usr/bin/env bash |
|
|
|
|
set -e |
|
|
|
|
${addon.passthru.revert} |
|
|
|
|
rm $0 |
|
|
|
@ -98,6 +115,57 @@ let |
|
|
|
|
fi |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
navdbScript = writeScript "update-navdata" '' |
|
|
|
|
#!/usr/bin/env bash |
|
|
|
|
set -euo pipefail |
|
|
|
|
|
|
|
|
|
: ''${XPLANEPATH:=${xplanePathStr}} |
|
|
|
|
|
|
|
|
|
[ $# -ne 0 ] || { |
|
|
|
|
printf "usage: update-navdata FILE [OLDCYCLE]\n\nFILE xplane11_native_CYCL.zip file\nOLDCYCLE old cycle ID for backup (default auto detect)\n" >&2 |
|
|
|
|
exit 1; } |
|
|
|
|
|
|
|
|
|
if [ $# -ge 2 ]; then |
|
|
|
|
oldcycle=$2 |
|
|
|
|
elif [ -e "$XPLANEPATH/Custom Data/cycle_info.txt" ]; then |
|
|
|
|
oldcycle=$(head -n1 "$XPLANEPATH/Custom Data/cycle_info.txt" | sed -E -n -e "s/^AIRAC cycle[ :]+([0-9]+)\r$/\1/p") |
|
|
|
|
[ -n "$oldcycle" ] || { printf "Unable to determine old AIRAC cycle\n" >&2; exit 1; } |
|
|
|
|
fi |
|
|
|
|
f=$1 |
|
|
|
|
[ -e "$f" ] || { printf "No such file or directory\n" >&2; exit 1; } |
|
|
|
|
cycle=''${1##*_} |
|
|
|
|
cycle=''${cycle%.zip} |
|
|
|
|
newpath="$XPLANEPATH/Custom Data AIRAC$cycle" |
|
|
|
|
|
|
|
|
|
if [ ! -h "$XPLANEPATH/Custom Data" ]; then |
|
|
|
|
mv "$XPLANEPATH/Custom Data" "$XPLANEPATH/Custom Data AIRAC$oldcycle" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
if [ -d "$newpath" ]; then |
|
|
|
|
rm -rf "$newpath" |
|
|
|
|
fi |
|
|
|
|
|
|
|
|
|
${lib.getBin unzip}/bin/unzip -d "$newpath" "$f" |
|
|
|
|
cat <<EOF >"$newpath/Readme.txt" |
|
|
|
|
Place newer navigational data for the global database in THIS folder. |
|
|
|
|
If you want to replace any of X-Plane's |
|
|
|
|
earth_nav.dat |
|
|
|
|
earth_awy.dat |
|
|
|
|
earth_fix.dat |
|
|
|
|
|
|
|
|
|
CIFP/* |
|
|
|
|
with newer data, then place them HERE IN THIS FOLDER to avoid conflicts with the X-Plane updater. |
|
|
|
|
|
|
|
|
|
Note that this database is also used by X-Plane’s GPS and previously needed files in other subfolders are now ignored. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Also, you can place the FAACIFP18 file here, which you can get from the FAA website: https://www.faa.gov/air_traffic/flight_info/aeronav/digital_products/cifp/ |
|
|
|
|
If the file FAACIFP18 is found in this folder, X-Plane will load instrument flight procedures from this file. |
|
|
|
|
EOF |
|
|
|
|
rm "$XPLANEPATH/Custom Data" |
|
|
|
|
ln -sf "$newpath" "$XPLANEPATH/Custom Data" |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
in buildFHSUserEnv rec { |
|
|
|
|
name = "x-plane-env"; |
|
|
|
|
passthru = { inherit addons; }; |
|
|
|
|