on master help sign in
Make it easy/possible to construct new reflex-platform projects based on the obelisk one
commitf658225b1e656ca4160f0497970ce16cee088f7e authorElliot Cameron <eacameron@gmail.com> dateThu 23 Jan 2020, 03:28 (7 years ago) parent6125695
1 file changed+29−19
default.nix+29−19
default.nix+29−19
@@ -260,9 +260,9 @@ in rec {
260260 # An Obelisk project is a reflex-platform project with a predefined layout and role for each component
261261 project = base': projectDefinition:
262262 let
263− projectOut = sys: (getReflexPlatform sys).project (args@{ nixpkgs, ... }:
263+ projectOut = sys: let reflexPlatformProject = (getReflexPlatform sys).project; in reflexPlatformProject (args@{ nixpkgs, ... }:
264264 let
265− projectArgs = projectDefinition args;
265+ inherit (lib.strings) hasPrefix;
266266 mkProject =
267267 { android ? null #TODO: Better error when missing
268268 , ios ? null #TODO: Better error when missing
@@ -275,9 +275,9 @@ in rec {
275275 , __closureCompilerOptimizationLevel ? "ADVANCED" # Set this to `null` to skip the closure-compiler step
276276 }:
277277 let
278− inherit (lib.strings) hasPrefix;
279− configTree = nixpkgs.lib.makeExtensible (self: {
278+ allConfig = nixpkgs.lib.makeExtensible (self: {
280279 base = base';
280+ inherit args;
281281 userSettings = {
282282 inherit android ios packages overrides tools shellToolOverrides withHoogle __closureCompilerOptimizationLevel;
283283 staticFiles = if staticFiles == null then self.base + /static else staticFiles;
@@ -322,29 +322,39 @@ in rec {
322322 self.processedStatic.symlinked;
323323 } // self.userSettings.ios;
324324 };
325+
326+ shells-ghc = [
327+ self.backendName
328+ self.commonName
329+ self.frontendName
330+ ];
331+
332+ shells-ghcjs = [
333+ self.frontendName
334+ self.commonName
335+ ];
336+
337+ shells-ghcSavedSplices = [
338+ self.commonName
339+ self.frontendName
340+ ];
341+
342+ project = reflexPlatformProject ({...}: self.projectConfig);
325343 projectConfig = {
326344 inherit (self.userSettings) shellToolOverrides tools withHoogle;
327345 overrides = self.totalOverrides;
328346 packages = self.combinedPackages;
329347 shells = {
330− ${if self.userSettings.android == null && self.userSettings.ios == null then null else "ghcSavedSplices"} = (lib.filter (x: lib.hasAttr x self.combinedPackages) [
331− self.commonName
332− self.frontendName
333− ]);
334− ghc = (lib.filter (x: lib.hasAttr x self.combinedPackages) [
335− self.backendName
336− self.commonName
337− self.frontendName
338− ]) ++ lib.attrNames packages;
339− ghcjs = (lib.filter (x: lib.hasAttr x self.combinedPackages) [
340− self.frontendName
341− self.commonName
342− ]) ++ lib.attrNames packages;
348+ ${if self.userSettings.android == null && self.userSettings.ios == null then null else "ghcSavedSplices"} =
349+ lib.filter (x: lib.hasAttr x self.combinedPackages) self.shells-ghcSavedSplices;
350+ ghc = lib.filter (x: lib.hasAttr x self.combinedPackages) self.shells-ghc;
351+ ghcjs = lib.filter (x: lib.hasAttr x self.combinedPackages) self.shells-ghcjs;
343352 };
344353 android = self.__androidWithConfig (self.base + "/config");
345354 ios = self.__iosWithConfig (self.base + "/config");
346355
347356 passthru = {
357+ self = allConfig;
348358 inherit (self)
349359 staticFilesImpure processedStatic
350360 __iosWithConfig __androidWithConfig
@@ -356,8 +366,8 @@ in rec {
356366 };
357367 };
358368 });
359− in configTree.projectConfig;
360− in mkProject projectArgs);
369+ in allConfig;
370+ in (mkProject (projectDefinition args)).projectConfig);
361371 mainProjectOut = projectOut system;
362372 serverOn = projectInst: version: serverExe
363373 projectInst.ghc.backend