From 22bef48bac8f0b69cbed06c9f4da1f5bd437dc34 Mon Sep 17 00:00:00 2001 From: Ali Abrar Date: Wed, 30 Dec 2020 14:59:10 -0500 Subject: [PATCH 01/12] static: Don't wait for nix show-derivation when deciding whether to provide UI feedback --- lib/command/src/Obelisk/Command/Project.hs | 82 +++++++++++++++------- 1 file changed, 57 insertions(+), 25 deletions(-) diff --git a/lib/command/src/Obelisk/Command/Project.hs b/lib/command/src/Obelisk/Command/Project.hs index e3a200ccb..962ba4824 100644 --- a/lib/command/src/Obelisk/Command/Project.hs +++ b/lib/command/src/Obelisk/Command/Project.hs @@ -26,7 +26,7 @@ module Obelisk.Command.Project ) where import Control.Concurrent.MVar (MVar, newMVar, withMVarMasked) -import Control.Lens ((.~), (?~), (<&>), (^.), _2, _3) +import Control.Lens ((.~), (?~), (<&>)) import Control.Monad import Control.Monad.Except import Control.Monad.IO.Class (liftIO) @@ -37,9 +37,11 @@ import qualified Data.ByteString.UTF8 as BSU import Data.Bits import qualified Data.ByteString.Lazy as BSL import Data.Default (def) +import qualified Data.Foldable as F (toList) import Data.Function ((&), on) +import Data.List (isPrefixOf) import Data.Map (Map) -import Data.Maybe (isJust) +import qualified Data.Set as Set import Data.Text (Text) import qualified Data.Text as T import Data.Text.Encoding (decodeUtf8, encodeUtf8) @@ -402,25 +404,64 @@ watchStaticFilesDerivation -> m () watchStaticFilesDerivation root = do ob <- getObelisk - drv0 <- showDerivation liftIO $ runHeadlessApp $ do pb <- getPostBuild + let filterEvents x = + let fn = takeFileName x + dirs = Set.fromList $ splitDirectories x + ignoredFilenames = Set.fromList + [ "ghcid-output.txt" + , ".cabal-sandbox" + , "cabal.sandbox.config" + , ".attr-cache" + , "result" + , "ctags" + , "tags" + , "TAGS" + , "cabal.project.local" + , "4913" -- Vim temporary file + ] + ignoredDirectories = Set.fromList + [ ".git" + , "dist" + , "dist-newstyle" + , "profile" + ] + ignoredExtensions = Set.fromList + [ ".hi" + , ".o" + , ".swo" + , ".swp" + ] + in not $ + "static.out" `isPrefixOf` fn || + "result-" `isPrefixOf` fn || + fn `Set.member` ignoredFilenames || + takeExtension fn `Set.member` ignoredExtensions || + not (Set.null $ Set.intersection ignoredDirectories dirs) + checkForChanges <- batchOccurrences 0.25 =<< watchDirectoryTree -- On macOS, use the polling backend due to https://github.com/luite/hfsevents/issues/13 (defaultConfig { confUsePolling = SysInfo.os == "darwin", confPollInterval = 250000 }) (root <$ pb) - ((/="static.out") . takeFileName . eventPath) - drv <- performEvent $ ffor checkForChanges $ \_ -> - liftIO $ runObelisk ob showDerivation - drvs <- foldDyn (\new (_, old, _) -> (old, new, old /= new)) (drv0, drv0, False) drv - void $ throttleBatchWithLag - (\e -> performEvent $ ffor e $ \_ -> liftIO $ runObelisk ob $ do + (filterEvents . eventPath) + performEvent_ + $ liftIO + . runObelisk ob + . putLog Debug + . ("Regenerating static.out due to file changes: "<>) + . T.intercalate ", " + . fmap (T.pack . eventPath) + . F.toList + <$> checkForChanges + void $ flip throttleBatchWithLag checkForChanges $ \e -> + performEvent $ ffor e $ \_ -> liftIO $ runObelisk ob $ do putLog Notice "Static assets being built..." buildStaticCatchErrors >>= \case Nothing -> pure () - Just _ -> putLog Notice "Static assets built and symlinked to static.out" - ) - ((() <$) . ffilter (\x -> isJust (x ^._2) && x ^._3) $ updated drvs) + Just n -> do + putLog Notice $ "Static assets built and symlinked to static.out" + putLog Debug $ "Generated static asset nix path: " <> n pure never where handleBuildFailure @@ -428,23 +469,14 @@ watchStaticFilesDerivation root = do => (ExitCode, String, String) -> m (Maybe Text) handleBuildFailure (ex, out, err) = case ex of - ExitSuccess -> pure $ Just $ T.pack out + ExitSuccess -> + let out' = T.strip $ T.pack out + in pure $ if T.null out' then Nothing else Just out' _ -> do putLog Error $ ("Static assets build failed: " <>) $ - T.unlines $ reverse $ take 10 $ reverse $ T.lines $ T.pack err + T.unlines $ reverse $ take 20 $ reverse $ T.lines $ T.pack err pure Nothing - showDerivation :: MonadObelisk m => m (Maybe Text) - showDerivation = - handleBuildFailure <=< readCreateProcessWithExitCode $ - setCwd (Just root) $ ProcessSpec - { _processSpec_createProcess = Proc.proc nixExePath - [ "show-derivation" - , "-f", "." - , "passthru.staticFilesImpure" - ] - , _processSpec_overrideEnv = Nothing - } buildStaticCatchErrors :: MonadObelisk m => m (Maybe Text) buildStaticCatchErrors = handleBuildFailure =<< buildStaticFilesDerivationAndSymlink From eb4d86ec8fcd2208e6390da9d6b6fb2094df4db8 Mon Sep 17 00:00:00 2001 From: Ali Abrar Date: Wed, 30 Dec 2020 19:45:43 -0500 Subject: [PATCH 02/12] Update changelog --- ChangeLog.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 05383028c..ffc0e0c7f 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -7,10 +7,10 @@ This project's release branch is `master`. This log is written from the perspect * Use TemplateHaskell to determine asset file paths * Migration: All uses of `static @"some/path"` become `$(static "some/path")`. Instead of requiring `TypeApplications` and `DataKinds`, modules calling `static` must now enable `TemplateHaskell`. * Deprecation: Deprecate static asset modules generated via 'obelisk-asset-manifest-generate' in favor of modules generated via 'obelisk-asset-th-generate'. The new executable takes the same arguments as the old and should be a drop-in replacement. To preserve the old behavior, set `__deprecated.useObeliskAssetManifestGenerate = true;` in your obelisk project configuration. - * Feature: Files added to the static directory while `ob run` is active no longer require `ob run` to be restarted +* Feature: Files added to the static directory while `ob run` is active no longer require `ob run` to be restarted * Feature: When `staticFiles` is a derivation, as opposed to a regular directory, produce a symlink to the result of that derivation at `static.out` and have `ob run` serve static assets from that symlink. This makes it possible for the static asset derivation to be rebuilt and the new results served without restarting `ob run`. * Feature: Rebuild static asset derivations while `ob run` is active as long as the change to the derivation is within the project folder. `ob run` now displays a message ("Static assets rebuilt and symlinked to static.out") whenever static assets have been rebuilt and the new static assets are being served. -* Feature: Add `staticFilePath` to `Obelisk.Generated.Static`. Like `static`, this uses TH to generate a reference to a file. Unlike `static`, this `staticFilePath` generates a path on the filesystem instead of URL path. +* Feature: Add `staticFilePath` to `Obelisk.Generated.Static`. Like `static`, this uses TH to generate a reference to a file. Unlike `static`, this `staticFilePath` generates a path on the filesystem instead of URL path. To support this functionality, `ob run` now places a symlink, `static.out` in the project directory whether or not `staticFiles` is a derivation. ## v0.9.1.0 From b073715c3037e90338ba7d4f037c0790f3a0e40b Mon Sep 17 00:00:00 2001 From: Ali Abrar Date: Wed, 30 Dec 2020 20:21:17 -0500 Subject: [PATCH 03/12] static: Add another ignored folder --- lib/command/src/Obelisk/Command/Project.hs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/command/src/Obelisk/Command/Project.hs b/lib/command/src/Obelisk/Command/Project.hs index 6af45a1b0..ab377d960 100644 --- a/lib/command/src/Obelisk/Command/Project.hs +++ b/lib/command/src/Obelisk/Command/Project.hs @@ -410,6 +410,8 @@ watchStaticFilesDerivation root = do ob <- getObelisk liftIO $ runHeadlessApp $ do pb <- getPostBuild + -- TODO: Instead of filtering like this, we should figure out what the derivation + -- actually relies on, or at least use the gitignore let filterEvents x = let fn = takeFileName x dirs = Set.fromList $ splitDirectories x @@ -430,6 +432,7 @@ watchStaticFilesDerivation root = do , "dist" , "dist-newstyle" , "profile" + , "db" ] ignoredExtensions = Set.fromList [ ".hi" @@ -443,7 +446,6 @@ watchStaticFilesDerivation root = do fn `Set.member` ignoredFilenames || takeExtension fn `Set.member` ignoredExtensions || not (Set.null $ Set.intersection ignoredDirectories dirs) - checkForChanges <- batchOccurrences 0.25 =<< watchDirectoryTree -- On macOS, use the polling backend due to https://github.com/luite/hfsevents/issues/13 (defaultConfig { confUsePolling = SysInfo.os == "darwin", confPollInterval = 250000 }) From fd4db5eaa84a00469a3c58101deacdad92f8f2e6 Mon Sep 17 00:00:00 2001 From: Ali Abrar Date: Wed, 5 Oct 2022 22:53:46 -0400 Subject: [PATCH 04/12] assets: staticFilePath should return the unhashed path --- lib/asset/manifest/src/Obelisk/Asset/TH.hs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/asset/manifest/src/Obelisk/Asset/TH.hs b/lib/asset/manifest/src/Obelisk/Asset/TH.hs index fb7a2091b..bdb6e3dc0 100644 --- a/lib/asset/manifest/src/Obelisk/Asset/TH.hs +++ b/lib/asset/manifest/src/Obelisk/Asset/TH.hs @@ -62,8 +62,10 @@ staticAssetFilePathRaw staticAssetFilePathRaw root = staticAssetWorker root staticOutPath staticAssetFilePath :: FilePath -> FilePath -> Q Exp -staticAssetFilePath root fp = do - LitE . StringL . (root ) <$> hashedAssetFilePath root fp +staticAssetFilePath root relativePath = do + let fullPath = root relativePath + qAddDependentFile fullPath + pure $ LitE $ StringL fullPath -- | @'staticAssetWorker' root staticOut fp@. -- From 2da35f5feadd3e2a476019a53be7cf8047206c20 Mon Sep 17 00:00:00 2001 From: Alexandre Esteves Date: Wed, 2 Nov 2022 18:59:12 +0000 Subject: [PATCH 05/12] Enable more warnings --- skeleton/backend/backend.cabal | 18 ++++++++++++++++-- skeleton/common/common.cabal | 9 ++++++++- skeleton/frontend/frontend.cabal | 18 ++++++++++++++++-- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/skeleton/backend/backend.cabal b/skeleton/backend/backend.cabal index 25f690346..46c0548ae 100644 --- a/skeleton/backend/backend.cabal +++ b/skeleton/backend/backend.cabal @@ -14,12 +14,26 @@ library , obelisk-route exposed-modules: Backend - ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -fno-show-valid-hole-fits + ghc-options: -Wall -O -fno-show-valid-hole-fits + -- unsafe code + -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields + -- unneeded code + -Widentities -Wredundant-constraints + if impl(ghc >= 8.8) + ghc-options: + -Wmissing-deriving-strategies executable backend main-is: main.hs hs-source-dirs: src-bin - ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -threaded -fno-show-valid-hole-fits + ghc-options: -Wall -O -fno-show-valid-hole-fits -threaded + -- unsafe code + -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields + -- unneeded code + -Widentities -Wredundant-constraints + if impl(ghc >= 8.8) + ghc-options: + -Wmissing-deriving-strategies if impl(ghcjs) buildable: False build-depends: base diff --git a/skeleton/common/common.cabal b/skeleton/common/common.cabal index 82b89916c..3a04644cb 100644 --- a/skeleton/common/common.cabal +++ b/skeleton/common/common.cabal @@ -12,4 +12,11 @@ library exposed-modules: Common.Api Common.Route - ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -fno-show-valid-hole-fits + ghc-options: -Wall -O -fno-show-valid-hole-fits + -- unsafe code + -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields + -- unneeded code + -Widentities -Wredundant-constraints + if impl(ghc >= 8.8) + ghc-options: + -Wmissing-deriving-strategies diff --git a/skeleton/frontend/frontend.cabal b/skeleton/frontend/frontend.cabal index a9f7abafe..18db7578e 100644 --- a/skeleton/frontend/frontend.cabal +++ b/skeleton/frontend/frontend.cabal @@ -17,7 +17,14 @@ library , text exposed-modules: Frontend - ghc-options: -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -O -fno-show-valid-hole-fits + ghc-options: -Wall -O -fno-show-valid-hole-fits + -- unsafe code + -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields + -- unneeded code + -Widentities -Wredundant-constraints + if impl(ghc >= 8.8) + ghc-options: + -Wmissing-deriving-strategies executable frontend main-is: main.hs @@ -29,7 +36,14 @@ executable frontend , reflex-dom , obelisk-generated-static , frontend - ghc-options: -threaded -O -Wall -Wredundant-constraints -Wincomplete-uni-patterns -Wincomplete-record-updates -fno-show-valid-hole-fits + ghc-options: -Wall -O -fno-show-valid-hole-fits -threaded + -- unsafe code + -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields + -- unneeded code + -Widentities -Wredundant-constraints + if impl(ghc >= 8.8) + ghc-options: + -Wmissing-deriving-strategies if impl(ghcjs) ghc-options: -dedupe cpp-options: -DGHCJS_BROWSER From 983e2c9be078d0ada3b3f7f4d747c75ec0830ad4 Mon Sep 17 00:00:00 2001 From: Luigy Leon Date: Thu, 1 Dec 2022 10:35:37 -0500 Subject: [PATCH 06/12] Fix closure compiler sometimes crashing (#1004) * Workaround closurecompiler crashing when trying to report erros this commit got lost when 8.10 was merged into develop * Update changelog --- ChangeLog.md | 1 + default.nix | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/ChangeLog.md b/ChangeLog.md index 152a405f2..f08d53324 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -12,6 +12,7 @@ This project's release branch is `master`. This log is written from the perspect * [#919](https://github.com/obsidiansystems/obelisk/pull/919): Document useful command for testing Obelisk branches to CONTRIBUTING.md * [#931](https://github.com/obsidiansystems/obelisk/pull/931): For `ob deploy init`, command-line option `--check-known-host` corrected in readme, caveat added for multiple matching host-keypairs. * building + * [#1004](https://github.com/obsidiansystems/obelisk/pull/1004): Fix closure compiler sometimes crashing. Similar to #956, but for when it tries to report errors. (see: [closure-compiler#3720](https://github.com/google/closure-compiler/issues/3720)) * [#956](https://github.com/obsidiansystems/obelisk/pull/956): Squelch closure-compiler warnings. They are not very helpful and can cause issues (see: [closure-compiler#3720](https://github.com/google/closure-compiler/issues/3720)) * nix * [#889](https://github.com/obsidiansystems/obelisk/pull/889): Remove override of `acme` module that pinned it to the version in `nixpkgs-20.03`. This is used for automatic https certificate provisioning. diff --git a/default.nix b/default.nix index 46bcf4b3c..81b6f81dc 100644 --- a/default.nix +++ b/default.nix @@ -90,7 +90,8 @@ in rec { ${if optimizationLevel == null then '' ln -s "$dir/all.unminified.js" "$dir/all.js" '' else '' - '${pkgs.closurecompiler}/bin/closure-compiler' ${if externs == null then "" else "--externs '${externs}'"} --externs '${reflex-platform.ghcjsExternsJs}' -O '${optimizationLevel}' --jscomp_warning=checkVars --warning_level=QUIET --create_source_map="$dir/all.js.map" --source_map_format=V3 --js_output_file="$dir/all.js" "$dir/all.unminified.js" + # NOTE: "--error_format JSON" avoids closurecompiler crashes when trying to report errors. + '${pkgs.closurecompiler}/bin/closure-compiler' --error_format JSON ${if externs == null then "" else "--externs '${externs}'"} --externs '${reflex-platform.ghcjsExternsJs}' -O '${optimizationLevel}' --jscomp_warning=checkVars --warning_level=QUIET --create_source_map="$dir/all.js.map" --source_map_format=V3 --js_output_file="$dir/all.js" "$dir/all.unminified.js" echo '//# sourceMappingURL=all.js.map' >> "$dir/all.js" ''} done From 4b4c32eea8c62df2aad658b414d3029624f55697 Mon Sep 17 00:00:00 2001 From: cgibbard Date: Thu, 1 Dec 2022 11:18:47 -0500 Subject: [PATCH 07/12] Update to nixpkgs 21.05 / latest reflex-platform and bump constraints-extras (#1005) * Update reflex-platform to get nixpkgs-21.05 * haskell-overlays: fixes for hnix and cli-git * haskell-overlays: use cabal-install 3.4.1.0 * Update changelog * haskell-overlays: bump haddock-library * Bump reflex-platform for more upstream build fixes * Workaround closurecompiler crashing when trying to report certain warnings this commit got lost when 8.10 was merged into develop * Jailbreak more Haskell Deps * Prefer lib over stdenv.lib in nix code * Bump reflex-platform to develop * Remove broken ghcide support * Bump reflex-platform (bump-constraints-extras) * Add ConstraintKinds extension to Common.Route * Update reflex-platform to develop Co-authored-by: Ali Abrar Co-authored-by: Luigy Leon Co-authored-by: Fendor Co-authored-by: cidkidnix --- ChangeLog.md | 2 +- all-builds.nix | 1 - default.nix | 5 +--- dep/hnix/default.nix | 7 +---- dep/hnix/github.json | 8 ++++-- dep/hnix/thunk.nix | 12 ++++++++ dep/reflex-platform/github.json | 4 +-- haskell-overlays/ghcide.nix | 40 --------------------------- haskell-overlays/misc-deps.nix | 43 ++++++++++++----------------- lib/executable-config/default.nix | 2 +- lib/route/src/Obelisk/Route.hs | 1 + skeleton/common/src/Common/Route.hs | 1 + 12 files changed, 43 insertions(+), 83 deletions(-) create mode 100644 dep/hnix/thunk.nix delete mode 100644 haskell-overlays/ghcide.nix diff --git a/ChangeLog.md b/ChangeLog.md index f08d53324..941a0f2c5 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -4,7 +4,7 @@ This project's release branch is `master`. This log is written from the perspect ## Unreleased -* Update reflex-platform to yet unreleased version with GHC 8.10. +* Update reflex-platform to yet unreleased version with GHC 8.10 and nixpkgs 21.05 \[Update note once release is cut.\] * Documentation diff --git a/all-builds.nix b/all-builds.nix index 6c06bbd3a..c90a2ca96 100644 --- a/all-builds.nix +++ b/all-builds.nix @@ -60,7 +60,6 @@ let rawSkeleton = import ./skeleton { inherit obelisk; }; skeleton = withSkeletonOptions rawSkeleton { withHoogle = true; # cache the Hoogle database for the skeleton - __withGhcide = true; # cache the ghcide build for the skeleton }; serverSkeletonExe = rawSkeleton.exe; diff --git a/default.nix b/default.nix index 81b6f81dc..a953f06f5 100644 --- a/default.nix +++ b/default.nix @@ -333,10 +333,7 @@ in rec { shellToolOverrides = lib.composeExtensions self.userSettings.shellToolOverrides - (if self.userSettings.__withGhcide - then (import ./haskell-overlays/ghcide.nix) - else (_: _: {}) - ); + (_: _: {}); project = reflexPlatformProject ({...}: self.projectConfig); projectConfig = { diff --git a/dep/hnix/default.nix b/dep/hnix/default.nix index 7a0477867..2b4d4ab11 100644 --- a/dep/hnix/default.nix +++ b/dep/hnix/default.nix @@ -1,7 +1,2 @@ # DO NOT HAND-EDIT THIS FILE -import ((import {}).fetchFromGitHub ( - let json = builtins.fromJSON (builtins.readFile ./github.json); - in { inherit (json) owner repo rev sha256; - private = json.private or false; - } -)) +import (import ./thunk.nix) \ No newline at end of file diff --git a/dep/hnix/github.json b/dep/hnix/github.json index b35524000..b10ae880b 100644 --- a/dep/hnix/github.json +++ b/dep/hnix/github.json @@ -1,7 +1,9 @@ { "owner": "haskell-nix", "repo": "hnix", - "branch": "master", - "rev": "6c9c7c310c54372b3db0fdf5a0137b395cde1bdb", - "sha256": "1i5903b7lxqn2s3jarb14h6wdq8bxiik1hp0xy43w5w1hgvvq0g5" + "branch": "hackage-0.12.0.1", + "private": false, + "rev": "0f23778ffe64fe24c2119866437cc53735262856", + "sha256": "sha256-yAR3cIVI/DwuBSlvAt1nKG5a0QcsJlGpsr9ndpZBc0U=", + "fetchSubmodules": true } diff --git a/dep/hnix/thunk.nix b/dep/hnix/thunk.nix new file mode 100644 index 000000000..20f2d28c2 --- /dev/null +++ b/dep/hnix/thunk.nix @@ -0,0 +1,12 @@ +# DO NOT HAND-EDIT THIS FILE +let fetch = { private ? false, fetchSubmodules ? false, owner, repo, rev, sha256, ... }: + if !fetchSubmodules && !private then builtins.fetchTarball { + url = "https://github.com/${owner}/${repo}/archive/${rev}.tar.gz"; inherit sha256; + } else (import (builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/3aad50c30c826430b0270fcf8264c8c41b005403.tar.gz"; + sha256 = "0xwqsf08sywd23x0xvw4c4ghq0l28w2ki22h0bdn766i16z9q2gr"; +}) {}).fetchFromGitHub { + inherit owner repo rev sha256 fetchSubmodules private; + }; + json = builtins.fromJSON (builtins.readFile ./github.json); +in fetch json \ No newline at end of file diff --git a/dep/reflex-platform/github.json b/dep/reflex-platform/github.json index 5ae049dc1..17960950b 100644 --- a/dep/reflex-platform/github.json +++ b/dep/reflex-platform/github.json @@ -3,6 +3,6 @@ "repo": "reflex-platform", "branch": "develop", "private": false, - "rev": "9ebc4aa483e94ea52a20ce3641e72b43328d40ae", - "sha256": "1fynvarxlcbcszawcipc1137rz1r9nv96jjb8vgpdkjg9rwk0pas" + "rev": "6c8830e059a6d2859cb1b65acefed3c2f1d216d3", + "sha256": "sha256:06kv45yq8qan0p22wzj5c9mx11ns1wddyqjr1xasjjkf6gaf0080" } diff --git a/haskell-overlays/ghcide.nix b/haskell-overlays/ghcide.nix deleted file mode 100644 index df8c15f8b..000000000 --- a/haskell-overlays/ghcide.nix +++ /dev/null @@ -1,40 +0,0 @@ -self: super: -let - pkgs = self.callPackage ({ pkgs }: pkgs) { }; - inherit (pkgs.haskell.lib) dontCheck justStaticExecutables; - inherit (pkgs.haskellPackages) callHackageDirect callHackage; - -in { - ghcide = justStaticExecutables (dontCheck (callHackageDirect { - pkg = "ghcide"; - ver = "0.2.0"; - sha256 = "199l4qzrghhz6wbfkgqdl4gll4wvgpr190kinzhv88idnn9pxm96"; - } rec { - ghc-check = callHackageDirect { - pkg = "ghc-check"; - ver = "0.3.0.1"; - sha256 = "1dj909m09m24315x51vxvcl28936ahsw4mavbc53danif3wy09ns"; - } { }; - lsp-test = dontCheck (callHackage "lsp-test" "0.6.1.0" { }); - haddock-library = dontCheck (callHackage "haddock-library" "1.8.0" { }); - haskell-lsp = dontCheck (callHackageDirect { - pkg = "haskell-lsp"; - ver = "0.22.0.0"; - sha256 = "1q3w46qcvzraxgmw75s7bl0qvb2fvff242r5vfx95sqska566b4m"; - } { inherit haskell-lsp-types; }); - haskell-lsp-types = dontCheck (callHackageDirect { - pkg = "haskell-lsp-types"; - ver = "0.22.0.0"; - sha256 = "1apjclphi2v6ggrdnbc0azxbb1gkfj3x1vkwpc8qd6lsrbyaf0n8"; - } { }); - regex-tdfa = dontCheck (callHackage "regex-tdfa" "1.3.1.0" { - regex-base = dontCheck (callHackage "regex-base" "0.94.0.0" { }); - }); - shake = dontCheck (callHackage "shake" "0.18.4" { }); - hie-bios = dontCheck (callHackageDirect { - pkg = "hie-bios"; - ver = "0.5.0"; - sha256 = "116nmpva5jmlgc2dgy8cm5wv6cinhzmga1l0432p305074w720r2"; - } { }); - })); -} diff --git a/haskell-overlays/misc-deps.nix b/haskell-overlays/misc-deps.nix index e6d60b87c..c57ffe39c 100644 --- a/haskell-overlays/misc-deps.nix +++ b/haskell-overlays/misc-deps.nix @@ -10,33 +10,27 @@ let in rec { - # Actually broken in current nixpkgs master due to MonadFail changes - # git = haskellLib.markUnbroken super.git; + resolv = haskellLib.dontCheck (self.callHackage "resolv" "0.1.2.0" {}); + cabal-install = haskellLib.doJailbreak ((self.callHackage "cabal-install" "3.4.1.0" {}).overrideScope (self: super: { Cabal = self.Cabal_3_4_0_0; })); # hpack requires cabal >= 3.0 but the ghc865 package set builds it with 2.4 by default - hpack = super.hpack.overrideScope (self: super: { Cabal = self.Cabal_3_2_0_0; }); + hpack = super.hpack.overrideScope (self: super: { Cabal = self.Cabal_3_2_1_0; }); + # These versions work with both the ghc865 and ghc8107 package sets git = self.callCabal2nix "git" (hackGet ../dep/hs-git) { }; - # hdevtools = haskellLib.markUnbroken super.hdevtools; - # reflex-ghci = haskellLib.markUnbroken super.reflex-ghci; - # reflex-process = haskellLib.markUnbroken super.reflex-process; - # reflex-vty = haskellLib.markUnbroken super.reflex-vty; - # reflex-fsnotify = haskellLib.markUnbroken super.reflex-fsnotify; - universe-base-810 = haskellLib.doJailbreak (self.callHackage "universe-base" "1.1.3" {}); + http-link-header = haskellLib.doJailbreak super.http-link-header; + universe-base-810 = haskellLib.doJailbreak (self.callHackage "universe-base" "1.1" {}); universe-dependent-sum-810 = self.callHackage "universe-dependent-sum" "1.3" {}; - universe-some-810 = haskellLib.dontHaddock (haskellLib.appendBuildFlags (haskellLib.doJailbreak (self.callHackage "universe-some" "1.2.1" { })) [ "--ghc-option=-Wno-inferred-safe-imports" "--ghc-option=-Wno-missing-safe-haskell-mode" ]); + universe-some-810 = haskellLib.dontHaddock (haskellLib.appendBuildFlags (haskellLib.doJailbreak (self.callHackage "universe-some" "1.2" { })) [ "--ghc-option=-Wno-inferred-safe-imports" "--ghc-option=-Wno-missing-safe-haskell-mode" ]); stylish-haskell = null; # FIXME - universe-810 = self.callHackage "universe" "1.2.2" {}; - universe-instances-extended-810 = self.callHackage "universe-instances-extended" "1.1.3" {}; - universe-reverse-instances-810 = self.callHackage "universe-reverse-instances" "1.1.1" {}; + universe-810 = self.callHackage "universe" "1.2" {}; + universe-instances-extended-810 = self.callHackage "universe-instances-extended" "1.1.1" {}; + universe-reverse-instances-810 = self.callHackage "universe-reverse-instances" "1.1" {}; - hnix = haskellLib.overrideCabal super.hnix (drv: { - jailbreak = true; - preBuild = '' - substituteInPlace src/Nix/Expr/Types.hs --replace "instance Hashable1 NonEmpty" "" - '';}); + # We use our fork of hnix which has some compatibility patches on top of 0.12 from hackage + hnix = haskellLib.dontHaddock (haskellLib.dontCheck (self.callCabal2nix "hnix" (hackGet ../dep/hnix) {})); universe-86 = haskellLib.dontCheck (self.callHackage "universe" "1.2" {}); universe-instances-extended-86 = self.callHackage "universe-instances-extended" "1.1.1" {}; @@ -45,17 +39,11 @@ rec { universe = mkVersionset __useNewerCompiler universe-86 universe-810; universe-instances-extended = mkVersionset __useNewerCompiler universe-instances-extended-86 universe-instances-extended-810; universe-reverse-instances = mkVersionset __useNewerCompiler super.universe-reverse-instances universe-reverse-instances-810; - #hnix = mkVersionset version hnix-86 hnix-810; universe-base = haskellLib.dontCheck (mkVersionset __useNewerCompiler super.universe-base universe-base-810); universe-dependent-sum = mkVersionset __useNewerCompiler super.universe-dependent-sum universe-dependent-sum-810; universe-some-86 = self.callHackage "universe-some" "1.2" {}; universe-some = mkVersionset __useNewerCompiler universe-some-86 universe-some-810; - #th-abstraction-86 = self.callHackage "th-abstraction" "0.3.0.0" {}; - #th-abstraction-810 = self.callHackage "th-abstraction" "0.4.3.0" {}; - #th-abstraction = mkVersionset version th-abstraction-86 th-abstraction-810; - #bifunctors = self.callHackage "bifunctors" "5.5.11" { th-abstraction = th-abstraction-new; }; - #template-haskell = self.callHackage "template-haskell" "2.14.0.0" {}; regex-base = self.callHackage "regex-base" "0.94.0.0" { }; regex-posix = self.callHackage "regex-posix" "0.96.0.0" { }; regex-tdfa = self.callHackage "regex-tdfa" "1.3.1.0" { }; @@ -69,7 +57,6 @@ rec { heist = haskellLib.dontCheck (haskellLib.doJailbreak super.heist); # aeson 1.5 bump aeson-gadt-th = haskellLib.doJailbreak super.aeson-gadt-th; # requires aeson 1.5 for ghc8.10 support? deriving-compat = self.callHackage "deriving-compat" "0.6" { }; - #deriving-compat = mkVersionset version super.deriving-compat deriving-compat-810; http-api-data = haskellLib.doJailbreak super.http-api-data; nix-derivation = haskellLib.doJailbreak super.nix-derivation; algebraic-graphs = haskellLib.doJailbreak super.algebraic-graphs; @@ -82,7 +69,11 @@ rec { resourcet = self.callHackage "resourcet" "1.2.4.2" { }; unliftio-core = self.callHackage "unliftio-core" "0.2.0.1" { }; shelly = self.callHackage "shelly" "1.9.0" { }; + # version >= 0.2.5.2 has a Cabal version of 3.0, which nix doesn't like + vector-binary-instances = self.callHackage "vector-binary-instances" "0.2.5.1" {}; + modern-uri = haskellLib.doJailbreak super.modern-uri; monad-logger = self.callHackage "monad-logger" "0.3.36" { }; + neat-interpolation = haskellLib.doJailbreak super.neat-interpolation; nix-thunk = (import ../dep/nix-thunk { }).makeRunnableNixThunk (self.callCabal2nix "nix-thunk" (hackGet ../dep/nix-thunk) { }); cli-extras = self.callCabal2nix "cli-extras" (hackGet ../dep/cli-extras) { }; cli-git = haskellLib.overrideCabal (self.callCabal2nix "cli-git" (hackGet ../dep/cli-git) { }) { @@ -97,4 +88,6 @@ rec { nix-prefetch-git ]; }; + + haddock-library = haskellLib.doJailbreak (self.callHackage "haddock-library" "1.10.0" {}); } diff --git a/lib/executable-config/default.nix b/lib/executable-config/default.nix index 99c972082..c6425e106 100644 --- a/lib/executable-config/default.nix +++ b/lib/executable-config/default.nix @@ -34,7 +34,7 @@ in (drv: { # Hack until https://github.com/NixOS/cabal2nix/pull/432 lands libraryHaskellDepends = (drv.libraryHaskellDepends or []) - ++ pkgs.stdenv.lib.optionals (with pkgs.stdenv.hostPlatform; isAndroid && is32bit) [ + ++ pkgs.lib.optionals (with pkgs.stdenv.hostPlatform; isAndroid && is32bit) [ self.android-activity ]; }); diff --git a/lib/route/src/Obelisk/Route.hs b/lib/route/src/Obelisk/Route.hs index 470f71271..207c56748 100644 --- a/lib/route/src/Obelisk/Route.hs +++ b/lib/route/src/Obelisk/Route.hs @@ -22,6 +22,7 @@ Types and functions for defining routes and 'Encoder's. {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} +{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE ViewPatterns #-} module Obelisk.Route ( -- * Primary Types diff --git a/skeleton/common/src/Common/Route.hs b/skeleton/common/src/Common/Route.hs index 1dce9a734..17dadaee5 100644 --- a/skeleton/common/src/Common/Route.hs +++ b/skeleton/common/src/Common/Route.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE EmptyCase #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} From 43d5caf88d89835509fe8722e3f72d2bdb16f104 Mon Sep 17 00:00:00 2001 From: Dylan Green <67574902+cidkidnix@users.noreply.github.com> Date: Fri, 2 Dec 2022 07:59:53 -0600 Subject: [PATCH 08/12] Update AMI instructions (#993) --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 27bd099f7..d7ba75311 100644 --- a/README.md +++ b/README.md @@ -198,9 +198,11 @@ If the `useGHC810` argument is set to false, or not given, then GHC 8.6 will be In this section we will demonstrate how to deploy your Obelisk app to an Amazon EC2 instance. Obelisk deployments are configured for EC2 by default (see [Custom Non-EC2 Deployment](#custom-non-ec2-deployment)). +Note: Most NixOS EC2 instances should just *work* regardless of obelisk version + First create a new EC2 instance: -1. Launch a NixOS 19.09 EC2 instance (we recommend [this AMI](https://console.aws.amazon.com/ec2/v2/home?region=us-east-1#LaunchInstanceWizard:ami=ami-00a8eeaf232a74f84)) +1. Launch a NixOS 22.05 EC2 instance (we recommend [this AMI](https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#LaunchInstances:ami=ami-0223db08811f6fb2d)) 1. In the instance configuration wizard ensure that your instance has at least 1GB RAM and 10GB disk space. 1. When prompted save your AWS private key (`~/myaws.pem`) somewhere safe. We'll need it later during deployment. 1. Go to "Security Groups", select your instance's security group and under "Inbound" tab add a new rule for HTTP port 80 and HTTPS port 443. From bc7cb5e422e289e594005605fb27ab2babf8b009 Mon Sep 17 00:00:00 2001 From: Dylan Green <67574902+cidkidnix@users.noreply.github.com> Date: Fri, 2 Dec 2022 14:25:47 -0600 Subject: [PATCH 09/12] fix beam-migrate (#1007) --- haskell-overlays/misc-deps.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/haskell-overlays/misc-deps.nix b/haskell-overlays/misc-deps.nix index c57ffe39c..f2bd3f5a3 100644 --- a/haskell-overlays/misc-deps.nix +++ b/haskell-overlays/misc-deps.nix @@ -24,6 +24,11 @@ rec { universe-some-810 = haskellLib.dontHaddock (haskellLib.appendBuildFlags (haskellLib.doJailbreak (self.callHackage "universe-some" "1.2" { })) [ "--ghc-option=-Wno-inferred-safe-imports" "--ghc-option=-Wno-missing-safe-haskell-mode" ]); stylish-haskell = null; # FIXME + beam-migrate = self.callHackageDirect { + pkg = "beam-migrate"; + ver = "0.5.1.2"; + sha256 = "sha256-vEv/6DCvuEq6cmxoPKxZNIm5g6YUgrdvAK4YAoZQr/E="; + } {}; universe-810 = self.callHackage "universe" "1.2" {}; universe-instances-extended-810 = self.callHackage "universe-instances-extended" "1.1.1" {}; From c2548930f40897e74eccf08b7125aae9952f9657 Mon Sep 17 00:00:00 2001 From: Ali Abrar Date: Tue, 20 Dec 2022 14:55:23 -0500 Subject: [PATCH 10/12] static: only watch frontend, backend, common, and static --- ChangeLog.md | 6 ++- lib/command/src/Obelisk/Command/Project.hs | 58 ++++++++++------------ 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 1f9f9a96c..3e2f05f39 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -40,6 +40,10 @@ This project's release branch is `master`. This log is written from the perspect * [#930](https://github.com/obsidiansystems/obelisk/pull/930): Add an error to `ob run` when `static` is called with a path to a file that doesn't exist * [#940](https://github.com/obsidiansystems/obelisk/pull/940): Automatically restart the server when configuration is updated via `ob deploy push`. * [#959](https://github.com/obsidiansystems/obelisk/pull/959): Add an error to `ob run` when `staticFilePath` is called with a path to a file that doesn't exist + * [#835](https://github.com/obsidiansystems/obelisk/pull/835): Rebuild static assets in fewer circumstances: + * Watch `frontend`, `backend`, `common`, and `static` instead of the project root to avoid spurious rebuilds when other files change + * Don't call `nix show-derivation` to decide whether to rebuild since it seems to do about as much work as a no-op nix-build + * Add a debug message indicating which file changes triggered the static file rebuild ## v1.0.0.0 - 2022-01-04 @@ -69,7 +73,7 @@ This project's release branch is `master`. This log is written from the perspect * Use TemplateHaskell to determine asset file paths * Migration: All uses of `static @"some/path"` become `$(static "some/path")`. Instead of requiring `TypeApplications` and `DataKinds`, modules calling `static` must now enable `TemplateHaskell`. * Deprecation: Deprecate static asset modules generated via 'obelisk-asset-manifest-generate' in favor of modules generated via 'obelisk-asset-th-generate'. The new executable takes the same arguments as the old and should be a drop-in replacement. To preserve the old behavior, set `__deprecated.useObeliskAssetManifestGenerate = true;` in your obelisk project configuration. -* Feature: Files added to the static directory while `ob run` is active no longer require `ob run` to be restarted + * Feature: Files added to the static directory while `ob run` is active no longer require `ob run` to be restarted * Feature: When `staticFiles` is a derivation, as opposed to a regular directory, produce a symlink to the result of that derivation at `static.out` and have `ob run` serve static assets from that symlink. This makes it possible for the static asset derivation to be rebuilt and the new results served without restarting `ob run`. * Feature: Rebuild static asset derivations while `ob run` is active as long as the change to the derivation is within the project folder. `ob run` now displays a message ("Static assets rebuilt and symlinked to static.out") whenever static assets have been rebuilt and the new static assets are being served. * Feature: Add `staticFilePath` to `Obelisk.Generated.Static`. Like `static`, this uses TH to generate a reference to a file. Unlike `static`, this `staticFilePath` generates a path on the filesystem instead of URL path. diff --git a/lib/command/src/Obelisk/Command/Project.hs b/lib/command/src/Obelisk/Command/Project.hs index f5bb7980f..3057a9ff3 100644 --- a/lib/command/src/Obelisk/Command/Project.hs +++ b/lib/command/src/Obelisk/Command/Project.hs @@ -42,7 +42,6 @@ import qualified Data.ByteString.Lazy as BSL import Data.Default (def) import qualified Data.Foldable as F (toList) import Data.Function ((&), on) -import Data.List (isPrefixOf) import Data.Map (Map) import qualified Data.Set as Set import Data.Text (Text) @@ -429,8 +428,9 @@ getHaskellManifestProjectPath root = fmap T.strip $ readProcessAndLogStderr Debu , "(let a = import ./. {}; in a.passthru.processedStatic.haskellManifest)" ] --- | Watch the project directory for file changes and check whether those file changes --- cause changes in the static files nix derivation. If so, rebuild it. +-- | Watch the common, backend, frontend, and static directories for file +-- changes and check whether those file changes cause changes in the static +-- files nix derivation. If so, rebuild it. watchStaticFilesDerivation :: (MonadIO m, MonadObelisk m) => FilePath @@ -439,29 +439,13 @@ watchStaticFilesDerivation root = do ob <- getObelisk liftIO $ runHeadlessApp $ do pb <- getPostBuild - -- TODO: Instead of filtering like this, we should figure out what the derivation - -- actually relies on, or at least use the gitignore + -- TODO: Instead of filtering like this, we should figure out what the + -- derivation actually relies on, or at least use the gitignore let filterEvents x = let fn = takeFileName x dirs = Set.fromList $ splitDirectories x ignoredFilenames = Set.fromList - [ "ghcid-output.txt" - , ".cabal-sandbox" - , "cabal.sandbox.config" - , ".attr-cache" - , "result" - , "ctags" - , "tags" - , "TAGS" - , "cabal.project.local" - , "4913" -- Vim temporary file - ] - ignoredDirectories = Set.fromList - [ ".git" - , "dist" - , "dist-newstyle" - , "profile" - , "db" + [ "4913" -- Vim temporary file ] ignoredExtensions = Set.fromList [ ".hi" @@ -470,26 +454,34 @@ watchStaticFilesDerivation root = do , ".swp" ] in not $ - "static.out" `isPrefixOf` fn || - "result-" `isPrefixOf` fn || fn `Set.member` ignoredFilenames || - takeExtension fn `Set.member` ignoredExtensions || - not (Set.null $ Set.intersection ignoredDirectories dirs) - checkForChanges <- batchOccurrences 0.25 =<< watchDirectoryTree - -- On macOS, use the polling backend due to https://github.com/luite/hfsevents/issues/13 - (defaultConfig { confUsePolling = SysInfo.os == "darwin", confPollInterval = 250000 }) - (root <$ pb) - (filterEvents . eventPath) + takeExtension fn `Set.member` ignoredExtensions + cfg = defaultConfig + -- On macOS, use the polling backend due to + -- https://github.com/luite/hfsevents/issues/13 + { confUsePolling = SysInfo.os == "darwin" + , confPollInterval = 250000 + } + watch' pkg = fmap (:[]) <$> watchDirectoryTree cfg (root pkg <$ pb) (filterEvents . eventPath) + rebuild <- batchOccurrences 0.25 =<< mergeWith (<>) <$> mapM watch' + [ "frontend" + , "backend" + , "common" + , "static" + ] performEvent_ $ liftIO . runObelisk ob . putLog Debug . ("Regenerating static.out due to file changes: "<>) . T.intercalate ", " + . Set.toList + . Set.fromList . fmap (T.pack . eventPath) + . concat . F.toList - <$> checkForChanges - void $ flip throttleBatchWithLag checkForChanges $ \e -> + <$> rebuild + void $ flip throttleBatchWithLag rebuild $ \e -> performEvent $ ffor e $ \_ -> liftIO $ runObelisk ob $ do putLog Notice "Static assets being built..." buildStaticCatchErrors >>= \case From 9ff6659adfcb9dcea94e573a544f9ee0bd5d5c7f Mon Sep 17 00:00:00 2001 From: Alexandre Esteves <2335822+alexfmpe@users.noreply.github.com> Date: Fri, 23 Dec 2022 20:23:36 +0000 Subject: [PATCH 11/12] Fix cabal warnings (#1012) --- lib/asset/manifest/obelisk-asset-manifest.cabal | 5 ++++- lib/asset/serve-snap/obelisk-asset-serve-snap.cabal | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/asset/manifest/obelisk-asset-manifest.cabal b/lib/asset/manifest/obelisk-asset-manifest.cabal index 2dcc0d92a..a549d6564 100644 --- a/lib/asset/manifest/obelisk-asset-manifest.cabal +++ b/lib/asset/manifest/obelisk-asset-manifest.cabal @@ -8,9 +8,10 @@ Maintainer: maintainer@obsidian.systems Stability: Experimental Category: Web Build-type: Simple -Cabal-version: >= 1.8 +Cabal-version: >= 1.10 library + default-language: Haskell2010 hs-source-dirs: src build-depends: @@ -39,6 +40,7 @@ library -fno-warn-unused-do-bind -funbox-strict-fields -fprof-auto-calls executable obelisk-asset-manifest-generate + default-language: Haskell2010 hs-source-dirs: src-bin main-is: generate.hs build-depends: @@ -47,6 +49,7 @@ executable obelisk-asset-manifest-generate , text executable obelisk-asset-th-generate + default-language: Haskell2010 hs-source-dirs: src-bin main-is: static-th.hs build-depends: diff --git a/lib/asset/serve-snap/obelisk-asset-serve-snap.cabal b/lib/asset/serve-snap/obelisk-asset-serve-snap.cabal index 43aaf6bed..855f55e14 100644 --- a/lib/asset/serve-snap/obelisk-asset-serve-snap.cabal +++ b/lib/asset/serve-snap/obelisk-asset-serve-snap.cabal @@ -6,9 +6,10 @@ author: Obsidian Systems LLC maintainer: maintainer@obsidian.systems category: Web build-type: Simple -cabal-version: >=1.2 +cabal-version: >=1.10 library + default-language: Haskell2010 hs-source-dirs: src build-depends: From 9f459875d3aac3612532f21518ba29ce74cf167c Mon Sep 17 00:00:00 2001 From: Dylan Green <67574902+cidkidnix@users.noreply.github.com> Date: Fri, 23 Dec 2022 14:26:55 -0600 Subject: [PATCH 12/12] Fix iOS build errors on develop (#1011) * Fix iOS * Update changelog Co-authored-by: Ali Abrar --- ChangeLog.md | 1 + default.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/ChangeLog.md b/ChangeLog.md index 3e2f05f39..6ef8457cd 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -40,6 +40,7 @@ This project's release branch is `master`. This log is written from the perspect * [#930](https://github.com/obsidiansystems/obelisk/pull/930): Add an error to `ob run` when `static` is called with a path to a file that doesn't exist * [#940](https://github.com/obsidiansystems/obelisk/pull/940): Automatically restart the server when configuration is updated via `ob deploy push`. * [#959](https://github.com/obsidiansystems/obelisk/pull/959): Add an error to `ob run` when `staticFilePath` is called with a path to a file that doesn't exist + * [#1011](https://github.com/obsidiansystems/obelisk/pull/1011): Update default iOS SDK to 15.0 * [#835](https://github.com/obsidiansystems/obelisk/pull/835): Rebuild static assets in fewer circumstances: * Watch `frontend`, `backend`, `common`, and `static` instead of the project root to avoid spurious rebuilds when other files change * Don't call `nix show-derivation` to decide whether to rebuild since it seems to do about as much work as a no-op nix-build diff --git a/default.nix b/default.nix index a953f06f5..cea6bf484 100644 --- a/default.nix +++ b/default.nix @@ -1,6 +1,6 @@ { system ? builtins.currentSystem , profiling ? false -, iosSdkVersion ? "13.2" +, iosSdkVersion ? "15.0" , config ? {} , terms ? { # Accepted terms, conditions, and licenses security.acme.acceptTerms = false;