diff --git a/nix/module.nix b/nix/module.nix index d759468..2fa939f 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -139,24 +139,29 @@ in }; script = '' set -eu - - # Copy the immutable store package into a writable app root. - # Symlinking would defeat Laravel's __DIR__ based path - # resolution: PHP's __DIR__ follows symlinks back to the - # read only store, breaking storage/ and bootstrap/cache/ - # writes even when those subtrees are themselves symlinked - # into a writable state dir. rm -rf ${appRoot} mkdir -p ${appRoot} - cp -rL ${cfg.backendPackage}/share/php/tide-backend/. ${appRoot}/ - chmod -R u+w ${appRoot} - - # Redirect the two mutable subtrees to /var/lib/tide/state - # so they survive activations and don't accumulate inside - # the disposable app root copy. - rm -rf ${appRoot}/storage ${appRoot}/bootstrap/cache - ln -sfn ${stateRoot}/storage ${appRoot}/storage + for entry in ${cfg.backendPackage}/share/php/tide-backend/*; do + name="$(basename "$entry")" + case "$name" in + storage|bootstrap) + ;; + *) + ln -s "$entry" "${appRoot}/$name" + ;; + esac + done + # bootstrap dir: symlink everything from the store + # except cache/ which must be writable. + mkdir -p ${appRoot}/bootstrap + for entry in ${cfg.backendPackage}/share/php/tide-backend/bootstrap/*; do + name="$(basename "$entry")" + if [ "$name" != "cache" ]; then + ln -sf "$entry" "${appRoot}/bootstrap/$name" + fi + done ln -sfn ${stateRoot}/bootstrap-cache ${appRoot}/bootstrap/cache + ln -sfn ${stateRoot}/storage ${appRoot}/storage chown -R ${cfg.user}:${cfg.group} ${appRoot} ${stateRoot} '';