@@ -5,8 +5,8 @@
55let
66 getReflexPlatform = sys: import ./dep/reflex-platform { inherit iosSdkVersion; system = sys; };
77 reflex-platform = getReflexPlatform system;
8− inherit (reflex-platform) hackGet;
9− pkgs = reflex-platform.nixpkgs;
8+ inherit (reflex-platform) hackGet nixpkgs;
9+ pkgs = nixpkgs;
1010in with pkgs.haskell.lib; with pkgs.lib;
1111let
1212 # TODO: Remove this after updating nixpkgs: https://github.com/NixOS/nixpkgs/issues/37750
@@ -115,7 +115,7 @@ let
115115 obelisk-cliapp = self.callCabal2nix "obelisk-cliapp" (cleanSource ./lib/cliapp) {};
116116 obelisk-command = (self.callCabal2nix "obelisk-command" (cleanSource ./lib/command) {}).override { Cabal = super.Cabal_2_0_0_2; };
117117 obelisk-executable-config = executableConfig.haskellPackage self;
118− obelisk-executable-config-inject = executableConfig.platforms.web.inject self; # TODO handle platforms.{ios,android}
118+ obelisk-executable-config-inject = executableConfig.platforms.web.inject self;
119119 obelisk-migration = self.callCabal2nix "obelisk-migration" (cleanSource ./lib/migration) {};
120120 obelisk-run = self.callCabal2nix "obelisk-run" (cleanSource ./lib/run) {};
121121 obelisk-selftest = self.callCabal2nix "obelisk-selftest" (cleanSource ./lib/selftest) {};
@@ -274,9 +274,9 @@ rec {
274274
275275 # An Obelisk project is a reflex-platform project with a predefined layout and role for each component
276276 project = base: projectDefinition:
277− let assets = processAssets { src = base + "/static"; };
278− configPath = base + "/config";
279−
277+ let configPath = base + "/config";
278+ static = base + "/static";
279+ processedStatic = processAssets { src = static; };
280280 projectOut = sys: (getReflexPlatform sys).project (args@{ nixpkgs, ... }:
281281 let mkProject = { android ? null #TODO: Better error when missing
282282 , ios ? null #TODO: Better error when missing
@@ -300,10 +300,16 @@ rec {
300300 };
301301 combinedPackages = predefinedPackages // packages;
302302 projectOverrides = self: super: {
303− ${staticName} = dontHaddock (self.callCabal2nix "static" assets.haskellManifest {});
303+ ${staticName} = dontHaddock (self.callCabal2nix "static" processedStatic.haskellManifest {});
304304 ${backendName} = addBuildDepend super.${backendName} self.obelisk-run;
305305 };
306306 totalOverrides = composeExtensions (composeExtensions defaultHaskellOverrides projectOverrides) overrides;
307+ inherit (nixpkgs) lib;
308+ inherit (lib.strings) hasPrefix;
309+ privateConfigDirs = ["config/backend"];
310+ injectableConfig = builtins.filterSource (path: _:
311+ !(lib.lists.any (x: hasPrefix (toString base + "/" + toString x) (toString path)) privateConfigDirs)
312+ ) configPath;
307313 in {
308314 inherit shellToolOverrides tools withHoogle;
309315 overrides = totalOverrides;
@@ -322,19 +328,20 @@ rec {
322328 android = {
323329 ${if android == null then null else frontendName} = {
324330 executableName = "frontend";
325− ${if builtins.pathExists staticPath then "assets" else null} = assets.symlinked;
331+ ${if builtins.pathExists staticPath then "assets" else null} =
332+ executableConfig.platforms.android.inject injectableConfig processedStatic.symlinked;
326333 } // android;
327334 };
328335 ios = {
329336 ${if ios == null then null else frontendName} = {
330337 executableName = "frontend";
331− ${if builtins.pathExists staticPath then "staticSrc" else null} = assets.symlinked;
338+ ${if builtins.pathExists staticPath then "staticSrc" else null} =
339+ executableConfig.platforms.ios.inject injectableConfig processedStatic.symlinked;
332340 } // ios;
333341 };
334342 };
335343 in mkProject (projectDefinition args));
336− serverOn = sys:
337− serverExe (projectOut sys).ghc.backend (projectOut system).ghcjs.frontend assets.symlinked configPath;
344+ serverOn = sys: serverExe (projectOut sys).ghc.backend (projectOut system).ghcjs.frontend static configPath;
338345 linuxExe = serverOn "x86_64-linux";
339346 in projectOut system // {
340347 inherit linuxExe;