Commit 6a4418243a42

Vincent Demeester <vincent@sbr.pm>
2026-06-29 12:11:10
fix(wallabag): symlink package structure and fix Caddy
Fixes for the wallabag module: - Symlink all package entries into data dir except mutable dirs (app/config, var, web) so Symfony resolves paths for translations, templates, bundles, and migrations - Set Caddy php_fastcgi index to app.php - Set PHP-FPM socket group to caddy for access - Patch secret directly into parameters.yml instead of relying on env var that PHP-FPM lacks - Fix invalid --reset=no flag on wallabag:install - Use install -m 0640 for parameters.yml overwrites
1 parent 7bb22d3
Changed files (1)
modules
wallabag
modules/wallabag/default.nix
@@ -32,7 +32,7 @@ let
 
         mailer_dsn: '${cfg.mailerDsn}'
         locale: ${cfg.locale}
-        secret: '%env(WALLABAG_SECRET)%'
+        secret: __WALLABAG_SECRET_PLACEHOLDER__
 
         twofactor_sender: ${cfg.twofactorSender}
         fosuser_registration: ${boolToString cfg.registration}
@@ -76,6 +76,29 @@ let
     mkdir -p "$DATA_DIR/data/db"
     mkdir -p "$DATA_DIR/data/assets"
 
+    # Symlink all package top-level entries into data dir, skipping
+    # directories we manage (app, var, web/uploads)
+    for entry in "$PACKAGE"/*; do
+      name=$(basename "$entry")
+      case "$name" in app|var|web) continue ;; esac
+      ln -sfn "$entry" "$DATA_DIR/$name"
+    done
+
+    # Symlink app-level entries except config (which we manage)
+    for entry in "$PACKAGE"/app/*; do
+      name=$(basename "$entry")
+      [ "$name" = "config" ] && continue
+      ln -sfn "$entry" "$DATA_DIR/app/$name"
+    done
+
+    # Symlink config files except parameters.yml (which we generate)
+    for f in "$PACKAGE"/app/config/*; do
+      fname=$(basename "$f")
+      [ "$fname" = "parameters.yml" ] && continue
+      [ "$fname" = "parameters.yml.dist" ] && continue
+      ln -sfn "$f" "$DATA_DIR/app/config/$fname"
+    done
+
     # Copy parameters.yml (install with write permission since we patch it)
     install -m 0640 ${parametersYml} "$DATA_DIR/app/config/parameters.yml"
 
@@ -101,7 +124,9 @@ let
     fi
 
     export WALLABAG_DATA="$DATA_DIR"
-    export WALLABAG_SECRET="$WALLABAG_SECRET_VALUE"
+    # Patch secret into parameters.yml
+    ${pkgs.gnused}/bin/sed -i "s|__WALLABAG_SECRET_PLACEHOLDER__|$WALLABAG_SECRET_VALUE|" \
+      "$DATA_DIR/app/config/parameters.yml"
 
     # Clear cache on every start (required after upgrades)
     rm -rf "$DATA_DIR/var/cache/prod/"*
@@ -110,7 +135,7 @@ let
     ${cfg.package}/bin/console doctrine:migrations:migrate --no-interaction --env=prod || true
 
     # Install craue settings if first run
-    ${cfg.package}/bin/console wallabag:install --env=prod --no-interaction --reset=no 2>/dev/null || true
+    ${cfg.package}/bin/console wallabag:install --env=prod --no-interaction 2>/dev/null || true
   '';
 
   phpPackage = pkgs.php83.withExtensions (
@@ -289,7 +314,7 @@ in
       settings = {
         "listen.mode" = mkDefault "0660";
         "listen.owner" = mkDefault cfg.user;
-        "listen.group" = mkDefault cfg.group;
+        "listen.group" = mkDefault config.services.caddy.group;
         "pm" = mkDefault "dynamic";
         "pm.max_children" = mkDefault 10;
         "pm.start_servers" = mkDefault 2;
@@ -307,6 +332,8 @@ in
         extraConfig = ''
           root * ${cfg.package}/web
           php_fastcgi unix/${config.services.phpfpm.pools.wallabag.socket} {
+            split .php
+            index app.php
             env WALLABAG_DATA ${cfg.dataDir}
           }
           file_server